
1. 从零理解 Claude Code 的 Skills 机制1.1 Skills 到底是什么为什么它值得单独拿出来讲Claude Code 这个工具从发布到现在迭代节奏一直很快。很多人一开始只是把它当成一个能读代码、能改文件的命令行助手用着用着就发现真正拉开效率差距的不是模型本身有多强而是你有没有把Skills这套机制用起来。我先把话说直白一点Skills 本质上就是一套可复用的能力封装。你可以把它理解成给 Claude Code 装技能包——每个技能包里面写清楚了遇到什么场景、按什么步骤做、遵守什么规则、产出什么结果。它跟普通的提示词最大的区别在于提示词是你每次对话临时敲进去的而 Skills 是沉淀下来、可被自动识别和调用的。这个区别听起来不大实际用起来是天壤之别。我举个自己的例子。早期我处理一个跨平台项目的代码审查每次都要手动贴一大段你要检查命名规范、检查异常处理、检查日志格式、检查依赖版本……的提示词。后来我把这套东西写成了一个 Skill之后只要触发相关场景Claude Code 就会自动按这套规则走我再也不用重复粘贴了。省下来的不只是打字时间更重要的是一致性——它每次执行的标准都一样不会因为我今天心情好多检查两条、明天赶时间少检查两条。所以这篇内容适合谁看三类人已经在用 Claude Code但还停留在一问一答阶段的开发者团队里想把 AI 辅助编码流程标准化的技术负责人对 AI 工具链感兴趣想搞清楚能力封装这件事到底怎么落地的人。不管你是哪一类接下来的内容都会从机制讲到实操尽量让你看完就能动手。1.2 Skills 和普通提示词、子代理的本质区别很多人第一次接触 Skills 会有一个疑问这不就是提示词吗我把它存成一个文件不就行了这个理解只对了一半。我用一个生活化的类比来解释。普通提示词像是你临时口头交代给同事一件事帮我看看这个报表有没有问题。同事凭经验去做做得好不好看他的状态。而 Skill 像是你给同事一本标准作业手册第几步做什么、什么情况要停下来确认、输出格式长什么样全都写死了。子代理Subagent则更像是你派了一个专职岗位的人去独立完成一整块工作他有自己的上下文、自己的工具权限。三者的核心差异我整理成一张表方便你对照维度普通提示词Skill子代理复用性低每次重敲高一次写好反复用高但更重触发方式手动输入可自动识别场景触发显式调用上下文占用占用当前对话按需加载更省独立上下文适合场景一次性任务标准化流程、规范约束大型独立任务维护成本几乎为零中等需要迭代较高理解这张表你就明白为什么官方一直在强调 Skills 的最佳实践——因为它处在一个性价比最高的位置比提示词重但比子代理轻既能沉淀规范又不会把上下文撑爆。1.3 一个 Skill 的最小构成要素在动手写之前得先知道一个 Skill 里到底该放什么。根据我自己的实践和官方文档的思路一个能用的 Skill 通常包含这么几块触发描述什么情况下该用这个 Skill。这部分写得越精准自动触发的准确率越高。执行步骤具体做什么按什么顺序做。约束规则哪些事不能做哪些边界不能越。输出规范产出物长什么样格式、字段、结构。示例给一两个正例帮助模型对齐预期。这五块里触发描述和约束规则是最容易被新手忽略、但恰恰最影响效果的。我见过太多人把 Skill 写成了一大段你要认真仔细地检查代码这种描述等于没写因为认真仔细不是可执行的标准。2. 设计一个高质量 Skill 的核心思路2.1 触发描述怎么写才能该出手时才出手触发描述决定了 Skill 会不会在正确的时机被调用。写得太宽什么场景都触发会干扰正常对话写得太窄该用的时候用不上等于白写。我的经验是触发描述要包含三个信息动作 对象 条件。举个例子假设你要做一个数据库迁移脚本审查的 Skill。差的写法是当用户需要审查数据库相关代码时使用。好的写法是当用户提交包含 CREATE TABLE、ALTER TABLE、DROP COLUMN 等 DDL 语句的迁移脚本或明确要求检查数据库结构变更时使用。不适用于普通的查询语句优化。看出区别了吗好的写法里DDL 语句是对象提交/要求检查是动作包含这些关键字是条件最后还补了一句不适用于什么把边界划清楚了。提示触发描述里明确写出不适用场景能显著降低误触发率。这一点很多教程都不提但实测非常有用。2.2 把模糊要求翻译成可执行步骤这是设计 Skill 最核心的功夫。模型不是人你对它说代码要优雅它没法量化。但你说函数长度不超过 50 行、圈复杂度不超过 10、每个公开方法必须有文档注释它就能逐条对照。我总结了一个翻译公式形容词 → 可测量指标 → 检查动作。模糊要求可测量指标检查动作代码要清晰命名符合项目约定、无魔法数字逐行扫描命名和常量性能要好无嵌套循环、无 N1 查询检查循环结构和数据库调用要安全无硬编码密钥、输入有校验搜索敏感模式和入口函数要好维护模块职责单一、依赖方向清晰分析导入关系和模块边界把这张表里的逻辑套进你的 Skill效果会立刻不一样。我自己的代码审查 Skill 就是这么改的改完之后它给出的意见从这段代码可以优化变成了第 42 行的循环里调用了数据库查询建议改成批量查询预计减少 N 次往返——后者才是能直接落地的建议。2.3 约束规则告诉它不要做什么比要做什么更重要这一点我要重点讲因为它是踩坑重灾区。模型有个天然倾向过度执行。你让它检查代码它可能顺手把代码改了你让它生成文档它可能把整个项目结构都重构了。所以在 Skill 里约束规则必须写清楚。我通常会在约束里放这么几条只读不写如果这个 Skill 只是分析明确写不得修改任何文件。范围限定只处理指定目录不越界。不确定就停遇到无法判断的情况先问不要猜。不做无关重构只解决当前问题不顺手优化别的。注意约束规则要写在 Skill 的显眼位置不要藏在最后。我试过把约束放在末尾结果模型经常读一半就开始干后来挪到开头遵守率明显提升。2.4 输出规范让结果可以直接被消费一个 Skill 的产出如果格式混乱那它的价值会大打折扣。所谓可被消费意思是结果能直接被下一步使用——要么人能快速看懂要么机器能直接解析。我一般会规定输出用固定结构比如## 检查结果 - 问题数量N - 严重级别分布高 X / 中 Y / 低 Z ## 详细问题 ### 问题 1 - 位置文件:行号 - 类型xxx - 描述xxx - 建议xxx这种结构化输出好处是你可以直接把它喂给下一个环节或者用脚本统计。我有个朋友做 CI 集成就是把 Skill 的输出解析后自动生成工单整个流程跑得很顺。3. 实操从零搭建并调优一个 Skill3.1 目录结构与文件组织先讲落地。Skills 一般放在项目的特定目录下具体路径以你使用的版本为准但组织思路是通用的。我推荐的结构是这样skills/ code-review/ SKILL.md # 主文件包含触发描述和步骤 examples/ # 示例 good-case.md bad-case.md doc-generator/ SKILL.md migration-check/ SKILL.md每个 Skill 一个独立目录主文件统一叫SKILL.md示例单独放。这样做的好处是可维护——你想改哪个技能直接进对应目录不会互相干扰。我踩过的一个坑是早期我把所有 Skill 塞进一个大文件里结果改一个技能经常影响到另一个触发也变得混乱。拆成独立目录后问题基本消失。3.2 手把手写第一个 Skill代码规范检查下面我带你完整写一个。假设我们要做一个提交前代码规范检查的 Skill。第一步写触发描述## 触发条件 当用户要求检查代码规范、准备提交代码、或提到提交前检查lint规范审查时触发。 不适用于纯逻辑 bug 排查、性能优化、架构设计讨论。第二步写执行步骤## 执行步骤 1. 确认检查范围默认检查当前改动涉及的文件若用户指定则按指定范围。 2. 逐文件扫描以下维度 - 命名规范变量、函数、类命名是否符合项目约定 - 格式规范缩进、空格、换行是否统一 - 注释规范公开接口是否有文档注释 - 导入规范是否有未使用的导入、导入顺序是否合理 3. 对每个问题记录文件、行号、类型、描述、建议。 4. 汇总统计按严重级别排序输出。第三步写约束## 约束 - 只读不得修改任何文件。 - 只报告问题不主动修复。 - 遇到无法判断的命名约定先询问项目规范不要臆断。 - 不检查与规范无关的逻辑问题。第四步写输出规范前面那个结构。写完这四块一个能用的 Skill 就成型了。你会发现它并不复杂关键是把每一条都写具体。3.3 参数化设计让一个 Skill 适配多种场景Skill 写多了你会发现很多技能只是参数不同。比如代码检查这个技能前端项目和后端项目检查的维度不一样。这时候就要做参数化。我的做法是在 Skill 里定义可配置项比如## 可配置参数 - language: 目标语言默认自动识别 - strict_level: 严格程度low / medium / high默认 medium - ignore_patterns: 忽略的文件模式然后在执行步骤里引用这些参数。这样同一个 Skill 就能覆盖多种场景不用为每种语言写一个。实操心得参数不要设太多超过 5 个就会让使用者记不住。我一般控制在 3 个以内够用就行。3.4 迭代调优从能用到好用的三轮打磨Skill 不是一次写完就完事的它需要迭代。我一般会经历三轮第一轮跑通。先确保它能被正确触发、能产出结果。这一轮不追求质量只求流程通。第二轮对齐。拿几个真实案例跑看输出是否符合预期。我通常会准备 5 到 10 个测试用例覆盖典型场景和边界场景。发现偏差就回去改触发描述或步骤。第三轮精简。把冗余的步骤删掉把模糊的描述改具体。这一轮的目标是让 Skill 更锋利——用最少的指令达到最好的效果。我自己的代码审查 Skill 迭代了大概七八版从最初的一大段话精简到现在不到 40 行但效果反而更好了。原因就是每一版都在做减法把没用的、模糊的、重复的都砍掉。4. 常见问题与避坑指南4.1 触发不灵为什么我的 Skill 总是不被调用这是最高频的问题。原因通常有三个触发描述太窄只写了很具体的场景稍微变个说法就匹配不上。和已有 Skill 冲突两个 Skill 的触发条件重叠模型不知道该用哪个。描述里有歧义用了模型理解不了的行业黑话。排查方法先看日志确认它到底有没有被触发如果没触发把触发描述改宽一点再试如果触发了但用错了检查是不是和其他 Skill 冲突。我遇到过一次两个 Skill 都包含检查这个词结果经常互相抢。后来我把其中一个的触发词改成更具体的审查迁移脚本冲突就解决了。4.2 执行跑偏模型不按步骤走怎么办有时候模型会自作主张跳过某些步骤或者顺序乱了。这通常是因为步骤描述不够明确或者步骤之间有依赖关系没写清楚。解决办法给步骤编号明确顺序。有依赖的地方写清楚必须先完成 X 才能做 Y。关键步骤加上完成后确认的动作。我还会在步骤里加一句如果某步骤无法执行停下来报告不要跳过这一句能挡掉很多跑偏。4.3 输出不稳定同样的输入结果却不一样输出不稳定是模型的固有特性但可以通过约束降低波动。我的经验是输出格式写得越死波动越小。给出明确的示例让模型有参照。对关键字段规定取值范围。比如我要求输出严重级别只能是高/中/低三个值不允许出现较高中等偏上这种模糊表述稳定性立刻提升。4.4 常见问题速查表问题现象可能原因解决方向Skill 不被触发触发描述太窄或冲突放宽描述、消除重叠执行跳步步骤描述不明确编号、加依赖说明输出格式乱输出规范不具体固定结构、给示例误改文件缺少只读约束开头写明不得修改结果波动大约束太松收紧取值范围上下文被撑爆Skill 内容过长拆分、按需加载4.5 几个我踩过的坑最后分享几个具体的坑都是真金白银换来的坑一把 Skill 当文档写。我一开始写 Skill 恨不得把整个规范手册都塞进去结果模型抓不住重点。后来明白Skill 是指令不是文档要精炼。坑二忽略示例的作用。我早期不写示例觉得描述清楚就够了。后来加了正反两个示例效果提升非常明显。示例是模型对齐预期最快的方式。坑三不做版本管理。Skill 改来改去改坏了想回退都回不去。现在我每个 Skill 都进版本控制每次改动写清楚原因。坑四一个 Skill 管太多事。贪多嚼不烂一个 Skill 只做一件事做精做透比什么都管但什么都管不好强得多。坑五忘了测试边界。只测正常情况不测异常输入。结果遇到空文件、超大文件、编码异常就崩。现在我每个 Skill 都会专门测几个边界场景。这套东西说到底核心就一句话把模糊的经验变成明确的指令把一次性的操作变成可复用的能力。Skills 的价值不在于它多复杂而在于它能不能稳定地帮你省下重复劳动。我现在的项目里常驻着七八个 Skill覆盖代码审查、文档生成、迁移检查、依赖审计这些高频场景每天省下来的时间相当可观。你要是刚开始建议先从最痛的那个场景入手写一个、跑通、调好再扩展下一个别一上来就铺开。