
1. 为什么需要任务交接从单打独斗到协作流水线做过 Agent 项目的人大概都有过这种体验一个任务跑了一半上下文快满了或者需要换一个更擅长的 Agent 接手结果交接的时候信息全丢了。接手方要么从头问一遍要么凭猜测瞎干最后出来的东西跟预期差了十万八千里。这不是模型能力的问题是交接机制的问题。WorkBuddy 的 Handoff-Skill 就是冲着这个痛点来的。它做的事情说起来很简单把当前任务的完整状态——包括目标、进度、已完成的步骤、待办事项、关键上下文——打包成一份结构化的交接文档让下一个 Agent 或者下一个人能够无缝接上。但真正用起来里面的门道比想象中多。我最初接触 Handoff-Skill 是因为一个多阶段的内容生产流水线。整个流程涉及调研、大纲、初稿、润色、格式化五个环节每个环节由不同的 Agent 负责。最开始没有交接机制的时候每个环节的 Agent 都要重新读一遍原始需求不仅浪费 token还经常出现理解偏差。后来用上 Handoff-Skill整个流水线的效率大概提升了四成返工率也明显下降。这篇文章适合三类人看一是正在搭建多 Agent 协作流程的开发者二是用 WorkBuddy 做复杂任务编排的进阶用户三是想搞清楚 Agent 之间到底怎么传递状态的技术爱好者。不管你是刚上手还是已经踩过一些坑下面这些内容应该都能帮你少走弯路。2. Handoff-Skill 的核心设计思路拆解2.1 交接的本质是什么很多人第一次听到“任务交接”这个词会下意识地把它理解成“把聊天记录复制过去”。这个理解不能说错但太浅了。聊天记录里充斥着大量的冗余信息、试错过程、被否决的方案直接丢给下一个 Agent不仅浪费上下文窗口还会干扰它的判断。Handoff-Skill 的设计哲学是交接的不是过程是状态。它要传递的是“当前任务处于什么位置、接下来该往哪走、有哪些约束条件必须遵守”而不是“我们之前聊了什么”。这个区别很关键它决定了交接文档的结构和内容取舍。打个比方接力赛交接棒的时候你不需要告诉下一棒选手你前面是怎么跑的你只需要把棒子稳稳递到他手里让他知道往哪跑就行。Handoff-Skill 做的就是这根接力棒。2.2 为什么选择 Markdown 作为载体Handoff-Skill 的交接文档用的是 Markdown 格式文件名叫 SKILL.md。这个选择乍看很普通但仔细想想是有道理的。Markdown 的第一个优势是人和机器都能读。Agent 解析起来没有障碍人检查的时候也一目了然。你不需要专门写一个解析器去读它打开就能看懂。第二个优势是结构灵活。交接文档的内容长度差异很大简单的任务可能就几行复杂的任务可能要写上千字。Markdown 的标题层级和列表结构能够很好地适应这种弹性。第三个优势是版本管理友好。SKILL.md 可以直接放进 Git 仓库每次交接的变更都有记录出了问题可以回溯。提示虽然 Handoff-Skill 默认用 Markdown但如果你团队有特殊需求也可以改成 JSON 或 YAML。不过实测下来Markdown 在可读性和结构性的平衡上是最好的改成结构化数据反而会增加维护成本。2.3 交接文档应该包含哪些字段这是整个 Handoff-Skill 最核心的部分。根据我实际使用的经验一份合格的交接文档至少应该包含以下几个板块任务目标用一两句话说明这个任务最终要达成什么。注意是最终目标不是当前步骤的目标。当前状态明确标注任务处于哪个阶段是进行中、待审核还是已阻塞。已完成事项列出已经做完的步骤以及每步的关键产出。待办事项接下来需要做什么按优先级排序。关键上下文接手方必须知道的约束条件、偏好设置、已排除的方案。交接备注上一任执行者留下的特别提醒比如“某个接口不稳定建议重试三次”。这六个板块看起来简单但每个板块写什么、怎么写直接决定了交接的质量。后面我会逐个展开讲。2.4 和普通 Prompt 传递的区别有人可能会问我直接把上一轮的输出作为下一轮的输入不就行了为什么要专门搞一个 Handoff-Skill区别在于结构化和非结构化。普通的 Prompt 传递是线性的信息散落在对话历史里接手方需要自己去提取关键信息。而 Handoff-Skill 是结构化的它强制上一任执行者在交接前做一次信息整理和提炼。这个整理的过程本身就是有价值的它迫使你回顾任务全局发现可能被忽略的问题。另外Handoff-Skill 支持跨会话、跨 Agent、跨模型传递。你可以在一个 Agent 里开始任务导出 SKILL.md然后在另一个完全独立的会话里导入继续。这种灵活性是普通 Prompt 传递做不到的。3. 配置 Handoff-Skill 的完整实操流程3.1 环境准备与安装确认在开始配置之前先确认你的 WorkBuddy 版本支持 Skill 机制。目前 Handoff-Skill 在 WorkBuddy 的较新版本中已经内置如果你用的是老版本可能需要手动安装。检查方法很简单在 WorkBuddy 的命令行里输入workbuddy skill list如果输出里能看到handoff相关的条目说明已经可用。如果没有可以通过以下命令安装workbuddy skill install handoff-skill安装完成后建议重启一次 WorkBuddy 服务确保 Skill 被正确加载。我遇到过好几次装完没重启结果调用的时候报“skill not found”的情况排查了半天才发现是没重启。注意如果你是在 Linux 环境下使用 WorkBuddy安装路径可能和 macOS 不同。默认情况下 Skill 会装在~/.workbuddy/skills/目录下你可以去这个目录确认一下 handoff-skill 文件夹是否存在。3.2 SKILL.md 的目录结构设计Handoff-Skill 的核心文件是 SKILL.md它的存放位置决定了交接的作用范围。根据我的实践推荐以下目录结构project-root/ ├── .workbuddy/ │ └── skills/ │ └── handoff-skill/ │ ├── SKILL.md # 主交接文档 │ └── templates/ # 交接模板 │ ├── simple.md │ └── complex.md ├── tasks/ │ └── current-task/ │ └── SKILL.md # 任务级交接文档 └── README.md这里有两层 SKILL.md一层是 Skill 自身的定义文件告诉 WorkBuddy 这个 Skill 怎么用另一层是任务级的交接文档记录具体任务的交接信息。很多人会把这两个搞混导致配置出错。Skill 自身的 SKILL.md 主要定义元信息比如 Skill 名称、触发条件、输入输出格式。任务级的 SKILL.md 才是真正承载交接内容的地方。3.3 配置文件的参数详解Handoff-Skill 的配置文件通常是一个 YAML 或者 JSON 文件放在 Skill 目录下。以下是一个典型的配置示例name: handoff-skill version: 1.2.0 trigger: keywords: - 交接 - handoff - 转交 auto_trigger: true trigger_threshold: 0.8 output: format: markdown path: ./tasks/current-task/SKILL.md include_history: false max_length: 4000 validation: required_sections: - goal - status - todo strict_mode: true几个关键参数值得展开说auto_trigger控制是否自动触发交接。如果设为 true当 Agent 检测到上下文快满或者任务需要转交时会自动生成交接文档。如果设为 false则需要手动调用。trigger_threshold是触发阈值范围 0 到 1。数值越高触发越保守。我一般设 0.8既能及时交接又不会频繁打断任务流。include_history决定是否把对话历史也写进交接文档。默认是 false因为历史信息噪音太大。但有些场景下比如需要追溯决策过程可以设为 true。strict_mode开启后如果交接文档缺少必填板块会直接报错而不是警告。建议在正式环境开启避免交接信息不完整。3.4 验证配置是否生效配置完成后用以下命令验证workbuddy skill test handoff-skill这个命令会模拟一次交接流程检查配置是否正确、模板是否能正常渲染、输出路径是否可写。如果一切正常你会看到类似这样的输出[OK] Skill loaded successfully [OK] Template rendered [OK] Output path writable [OK] Validation passed如果某一步报错根据错误信息逐项排查。最常见的错误是输出路径不存在手动创建一下目录就行。4. 调用 Handoff-Skill 的三种方式与实战场景4.1 手动调用最可控的方式手动调用适合任务边界清晰、交接时机由人判断的场景。调用方式有两种一种是在对话里直接说“执行交接”另一种是用命令行。对话里触发的方式最自然你只需要说请执行任务交接生成 SKILL.mdHandoff-Skill 会自动收集当前会话的关键信息按照模板生成交接文档。生成后你可以先检查一遍确认无误再交给下一个 Agent。命令行方式适合自动化流程workbuddy handoff create --task-id current-task --output ./tasks/current-task/SKILL.md这种方式可以集成到 CI/CD 流程里实现全自动的任务流转。实操心得手动调用时建议在交接前先让当前 Agent 做一次“自我总结”把关键信息口头梳理一遍。这样生成的交接文档质量会明显更高因为 Agent 在总结过程中会重新组织信息减少遗漏。4.2 自动触发适合长流程任务自动触发是 Handoff-Skill 最有价值的功能之一。当任务运行时间较长、上下文逐渐累积时Skill 会在合适的时机自动生成交接文档避免上下文溢出导致任务中断。自动触发的条件可以配置常见的触发条件包括触发条件说明推荐阈值上下文使用率当前上下文占窗口的比例75%任务步骤数已执行的步骤数量20 步时间间隔距离上次交接的时间30 分钟手动标记Agent 主动标记需要交接即时我一般会同时开启上下文使用率和步骤数两个条件哪个先到就触发哪个。这样既能防止上下文溢出又能在任务步骤过多时及时整理。自动触发的一个潜在问题是可能打断正在进行的操作。比如 Agent 正在生成一段代码突然触发交接代码生成到一半就停了。为了避免这种情况Handoff-Skill 支持“安全点”机制只在步骤之间的间隙触发不会在步骤执行中途打断。4.3 跨 Agent 交接多角色协作的核心跨 Agent 交接是 Handoff-Skill 最典型的应用场景。假设你有一个内容生产流水线调研 Agent 完成调研后需要把任务交给写作 Agent。这时候交接文档就是两个 Agent 之间的桥梁。具体操作流程是这样的调研 Agent 完成任务后调用 Handoff-Skill 生成 SKILL.mdSKILL.md 里包含调研目标、已收集的资料、关键发现、待写作的要点写作 Agent 启动时先读取 SKILL.md恢复任务上下文写作 Agent 基于交接信息继续执行不需要重新调研这个流程的关键在于交接文档的质量。如果调研 Agent 只写了“调研完成资料在附件里”写作 Agent 就得自己去翻附件效率很低。好的交接文档应该把核心发现直接提炼出来让接手方一眼就能看到重点。4.4 跨会话恢复中断后继续有时候任务会因为各种原因中断比如网络问题、服务重启、人为暂停。Handoff-Skill 可以用来做跨会话恢复。操作方式是在任务中断前生成交接文档恢复时读取# 中断前保存 workbuddy handoff save --session current --output ./handoff-backup.md # 恢复时加载 workbuddy handoff load --input ./handoff-backup.md --session new加载后新的会话会恢复之前的任务状态包括已完成的步骤、待办事项、关键上下文。实测下来恢复后的任务连贯性很好接手方基本感觉不到中断。5. 交接文档各板块的写法与避坑指南5.1 任务目标怎么写才不跑偏任务目标板块最常见的错误是写得太具体或者太笼统。太具体的话接手方会局限在细节里失去全局视角太笼统的话接手方不知道到底要做什么。好的任务目标应该是一句话能说清楚、但又不失焦点的。比如差的写法“完成用户调研”太笼统差的写法“收集 50 份问卷每份包含 20 个问题问题类型分布为……”太具体好的写法“完成目标用户的需求调研输出一份包含核心痛点和优先级排序的调研报告”好的写法既说明了要做什么需求调研又说明了产出物调研报告还说明了关键要求核心痛点和优先级排序。接手方一看就知道方向。注意任务目标里不要写“怎么做”那是待办事项板块的事。目标板块只回答“做什么”和“做成什么样”。5.2 当前状态的标注规范当前状态板块看起来简单但很多人写得含糊。比如“进行中”这个状态接手方看了等于没看。好的状态标注应该包含三个要素阶段、进度、阻塞情况。我习惯用这样的格式状态进行中 阶段资料收集完成进入分析阶段 进度约 60% 阻塞无如果有阻塞要明确说明阻塞原因和需要的支持。比如阻塞等待第三方数据接口的访问权限已提交申请预计明天下午前开通这样接手方就知道当前卡在哪里需不需要自己推动。5.3 已完成事项的提炼技巧已完成事项不是流水账不需要把每一步都记下来。它的作用是让接手方知道“哪些事情不用再做了”避免重复劳动。提炼的原则是只记录有产出的步骤以及产出物在哪里。比如- 完成竞品分析产出文档./outputs/competitor-analysis.md - 完成用户访谈 8 人访谈记录./outputs/interviews/ - 确定三个核心痛点详见交接备注这样接手方一眼就能看到已经做了什么、产出在哪里、关键结论是什么。不需要去翻聊天记录。5.4 待办事项的优先级排序待办事项板块要解决的是“接下来做什么”的问题。排序很重要因为接手方需要知道先做哪个。我一般用三级优先级P0必须做不做任务就无法推进的事项P1应该做影响任务质量但不会阻塞的事项P2可以做锦上添花的事项时间允许再做每个待办事项要写清楚做什么、预期产出、依赖条件。比如- [P0] 基于三个核心痛点撰写解决方案框架产出./outputs/solution-framework.md - [P1] 补充两个次要痛点的分析产出./outputs/minor-painpoints.md - [P2] 整理访谈中的有趣引用用于报告开篇5.5 关键上下文的取舍原则关键上下文是最容易写臃肿的板块。很多人恨不得把所有信息都塞进去结果接手方被淹没在细节里。取舍的原则是只写接手方“不知道就会做错”的信息。具体包括已经排除的方案和原因避免接手方走回头路特殊的约束条件比如“不能用某个工具”“必须符合某个规范”关键决策的背景比如“为什么选方案 A 而不是方案 B”重要的偏好设置比如“输出格式偏好表格而非段落”不包含的内容通用的领域知识、可以从产出物里直接看到的信息、上一任执行者的个人感受。5.6 交接备注的独家经验交接备注是 Handoff-Skill 里最灵活的部分也是最能体现执行者经验的地方。这里可以写一些“文档里不会写但很重要”的东西。比如“某个数据源偶尔会超时建议重试三次间隔 5 秒”“写作 Agent 对长句处理不好建议把复杂句子拆短”“上次交接时遗漏了用户反馈这次记得检查 ./feedbacks/ 目录”“如果遇到 XX 错误大概率是因为 YY解决办法是 ZZ”这些备注看起来琐碎但能帮接手方省下大量排查时间。我习惯在每次交接时至少写三条备注时间长了就积累出一套“避坑知识库”。6. 常见问题排查与实战避坑记录6.1 交接文档生成失败怎么办这是最常见的问题表现是调用 Handoff-Skill 后没有生成 SKILL.md或者生成了空文件。排查思路如下现象可能原因解决方法无文件生成输出路径不存在手动创建目录文件为空模板渲染失败检查模板语法报权限错误目录不可写修改目录权限报 Skill 未找到Skill 未加载重启 WorkBuddy内容不完整必填板块缺失检查 strict_mode 配置我遇到最多的是输出路径问题。Handoff-Skill 默认不会自动创建目录如果配置的路径不存在就会静默失败。建议在配置里加上auto_create_dir: true省得每次手动建目录。6.2 交接后接手方理解偏差这个问题比生成失败更隐蔽也更难排查。表现是接手方虽然读到了交接文档但执行方向跟预期不一致。根本原因通常是交接文档的表述有歧义。比如“优化报告结构”这句话上一任执行者想的是“调整章节顺序”接手方理解成“重写内容”。避免这种偏差的方法有两个一是用具体的动词和量化的标准。把“优化报告结构”改成“将报告章节从 5 章调整为 3 章合并第二章和第三章”。二是在交接备注里加一句“如有疑问优先参考 XX 产出物”。给接手方一个兜底的参考。6.3 上下文丢失的典型场景上下文丢失是交接中最让人头疼的问题。明明交接文档里写了接手方却像没看到一样。常见的丢失场景包括隐式依赖丢失上一任执行者在某个步骤里用了一个临时变量但没写进交接文档接手方不知道这个变量的存在。环境状态丢失比如某个服务已经启动、某个文件已经创建但交接文档没提接手方重复操作导致冲突。决策背景丢失上一任执行者排除了某个方案但没写原因接手方又重新尝试了一遍。避免这些问题的办法是交接前做一次“环境快照”把当前的环境状态、临时文件、运行中的服务都记录下来。Handoff-Skill 支持include_env_snapshot配置项开启后会自动收集这些信息。6.4 多轮交接的信息衰减如果一个任务经过多次交接信息会逐轮衰减。第一轮交接可能写了 2000 字第二轮变成 1500 字第三轮只剩 800 字到后面接手方基本靠猜。对抗信息衰减的方法是每次交接时不仅传递当前状态还要把上一轮的交接文档作为附件保留。这样即使当前交接文档写得简略接手方也能追溯到完整的历史。具体做法是在 SKILL.md 里加一个“历史交接”板块## 历史交接 - 第一轮交接./handoff-history/round-1.md - 第二轮交接./handoff-history/round-2.md - 当前轮次第三轮这样信息就不会因为多次交接而丢失。6.5 性能优化的几个实用技巧Handoff-Skill 本身的开销不大但在大规模使用时会遇到性能问题。以下是我实测有效的优化技巧第一限制交接文档的长度。max_length参数建议设在 4000 字以内超过这个长度接手方的解析时间会明显增加而且信息密度下降。第二关闭不必要的板块。如果任务比较简单可以只保留目标、状态、待办三个板块其他板块关掉。这样生成的文档更精简。第三用模板缓存。如果交接文档的结构比较固定可以把模板缓存起来避免每次重新渲染。Handoff-Skill 支持template_cache: true配置。第四批量交接。如果有多个任务需要同时交接用批量模式比逐个交接快很多workbuddy handoff batch --tasks task1,task2,task3 --output ./handoffs/6.6 和其他 Skill 的配合使用Handoff-Skill 不是孤立使用的它经常和其他 Skill 配合。比如和Memory-Skill配合Memory-Skill 负责长期记忆Handoff-Skill 负责短期交接。两者结合可以实现跨会话的完整状态恢复。和Validation-Skill配合交接文档生成后用 Validation-Skill 检查完整性确保没有遗漏必填板块。和Logging-Skill配合记录每次交接的时间、内容、接手方方便后续审计和优化。我自己的流水线里Handoff-Skill 和 Memory-Skill 是标配。每次交接前Memory-Skill 会把关键信息写入长期记忆Handoff-Skill 则生成短期交接文档。这样即使交接文档丢了也能从长期记忆里恢复。7. 进阶玩法把交接做成自动化流水线7.1 用脚本串联多个 Agent如果你有多个 Agent 需要协作可以写一个简单的调度脚本把交接流程自动化。以下是一个 Python 示例import subprocess import json def run_agent(agent_name, input_fileNone): cmd [workbuddy, run, --agent, agent_name] if input_file: cmd.extend([--input, input_file]) result subprocess.run(cmd, capture_outputTrue, textTrue) return result.stdout def handoff(task_id, output_path): cmd [workbuddy, handoff, create, --task-id, task_id, --output, output_path] subprocess.run(cmd, checkTrue) # 主流程 agents [researcher, writer, reviewer, formatter] for i, agent in enumerate(agents): input_file f./handoffs/round-{i}.md if i 0 else None run_agent(agent, input_file) handoff(ftask-{i}, f./handoffs/round-{i1}.md)这个脚本会依次运行四个 Agent每个 Agent 完成后自动生成交接文档传给下一个 Agent。整个流程无需人工干预。7.2 交接质量的自动评估交接文档生成后怎么知道质量好不好可以写一个简单的评估脚本检查几个关键指标必填板块是否齐全待办事项是否有优先级标注关键上下文是否包含至少三条信息交接备注是否非空def evaluate_handoff(file_path): with open(file_path, r) as f: content f.read() score 0 checks { 有任务目标: ## 任务目标 in content, 有当前状态: ## 当前状态 in content, 有待办事项: ## 待办事项 in content, 有优先级标注: [P0] in content or [P1] in content, 有交接备注: ## 交接备注 in content, } for name, passed in checks.items(): if passed: score 20 print(f{[OK] if passed else [FAIL]} {name}) return score score evaluate_handoff(./tasks/current-task/SKILL.md) print(f交接质量评分{score}/100)这个脚本可以集成到 CI 流程里每次交接后自动评分低于 60 分就报警。7.3 交接模板的定制化Handoff-Skill 自带的模板是通用的但不同场景可能需要不同的模板。比如内容生产和技术开发交接的重点就不一样。内容生产的交接模板应该强调目标受众、内容调性、关键信息点、格式要求。技术开发的交接模板应该强调代码仓库地址、分支信息、环境配置、已知问题。定制模板的方法是在templates/目录下新建模板文件然后在配置里指定使用哪个模板output: template: ./templates/content-production.md模板文件用 Markdown 写支持变量替换。比如{{task_goal}}会被替换成实际的任务目标。7.4 交接日志的分析与优化每次交接都会生成日志这些日志是优化交接流程的宝贵素材。我习惯定期分析交接日志看看哪些环节容易出问题。分析维度包括交接频率多久交接一次是否过于频繁交接文档长度是否过长或过短接手方反馈接手方是否经常需要追问返工率交接后需要返工的比例根据分析结果调整配置。比如交接频率过高可以调高trigger_threshold交接文档过长可以调低max_length。8. 我踩过的坑和最后几条实用建议说几个我实际踩过的坑都是文档里不会写但很要命的。第一个坑是交接文档的编码问题。有一次交接文档里包含了中文和特殊符号接手方读取时出现乱码导致整个任务理解偏差。后来我在配置里强制指定了 UTF-8 编码再没出过问题。第二个坑是交接时机选得不好。有一次在 Agent 正在调用外部 API 的时候触发了交接结果交接文档里记录的状态是“API 调用中”接手方不知道这个调用是否完成只能重新调一遍浪费了时间和额度。后来我配置了“安全点”机制只在步骤间隙触发交接。第三个坑是交接文档的路径用了相对路径结果在不同工作目录下执行时找不到文件。建议统一用绝对路径或者在配置里指定基准目录。最后分享几条实用建议交接文档写完先自己读一遍假装你是接手方看看能不能看懂关键信息用加粗标注方便接手方快速定位每次交接后记录接手方的反馈持续优化模板定期清理过期的交接文档避免目录臃肿如果任务特别复杂考虑拆成多个子任务分别交接而不是一次性交接一个大任务这套 Handoff-Skill 的用法我用了大半年从最初的磕磕绊绊到现在基本顺畅中间踩的坑都写在上面的内容里了。工具本身不复杂难的是养成“交接前先整理”的习惯。一旦这个习惯建立起来多 Agent 协作的效率会有质的提升。