
Anthropic 工程师Claude Code 的构建者发布了一篇重磅教程《Claude Code 的经验教训我们如何使用 Skill》。这篇教程非常值得每一个养虾人读一读。下面内容基于原文翻译整理已将最重要的 Skill 制作技巧部分放到了前面Skill 是由 Anthropic 创建的智能体开放标准已成为 Claude Code 等智能体框架中最常用的扩展点之一。它们灵活、易于制作并且方便分发。但这种灵活性也让我们很难判断哪种方式效果最好。制作什么类型的 Skill 才有价值编写优秀 Skill 的秘诀是什么什么时候该与他人分享它们在 Anthropic 的 Claude Code 中已经广泛使用了 Skill目前有数百个 Skill 正在被活跃使用。以下是从使用 Skill 来加速开发的过程中学到的经验教训。什么是 Skill如果你对 Skill 还很陌生建议你阅读官方文档或者观看 Skilljar 上关于 Agent Skill 的最新课程。本文将假设你已经对 Skill 有了一定的了解。官方文档https://code.claude.com/docs/en/skillsAgent Skill 最新课程https://anthropic.skilljar.com/introduction-to-agent-skills关于 Skill 的一个常见误解是它们“只是 markdown 文件”但 Skill 最有趣的部分在于它们不仅仅是文本文件。它们是文件夹可以包含智能体能够发现、探索和操作的脚本、资产、数据等。在 Claude Code 中Skill 还具有各种各样的配置选项包括注册动态 hook。Claude Code 中一些最有趣的 Skill 都在创造性地使用这些配置选项和文件夹结构。制作 Skill 的技巧一旦你决定了要制作的 Skill你该如何编写它呢以下是一些最佳实践、提示和技巧。最近还发布的 Skill Creator让你在 Claude Code 中创建 Skill 变得更加容易。不要陈述显而易见的事情 (Don’t State the Obvious)Claude Code 非常了解你的代码库而且 Claude 在编码方面知识渊博包括许多默认的见解。如果你要发布一个主要侧重于知识体系的 Skill请尽量专注于能推动 Claude 跳出其常规思维模式的信息。前端设计 Skill 就是一个很好的例子——它是 Anthropic 的一位工程师通过与客户反复迭代为提高 Claude 的设计品味而构建的旨在避开诸如 Inter 字体和紫色渐变等经典的常见模式。建立一个 Gotchas (易错点/陷阱) 部分任何 Skill 中信号最强最具价值的内容就是 Gotchas 部分。这些部分应该建立在 Claude 使用你的 Skill 时经常遇到的失败点之上。理想情况下你会随着时间的推移不断更新你的 Skill 来捕获这些陷阱。使用文件系统与渐进式披露 (Progressive Disclosure)正如前面所说Skill 是一个文件夹而不仅仅是一个 markdown 文件。你应该将整个文件系统视为一种上下文工程和渐进式披露的形式。告诉 Claude 你的 Skill 中有哪些文件它会在合适的时候读取它们。渐进式披露的最简单形式是提供指向其他 markdown 文件的指引供 Claude 使用。例如你可以将详细的函数签名和使用示例拆分到references/api.md中。另一个例子如果你的最终输出是一个 markdown 文件你可以在assets/目录中包含一个模板文件供其复制和使用。你可以建立包含参考资料、脚本、示例等的多个文件夹这有助于 Claude 更有效地工作。避免对 Claude 施加过度限制 (Avoid Railroading Claude)Claude 通常会尽量遵循你的指令且由于 Skill 的可重用性很强你需要注意不要在指令中写得过于死板。为 Claude 提供它所需的信息但同时要赋予它根据情况进行调整的灵活性。例如考虑设置过程 (Think through the Setup)某些 Skill 可能需要根据用户的上下文进行设置。例如如果你要制作一个将每日站会报告发布到 Slack 的 Skill你可能希望 Claude 询问应将其发布到哪个 Slack 频道。实现这一目的的良好模式是在 Skill 目录中的config.json文件里存储此类设置信息如上例所示。如果尚未设置配置智能体就可以向用户询问信息。如果你希望智能体提出结构化的多项选择题可以指示 Claude 使用AskUserQuestion工具。Description 字段是给模型看的当 Claude Code 启动会话时它会构建每个可用 Skill 及其描述的列表。这个列表是 Claude 扫描并决定“是否有适用此请求的 Skill”的依据。这意味着 description描述字段并不是一个摘要——它是对何时触发此 PR 的描述。记忆与存储数据有些 Skill 可以通过在内部存储数据来包含一种记忆形式。你可以将数据存储在像纯追加文本日志文件或 JSON 文件这样简单的东西中或者存储在像 SQLite 数据库这样复杂的东西中。例如standup-postSkill 可能会保留一个standups.log来记录它写过的每条帖子这意味着下次你运行它时Claude 会读取它自己的历史记录并能分辨出与昨天相比发生了什么变化。当你升级 Skill 时存储在 Skill 目录中的数据可能会被删除因此你应该将其存储在一个稳定的文件夹中。截至目前Claude 提供${CLAUDE_PLUGIN_DATA}作为一个每个插件plugin专属的稳定文件夹用于在其中存储数据。存储脚本与生成代码你可以给 Claude 提供的最强大的工具之一就是代码。向 Claude 提供脚本和库能让 Claude 将其交互轮次花在组合编排上——即决定下一步做什么而不是去重新构建样板代码。例如在你的数据科学 Skill 中你可能会有一个函数库用来从你的事件源获取数据。为了让 Claude 能够进行复杂的分析你可以给它提供一组辅助函数如下所示Claude 随后可以在运行中生成脚本来组合这些功能从而根据诸如“周二发生了什么”之类的提示prompts进行更高级的分析。按需启用的 Hook (On Demand Hooks)Skill 可以包含一些只有在调用该 Skill 时才被激活并且持续到会话结束的 hook。将其用于那些更具个人偏好、你不希望它一直运行但在特定时候却非常有用处的 hook。例如/careful— 通过 Bash 上的 PreToolUse 匹配器拦截rm -rf、DROP TABLE、force-push、kubectl delete。只有当你明确知道自己在操作生产环境prod时才会想要启用它——如果它一直开启会让你抓狂的。/freeze— 拦截任何不在特定目录下的编辑/写入操作。在以下情况进行调试时很有用“我想添加日志但我总是不小心‘fixing’了不相关的……Skill 的类型在整理了所有的 Skill 之后发现它们可以聚集为几个反复出现的类别。最好的 Skill 能够清晰地归入其中一个类别而那些比较让人困惑的 Skill 则往往横跨多个类别。这不是一个绝对的清单但它是思考你的组织内部是否遗漏了某些类别的好方法。1. 库与 API 参考 (Library API Reference)解释如何正确使用库、CLI 或 SDK 的 Skill。这些既可以针对内部库也可以针对 Claude Code 有时会遇到困难的常用公共库。这些 Skill 通常包含一个参考代码片段文件夹以及一份供 Claude 在编写脚本时避免踩坑的注意事项gotchas列表。示例billing-lib— 你的内部计费库边缘情况、极易踩坑的点footguns等。internal-platform-cli— 你的内部 CLI 包装工具的每个子命令以及何时使用它们的示例。frontend-design— 让 Claude 更好地掌握你的设计系统。2. 产品验证 (Product Verification)描述如何测试或验证你的代码是否正常运行的 Skill。这些 Skill 通常与 Playwright、tmux 等外部工具结合使用以进行验证。验证 Skill 对于确保 Claude 输出的正确性非常有用。让工程师花一周时间把你们的验证 Skill 做到极致是非常值得的。可以考虑使用一些技巧比如让 Claude 录制其输出的视频这样你能确切看到它测试了什么或者在每一步对状态强制进行编程式的断言。这通常通过在 Skill 中包含各种脚本来实现。示例signup-flow-driver— 在无头浏览器中运行“注册 → 邮箱验证 → 入职引导”流程并带有在每一步断言状态的 hook。checkout-verifier— 使用 Stripe 测试卡驱动结账 UI验证发票确实落入正确状态。tmux-cli-driver— 用于交互式 CLI 测试适用场景为你需要验证的东西依赖于 TTY 时。3. 数据获取与分析 (Data Fetching Analysis)连接到你的数据和监控技术栈的 Skill。这些 Skill 可能包括带有凭据来获取数据的库、特定的仪表板 ID 等以及关于常见工作流或数据获取方式的说明。示例funnel-query— “我应该关联哪些事件来查看‘注册 → 激活 → 付费’”加上实际包含规范 user_id 的表。cohort-compare— 比较两个群组的留存率或转化率标记出具有统计学意义的差异deltas并链接到分段定义。grafana— 数据源 UID、集群名称、“问题 → 仪表板”的查找对应表。4. 业务流程与团队自动化 (Business Process Team Automation)将重复性工作流自动化为一条命令的 Skill。这些 Skill 通常是相当简单的指令但可能对其他 Skill 或 MCPs 有更复杂的依赖关系。对于这些 Skill将之前的结果保存在日志文件中可以帮助模型保持一致性并反思该工作流之前的执行情况。示例standup-post— 汇总你的工单追踪器、GitHub 活动以及之前的 “Slack 消息 → 生成格式化的每日站会报告”仅包含增量。create-ticket-system-ticket— 强制执行数据模式有效的枚举值、必填字段加上创建后的工作流在 Slack 中提醒审查者并附上链接。weekly-recap— 已合并的 PR 已关闭的工单 部署记录 → 生成格式化的每周总结帖子。5. 代码脚手架与模板 (Code Scaffolding Templates)为代码库中的特定功能生成框架样板代码的 Skill。你可能会将这些 Skill 与可组合的脚本结合起来使用。当你的脚手架具有纯代码无法完全覆盖的自然语言需求时它们尤其有用。示例new-framework-workflow— 结合你的注释生成一个新的服务/工作流/处理器的脚手架。new-migration— 你的迁移文件模板及常见的易错点gotchas。create-app— 新建一个内部应用并预先连接好你的身份验证、日志记录和部署配置。6. 代码质量与审查 (Code Quality Review)在你的组织内部执行代码质量标准并帮助审查代码的 Skill。这些可以包括确定性的脚本或工具以实现最大的健壮性。你可能希望作为 hook 的一部分或在 GitHub Action 中自动运行这些 Skill。adversarial-review— 派生一个具备“全新视角”的子智能体subagent来进行批判、实施修复并不断迭代直到发现的问题变成无关紧要的挑剔nitpicks。code-style— 强制执行代码风格特别是那些 Claude 默认表现不佳的风格。testing-practices— 关于如何编写测试以及应该测试哪些内容的说明。7. CI/CD 与部署 (CI/CD Deployment)帮助你在代码库中获取、推送和部署代码的 Skill。这些 Skill 可能会引用其他 Skill 来收集数据。示例babysit-pr— 监控 PR → 重试不稳定的 CI → 解决合并冲突 → 启用自动合并。deploy-service— 构建 → 冒烟测试 → 逐步流量灰度发布并对比错误率 → 发生倒退regression时自动回滚。cherry-pick-prod— 隔离的工作树 → cherry-pick → 解决冲突 → 生成带有模板的 PR。8. 运行手册 (Runbooks)接收一个症状例如 Slack 讨论串、警报或错误签名执行多工具排查调查并生成结构化报告的 Skill。示例service-debugging— 为你们流量最大的服务提供 症状 → 工具 → 查询模式 的映射。oncall-runner— 获取警报 → 检查常见可疑项 → 格式化调查结果。log-correlator— 给定一个请求 ID从所有可能接触过该请求的系统中提取匹配的日志。9. 基础设施运维 (Infrastructure Operations)执行日常维护和操作程序的 Skill——其中一些涉及需要护栏的破坏性操作。这些 Skill 让工程师在关键操作中更容易遵循最佳实践。示例resource-orphans— 查找孤立的 Pod/数据卷 → 发送到 Slack → 观察期soak period → 用户确认 → 级联清理。dependency-management— 你们组织的依赖项审批工作流。cost-investigation— “为什么我们的存储/流出网络账单激增”并附带具体的存储桶和查询模式。分发 SkillSkill 最大的优势之一是你可以与团队的其他成员共享它们。你可以通过以下两种方式与他人共享 Skill将你的 Skill 提交到你的代码仓库中位于/.claude/Skills目录下制作一个插件plugin并在一个 Claude Code 插件市场Plugin marketplace中让用户上传和安装插件对于在相对较少的代码库中协同工作的小型团队来说将 Skill 签入到仓库里的效果很好。但是被签入的每一个 Skill 也为模型增加了一点点上下文负担。随着规模的扩大内部插件市场可以让你分发 Skill并让你的团队自行决定安装哪些 Skill。管理市场 (Managing a Marketplace)你如何决定哪些 Skill 可以进入市场人们又该如何提交它们没有一个决定此事的集中式团队相反尝试有机地发现最有用的 Skill。如果你有一个想让大家尝试的 Skill你可以将其上传到 GitHub 中的沙盒文件夹并在 Slack 或其他论坛中引导人们去那里查看。一旦某个 Skill 获得了牵引力这由 Skill 的所有者来决定他们就可以提交一个 PR 将其移入市场。值得警告的是创建质量差或冗余的 Skill 非常容易因此确保在发布前有某种策展审核curation方法是非常重要的。组合 Skill (Composing Skills)你可能希望拥有相互依赖的 Skill。例如你可能有一个上传文件的“文件上传” Skill以及一个生成 CSV 并上传它的“CSV 生成” Skill。这种依赖项管理尚未原生内置到市场或 Skill 中但你只需按名称引用其他 Skill如果已安装模型就会调用它们。衡量 Skill (Measuring Skills)为了了解 Skill 的表现情况Claude 内部使用了一个 PreToolUse hook它可以让记录公司内部的 Skill 使用情况。这可以发现哪些 Skill 很受欢迎或者哪些 Skill 的触发率低于预期。怎样实现的可以看看这个示例代码https://gist.github.com/ThariqS/24defad423d701746e23dc19aace4de5Skill 对于智能体来说是极其强大、灵活的工具但它仍处于早期阶段我们都在探索如何才能最好地使用它们。你可以将这篇文章看作是一系列验证有效的实用技巧大杂烩而不是一本最终指南。理解 Skill 的最好方法是开始动手、进行实验并看看什么最适合你。大多数 Skill 最初也只是几行代码和一个易错点gotcha后来因为人们在 Claude 遇到新的边缘情况时不断向其中添加内容才变得越来越好。原文https://x.com/trq212/status/2033949937936085378