乐于分享
好东西不私藏

关闭 OpenClaw Codex app-server 命令审批弹窗

关闭 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 不会把策略又拉回去。

先说结论

直接生效的配置点有两个:

  1. plugins.entries.codex.config.appServer.approvalPolicy = "never"
  2. 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

经验教训

  1. Codex app-server command approval 不是 OpenClaw exec-approvals.json 那一层。

  2. 2026.6.x 的实际配置入口是 bundled codex plugin:

    plugins.entries.codex.config.appServer
  3. 不要再往不存在的旧入口写配置。

  4. tools.exec.mode = "auto" 可能会把你想要的行为拉回 guardian approval,后台场景最好显式设成 full

  5. 修改配置后,如果旧 app-server 还活着,单改文件不会立刻生效。

  6. 对 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://'
OpenClaw 小龙虾(点击跳转合集)

加入 AI灵感闪现 微信群

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

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

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