Skip to content

E6|Review 与 Git:只读审查不是 Guardian,也不是 git apply ​

先别把三种「再看一眼」焊成一个按钮 ​

代码写完之后,产品里至少有三条「审查」:/review 开一条只读评审会话、GitHub 上 @codex review 的云端 PR 评、以及 Guardian 在工具执行前的自动审批。再叠 /diff、codex apply、桌面的 checkpoint,很容易理解成「都是 git」。

判断先说清楚:

  • /review / codex review 是 TaskKind::Review:只读、不能 steer、关掉搜索和协作,产出 findings。
  • Guardian 是同意链上的评审员(B3),拦的是这一次 tool call,不是一份 diff 报告。
  • GitHub PR review 是云端产品(E3),本仓库没有那份编排。
  • /diff 给人看工作区;codex apply 把云端 diff 打进本地。 都不开 ReviewTask。

AGENTS.md 的 Code Review Rules 是给 审查模型 读的项目政策(C1 发现链),不是 ExecPolicy。


1. /review:另一条只读会话,不是当前 turn 换个 prompt ​

TUI /review:「review my current changes and find issues」(slash_command.rs:94)。CLI codex review 转成 codex exec 的 Review 子命令(cli/src/main.rs:1250-1268)。参数互斥:--uncommitted、--base BRANCH、--commit SHA、或自定义 prompt(exec/src/cli.rs:274-304)。--worktree 不支持 review(E2)。

实现是 ReviewTask(tasks/review.rs:45-47)。B1:Review 不能被 steer。它 run_codex_thread_one_shot 开子会话(:77-86, 128),跑完 exit_review_mode,发出 ExitedReviewMode。中断走 abort,同样退出 review mode。

子会话被刻意减权(:107-121,session/review.rs:31-36):

  • web search 强制 Disabled(含 Cached/Request feature)
  • 关掉 Collab / MultiAgentV2 / Goals
  • 关掉 view_image 相关全局能力(注释:delegate 不能把被禁工具再打开)
  • approval_policy 只允许 Never(不问人,因为不该有要批的写操作)
  • base_instructions 换成 REVIEW_PROMPT(core/src/lib.rs:203),provenance Custom
  • 可用单独的 review_model

产出是结构化 findings(review_format),不是 apply_patch。rubric 要求:只报作者会修的、引入于这次 diff 的、可行动的问题;trivial style 除非违反文档化标准(prompts/templates/review/rubric.md:12-40)。

没有「独立 ReviewTask」会怎样?审查变成普通 Regular turn,模型一边读 diff 一边改文件,协作工具再开子代理。减权必须在 Task 层,不能靠 prompt 里的「请只读」。


2. 项目审查规则走 AGENTS.md,不走 hook ​

rubric 的 Repository Rule Attribution(:46-50)明确:用变更文件适用的项目说明书,优先序与 C1 相同——AGENTS.override.md、AGENTS.md、再 fallback。更具体的赢。用户对本次审查范围的指示优先于文件。

本仓库自己的 AGENTS.md 就有 Code Review Rules 一节:crate API 要小、模型上下文禁止 rewrite、有界、单条 10K……审查模型读的是这些,不是 hooks.json。把「PR 必须跑 just test」写进 AGENTS.md,/review 会当规则引用;写成 PreToolUse hook,审查会话根本不跑那个 hook 路径。

未信任项目不加载项目 AGENTS.md(C1),审查也就没有仓库特有规则,只剩通用 rubric。


3. GitHub @codex review:云端 PR 评,不是本地 ReviewTask ​

GitHub issue/PR 上的 @codex review 由云端编排(E3)。本仓库没有 GitHub App webhook handler。本地能做的是:codex review --base main 对着当前 clone 出 findings;或把云端任务的 diff codex apply 下来再本地 /review。

不要把 PR 上的 inline comment 当成 EventMsg::ReviewOutput 的另一种投影。它们甚至不共享 rollout。


4. /diff、apply、checkpoint:Git 工作流,不是审查模式 ​

/diff: 调 workspace runner 算 git diff(含 untracked)(slash_command.rs:107,slash_dispatch.rs:439-461)。不是 git 仓库就提示 not inside a git repository。结果给人看,不进 ReviewTask,不改审批。

codex apply: E3 的缝——云端 output_diff → git apply。本地工作区变脏之后,你可以 /diff 或 /review。apply 本身不问审查模型。

checkpoint: 桌面产品里的 Git 时间点(可回退的快照)。本仓库 TUI slash 没有 /checkpoint。compaction checkpoint、JS microtask checkpoint 都是别的意思,不要对号入座。需要回退:git 自己的 stash/commit,或桌面产品的 checkpoint UI。


5. Guardian:点到为止,别和 /review 混写 ​

Guardian 在 工具审批 上跑另一条评审员 Session(B3 ApprovalsReviewer::auto_review)。scope 包括 Shell、ComputerUse、Mcp、FileChanges(E4)。它产出的是 Allow/Deny,不是 findings 列表。

/auto-review 打开的是「再批一次最近的自动拒绝」(slash_dispatch.rs:417-418),操作的是同意链,不是 ReviewTask。

E11 Codex Security 是找洞/修补的独立产品。三种「安全」:

拦什么产出
/review不拦执行;读 difffindings
Guardian这一次 tool call批或拒
Codex Security漏洞生命周期独立产品

审查会话里 auto_review_enabled 仍可能被记进 turn metadata(review.rs:96-99),那是元数据,不表示 Review 等于 Guardian。


6. 结语:带走一句话 ​

/review 是减权后的只读子会话,规则来自 AGENTS.md;GitHub PR 评在云端;Guardian 拦的是工具同意——/diff 和 apply 只搬 git 字节,不要把它们拧成同一种「再看一眼」。