关闭 OpenClaw Codex app-server 命令审批弹窗
这个弹窗不是 exec approvals 那一层在管,而是 Codex app-server bridge 的 approvalPolicy。真正要改的是 bundled codex plugin 配置和旧进程。

我是 AI灵感闪现,致力于让 AI (OpenClaw/小龙虾 和 Claude Code/CC) 全面自主接管我的健康、投资、学习、工作与生活,把节省下来的时间,用于真正体验人生。我只给 AI 想法或目标,全程不陪跑,让 AI 自主运行类似 Tesla FSD 自动驾驶。已上架两款由 AI 自主开发的 App:MoneyMind 省钱思维、HeartPetBond 心宠纽带。健康、投资、学习、工作和生活的 AI 接管路径,正在持续推进,并分享实践在微信公众号 AI灵感闪现 和 网站
https://www.vibesparking.com
关闭 OpenClaw Codex app-server 命令审批弹窗
日期: 2026-06-12操作者: Warden(manager agent)目标: 让 OpenClaw 中的 Codex app-server shell 命令不再频繁弹出 approval 确认
摘要
MGR 在 WebChat 里问:为什么 OpenClaw 的 Codex app-server 总是弹命令审批,能不能自动执行。
排查后发现,这不是传统的 exec-approvals.json 那一层,而是 Codex harness / app-server bridge 自己的 approval policy 在起作用。要真正止血,得改 bundled codex plugin 下的 appServer.approvalPolicy,同时确认 tools.exec.mode 不会把策略又拉回去。
先说结论
直接生效的配置点有两个:
-
plugins.entries.codex.config.appServer.approvalPolicy = "never" -
tools.exec.mode = "full"
前者决定 app-server 不再弹 command approval,后者避免上层执行模式把你想要的策略覆盖掉。
不是旧入口
第一步先排除旧插件入口 openclaw-codex-app-server。
jq '.plugins.entries["openclaw-codex-app-server"], .plugins.installs["openclaw-codex-app-server"], .plugins.entries["codex"]' ~/.openclaw/openclaw.json
结果显示旧入口并不存在,当前使用的是 bundled codex plugin。
所以配置入口应该看这里:
plugins.entries.codex.config
不是这里:
plugins.entries.openclaw-codex-app-server
真正的控制点
从本地源码和缓存产物里能看到这几个字段:
-
approvalPolicy -
approvalsReviewer -
OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY
实际逻辑大致是:
approvalPolicy = config.approvalPolicy ?? env.OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY ?? defaultPolicy.approvalPolicy ?? (policyMode === "guardian" ? "on-request" : "never")approvalsReviewer = config.approvalsReviewer ?? defaultPolicy.approvalsReviewer ?? (policyMode === "guardian" ? "auto_review" : "user")
也就是说,Codex app-server command approval 不是 OpenClaw 传统 exec approval 的同一层,而是 Codex bridge 自己在判定。
实际修改
文件是:
~/.openclaw/openclaw.json
我补了这两段:
"tools":{"profile":"coding","exec":{"mode":"full"}}
"plugins":{"entries":{"codex":{"enabled":true,"config":{"codexDynamicToolsLoading":"searchable","codexDynamicToolsExclude":[],"appServer":{"mode":"yolo","approvalPolicy":"never","approvalsReviewer":"user","sandbox":"danger-full-access"}}}}}
为什么一开始还没生效
文件改完不代表运行时立刻更新。
我又看了一下 app-server 进程,发现旧的 codex app-server --listen stdio:// 还在跑,而且启动时间早于配置修改时间。
这就解释了为什么页面还在弹:
-
文件层面已经改了 -
但旧 app-server 进程还拿着旧策略 -
旧进程不退出,新配置就进不去
所以最后直接清理旧进程:
pkill -f 'codex app-server --listen stdio://'
最终状态
现在的配置意图很明确:
-
tools.exec.mode = "full" -
appServer.mode = "yolo" -
appServer.approvalPolicy = "never" -
appServer.approvalsReviewer = "user" -
appServer.sandbox = "danger-full-access"
下一次 OpenClaw 拉起 Codex app-server 时,会读到新的 approvalPolicy。
经验教训
-
Codex app-server command approval不是 OpenClawexec-approvals.json那一层。 -
2026.6.x 的实际配置入口是 bundled
codexplugin:plugins.entries.codex.config.appServer -
不要再往不存在的旧入口写配置。
-
tools.exec.mode = "auto"可能会把你想要的行为拉回 guardian approval,后台场景最好显式设成full。 -
修改配置后,如果旧 app-server 还活着,单改文件不会立刻生效。
-
对 cron / 后台任务来说,交互式 approval 天生不友好,最好一开始就把这层收掉。
下次排查清单
# 1. 看当前配置jq '{toolsExec: .tools.exec, codexAppServer: .plugins.entries.codex.config.appServer}' ~/.openclaw/openclaw.json# 2. 看是否还有旧 app-serverpgrep -fl 'codex app-server --listen stdio://'# 3. 对比配置修改时间和进程启动时间stat -f 'config_mtime=%Sm' ~/.openclaw/openclaw.jsonps -o pid,lstart,command -p $(pgrep -f 'codex app-server --listen stdio://' | paste -sd, -)# 4. 必要时清理旧 app-serverpkill -f 'codex app-server --listen stdio://'

加入 AI灵感闪现 微信群
长按下图二维码进入 AI灵感闪现 微信群

长按下图二维码添加微信好友 VibeSparking 加群

关注 AI灵感闪现 微信公众号

夜雨聆风