用途
handoff 用于恢复当前工作目录中最近一次的智能体会话。当用户表达「where were we」「resume」等想要继续先前工作的意图时使用。它并不创建新的会话,而是把上一次会话的关键信息重新呈现出来,并优先抛出尚未回答的问题。
主要能力
- 按工作目录定位最近会话:通过
memory_sessions查询会话列表。 - 召回关键概念:对会话的核心概念使用
memory_recall获取相关信息。 - 优先呈现未回答的问题:如果会话以一个未回答的面向用户的问题结束,会把该问题放在最前面。
- 汇总输出:包括标题/摘要、关键文件、关键决策或错误。
- 给出下一步:以一句具体的「next step?」结尾。
使用方式
可选参数 $ARGUMENTS 用于覆盖工作目录。
快速开始:
memory_sessions { "project": "<current-project-id>", "limit": 20 }
挑选 cwd 与当前项目匹配的最近会话,然后:
memory_recall { "query": "<session top concepts>", "project": "<current-project-id>", "limit": 10 }
当指定了 agent 时,两次调用传入相同的 agentId。
工作流:
- 解析项目路径:若给出
$ARGUMENTS,用path.resolve(process.cwd(), $ARGUMENTS)归一化为绝对路径;否则使用 cwd。 - 调用
memory_sessions:已知精确项目标识符时直接传入,请求时带上 agentId;否则沿 nextCursor 翻页,直到找到匹配目录或分页结束。翻页时保留过滤条件。 - 选择 cwd 归一化后按目录边界匹配的最近会话:相等,或
cwd.startsWith(projectPath + sep),或projectPath.startsWith(cwd + sep)。优先选择 completed 而非 abandoned。 - 无匹配:直接报告该项目没有匹配的会话并停止,不要替换成其他项目的会话。
- 若会话以一个未回答的面向用户的问题结束,优先呈现。可在 summary 或最近对话观察中查找以 ? 结尾的叙述。
- 汇总:标题/摘要、关键文件、关键决策或错误;对最高概念使用
memory_recall,limit 10,并保留所选项目与 agent 范围。纳入前检查每条结果的 session 或 project 来源,单凭查询本身并不能保证范围。 - 以一句具体的「next step?」指引结尾。
预期输出示例:
Resuming 7f3a9c2 "Auth refresh rework".
Open question: should logout revoke all device tokens or just the current one?
Next step: decide revoke scope, then update auth/logout.ts.
适用场景
- 用户想回到之前未完成的开发或分析任务。
- 需要快速了解上次会话的进度、未决问题与后续动作。
- 在多个项目目录之间切换后,需要准确恢复对应目录的会话上下文。
限制与注意事项
- 按目录边界匹配,而非原始前缀匹配,以避免把兄弟仓库误认为当前项目。
- 对空会话不得编造观察结果。
- 反模式:
session.cwd.startsWith(projectPath)在项目为/repo-a时会错误匹配/repo-a-staging,从而恢复错误仓库的会话。正确做法是session.cwd === projectPath || session.cwd.startsWith(projectPath + sep)。 - 检查清单:cwd 覆盖已解析为绝对且归一化的路径;匹配使用目录边界检查而非原始前缀;未回答的问题(如有)出现在响应最前;空会话需如实报告并提供重新开始的选项。
- 参见:recap、session-history、recall,使用相同会话数据但视图更广。
- 若
memory_sessions或memory_recall不可用,参见 TROUBLESHOOTING.md。