附录 B 检查清单:如何判断你的 Harness 更像 Claude Code、Codex,还是半成品
比较如果不能落成检查清单,最后很容易只剩一些表述完整却难落地的判断。下面这份附录,就是把前面几章压成团队可直接讨论的清单。
B.1 控制面清单 (invariants)
assert every instruction has {source, type, precedence} # fragment 可识别
assert prompt 中 control-plane 与 output-style 明确区分 # 文风不等于秩序
assert 本地规则的作用域(CLAUDE.md / AGENTS.md)显式标注
assert team 规则变更可通过 diff 追踪 # 非口头约定
答不清这些,说明控制面还停留在"能用就行"。
B.2 连续性清单 (invariants)
assert 连续性主权 ∈ {main loop, thread+rollout+state} # 明确归属
assert 中断 ⇒ tool_result 同步闭账(synthetic 兜底也算)
assert 长会话有 compact / truncation / recovery 三件套
assert thread.id / 会话索引 / 状态落地为系统一等概念
长会话若主要靠模型自己"记得住",基本不必再看。
B.3 工具与审批清单 (invariants)
assert tool = schema 化接口,additional_properties=false
assert approval policy 可独立评估(不混在代码 if/else 里)
assert 危险工具(Bash 等)有专门治理 # 非一视同仁
assert {workdir, network, sandbox, approval} 可显式表达
系统只能回答"我们也有权限控制",基本等于没设计权限。
B.4 本地治理清单 (invariants)
assert 本地规则可按 {目录, 团队, 任务类型} 分层
assert skill 视为可复用制度切片,非长 prompt # 有版本/来源
assert hook 挂在明确生命周期事件(pre/post/session_start/stop)
assert {skill, rule, hook} 具备 {version, source, trigger boundary}
B.5 多代理与验证清单 (invariants)
assert 多代理的第一目的是职责分离,并行是附带 # 否则是把混乱并行化
assert 存在独立 verifier(verifier ≠ implementer)
assert 委派为显式工具或显式状态事件,非 runtime 魔法
assert 子代理 {failure, timeout, cancel} ⇒ 明确 cleanup owner
B.6 你更像哪一类系统
更像 Claude Code 的信号:
- 你最重视 query loop、工具编排、中断、compact 与恢复
- 你擅长让规则快速进入现场会话
- 你更关心 agent 如何在复杂任务里持续运行
更像 Codex 的信号:
- 你最重视 instruction fragment、tool schema、approval policy、thread / rollout / state
- 你擅长把本地规则做成结构化资产
- 你更关心 agent 如何在组织里被长期治理
更像半成品的信号:
- 两边的名词都说得出来,但谁负责秩序说不清
- 有很多能力入口,但没有清楚的恢复路径
- 有很多规则文本,但没有作用域和优先级
- 有多代理,但没有责任分离和收尾机制
B.7 最后六问
要是时间不够,只问这六句:
- 谁拥有最终控制权,模型还是 harness
- 连续性主要住在 loop 里,还是住在线程和状态里
- 工具动手前,谁来拦最后一道
- 本地规则怎么进入系统,怎么分层
- 验证由谁负责,如何独立
- 出事以后,团队靠什么追溯
这六句问下来,系统大概属于哪一派,通常也就露出来了。
B.8 阈值与顺序速查 (thresholds & orderings)
| 名称 | 值 | 作用 | 源引用 |
|---|---|---|---|
MAX_ENTRYPOINT_LINES |
200 | 入口文件行数上限 | 书一 ch5 / memdir/memdir.ts |
MAX_SECTION_LENGTH |
2_000 | session memory 单节上限 | SessionMemory/prompts.ts |
MAX_TOTAL_SESSION_MEMORY_TOKENS |
12_000 | 会话记忆总预算 | SessionMemory/prompts.ts |
AUTOCOMPACT_BUFFER_TOKENS |
13_000 | autocompact 警戒缓冲 | compact/autoCompact.ts |
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES |
3 | 熔断阈值 | compact/autoCompact.ts |
yield_time_ms |
per-tool | 单次 exec 阻塞毫秒上限 | local_tool.rs |
wait_agent.timeout |
min/default/max | 子代理等待窗口 | agent_tool.rs |
| Bash 子命令数 cap | implicit | 复合子命令上限 | bashPermissions.ts |
事件顺序速查:
- session_start → user_prompt_submit → pre_tool_use → tool exec → post_tool_use → stop
- spawn_agent → send_input* → wait_agent → close_agent(cascade 关闭后代)
- PTL → collapse → reactive compact → 若仍 PTL 则 surface 错误(不再循环)