知识移交 是做什么的?
在同事间传递项目知识:一份简短的非技术入职文档以及 AI 积累的项目记忆,一起打包在项目仓库中,让新同事上手时目标明确,其 AI 也能了解情况。
使用方法
Claude Code 独立技能:
/knowledge-transfer # 自动检测模式(见下文)
/knowledge-transfer export # 离职同事:构建移交包
/knowledge-transfer import # 新同事:验证 + 安装记忆,阅读文档
Claude Code 插件安装:
/knowledge-transfer:knowledge-transfer
/knowledge-transfer:knowledge-transfer export
/knowledge-transfer:knowledge-transfer import
Codex 或其他读取 SKILL.md 的代理:
$knowledge-transfer # 自动检测模式
$knowledge-transfer export # 离职同事
$knowledge-transfer import # 新同事
模式检测(无参数)
- 如果项目根目录下存在
handover/manifest.json→ 宣布进入导入模式。 - 否则 → 宣布进入导出模式。
用一行说明检测到的模式并继续。用户可以随时覆盖。
参考文档
生成任何内容前请先阅读以下文档:
references/package-format.md— 包结构和清单模式references/privacy-filter.md— 哪些可以导出,哪些不可以references/onboarding-template.md— 文档的结构、语气和长度references/agent-memory.md— 如何在 Claude、Codex 或其他代理中定位和安装记忆
导出阶段
由离职同事在项目根目录下运行。
1. 分析项目
- 阅读 README、代理指导文件(如果存在,如
CLAUDE.md、AGENTS.md、GEMINI.md、.cursor/rules/等)、顶层结构、入口点以及主要配置文件。对于大型代码库,使用子代理而不是内联读取所有内容。 - 确定:项目的用途、3–7 个主要组件,以及 2–3 个值得叙述的端到端逻辑流程。
- 检测项目的主导语言(通过 README、文档、最近的提交信息);入职文档使用该语言编写。语言不清楚或混杂时使用英语。
2. 读取记忆
- 使用
references/agent-memory.md定位当前代理的项目记忆源。 - 仅读取定位于此项目或仓库的记忆。不要导出全局用户偏好或不相关的项目历史。
- 没有记忆目录或没有记忆 → 仅生成文档包,在清单中设置
memories: {"exported": 0, "excluded": 0},并告知用户包中不包含记忆。
3. 过滤记忆
严格对每条记忆应用 references/privacy-filter.md。生成可移植版本(重写后的、中立的版本)以及每条记忆的排除清单及原因。
4. 写入包
- 如果
handover/已存在,则停止并要求用户确认是否覆盖。 - 按照
references/onboarding-template.md写入handover/ONBOARDING.md。 - 将每条幸存记忆以可移植格式写入
handover/memories/<slug>.md。 - 按照模式写入
handover/manifest.json(commitSHA 来自git rev-parse HEAD;如果不是 git 仓库则省略commit,如果 git 配置没有名称则省略author)。
5. 最终检查清单 — 在宣布完成前验证
- 对整个
handover/目录树执行grep搜索同事的姓名、邮箱和用户名:命中数为零。 -
handover/memories/中没有user类型的记忆。 - ONBOARDING.md 的字数在 600–1000 之间(
wc -w),并包含模板中的六个章节。 - 导出的记忆中引用的每个文件/路径在项目中均存在。
-
manifest.json可解析且计数与实际文件匹配。
向用户报告:包的内容、排除清单及原因,并建议将 handover/ 提交到仓库。未经询问不要提交。
导入阶段
由新同事在克隆后从项目根目录运行。
1. 读取包
- 读取
handover/manifest.json、handover/ONBOARDING.md以及handover/memories/中的每个文件。 - 缺少
handover/→ 停止:说明离职同事必须先运行/knowledge-transfer export,然后提交结果。 manifest.version未知 → 停止并说明该技能版本过低,无法处理此包。
2. 对照当前代码验证每条记忆
- 如果仓库是 git 且清单中有
commit,则运行git diff --stat <commit>..HEAD查看导出后哪些区域发生了变化。 - 对于每条记忆,检查其引用的文件、路径和标识符是否仍然存在(使用 Glob/Grep,而非假设)。分类:
- 有效 — 一切正常 → 按原样安装;
- 过时,可明显修复 — 例如引用的文件被重命名且新路径明确(通过
git log --follow或唯一搜索命中)→ 更新记忆正文,然后安装; - 过时,无法明显修复 — 丢弃,记录一行原因。
3. 安装
- 通过当前代理的记忆机制(参见
references/agent-memory.md)安装每条被接受的记忆,保持可移植记忆内容不变,仅在目标代理要求时调整存储包装/索引。 - 与现有记忆的 Slug 冲突:不要覆盖。报告冲突并询问用户保留哪个。
- 如果目标记忆存储有索引文件,则为每条安装的记忆追加一行索引(如果不存在则创建)。如果当前代理禁止直接写入记忆,则改为创建或展示经批准的记忆更新工件。
4. 报告
按以下顺序向用户展示:
- ONBOARDING.md 的完整内容(设计上它是简短的)。
- 导入摘要:已安装 / 已更新 / 已丢弃,每条附一行原因。
- 备注:技术问题现在可以依赖导入的记忆。
边界情况
| 情况 | 行为 |
|---|---|
| 导出时无记忆 | 仅包含文档的包;明确说明。 |
| 项目不是 git 仓库 | 清单不含 commit;导入验证仅回退到存在性检查。 |
导出时 handover/ 已存在 | 覆盖前询问。 |
导入时 handover/ 缺失 | 停止,并给出指导让离职同事先操作。 |
| 导入时 Slug 冲突 | 从不覆盖;提出并询问。 |
manifest.version 未知 | 停止;要求用户更新技能。 |