Skip to content

放行与审查

chain 默认不是全自动的——每个 segment 跑完后会停下来,让你检查产出再决定下一步。这叫"人在回路中"(human in the loop)。

默认行为:逐段暂停

每跑完一段、且后面还有段时,引擎进入 (暂停)状态,先回显上一段的产出,再给你四个选项:

按键操作效果
回车放行进入下一段(输入空、y 或任何无法识别的内容都按放行处理)
s跳过跳过下一段,直接进入再下一段(任何段都能跳,不限于可选段)
e改指令提示你输入一行新指令,用它替换下一段的 prompt,然后放行
q退出终止整条链,保留已产出的成果
$ ccr chain plan-impl-review.chain.yaml --input "做一个 todolist app"
▶ 段 1/3 plan [cc-switch:opus]
✓ 段 1/3 完成 (12s)
⏸  上段产出:
计划已写入 docs/plans/todolist.md
下一段:implement(profile=custom:cheap)
[回车=放行 / s=跳过 / e=改指令 / q=退出] > 

e 改的是「下一段的指令」,不是产出文件

e 后引擎让你输入一行文本,这行会替换下一段 prompt,不会打开编辑器改上一段产出的文件。想改产出文件,直接 q 退出后手动改,或在放行前用别的终端编辑(成果就在工作目录里)。

暂停的意义在于:你不是把一切交给 AI 就两手一摊了——你在关键节点检查、修正方向、确保产出符合预期。

--auto:跳过所有暂停

如果你信任这条链、不想逐段确认,加 --auto

bash
ccr chain plan-impl-review.chain.yaml --auto

--auto 会跳过所有放行点,链端到端跑完——包括审查段在内,没有任何暂停。审查段照常运行并写出 verdict,链跑完后引擎再按这个 verdict 自动决定成果合并还是保留(见下一节,fail-closed)。所以 --auto 不是「跳过审查」,而是「不在中途停下等你」。

详简输出

默认输出每段会逐条打印工具调用。想更安静用 -q(只留段框和结果),想看思考文本和 token 用 -v,二者互斥。

审查段的判定

审查段(review: true)运行时,引擎会在它的 prompt 末尾追加固定指令,要求 Claude 落两份产物到工作目录:

  • .ccr-chain/findings.md:发现的问题清单(具体、可操作)
  • .ccr-chain/verdict:单独一行,passneeds-work

接下来分两种情况:

审查段是最后一段(最常见)——它跑完后没有放行点,链直接结束,引擎按 verdict 自动决定成果去留(见下方)。

审查段后面还有段(比如一个 fix 段)——会照常进入放行点,且提示里会带上判定:

⏸  上段产出:
审查完成,findings 见 .ccr-chain/findings.md
[判定] needs-work —— 下一段建议放行修复
下一段:fix(profile=custom:cheap)(可选,可按 s 跳过)
[回车=放行 / s=跳过 / e=改指令 / q=退出] >

verdict 驱动最终的「合并 / 保留」

链跑完后,引擎自动根据「最后一次审查的 verdict」决定隔离区成果(isolate: true 时)的归宿,规则是 fail-closed

  • verdict = pass → 自动合并回当前分支
  • verdict = needs-work → 保留成果、打印取回路径,不合并
  • 没产出明确 verdict(漏写 / 拼错)→ 同样保留、不合并——质量闸在不确定时绝不静默放行
  • 整条链没有审查段 → 没有闸可拦,跑完直接合并

引擎不会根据 verdict 自动重跑、自动循环、自动改分支策略——它只做一次「合并还是保留」的收尾决定。中途要不要继续、跳过、改指令,仍然全在你的放行点操作里。详见 隔离与成果交回

可选 fix 段怎么用

在链里加一个 optional: true 的 fix 段放在审查段之后。optional 本身不会让引擎按 verdict 自动跳过它——它只是在放行点的提示里标一句「可按 s 跳过」。实际操作是:审查给 needs-work 你就回车放行让 fix 跑;给 pass 你就s 跳过 fix。决定权在你手里。

下一步

隔离与成果交回