从构建 Claude Code 中得到的经验:我们如何使用 Skills | Anthropic


作者:Anthropic | 日期:2026年3月18日 

Skills 已经成为 Claude Code 中最常用的扩展点之一。它们灵活、易于创建,也很容易分发。

但这种灵活性也让人很难判断什么做法效果最好。什么类型的 skill 值得做?写好一个 skill 的诀窍是什么?什么时候该把它分享给别人?

我们在 Anthropic 内部已经广泛地将 skills 用在 Claude Code 上,活跃使用中的有数百个。这些就是我们在利用 skills 加速开发过程中总结出来的经验。

什么是 Skills?

如果你刚接触 skills,我建议先去读我们的文档,或者观看我们在 Skilljar 上新出的 Agent Skills 课程;这篇文章默认你已经对 skills 有一定了解。

我们经常听到一个误解:skills “只是 Markdown 文件”。但 skill 最有意思的地方在于,它们不只是文本文件,而是一个文件夹,里面可以包含脚本、资源、数据等,agent 可以发现、探索并操作这些内容。

在 Claude Code 中,skills 还具有多种配置选项,包括注册动态 hooks。

我们发现,Claude Code 里一些最有意思的 skills,都会有创造性地利用这些配置选项和文件夹结构。

Skills 的类型

在梳理完我们所有的 skills 之后,我们发现它们通常会落入几个反复出现的类别。最好的 skills 往往能清晰地归入其中一类;那些让人困惑的,通常横跨了多个类别。这不是一个最终定论式的清单,但它是一个不错的思考方式,能帮助你判断自己的组织内部是不是缺了某一类 skill。

1. 库与 API 参考

这类 skill 用来说明如何正确使用某个库、CLI 或 SDK。它们既可以面向内部库,也可以面向 Claude Code 有时难以处理好的常见库。这类 skill 通常会包含一个参考代码片段文件夹,以及一份 gotchas 清单,帮助 Claude 在写脚本时避开常见坑。

示例:

  • • billing-lib —— 你的内部计费库:边界情况、易踩坑点等
  • • internal-platform-cli —— 你的内部 CLI 封装器的每个子命令,以及何时使用它们的示例
  • • frontend-design —— 让 Claude 更好地遵循你的设计系统

2. 产品验证

这类 skill 描述如何测试或验证你的代码是否正常工作。它们通常会与外部工具搭配使用,例如 playwright、tmux 等,用来执行验证。

验证类 skill 对于确保 Claude 的输出正确非常有用。值得让一位工程师花上一周时间,专门把你的验证类 skill 打磨到优秀水平。

可以考虑一些做法,例如让 Claude 录制自己输出结果的视频,这样你就能准确看到它测试了什么;或者在每一步对状态强制加入程序化断言。这类做法通常通过在 skill 中加入多种脚本来实现。

示例:

  • • signup-flow-driver —— 在无头浏览器中跑通 signup → email verify → onboarding,并在每一步通过 hooks 断言状态
  • • checkout-verifier —— 驱动结账 UI,使用 Stripe 测试卡,并验证发票最终确实进入了正确状态
  • • tmux-cli-driver —— 用于交互式 CLI 测试,适合你要验证的对象需要 TTY 的场景

3. 数据获取与分析

这类 skill 会连接到你的数据与监控栈。它们可能包含带凭据的数据拉取库、特定 dashboard 的 id,以及常见工作流或数据获取方式的说明。

示例:

  • • funnel-query —— “为了查看 signup → activation → paid,需要关联哪些事件”,以及实际包含规范 user_id 的那张表
  • • cohort-compare —— 比较两个 cohort 的留存或转化,标记统计显著的差异,并链接到 segment 定义
  • • grafana —— 数据源 UID、集群名称、问题 → dashboard 的查询映射表

4. 业务流程与团队自动化

这类 skill 会把重复性工作流自动化成一条命令。它们通常是相对简单的说明,但可能会对其他 skills 或 MCPs 有更复杂的依赖。对这类 skill 来说,把之前的结果保存在日志文件里,有助于模型保持一致性,并反思以往执行过的工作流。

示例:

  • • standup-post —— 汇总你的工单跟踪器、GitHub 活动和之前的 Slack 内容,生成格式化 standup,只展示增量
  • • create- -ticket  —— 强制执行 schema(合法枚举值、必填字段),以及创建后的工作流(提醒 reviewer、把链接发到 Slack)
  • • weekly-recap —— 已合并 PR + 已关闭工单 + 发布记录 → 格式化周报帖

5. 代码脚手架与模板

这类 skill 会为代码库中特定功能生成框架样板。你可以把这些 skill 与可组合的脚本结合使用。它们尤其适合那种包含自然语言需求、无法只靠代码完全覆盖的脚手架场景。

示例:

  • • new- -workflow  —— 为新 service/workflow/handler 生成脚手架,并带上你的注解
  • • new-migration —— 你的 migration 文件模板,以及常见坑点
  • • create-app —— 创建新的内部应用,并预先接好认证、日志和部署配置

6. 代码质量与评审

这类 skill 用来在组织内部落实代码质量要求并帮助做代码评审。它们可以包含确定性的脚本或工具,以获得最大的稳健性。你可能会希望把这些 skill 自动运行在 hooks 中,或者放进 GitHub Action 里。

示例:

  • • adversarial-review —— 生成一个“新鲜视角”的 subagent 做挑刺评审,实施修复,并持续迭代直到问题只剩下 nitpicks
  • • code-style —— 强制执行代码风格,特别是 Claude 默认做得不够好的那些风格要求
  • • testing-practices —— 关于如何写测试、测试什么的说明

7. CI/CD 与部署

这类 skill 帮助你在代码库内获取、推送和部署代码。这些 skill 可能会引用其他 skill 来收集数据。

示例:

  • • babysit-pr —— 监控一个 PR → 重试 flaky CI → 解决合并冲突 → 启用自动合并
  • • deploy-  —— build → smoke test → 渐进式流量发布,并比较错误率 → 出现回归则自动回滚
  • • cherry-pick-prod —— 独立 worktree → cherry-pick → 冲突解决 → 用模板创建 PR

8. Runbooks

这类 skill 以某个症状为输入(例如 Slack 线程、告警或错误签名),沿着多工具调查流程执行,并产出结构化报告。

示例:

  • •  -debugging  —— 把症状映射到工具和查询模式,覆盖你最高流量的服务
  • • oncall-runner —— 拉取告警 → 检查常见嫌疑项 → 格式化输出结论
  • • log-correlator —— 给定一个请求 ID,拉取所有可能接触过它的系统中的匹配日志

9. 基础设施运维

这类 skill 执行日常维护和运维流程,其中有些会涉及破坏性操作,因此很适合通过 guardrails 加以保护。它们让工程师在关键操作中更容易遵循最佳实践。

示例:

  • •  -orphans  —— 查找孤儿 pods/volumes → 发到 Slack → 观察期 → 用户确认 → 级联清理
  • • dependency-management —— 你们组织内部的依赖审批流程
  • • cost-investigation —— “为什么我们的存储/出口带宽账单突然飙升了”,附带具体 bucket 和查询模式

编写 Skills 的建议

一旦你决定要做某个 skill,具体该怎么写?下面是我们总结出的一些最佳实践、技巧和窍门。

我们最近也发布了 Skill Creator,让在 Claude Code 中创建 skills 变得更容易。

不要陈述显而易见的事

Claude Code 对你的代码库了解很多,而 Claude 对编码本身也知道很多,包括许多默认偏好。如果你发布的 skill 主要是知识型的,就应尽量聚焦在那些能把 Claude 拉出其默认思考路径的信息上。

frontend-design skill 就是个很好的例子。它由 Anthropic 的一位工程师打造,通过与客户反复迭代,提升 Claude 的设计品味,避免了像 Inter 字体和紫色渐变这类经典套路。

建立一个 Gotchas 章节

任何 skill 中信号量最高的内容,都是 Gotchas 章节。这些章节应当从 Claude 在使用你的 skill 时经常遇到的失败点中积累出来。理想情况下,你会随着时间不断更新 skill,把这些 gotchas 持续补进去。

使用文件系统与渐进式披露

正如前面说的,skill 是一个文件夹,而不只是一个 Markdown 文件。你应该把整个文件系统都当作一种上下文工程和渐进式披露的手段。告诉 Claude 你的 skill 中有哪些文件,它会在合适的时候去读取它们。

最简单的渐进式披露方式,就是把 Claude 指向其他 Markdown 文件。例如,你可以把详细的函数签名和用法示例拆分到 references/api.md 中。

另一个例子:如果你的最终输出是一个 Markdown 文件,你可以在 assets/ 中附带一个模板文件,供 Claude 复制并使用。

你可以拥有 referencesscriptsexamples 等文件夹,它们都会帮助 Claude 更高效地工作。

不要把 Claude 限制得过死

Claude 通常会尽量遵守你的指令,而因为 Skills 具有很高的可复用性,你需要谨慎避免把指令写得过于具体。给 Claude 它所需的信息,但也给它根据实际情况做适配的空间。

思考过程设置

有些 skill 可能需要先根据用户提供的上下文来完成设置。例如,如果你做的是一个把 standup 发到 Slack 的 skill,你可能会希望 Claude 先问清楚该发到哪个 Slack 频道。

一种不错的模式,是像上面的例子那样,把这些设置信息存放在 skill 目录中的 config.json 文件里。如果配置还没设置好,agent 就可以向用户索取信息。

如果你希望 agent 以结构化、多选题的形式提问,你可以指示 Claude 使用 AskUserQuestion 工具。

Description 字段是写给模型看的

当 Claude Code 启动一个会话时,它会构建一份所有可用 skill 及其 description 的清单。Claude 会扫描这份清单来决定“这次请求有没有对应的 skill 可用?”这意味着 description 字段不是摘要,而是对“何时该触发这个 skill”的说明。

记忆与数据存储

有些 skill 可以通过在内部存储数据来拥有一种“记忆”。你可以把数据存成非常简单的追加式文本日志、JSON 文件,或者更复杂的 SQLite 数据库。

例如,一个 standup-post skill 可以保留一份 standups.log,记录它写过的每一篇 standup。这样下次你运行它时,Claude 会读取自己的历史记录,并判断与昨天相比发生了哪些变化。

存储在 skill 目录中的数据,在升级 skill 时可能被删除,因此你应该把这些数据放到稳定目录中。到目前为止,我们提供 ${CLAUDE_PLUGIN_DATA} 作为每个 plugin 的稳定数据目录。

存放脚本,并让 Claude 生成代码

你能提供给 Claude 的最强大工具之一,就是代码。给 Claude 提供脚本和库,可以让 Claude 把回合消耗在组合与决策上,而不是反复重建样板代码。

例如,在你的数据科学 skill 中,你可能会有一套从事件源获取数据的函数库。为了让 Claude 能做复杂分析,你可以提供一组辅助函数,例如:

然后 Claude 就能按需生成脚本,把这些功能组合起来,以处理“星期二发生了什么?”这样的更高级分析请求。

按需 Hooks

Skills 可以包含一些只有在 skill 被调用时才会激活、并在整个会话期间持续生效的 hooks。对于那些你不希望一直开启、但在特定场景下特别有用的更强约束型 hooks,这种做法很适合。

例如:

  • • /careful —— 通过 Bash 的 PreToolUse matcher 阻止 rm -rfDROP TABLE、force-push、kubectl delete。只有在你明确知道自己正在碰生产环境时才需要它;如果一直开着,会把人逼疯
  • • /freeze —— 阻止任何不在特定目录内的 Edit/Write。在调试时很有用:“我只是想加日志,但总是不小心把无关的东西也‘修了’”

分发 Skills

Skills 最大的好处之一,就是你可以把它们分享给团队里的其他人。

你大致有两种方式与他人分享 skills:

  • • 把 skills 提交进你的代码仓库(放在 ./.claude/skills 下)
  • • 制作一个 plugin,并建立 Claude Code Plugin marketplace,让用户可以上传和安装 plugins(更多内容可参见文档)

对于跨仓库数量不多的小团队来说,把 skills 直接放进 repo 往往效果很好。但每个被提交进去的 skill,都会给模型上下文再增加一点负担。随着规模增长,一个内部 plugin marketplace 能让你分发 skills,同时由团队成员自行决定安装哪些。

管理 Marketplace

你该如何决定哪些 skill 应该进入 marketplace?大家又该如何提交它们?

我们没有一个集中式团队来做这个决定;相反,我们会尽量让最有用的 skills 自然浮现出来。如果你有一个希望别人试用的 skill,你可以先把它上传到 GitHub 的一个 sandbox 文件夹里,然后在 Slack 或其他论坛里指给大家看。

当一个 skill 已经获得了一定 traction(由 skill 的拥有者自行判断),他们就可以提一个 PR,把它移进 marketplace。

要提醒一点:创建糟糕或重复的 skills 其实很容易,所以在发布前建立某种策展或筛选机制非常重要。

组合 Skills

你可能会希望一些 skills 之间存在依赖关系。比如,你可能有一个文件上传 skill 负责上传文件,还有一个 CSV 生成 skill 负责生成 CSV 并上传它。这类依赖管理目前并不是 marketplace 或 skills 原生支持的能力,但你完全可以在一个 skill 中直接按名字引用另一个 skill,只要它已经安装,模型就会调用它。

衡量 Skills

为了了解某个 skill 的表现,我们使用一个 PreToolUse hook 来记录公司内部的 skill 使用情况(示例代码见文中提到的位置)。这样我们就能发现哪些 skills 很受欢迎,或哪些 skills 的触发率低于预期。

结论

对于 agents 来说,skills 是非常强大且灵活的工具,但现在仍然处于早期阶段,我们都还在摸索应该如何最好地使用它们。

与其把这篇文章看成一份权威指南,不如把它看成一包我们观察到确实有效的小技巧。理解 skills 的最好方式,就是亲自开始尝试、不断实验,并看看什么方式对你最有效。我们的很多 skill,最初都只是几行文字和一个 gotcha,但因为大家不断在 Claude 撞到新边界情况时补充它们,它们才逐渐变得更好。

希望这篇文章对你有帮助。如果你有任何问题,欢迎告诉我。

https://x.com/trq212/status/2033949937936085378

如果觉得内容不错,欢迎你点一下「在看」,或是将文章分享给其他有需要的人^^

相关好文推荐:

一种快速判别产品AI含量的黄金指标,帮你远离披着AI外皮的传统软件公司

飞书会取代微信吗?

AI 时代的软件与软件公司应该长什么样?

引入嵌套学习(Nested Learning):一种用于持续学习的全新机器学习范式

如何构建多智能体研究系统

0条留言

留言