takeover
Takeover
跨 agent 交接的入站协议:把交接文档当历史证据,不当事实;先核对,再继续。
边界
- 是:新会话或新 agent 接手已有工作,消费 handover,核对真实状态,选一个下一步。
- 不是:同会话压缩(用 harness 的 compact / resume);项目治理(butler);Blueprint 执行器(forge);经验提炼(experience-to-spec)。
- 有 Blueprint:读 §4 / §5 / §8,接 forge 的 next
S-T,不另起一套任务系统。 - 有项目状态文件:接 butler 的 project-state,不重复造项目概览。
- 输出:遵守 communication 的 decision-first,接手简报 ≤15 行。
触发检查
进入完整仪式前,先做一次廉价探测:
- 用户明确说「接手 / 初次对话 / 读交接 / 从上次继续」→ 进入。
- 当前会话已经在讨论具体任务,用户只是说「继续」→ 不进入,直接继续。
- 找不到任何 handover、项目状态或计划,且任务不需要历史 → 不进入。
- 用户说「深入理解 / 通读全仓 / 彻底搞懂」→ 进入 L2,但仍按停止规则收口。
本 skill 刚安装但不在当前会话的 skill 索引时,直接读本文件执行,或提示重启;不要假装已加载。
三档接手
| 档 | 何时 | 读什么 | 停止条件 |
|---|---|---|---|
| L0 快接(默认) | handover 新鲜、下一步明确 | handover、git 状态与最近提交、下一步涉及的文件 | 能说清「下一步是什么、为什么、怎么验证」 |
| L1 标准 | handover 缺失或过期、项目不熟 | 加 roadmap / status / blueprint / ADR / wiki index、两层目录、定向代码 | 完成 claim 核对表 |
| L2 深接 | 多工作流、高风险改动、文档互相矛盾、用户明确要求深入 | 加架构入口、决策史、butler 轻量审计 | 先给简报,确认后再动手 |
默认从 L0 开始。L1 / L2 是升级,不是默认工作量。
接手流程
0. 定位交接
按顺序查找,找到即停:
.handoff/latest.md
HANDOVER.md
docs/HANDOVER.md
PROJECT_STATUS.md
docs/roadmap.md
docs/status.md
BLUEPRINT.md
.wiki/wiki/index.md
多份并存时,以 .handoff 下的 latest.md 为准;它的 branch / head 与当前不符,进入 L1 核对,不直接采信。全都没有时,用 git log、最近修改的文件和项目入口文档重建一份,并写回 .handoff 下的 latest.md。
1. 定向
- 运行
pwd,确认工作目录。 - 运行
git status --short --branch与git log --oneline -10。 - 读项目自己的规则:AGENTS.md、CLAUDE.md、README.md、CONTRIBUTING.md,以及项目声明的验证入口。
- 确认当前分支、工作区是否干净、最近一次提交是否与 handover 的 head 一致。
非 git 项目用文件 mtime、目录树和项目自己的发布记录替代,不假装存在 git 状态。
2. 加载权威
只读与下一步有关的部分:
- 当前 milestone、路线图、Blueprint 的 next
S-T。 - 最近的 ADR、设计决策、Wiki 摘要。
- 明确的待决问题、阻塞项、用户最近一次否决。
不要为了「了解全貌」把全部文档和源码读一遍。需要全貌时,用目录树和入口文件建地图,再按下一步定向阅读。
3. 核对 claim
把 handover 里的关键断言逐条对照现实:
| Claim | 核对动作 | 结论 |
|---|---|---|
| 「X 已完成」 | 文件、commit、测试或产物是否存在 | verified / stale / unknown |
| 「下一步做 Y」 | Y 的文件、分支、依赖、权限是否还在 | valid / stale |
| 「当前优先级是 Z」 | roadmap / blueprint 的当前 milestone 是否仍指向 Z | current / outdated |
| 「验证已通过」 | 跑最便宜的相关验证,或找到最近一次结果 | pass / fail / not-run |
核对结果写进简报。未知就标 unknown,不猜。计数只算影响下一步的 claim;同一事实的重复表述算一条;branch / head / dirty 合并为一条环境 claim。
4. 决策
- handover 的 next action 仍然有效且未被阻塞 → 直接采用。
- 已失效 → 回到计划文档选下一个未完成项;计划也过期 → 只问一个问题。
- 代码与 handover 冲突 → 按权威顺序判断;先确认冲突是 bug 还是有意中间态。
- 上一次是在某个 gate 前停下的 → 先完成 gate 的验收,再开新工作。
权威顺序:运行中的代码与测试 > git 历史 > 交接文档 > 计划文档 > 会话记忆。
交接里明确写出的「有意中间态」按 decisions / do_not_redo 处理,不当作缺陷。
5. 简报
接手:<project> @ <branch> <head>
状态:<一句话>
核对:verified <n> / stale <n> / unknown <n>;<关键冲突一句话>
下一步:<一个具体动作,带文件或命令>
风险:<一句话,或 none>
简报是决策产物,不是读书报告。细节留在 handover 或项目文档里。
6. 执行门
- 下一步清晰、低风险、可回退 → 直接做。
- 高风险(删除、迁移、权限、密钥、公共接口、不可逆操作)→ 先简报,等确认。
- 基线验证失败 → 先修或报告,不在坏基线上叠新改动。
- 发现 handover 与计划冲突且用户意图不明 → 只问一个合并后的问题。
默认不问「你希望我继续吗」;用户说「继续推进」时,清晰低风险就是授权。
7. 收尾
- 把新的状态写回 .handoff 下的 latest.md,用 handover_chain 指向上一份。
- 只更新真正变化的源真相;不把 roadmap / blueprint 复制进 handover。
- 检查是否泄露密钥、token、个人路径。
- 如果本次切换暴露了重复出现的坑,转给 experience-to-spec,不在本 skill 里堆规则。
出站契约
用户要求「交接给下一个 agent」时,按 交接模板 写;字段定义与质量门见 交接契约。
三条硬约束:
- 只写 delta:durable docs 用路径引用,不复制。
- 一个 next action:多个候选写进 open_questions,不并列成菜单。
- 证据优先:done 必须有文件、commit、测试或产物;没有证据的「已完成」降级为 unknown。
默认写到项目根 .handoff 下的 latest.md;确认 .handoff/ 已在 .gitignore 中。需要跨机器时,由用户显式决定是否提交或同步,不自动改版本控制边界。
与现有 skill 的路由
| 情况 | 接谁 |
|---|---|
| 需要项目状态、结构、版本治理 | butler |
| 有 Blueprint,要执行 next S-T | forge |
| 到交付或合并前验收 | visible/review |
| 输出太长、需要决策优先 | communication |
| 要把这次的教训固化成规则 | experience-to-spec |
红线
- 不把 handover 当事实;它只是上一个 agent 的判断。
- 不为「了解全貌」默认全仓通读。
- 不在简报前编辑文件。
- 不问超过一个的澄清问题。
- 不把 durable docs 复制进 handover。
- 不写密钥、token、密码、个人路径。
- 不在高风险、不可逆的操作上自动开工。
- 不发明项目状态、版本号、完成度。