学习精选 · AI 工具
Codex

Codex 在 OpenSpec Workbench 里怎么跑:一次文件写入失败暴露的沙箱配置问题

DEV Community2026-11-14约 4 分钟读完AI 整理查看原文

作者在用 OpenSpec Workbench 驱动 Codex CLI 时发现:agent 报告退出码 0,但文件根本没写进去,因为工作区被当成只读。文章复盘了这次踩坑,讲清了 stage 如何决定沙箱模式、原生 CLI 与 ACP bridge 两种适配器的差异,以及如何用 CLI 命令检查运行记录。

今天就能做

  • 别只看进程退出码判断 agent 是否成功,要让适配器读取回合内的实际结果(变更文件、命令退出码)
  • 给 Codex 显式配置沙箱模式:审查用 read-only,写代码和验证用 workspace-write,并确认工作目录指向变更自己的 worktree
  • 用 openspec-ui-cli show run <runId> 复查每次运行的用量和变更,排查静默失败

一次 exit code 0 但文件不存在的失败

  • Codex CLI 0.164.0 在 2026 年 10 月 24 日的试运行中,agent 声称工作区只读,写入没有发生,但适配器只看进程退出码,把这一轮当成了成功
  • 问题根源是两个默认值没显式配置:Codex 需要明确知道能在哪里写,Workbench 需要读取每一轮实际发生了什么

沙箱模式由 stage 决定

  • 在 Harness Settings 里,一个 stage 可以指定 codex-cli 作为 agent,并选择模型和 reasoning effort
  • Propose、update、apply、verify 四类 stage 使用 workspace-write 沙箱,因为验证阶段要写构建产物和缓存
  • Review 阶段使用 read-only,防止审查过程改动代码
  • Workbench 会在启动 agent 前解析工作目录:如果变更有自己的 worktree,就从那里运行,Codex 再对子进程强制执行自己的文件系统沙箱

实测验证沙箱边界

  • 试运行中 workspace-write 模式允许在 worktree 内写入,拒绝写入其父目录,允许写入系统临时目录
  • 所选模式是 Workbench 检查调用的一部分,避免配置与实际执行不一致

两种适配器,两种传参方式

  • 原生适配器运行 codex exec --json,输出流里带回合结果、消息、命令退出码、变更文件和 token 用量,Workbench 能看到失败的回合
  • 选择 codex-cli-acp 则走单独安装的 @agentclientprotocol/codex-acp 桥接:会话打开时桥接列出可用选项,Workbench 校验请求的模式、模型和 effort 后再发 prompt
  • 如果请求了不支持的模型或 effort,stage 会直接报错并列出桥接实际支持的选项;首次 apply 实测用的是 bridge 2.2.2,成功返回了文件变更和用量
  • 两条路径共享同一套 stage 到沙箱的策略,桥接还能在 stage 运行中发送上下文更新

动手试一遍

  • 挑一个小改动放在独立 worktree 里,在 Harness Settings 中把 Codex 分配给 Review 和 Apply,按顺序运行这两个 stage
  • 打开 run 输出查看每个 stage 做了什么;装好 CLI 后可用 openspec-ui-cli show agents 查看注册的适配器,用 openspec-ui-cli show run <runId> 查看持久化的运行记录
  • 实现决策和实测细节记录在 ADR 0051 和 ADR 0052 中

原文:How Codex runs a Harness stage

来源:DEV Community · 2026-11-14

查看原文

本文由 AI 阅读原文后整理,未经人工逐字核对,内容以原文为准。

登录后可以点赞、查看和发表评论