前十四章分别解释一种机制。s15 不再增加孤立能力,而是回答:组件接到同一系统时,谁先运行、状态放在哪里、异步事件如何回到对话?
前面章节在叙事上递进,但并非每个 code.py 都完整继承上一章:s11、s12、s14 等是从较小内核分出的机制样例,s15 才是累计能力的重组点。
用户输入与异步事件
↓
Hooks → 压缩 → Memory/Skills/MCP prompt 组装
↓
LLM
├── 无 tool_use → Stop Hooks → 返回或继续
└── tool_use → Permission → 分发 → PostToolUse → 下一轮集成的关键是顺序
- cron 与后台通知在模型调用前进入消息;
- 压缩在组装请求前运行,但不能拆散工具调用与结果;
- Permission 必须在 handler 前;
PostToolUse观察已允许并执行的结果;- Memory 和 Skills 进入 prompt,完整技能按需加载;
- Stop Hook 在没有实际
tool_use时决定是否结束。
多种“任务”需要分层命名
| 机制 | 作用 |
|---|---|
| TodoWrite | 当前会话的轻量清单 |
| Task graph | 可依赖、可认领的持久任务 |
task 工具 | 一次性、隔离上下文的 Subagent |
| Background task | 已启动但未完成的 Shell 工作 |
| Cron job | 未来重新交付的 prompt |
| Workflow task | s16 中脚本编排的一次运行 |
若代码和产品都只叫它们 task,状态、权限与恢复会难以推理。
当前源码与正文清单共有 26 个内建工具;上游 README 后部对比表写成 25,是文档与实现的小偏差。核对能力数量时应以完整清单和源码为准。
异步事件必须能唤醒主循环
后台命令、cron 和 teammate 可能在用户没有输入时产生事件。宿主监听队列和收件箱,事件到达即可开启新一轮,Lead 无需轮询。
自动唤醒不等于自动授权。异步轮次无法确认时,需要确认的工具直接拒绝,避免线程争抢输入或无人观察的副作用。
所有执行入口经过同一政策
Lead、Subagent 和 teammate 都能调用工具。若只有前台 Agent 经过 PreToolUse,委派就成为权限绕过路径。每个入口必须共享权限与审计,同时按角色收窄工具集合。
MCP 声明不改变这条原则;Worktree 只改变默认 cwd,不是安全沙箱。
错误恢复也是循环的一部分
课程处理限流、服务不可用、输出 token 不足和 prompt 过长。恢复策略需要预算与停止条件,否则退避、continuation 或 reactive compact 也可能形成无限循环。
建议覆盖的集成测试
- Hook 与 Permission 对所有角色一致生效;
- 压缩后工具调用与结果仍成对;
- MCP 连接后下一轮工具池更新;
- 后台、cron 和团队事件唤醒 Lead;
- 异步轮次不弹出确认;
- task owner、worktree
cwd与计划审批一致; - 模型失败后队列消息可恢复。
小结
Integrated Harness 的核心不是堆功能,而是让机制共享一个可解释的事件循环。组件顺序、执行入口、异步唤醒、角色权限和错误恢复共同决定系统可靠性。