
1. 前同事的聊天记录其实是一份没被激活的资产你有没有过这种时刻接手一个老项目翻遍 Wiki 和代码注释还是搞不清某个接口为什么这么设计或者线上出了个诡异 bug你隐约记得某位已经离职的同事当年处理过类似问题但人已经联系不上了。那些散落在飞书群聊、钉钉记录、邮件和截图里的对话其实藏着大量“这个人怎么想问题、怎么定规范、怎么甩锅”的信息。colleague-skill 这个开源项目做的事情就是把这些冰冷的聊天记录蒸馏成 Claude Code 可以调用的 skill让前同事的“工作人格”以 token 的形式继续在项目里发挥作用。它适合谁如果你正在用 Claude Code 或 OpenClaw 做日常开发手头又有一批前同事留下的语料聊天记录、Wiki 导出、邮件归档想把这些非结构化文本变成可复用、可版本管理的 skill 配置那这篇实战就是写给你的。整个链路我跑了一遍从 GitHub 拉项目、整理对话样本、生成 skill 目录、写 settings.json到本地发起一次真实对话回归测试。下面按步骤拆开讲代码和配置都能直接复制。2. 前置准备TaoToken 接入与 Claude Code 环境确认colleague-skill 本身是一个 Claude Code 的 skill 项目它不直接调用模型而是通过 Claude Code 的 skill 机制加载。所以第一步不是急着 clone 项目而是确认你的 Claude Code 能正常跑起来并且有一个稳定的模型接入通道。我这边用的是 TaoToken 的 API 通道官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。为什么先讲这个因为 colleague-skill 生成的 skill 最终要驱动 Claude Code 去读文件、跑命令、做代码审查模型通道不稳定的话后面验证环节会一直卡在请求超时上你根本分不清是 skill 配置错了还是网络问题。先把通道跑通再折腾 skill排障成本会低很多。你需要准备的东西不多一个能用的 Claude Code 环境命令行版即可、Git、Python3可选飞书/钉钉自动采集才需要、以及一份前同事的语料样本。语料不用多先拿 20 到 50 条对话跑通链路后面再追加。2.1 获取 API Key 并写入环境变量去 TaoToken 控制台创建一个 API Key地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。创建完之后不要直接贴在代码里写进 shell 的环境变量export TAOTOKEN_API_KEYsk-你的key export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY$TAOTOKEN_API_KEY如果你用的是 Claude Code 的 settings.json 配置方式可以在~/.claude/settings.json里写{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key } }注意ANTHROPIC_BASE_URL后面不要带/v1Claude Code 会自己拼路径。我一开始多写了个/v1结果一直 404排查了半小时才发现是路径重复。2.2 验证通道是否通在正式拉 colleague-skill 之前先用一个最小请求确认通道可用curl -s https://taotoken.net/api/v1/messages \ -H x-api-key: $TAOTOKEN_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-20250514, max_tokens: 64, messages: [{role: user, content: 回复 ok 两个字母即可}] }返回里能看到content字段有内容就说明通道没问题。这一步别跳过后面 skill 调用失败时你能快速排除是通道问题还是配置问题。3. 拉取 colleague-skill 并生成第一个 skill 目录Claude Code 查找 skill 的位置有个硬规则它从 git 仓库根目录的.claude/skills/目录里找。所以 clone 的位置很关键放错了 Claude Code 根本发现不了。3.1 安装到当前项目在 git 仓库根目录执行mkdir -p .claude/skills git clone https://github.com/titanwings/colleague-skill .claude/skills/create-colleague如果你想让所有项目都能用装到全局git clone https://github.com/titanwings/colleague-skill ~/.claude/skills/create-colleagueOpenClaw 用户则是git clone https://github.com/titanwings/colleague-skill ~/.openclaw/workspace/skills/create-colleague装完之后目录结构大概是这样.claude/skills/create-colleague/ ├── SKILL.md ├── requirements.txt ├── INSTALL.md └── scripts/ └── ...SKILL.md是这个 skill 的入口描述Claude Code 读它来决定什么时候触发/create-colleague命令。3.2 安装可选依赖如果你只做手动粘贴文字或 Markdown 导入可以跳过这步。要用飞书/钉钉自动采集才需要pip3 install -r .claude/skills/create-colleague/requirements.txt飞书和钉钉的 App 凭证配置在INSTALL.md里有详细说明这里不展开因为大部分人的语料其实是手动导出的 JSON 或 Markdown。3.3 生成第一个 skill在 Claude Code 里输入/create-colleague然后按提示输入同事姓名、公司职级、性格标签。比如我测试时输入的是“字节 2-1 后端工程师INTJ甩锅高手字节范”。所有字段都可以跳过只凭描述也能生成。生成完成后用/{slug}调用比如/zhangsan。管理命令我列个表方便你后面维护命令说明/list-colleagues列出所有同事 Skill/{slug}调用完整 SkillPersona Work/{slug}-work仅工作能力/{slug}-persona仅人物性格/colleague-rollback {slug} {version}回滚到历史版本/delete-colleague {slug}删除3.4 skill 目录骨架长什么样生成之后每个同事 skill 会落在.claude/skills/{slug}/下结构大致是.claude/skills/zhangsan/ ├── SKILL.md # 入口描述触发条件和调用方式 ├── persona.md # Part B5 层性格结构 ├── work.md # Part A技术规范、工作流程、经验知识库 ├── corrections.md # 对话纠正写入的 Correction 层 └── versions/ # 每次更新自动存档 ├── v1/ └── v2/Part A 的 Work Skill 负责系统、技术规范、工作流程、经验知识库Part B 的 Persona 是 5 层性格结构硬规则 → 身份 → 表达风格 → 决策模式 → 人际行为。运行逻辑是接到任务 → Persona 判断态度 → Work Skill 执行 → 用他的语气输出。4. 整理语料并写进 skill 配置生成完骨架只是第一步真正决定效果的是你喂进去的语料质量。colleague-skill 支持的数据来源挺多我按自己的使用体验分个类。4.1 语料来源对照来源消息记录文档/Wiki备注飞书自动采集需 API需 API输入姓名即可全自动钉钉自动采集浏览器方式需 API钉钉 API 不支持历史消息PDF手动上传手动上传—图片/截图手动上传——飞书 JSON 导出手动上传手动上传—邮件 .eml/.mbox手动上传——Markdown手动上传手动上传—直接粘贴文字手动输入——我实测下来最省事的是飞书 JSON 导出加 Markdown 混合。自动采集虽然方便但需要配 App 凭证而且钉钉的历史消息 API 本身就不支持所以别在这上面耗太久。4.2 语料整理的三个原则第一按场景分组。把“Code Review”“需求评审”“线上排障”“甩锅现场”分开不要一股脑全塞进去。colleague-skill 的进化机制是追加文件后自动分析增量再 merge 进对应部分不覆盖已有结论。你分组越清晰merge 出来的 work.md 越有条理。第二保留原始语气。不要手动把“这个 impact 是什么”改成“请问这个改动的影响范围是什么”。Persona 层要的就是原汁原味的表达风格你润色过反而失真。第三标注时间线。同一个人的说话方式会变早期和后期可能完全不同。在语料里带上时间戳skill 生成时能更好地处理版本差异。4.3 手动追加语料的配置片段假设你已经把前同事的飞书导出 JSON 放在了samples/目录下可以在 skill 目录里追加cp samples/feishu_export_2024.json .claude/skills/zhangsan/sources/然后在 Claude Code 里触发增量分析/zhangsan-work 追加 sources/feishu_export_2024.json重点提取接口设计规范和 Code Review 习惯对话纠正也很有用。如果你发现生成的 skill 说话方式不对直接说“他不会这样他应该是先问背景再下结论”这条纠正会写入 Correction 层立即生效不用重新生成整个 skill。5. 本地验证一次真实对话回归测试配置写完得跑一次真实对话看看效果。我用的测试场景是 Code Review因为这是前同事语料里最容易提取出稳定模式的部分。5.1 发起调用在 Claude Code 里输入/zhangsan 帮我看一下这个接口设计然后贴一段有问题的代码比如一个典型的 N1 查询def get_order_list(user_id): orders db.query(SELECT * FROM orders WHERE user_id %s, user_id) result [] for order in orders: items db.query(SELECT * FROM items WHERE order_id %s, order[id]) order[items] items result.append(order) return result5.2 预期输出与实测结果理想情况下skill 应该先问 impact 和背景再指出 N1 问题最后用统一的返回结构收尾。我实测的输出大致是等等这个接口的 impact 是什么背景没说清楚。 看完后N1 查询改掉。返回结构用统一的 {code, message, data}这是规范不用问为什么。这个输出和项目 README 里的示例基本一致说明 Persona 层和 Work 层都生效了。Persona 判断了“先质疑背景”的态度Work 层给出了“N1 改掉”和“统一返回结构”的具体规范。5.3 验证 skill 是否被正确加载如果调用后没有任何反应先检查 skill 是否被 Claude Code 发现ls -la .claude/skills/zhangsan/ cat .claude/skills/zhangsan/SKILL.mdSKILL.md里应该有类似这样的 frontmatter--- name: zhangsan description: 字节 2-1 后端工程师INTJ甩锅高手字节范 ---如果name字段和你的调用命令对不上比如你输入/zhangsan但 name 是zhang-san那就触发不了。改SKILL.md里的 name 即可。6. 本篇常见错排查6.1 clone 位置不对导致 skill 找不到最常见的错误就是在非 git 仓库根目录执行 clone。Claude Code 只从 git 仓库根目录的.claude/skills/查找你在子目录里 clone它扫不到。确认方法git rev-parse --show-toplevel输出的路径就是仓库根目录.claude/skills/必须在这个路径下。6.2 API 通道 404 或 401404 通常是ANTHROPIC_BASE_URL多写了/v1或者少写了协议头。401 则是 key 没生效检查环境变量是否在当前 shell 会话里echo $ANTHROPIC_BASE_URL echo $ANTHROPIC_API_KEY | head -c 8如果环境变量是对的但 Claude Code 还是报错检查~/.claude/settings.json里的 env 字段有没有覆盖 shell 变量。两者同时存在时settings.json 优先级更高。6.3 生成的 skill 说话不像本人这通常是语料太少或太杂。colleague-skill 的进化机制支持追加文件后自动分析增量你可以继续喂语料不用重新生成。另外对话纠正比追加语料更快见效直接说“他不会这样他应该是 xxx”写入 Correction 层后立即生效。6.4 版本回滚怎么用每次更新自动存档回滚命令是/colleague-rollback zhangsan v1如果你改坏了 Persona 层回滚到上一个版本比重头生成快得多。版本目录在.claude/skills/zhangsan/versions/下可以直接看每个版本的文件差异。6.5 飞书/钉钉自动采集失败先确认requirements.txt装完了再检查 App 凭证。钉钉的历史消息 API 本身不支持只能用浏览器方式别在 API 上浪费时间。飞书的话确认应用有消息读取权限否则采集回来是空的。7. 把 skill 用起来从验证到日常调用链路跑通之后日常使用其实很简单。写代码卡住的时候直接/zhangsan 这个报错你怎么看做 Code Review 的时候/zhangsan-work 帮我审一下这个 PR只想听性格吐槽的时候/zhangsan-persona 这个需求又改了。如果你打算长期维护多个同事 skill建议把语料整理成固定目录结构每次追加都走增量分析别一次性全塞进去。版本管理用起来改坏了就回滚。模型通道这边TaoToken 的 API 地址是 https://taotoken.net/api 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite Coding Plan 适合长期编码和 Agent 场景地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。模型对话验证可以去 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 试试不同模型对 skill 输出的影响。最后说个我踩过的坑别把 skill 当成替代编辑器的工具它就是个带人格的提示词工程产物最终写代码、跑测试、提交 PR 还是你自己来。它的价值在于当你面对一个老项目、一个模糊需求、一个似曾相识的报错时能有一个“熟悉这个系统的人”用你熟悉的语气给你指个方向。那些聊天记录里的只言片语蒸馏好了确实能变成有温度的 token 资产。