不再卡在“等待审批”:解决 Claude Code、Codex 和 OpenCode 的权限提示(无需完全开启 YOLO)
一套实用方法,帮你判断卡住的原因是真正的审批、配置没有生效,还是界面或连接问题,以及如何让会话安全地继续运行。
- CLI
- 0.2.17
- 预览 ref
- a2c45c8
用 Claude Code、Codex 或 OpenCode 时,真正浪费时间的往往不是崩溃。
而是这样:
你启动了一个会话,它正在运行,你走开了……回来时却看到类似这样的提示:
- “waiting for approval”(等待审批)
- “needs permission”(需要权限)
- “waiting for input”(等待输入)
如果你坐在终端前,这通常是 5 秒钟的决定。
但在手机上(或者你已经忘了它在做什么时),很容易出现两种情况:
- 批准了你本不想批准的东西,或者
- 一个小时什么都没做,因为你根本没注意到
这篇指南讲的是中间路线:
让会话持续推进,又不把审批变成“完全 YOLO”。
要点
- 先判断你面对的是哪种“审批”:
- 真正的权限提示(预期之中)
- 配置没有生效(很常见)
- 界面或连接问题(也很常见)
- 如果你用的是 Codex,检查一下审批配置的层级和项目信任设置。
- 如果你在手机上,稳妥的做法是:在批准之前,用一个能在上下文中显示请求的界面打开会话。
- Happier 是可以帮上忙的选项之一:审批和权限请求会持久保存在收件箱(Inbox)中,点击通知会直接跳转到正确的会话和服务器。
问题(用大白话说)
审批是一道安全边界。
痛点不在于“有审批”,而在于审批变得:
- 看不见(你没注意到)
- 不明确(你不确定自己在批准什么)
- 不一致(你改了配置,它还是在问)
这三个问题在手机上会更严重。
常见做法及其取舍
- 全部关掉(YOLO /“never ask”):快,但在你疲惫时很危险。
- 守在终端前直到完成:安全,但失去了运行长会话的意义。
- 在手机上 SSH:能用,但在小小的终端里审查审批内容非常吃力。
如果你希望审批明确、并且能在手机上审查,Happier 是一款开源应用,让你跨设备运行和编排 Claude Code、Codex、OpenCode 及其他代理。
如果你第一次接触 Happier(它是什么、在哪里获取)
Happier 是一款面向 Claude Code、Codex 和 OpenCode 等会话的开源配套应用(移动端 / 网页 / 桌面端)。
工作流是:让会话在你信任的机器上运行,用手机上的 Happier 在上下文中审查审批。
开始设置:
- 如何在手机上使用 Happier
- GitHub: https://github.com/happier-dev/happier
- 安装 / 下载: https://github.com/happier-dev/happier#how-it-works
- Discord: https://discord.gg/W6Pb8KuHfg
第 1 步:给“审批”分类
情况 A:真正的权限提示
这是健康的情况:会话想做一些有副作用的事情。
如果你用的是 Happier,权限模式就是专门用来控制被询问频率的:
- 默认(Default)
- 只读(Read-only)
- 安全 YOLO(Safe YOLO)(自动允许读取,写入前询问)
- YOLO(在提供商允许的范围内尽量跳过询问)
并非每个提供商都支持所有模式。Happier 会显示实际生效的策略。
情况 B:配置没有生效(Codex 是常见例子)
Codex 有一套真正的配置分层模型。
如果你改了设置却没有任何变化,常见原因是:
- 你编辑了错误位置的配置文件
- 该设置被更高优先级的层覆盖了
- 项目不受信任,所以项目配置没有被加载
- 组织策略在强制限制
在 Codex 的文档中,这体现为:
- 用户配置位于
~/.codex/config.toml - 项目级配置和“信任”控制
approval_policy和sandbox_mode等配置项
一个明显的信号:如果你看到有人贴出写着“never ask”的配置却仍然被询问,那不是你的错觉。确实存在看起来一模一样的环境相关 bug。
情况 C:界面正常,但连接断了
有时会话在等待,你看到的却是过期的数据流。
如果机器休眠了,或者你切换了网络,可能会出现:
- 会话被阻塞
- 但你看不到提示
这种情况下,“修复”方法就是重新连接,并打开正确的会话。
第 2 步:选择与风险相匹配的工作流
一条实用规则:
- 在批准有实际副作用的操作(写入、安装)之前,先确认:
- 它在做什么
- 在哪里做
- 最近改了什么
这就是适合手机的界面之所以重要的原因。
Happier 的工作流(当你希望审批明确时)
Happier 把“需要你处理的事情”作为真实数据来对待:
- 全局收件箱(Inbox)
- 审批请求
- 权限请求
- 用户操作请求(例如“Exit Plan Mode”)
重要的是,它在你切换页面后依然存在,而不是一个你错过的弹窗。
在移动端,通知路由也很严格:
- 直接跳转到正确的会话
- 避免在未知服务器上自动批准
故障排查
我设置了 approval_policy = "never",它还是在问
把它当作以下情况之一:
- 信任设置或配置层级不匹配
- 与环境相关的客户端 bug
可以尝试:
- 确认实际加载的是哪一层配置
- 在不同环境(WSL / 虚拟机)中测试同一个会话
- 更新工具(这类问题常常被悄悄修复)
我在手机上看不到提示
通常是因为:
- 通知路由或服务器配置不匹配,或者
- 你打开的不是真正出现提示的那个会话
用一个统一的“待处理清单”(收件箱),而不是逐个查看多个会话。