Skills 已成为 Claude Code 中使用最广泛的扩展点之一。它们灵活、易于制作,且分发简单。
但这种灵活性也让人难以知道什么效果最好。什么样的 Skills 值得制作?编写一个好 Skill 的秘诀是什么?什么时候与他人分享?
在 Anthropic,我们已经在 Claude Code 中广泛使用 Skills,有数百个正在活跃使用中。这些是我们学到的关于使用 Skills 来加速我们开发的经验教训。
如果你对 Skills 还不熟悉,我建议阅读我们的文档或观看我们在 Skilljar 上关于 Agent Skills 的最新课程,本文假设你已经对 Skills 有一定的了解。
关于 Skills,我们听到的一个常见误解是它们“只是 Markdown 文件”,但 Skills 最有趣的部分在于它们不仅仅是文本文件。它们是文件夹,可以包含脚本、资源、数据等,智能体可以发现、探索和操作这些内容。
在 Claude Code 中,Skills 还有多种配置选项,包括注册动态钩子。
我们发现,Claude Code 中一些最有趣的 Skills 创造性地使用了这些配置选项和文件夹结构。
在整理了我们所有的 Skills 之后,我们注意到它们聚集到几个反复出现的类别中。最好的 Skill 能干净地归入其中一类;而较令人困惑的则横跨多个类别。这不是一个明确的列表,但它是一个很好的思考方式,可以帮助你判断你的组织内部是否缺少某些类型的 Skill。
知识型 Skills
解释如何正确使用库、CLI 或 SDK 的 Skills。这些可以针对内部库,也可以是 Claude Code 有时难以处理的常见库。这些 Skills 通常包含一个参考代码片段文件夹和一个 Claude 在编写脚本时应避免的“坑”列表。
示例:
billing-lib— 你的内部计费库:边缘情况、陷阱等。internal-platform-cli— 你的内部 CLI 包装器的每个子命令,以及何时使用它们的示例。frontend-design— 让 Claude 更好地理解你的设计系统。
验证型 Skills
描述如何测试或验证代码是否正常工作的 Skills。这些通常与外部工具(如 playwright、tmux 等)配对以进行验证。
验证型 Skills 对于确保 Claude 的输出正确性极其有用。让一个工程师花一周时间专门把验证型 Skills 做得非常出色是值得的。
可以考虑让 Claude 录制其输出的视频,这样你就可以确切地看到它测试了什么,或者在每一步强制执行程序化的状态断言。这些通常通过在 Skill 中包含各种脚本来实现。
示例:
signup-flow-driver— 在无头浏览器中执行注册 → 邮箱验证 → 引导流程,并在每一步都有用于断言状态的钩子。checkout-verifier— 使用 Stripe 测试卡驱动结账 UI,验证发票是否确实进入了正确状态。tmux-cli-driver— 用于交互式 CLI 测试,当你要验证的内容需要一个 TTY 时使用。
数据获取型 Skills
连接到你的数据和监控栈的 Skills。这些 Skills 可能包含用于获取数据的库(含凭证)、特定的仪表盘 ID 等,以及关于常见工作流或获取数据方式的说明。
示例:
funnel-query— “我需要连接哪些事件才能看到注册 → 激活 → 付费”以及包含规范 user_id 的表。cohort-compare— 比较两个群组的留存率或转化率,标记统计上显著的差异,链接到细分定义。grafana— 数据源 UID、集群名称、问题 → 仪表盘查找表。
自动化工作流型 Skills
将重复性工作流自动化成一个命令的 Skills。这些 Skills 通常指令相当简单,但可能对其他 Skills 或 MCP 有更复杂的依赖。对于这些 Skills,将先前的结果保存在日志文件中可以帮助模型保持一致并反思工作流的先前执行情况。
示例:
standup-post— 聚合你的工单跟踪器、GitHub 活动和之前的 Slack 消息 → 格式化的站会报告,仅包含增量。create-<ticket-system>-ticket— 强制执行模式(有效的枚举值、必填字段)以及创建后的工作流(通知审阅者、在 Slack 中链接)。weekly-recap— 合并的 PR + 关闭的工单 + 部署 → 格式化的周报。
脚手架/样板型 Skills
为代码库中的特定功能生成框架样板的 Skills。你可以将这些 Skills 与可组合的脚本结合使用。当你的脚手架包含不能完全由代码覆盖的自然语言要求时,它们特别有用。
示例:
new-<framework>-workflow— 用你的注解搭建一个新的服务/工作流/处理器。new-migration— 你的迁移文件模板以及常见的陷阱。create-app— 创建预先连接了你的认证、日志记录和部署配置的新内部应用。
代码质量与审查型 Skills
在你的组织内强制执行代码质量并帮助审查代码的 Skills。这些可以包括确定性的脚本或工具以实现最大的鲁棒性。你可能希望作为钩子的一部分或在 GitHub Action 中自动运行这些 Skills。
adversarial-review— 生成一个“新视角”子代理进行批评、实施修复、迭代直到发现的问题降级为吹毛求疵。code-style— 强制执行代码风格,尤其是 Claude 默认不擅长的风格。testing-practices— 关于如何编写测试以及测试什么的说明。
部署与运维型 Skills
帮助你在代码库中获取、推送和部署代码的 Skills。这些 Skills 可能引用其他 Skills 来收集数据。
示例:
babysit-pr— 监控 PR → 重试不稳定的 CI → 解决合并冲突 → 启用自动合并。deploy-<service>— 构建 → 冒烟测试 → 逐步流量发布(附带错误率比较)→ 出现回归时自动回滚。cherry-pick-prod— 隔离工作树 → cherry-pick → 冲突解决 → 带模板的 PR。
调试与 Oncall 型 Skills
获取一个症状(例如 Slack 线程、警报或错误签名),进行多工具调查,并生成结构化报告的 Skills。
示例:
<service>-debugging— 为你的高流量服务映射症状 → 工具 → 查询模式。oncall-runner— 获取警报 → 检查常见问题 → 格式化发现结果。log-correlator— 给定一个请求 ID,从可能接触过它的每个系统中拉取匹配的日志。
维护与清理型 Skills
执行例行维护和操作程序的 Skills——其中一些涉及破坏性操作,从护栏中受益。这些 Skills 使工程师更容易在关键操作中遵循最佳实践。
示例:
<resource>-orphans— 发现孤立的 pod/卷 → 发布到 Slack → 等待期 → 用户确认 → 级联清理。dependency-management— 你组织的依赖项审批工作流。cost-investigation— “为什么我们的存储/出口费用飙升”以及具体的存储桶和查询模式。
一旦你决定了要制作什么样的 Skill,该如何编写它?以下是我们发现的一些最佳实践、技巧和窍门。
我们最近还发布了 Skill Creator,以便更容易在 Claude Code 中创建 Skills。
1. 聚焦于改变 Claude 的默认思维方式
Claude Code 对你的代码库了解很多,Claude 对编码也了解很多,包括许多默认观点。如果你要发布一个主要是关于知识的 Skill,试着把重点放在能推动 Claude 跳出其常规思维方式的信息上。
前端设计 Skill 就是一个很好的例子——它是由 Anthropic 的一位工程师通过与客户迭代改进 Claude 的设计品味、避免像 Inter 字体和紫色渐变这样的经典模式而构建的。
2. Gotchas 部分是最有价值的
任何 Skill 中信号最强的部分就是 Gotchas(陷阱)部分。这些部分应该从 Claude 在使用你的 Skill 时遇到的常见失败点中积累起来。理想情况下,你会随着时间的推移更新你的 Skill 以捕获这些陷阱。
3. 利用文件夹结构进行渐进式披露
就像我们之前说的,Skill 是一个文件夹,而不仅仅是一个 Markdown 文件。你应该把整个文件系统视为一种上下文工程和渐进式披露。告诉 Claude 你的 Skill 中有哪些文件,它会在适当的时候读取它们。
最简单的渐进式披露形式是指向其他 Markdown 文件供 Claude 使用。例如,你可以将详细的函数签名和用法示例拆分到 references/api.md 中。
另一个例子:如果你的最终输出是一个 Markdown 文件,你可以在 assets/ 中包含一个模板文件,供 Claude 复制和使用。
你可以包含 references、scripts、examples 等文件夹,这些都能帮助 Claude 更有效地工作。
4. 指令要具体但也要灵活
Claude 通常会努力遵循你的指令,而且由于 Skills 的可重用性很高,你需要小心不要让你的指令过于具体。给 Claude 它需要的信息,但要给它适应情况的灵活性。例如:
5. 使用配置文件处理设置信息
有些 Skills 可能需要用户进行设置才能提供上下文。例如,如果你正在制作一个发布站会报告到 Slack 的 Skill,你可能希望 Claude 询问要发布到哪个 Slack 频道。
一个很好的模式是将这些设置信息存储在 Skill 目录中的 config.json 文件中,就像上面的例子一样。如果配置未设置,智能体可以询问用户信息。
如果你希望智能体呈现结构化的、多项选择的问题,你可以指示 Claude 使用 AskUserQuestion 工具。
6. description 字段是触发条件,不是摘要
当 Claude Code 启动一个会话时,它会构建一个包含每个可用 Skill 及其描述的列表。Claude 扫描这个列表来决定“是否有适合这个请求的 Skill?”这意味着描述字段不是摘要——它是关于何时触发这个 PR 的描述。
7. 在 Skill 内存储数据以实现“记忆”
有些 Skills 可以通过在内部存储数据来包含一种记忆形式。你可以将数据存储在任何地方,简单如仅追加的文本日志文件或 JSON 文件,复杂如 SQLite 数据库。
例如,一个 standup-post Skill 可能会保留一个 standups.log 文件,记录它写过的每一篇报告,这意味着下次你运行它时,Claude 会读取自己的历史记录,并能够判断出自昨天以来发生了什么变化。
存储在 Skill 目录中的数据可能在升级 Skill 时被删除,因此你应该将其存储在一个稳定的文件夹中。目前我们提供 ${CLAUDE_PLUGIN_DATA} 作为每个插件的稳定文件夹来存储数据。
8. 赋予 Claude 代码(脚本/库)是最强大的方式
你可以给 Claude 的最强大的工具之一就是代码。给 Claude 脚本和库让 Claude 可以把精力花在组合上,决定下一步做什么,而不是重建样板代码。
例如,在你的数据科学 Skill 中,你可能有一个函数库来从你的事件源获取数据。为了让 Claude 进行复杂的分析,你可以给它一组像这样的辅助函数:
然后 Claude 可以即时生成脚本来组合这些功能,以便对像“周二发生了什么?”这样的提示进行更高级的分析。
9. 使用 Skill 专属的钩子
Skills 可以包含仅在调用该 Skill 时才激活的钩子,并持续会话的持续时间。当你希望使用更具主观性的钩子,又不想让它们一直运行时,可以使用此功能。但有时它们又极其有用。
例如:
/careful— 通过 Bash 的PreToolUse匹配器阻止rm -rf、DROP TABLE、force-push、kubectl delete。你只在你知道自己正在接触生产环境时才需要它——一直开着会让人抓狂。/freeze— 阻止对特定目录之外的任何 Edit/Write 操作。在调试时很有用:“我想添加日志,但我总是不小心‘修复’不相关的东西。”
10. 分享 Skills:提交到仓库 vs. 插件市场
Skills 的最大好处之一是你可以与团队的其他成员分享。
有两种方式可以与其他人分享 Skills:
- 将你的 Skills 提交到你的代码仓库(放在
./.claude/skills下)。 - 制作一个插件,并拥有一个 Claude Code 插件市场,用户可以在其中上传和安装插件(更多信息请阅读文档)。
对于在相对较少的仓库中工作的小团队来说,将 Skills 提交到仓库中效果很好。但是,每个被提交的 Skill 也会给模型的上下文增加一点负担。随着规模扩大,一个内部插件市场允许你分发 Skills,并让你的团队决定安装哪些。
如何决定哪些 Skills 进入市场?人们如何提交它们?
我们没有一个中心化的团队来做决定;相反,我们尝试有机地找到最有用的 Skills。如果你有一个想让人们尝试的 Skill,你可以把它上传到 GitHub 的一个沙盒文件夹中,并在 Slack 或其他论坛中将其指给别人。
一旦一个 Skill 获得了关注(由 Skill 所有者决定),他们可以提交一个 PR 将其移入市场。
一个警告:创建糟糕或冗余的 Skill 可能相当容易,因此在发布之前确保你有某种策展方法是很重要的。
11. Skills 之间的依赖
你可能希望有相互依赖的 Skills。例如,你可能有一个上传文件的上传 Skill,以及一个生成 CSV 并上传的 CSV 生成 Skill。这种依赖管理尚未原生内置于市场或 Skills 中,但你可以按名称引用其他 Skills,如果它们已安装,模型将调用它们。
12. 衡量 Skill 的使用情况
为了了解一个 Skill 的表现如何,我们使用了一个 PreToolUse 钩子,它允许我们在公司内部记录 Skill 的使用情况(示例代码在这里)。这意味着我们可以找出哪些 Skills 受欢迎,或者哪些 Skills 与我们的预期相比触发不足。
Skills 是为智能体提供的极其强大、灵活的工具,但现在还为时过早,我们都在摸索如何最好地使用它们。
与其说这是一份权威指南,不如说这是一个我们见过有效的有用技巧的锦囊。理解 Skills 的最佳方式是开始使用、实验,并看看什么对你有效。我们的大多数 Skills 开始时只有几行代码和一个陷阱,随着人们不断添加 Claude 遇到的新边缘情况,它们变得越来越好。
我希望这对你有帮助,如果你有任何问题,请告诉我。