聊到 Claude Code Skills,很多人的第一反应是:这不就是给 Claude 装几个技能包吗?其实真把这套机制用明白的人,多少都经历过一个从“装了就完事”到“自己改造”的转变。Claude Code 是 Anthropic 出的终端 AI 编程助手,跑在命令行里,能读你的项目、改文件、执行命令;而 Skills 是它的一套技能扩展机制,你可以把它当成 AI 的“武功秘籍”——同一个 Claude,拿到不同的 Skill,处理代码的方式完全不一样。今天这篇就从一个实际使用者的角度,把 Skills 的安装、调用、修改、自制这整条链路讲透,重点说清楚从直接抄别人写好的,到自己动手改这一步,具体该怎么走。这篇内容适合两类人:一是刚装好 Claude Code、正被各种 skills 推荐绕得晕头转向的新手;二是已经能跑通基础命令、想把手头重复工作真正固化成技能流的开发者。
1. 项目背景:Skills 这套机制到底解决了什么问题
1.1 为什么 Claude Code 需要 Skills,而不是靠改 prompt
先说个我在实际使用里的感受:Claude Code 本身已经是个很强的 agent,你直接告诉它“帮我审查这段代码”,它也能干,但效果飘忽不定。今天心情好,它给你列了 10 条详细建议;明天同一个问题,它可能就只回了 3 句客套话。原因是通用模型没有固定的“做事流程”。
Skills 就是来治这个毛病的。它把一套做事流程、工具调用方式、输出格式,全部固化成一个独立目录。Claude 在与你的会话中一旦觉得“这个场景匹配某个 Skill 的描述”,就会自动加载对应的 SKILL.md,然后严格按照里面的指令去执行。本质上,这是把零散的 prompt 技巧升级成了结构化的职业技能包——技能和技能之间互不干扰,每个都专注解决一类场景。
我自己在终端里跑 Claude Code 写前端组件时,感觉特别明显。没装 Skill 之前,每次我都要手动叮嘱“用 TypeScript、带 props 类型定义、样式用 CSS Modules、注释写中文”,重复到怀疑人生。装了对应的前端开发 Skill 之后,这些约定直接被助手自动遵守,省下来的不只是敲字的力气,而是每次对话前“重新对齐预期”的隐性成本。
1.2 从“用现成”到“会改”,是技能真正落地的关键
社区里能下载到的 Skills 很多,superpowers、mattpocock 的实战技能包,确实开箱即用。但我在实际项目里用了两个月后的体会是:现成的 Skill 永远不可能完全贴合你的工作流。
举个例子,我一开始用的是某个通用的“代码审查”Skill,它默认要求 Claude 按“性能、安全、可读性、测试”四个维度输出,看起来很专业,但放到我们团队的小项目里就很别扭:我们更关心业务逻辑是否变化、接口兼容性有没有破坏、有没有引入不必要的依赖。现成 Skill 的维度设置是基于通用场景的,不是基于你的团队规范来的。
这时候就进入第二个阶段:修改。你不需要从零发明一套系统,只需要把原有 Skill 的指令、参数、示例替换成自己的。这个过程就像你买了一双很合脚但不够体面的鞋,自己动手换个鞋带、加个鞋垫——改动不大,但穿着舒服多了。从“用现成”到“会改”,本质上是从“工具使用者”变成“工具定义者”,这步迈过去,Claude Code 才算真正开始为你工作,而不是你为它调参。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:先让 Claude Code 在你的机器上跑起来
2.1 安装三件套:CLI、桌面端、VSCode 插件
Claude Code 有几种打开方式,我建议你都装一遍,因为它们的使用场景不一样。最核心的是命令行工具 Claude Code CLI,它是所有 Skill 真正执行的地方;桌面端适合不想碰终端的朋友;VSCode 插件则能让你在编辑器里直接交互。
CLI 的安装逻辑很简单,环境里有 Node.js 18 以上版本就行。打开终端,执行:
bash复制npm install -g @anthropic-ai/claude-code
装完之后验证一下版本:
bash复制claude --version
看到版本号输出就说明装好了。桌面端是从 Anthropic 官网下载对应系统的安装包,装好后会和 CLI 共享一套配置,不过日常开发我基本还是会切回终端。VSCode 插件直接在扩展市场搜 Claude Code 安装即可,它本质是对 CLI 的封装,底层的 Skills 逻辑和 CLI 一致。
如果你机器里 Node 环境比较旧,或者公司网络对 npm 不太友好,也可以换成原生安装脚本,Anthropic 官方文档里有对应说明。但不管哪种方式装完,都有一个共同点:首次启动会让你登录账号并授权。这个授权是必须的,没登录的话 Claude Code 会报权限类错误,根本无法调用模型。
2.2 配置文件与模型接入的常见报错
Claude Code 的行为配置集中在两个地方:项目级 .claude/settings.json 和用户级 ~/.claude/settings.json。项目级配置会跟着仓库走,适合团队统一;用户级配置是你个人电脑的默认偏好。
我见过很多新手在这里栽的第一个坑是“模型名写错”。有人会通过环境变量或 settings.json 去接第三方模型,结果模型名填了一个官方没登记的别名,Claude Code 直接报错说“这个模型当前版本不认识”。这类报错一般长这样:
plaintext复制"xxx" is not a model this version of Claude Code recognizes
解决办法很简单:要么删掉配置里的模型名,恢复到默认模型;要么去查一下你所使用的模型服务方提供的准确名称。千万别凭记忆填,模型名这东西大小写、连字符都算数,差一个字符就是另一个东西。
还有一个更高频的坑是组织权限问题。如果你是用公司账号登录的,可能会遇到类似“your organization has disabled subscription access for Claude Code”的提示,这通常是管理员在后台关掉了 Claude Code 的访问权限。这时候别硬碰,在配置文件里换自己个人的账号登录,或者找管理员开权限。我一开始还以为是自己安装出问题了,折腾了半天才发现是权限策略。
3. Skills 入门实操:先把现成技能用起来
3.1 读懂 SKILL.md:一个技能包的内部结构
现成 Skill 装多了你会发现,所谓“技能包”,核心其实就是一个或几个目录,每个目录下必备一个 SKILL.md 文件。这个文件就是技能的“大脑”。
SKILL.md 用的是 Markdown 格式,但开头有一段 YAML 风格的 frontmatter,里面声明了名称、描述、允许使用的工具等元信息。下面这段是我在一个开源技能包里看过的简化结构:
markdown复制---
name: code-reviewer
description: 用于对项目代码进行系统审查,重点检查逻辑正确性、接口兼容性和依赖变更,输出时按严重程度分级。
allowed-tools:
- Read
- Grep
---
# Code Reviewer
当你被要求审查代码时,严格按以下步骤执行:
1. 先用 Grep 找到相关文件。
2. 读取文件并梳理业务逻辑。
3. 按严重程度输出问题列表。
其中 name 是技能的唯一标识,description 极其关键——Claude 会把这个描述和你的对话内容做匹配。描述写得越具体,越容易在合适的时候被自动触发。allowed-tools 限定了这个技能可以调用哪些内置工具,如果没写,默认就是全部可用,但建议写清楚,避免技能在运行中干越权的事。
理解这一层结构后,再看整个 ~/.claude/skills 目录,它无非就是很多个这样的目录放在一起。所以“安装一个现成 Skill”本质上就是“把一个包含 SKILL.md 的目录放到正确位置”。
3.2 安装一个现成 Skill 的三种方式,总有一种适合你
我实际用下来,安装方式可以分成三种,按你的使用习惯选。
第一种是最原始的手动复制。去 GitHub 或社区仓库,找到技能包源码,把整个目录拷贝到当前项目的 .claude/skills 下。这个方式的好处是可见、可控,你能顺便看看技能内容;坏处是每个项目都要拷一遍,更新也麻烦。
第二种是装到用户级全局目录。把技能包放到 ~/.claude/skills 下,这样不管你在哪个项目里跑 Claude Code,这个技能都在。适合那些你每次开发都要用的通用技能,比如代码风格检查、文档生成。我自己就把一个“git 提交信息生成”技能放到了全局,因为每个项目的提交信息都适用。
第三种是用社区效率工具来装。很多开发者写出了专门的 skills 管理器,比如 superpowers skills 插件,它把安装变成一个命令的事。这类工具还会自带一大套 Skills 库,一条命令就能批量安装,对新手极其友好。我最初就是从 superpowers 开始用起的,先把它内置的十来个技能玩熟,后面才慢慢改成自己写的。
3.3 热门 Skills 类型与推荐思路,别贪多
我见过不少人一上来就把社区里能看到的技能全装了,结果 Claude Code 加载技能描述本身就消耗大量上下文窗口,反而让响应变慢。我给的建议是:按需安装,第一遍先装这四类。
- 代码审查类:帮你做提交前 review,适合个人开发者和项目成员。
- 测试生成类:根据源码自动生成单元测试用例,能省不少重复劳动。
- 前端开发类:封装了组件编写规范、样式方案、注释风格,写页面利器。
- 文档生成类:自动整理项目结构、生成 README 或接口文档,非常适合写技术博客或做项目交接。
另外我特别推荐去翻一翻 mattpocock 公开的技能库。这位老哥是 TypeScript 领域的知名开发者,他写的技能包结构极其清晰,描述字段写得非常讲究。新手与其漫无目的地搜“skills 推荐”,不如拿他的技能包当教材,逐字读一遍 SKILL.md,比看十篇教程都管用。
4. 从“会改”开始:读懂并修改一个现成 Skill
4.1 逐字段拆解 SKILL.md,看它到底怎么生效
想从“用现成”跨到“会改”,第一步不是写新技能,而是把现有技能看懂。我拿一个实例来拆。
假设你装了一个“生成单元测试”的 Skill,它的 SKILL.md 可能是这样的:
markdown复制---
name: unit-test-writer
description: 针对指定文件生成单元测试,优先覆盖核心逻辑分支。适用于 .ts/.tsx 文件,使用 Vitest。
allowed-tools:
- Read
- Write
- Bash
---
# Unit Test Writer
1. 先读取目标文件,识别所有导出函数和组件。
2. 对每个函数,列出输入、输出、边界条件。
3. 用 Vitest 编写测试,输出文件放到 `__tests__` 目录。
4. 运行 `npx vitest run`,若失败,修正测试代码后重试。
这里面的每一步其实都是可以调整的。比如 description 里限定了“使用 Vitest”,但你的项目用的是 Jest,那这个 Skill 每次生成的测试文件就需要手动改。你的“修改”起点,就是把“使用 Vitest”改成“使用 Jest”,再把步骤 3 里的输出目录改成你自己项目约定好的 tests/unit。
更关键的是理解 allowed-tools 的作用。Bash 是这个技能能自动执行命令的关键,如果没有它,第 4 步“运行测试”就完全没法做。所以在改造技能时,如果你希望它更自动化,要确保工具列表里有 Bash;如果你担心它误操作,就把它去掉,让它只生成文件、不执行命令。这个取舍完全取决于你的安全偏好。
4.2 动手写一个自己的 Skill:从零到一完整示例
光改别人写的不够过瘾,我强烈建议你照着这个思路从零写一个。咱们写一个简短但真实有用的技能:生成符合团队规范的 git 提交信息。
先建目录结构:
bash复制mkdir -p ~/.claude/skills/git-commit-writer
touch ~/.claude/skills/git-commit-writer/SKILL.md
然后编辑 SKILL.md,内容如下:
markdown复制---
name: git-commit-writer
description: 根据 git diff 输出生成符合 Angular Commit Message 规范的提交信息。当用户提到“写提交信息”或者准备 commit 时使用。
allowed-tools:
- Bash
---
# Git Commit Writer
1. 运行 `git diff --staged` 获取暂存区变更;如果暂存区为空,运行 `git diff` 获取全部变更。
2. 根据变更内容判断类型:feat/fix/docs/style/refactor/test/chore。
3. 提交信息格式:`<type>(<scope>): <subject>`,subject 不超过 50 字,用中文概述。
4. 如果变更包含破坏性更新,在正文中增加 `BREAKING CHANGE:` 说明。
5. 输出提交信息后,直接运行 `git commit` 执行提交。
写完后,你在终端里执行 claude,先随便改一个文件,把它 git add,然后对 Claude 说“帮我写个提交信息”。正常情况下,Claude 会自动匹配到 git-commit-writer 这条描述,然后按你定义的流程一步步执行。“自己写的技能”和“别人写的技能”之间的差别,在这一刻就体现出来了——它完全懂你的提交规范和表达习惯。
4.3 让 Skill 更聪明的进阶写法:示例、变量与工具链
写完一个能跑的技能只是开始。我在实际使用中发现,想让技能“更聪明”,有三个进阶技巧特别值得加进去。
第一是加示例。在 SKILL.md 里放一个甚至两个“输入示例 → 输出示例”的对照段,Claude 会照着示例的风格输出,稳定性高出不少。这就像给模型一个参考坐标系,比纯文字描述可靠得多。比如上面那个提交信息技能,我加了一段:
markdown复制示例:
- 输入:新增登录接口、补充参数校验、修复空指针异常
- 输出:feat(auth): 新增登录接口并补充参数校验
第二是拆分多文件。技能目录里不是只能放一个 SKILL.md。你可以把模板、代码片段、参考文档都放进去,SKILL.md 里通过路径引用它们。这对复杂技能尤其有用,比如前端开发技能可以附带一个 component-template.tsx 文件,生成组件时直接读取模板。不过要注意路径问题,Claude 读取技能目录里的相对路径比绝对路径稳妥。
第三是善用工具调用。allowed-tools 里加上 Bash,技能就从一个“只会生成文本”的纸面顾问,变成了“能执行命令、能验证结果”的实干家。但这也带来了滥用风险,尤其是从不明渠道下载的技能。我见过一个技能里直接写了删除 node_modules 的 Bash 命令,稍不注意就是事故。所以自己写的技能,工具列表越少越安全;从网上下载的技能,用之前一定通读一遍它到底要执行什么命令。
5. 实操过程与避坑指南:从安装到调试的全流程实录
5.1 全流程跑一遍:安装、加载、调用、验证
我以“在项目里临时加一个生成组件文档的技能”为例,把完整流程走一遍。
先在项目根目录建技能目录:
bash复制mkdir -p .claude/skills/component-doc-writer
接着写 SKILL.md,核心指令是读取组件源码、解析 props、生成 README 片段。写完后,启动 Claude Code:
bash复制claude
进入交互界面后,直接输入:“请给 src/components/Button.tsx 生成一份组件文档。”Claude 会先判断这个请求是否匹配 component-doc-writer 的描述,匹配的话就会按技能流程走。
想确认技能确实被加载了,有两个技巧。第一,在对话里问 Claude 一句“你现在加载了哪些技能?”,它如果回答出刚才的 component-doc-writer,就说明进上下文了;第二,用 CLI 的调试模式启动:
bash复制claude --debug
调试模式会在终端里输出模型调用前后的原始信息,能清楚看到技能描述是否被拼进系统 prompt。我每次写完新技能,都会用这个模式确认一下加载路径有没有问题。
5.2 常见问题与排查技巧速查表
我在折腾 Skills 的过程中收集了一些高频报错和对应的排查思路,整理成一张表,遇到问题对号入座即可。
| 现象 | 可能原因 | 排查与解决办法 |
|---|---|---|
| 技能描述匹配不到,Claude 不按技能流程走 | description 写得太笼统或太窄 |
把描述改得更贴合用户可能说的话,覆盖同义表达 |
| 技能目录存在但加载不到 | 放错了位置,没放在 .claude/skills 或 ~/.claude/skills 下 |
用 ls 确认目录路径,检查大小写 |
| 技能执行时报“工具不存在” | allowed-tools 里写的工具名拼写错误 |
对照官方文档确认工具名,常见的是 Bash 首字母大写 |
| 技能自动执行了 Bash 命令但失败了 | 权限被终端弹窗拦截,或命令本身有问题 | 先手动执行命令看报错,再在技能里把命令改成绝对路径 |
| 修改了 SKILL.md 但不生效 | Claude Code 的会话上下文还保留旧版本 | 退出当前会话重新启动 claude,或用 /skills 命令刷新 |
| 报“模型名不识别” | settings.json 里的模型名拼写错误 | 删除模型配置恢复默认,或查询准确的模型名后再填 |
这里最常见也最容易被忽略的是“修改不生效”。Skill 的读取时机是会话开始时,所以你在会话中途改了 SKILL.md,当前会话里的 Claude 并不会感知。必须新开一个会话,或者用 Claude Code 里的 /skills 命令手动刷新技能列表。我一开始就吃过这个亏,改完技能发现没变化,还以为是配置写错了,查了半天才想起来是没重启会话。
5.3 几个值得反复强调的避坑经验
最后分享几条我用真金白银换来的经验,每一条都对应过我某段浪费的时间。
第一,Skill 不是装得越多越好。每个技能的 description 都会占用上下文窗口,一个两个无所谓,装上三四十个之后,Claude 在生成回复时要考虑的技能匹配范围变大,响应速度下降,甚至可能出现技能之间互相干扰。我现在的做法是全局目录只放 5 个以内最常用的,项目目录放这个项目专属的,以两三层为上限。
第二,从网上下载的技能包,第一件事先通读 SKILL.md 的 allowed-tools 和 Bash 命令。别看到“能力强大”就装,我见过不少技能包为了演示效果,在步骤里埋了莫名其妙的系统操作。凡是工具列表里带 Bash 的,我建议把里面每一个命令都过一眼,不放心就把 Bash 去掉,改成“生成命令但不执行”。
第三,想提升技能改写能力,最快的路径是把一个成熟开源技能包全文打印出来,逐行问自己“为什么这里要这么写”。比如为什么这个技能的 description 第一句话是动词?为什么示例放在最后而不是开头?看多了之后,你会慢慢形成自己的技能设计直觉。这个“拆解—理解—重构”的循环,才是从“用现成”到“会改”的真正通道。
我自己到现在还保留着一个习惯:每次写完一个新 Skill,都会在真实项目里连跑三天,收集它出错的情况,然后集中修正一版。这跟养盆栽差不多,初见效果只是第一步,后面的修剪和调整才是让它越长越顺的关键。希望这篇内容能帮你少走一些弯路,早点拥有自己顺手的技能库。
