
去年我开始用 Claude Code 做代码审查,每次都要手动输入同样的检查项:错误处理、日志格式、注释完整性...一天下来能重复几十遍。后来发现了 Skills,把这些检查流程打包起来,现在说一句"审查这个分支",Claude 就自动按标准跑一遍。
这篇文章就是想把这套东西讲清楚。
快速上手(3 分钟)
先装个官方插件试试:
bash
claude plugin install document-skills@anthropic-agent-skills
然后问 Claude:
arduino
What skills are available?
接着直接用就行,比如:
arduino
"帮我看看这个 PDF 里的表格"
不用记命令,也不用查文档,说人话就行。
Skills 有什么用?
我自己主要用在这几个场景:
代码审查:以前每次要手动检查十几个项目,现在描述需求就能自动跑完检查流程。
部署前检查:把环境变量、API Key、配置文件这些必查项打包成 Skill,不会漏。
问题排查:团队的排查步骤固化下来,新人不会两眼一抹黑。
团队协作:老员工的经验不会随着离职流失,Skills 变成可复用的资产。
说白了,就是把重复的工作流变成资产,用的时候直接调。
痛点
没有 Skills 之前,这些问题应该挺常见的:
- 每次代码审查都重复同样的检查,费时又容易漏
- 部署前总担心"我是不是忘了检查什么"
- 团队里每个人有自己的 Checklist,质量参差不齐
- 老员工离职,摸索出来的经验也带走了
有了 Skills,至少能把这些重复劳动自动化掉。
什么是 Skill?
Skill 是 Claude Code 的扩展机制。你可以把它理解成一个技能目录,里面放着一套指令,以及可选的模板、示例和脚本。
它遵循 Agent Skills 标准。对 Claude Code 来说,一个 Skill 至少要有一个 SKILL.md 文件;Claude 会根据 Skill 的名称和描述,判断要不要加载它。
Skill vs Slash Commands
Claude Code 自带一些 Slash Commands,比如 /help、/compact。这些是固定入口。Skill 不是命令,而是一组可被 Claude 自动发现和加载的规则。两者的区别很简单:
- Slash Commands:你手动输入后执行。
- Skills:Claude 根据上下文自动判断是否使用。
- 两者都能扩展 Claude Code,但不是同一套机制。
Skill 的核心特点
按需加载(Progressive Loading):
Claude Code 不会一次性加载所有 Skills。它采用渐进式加载策略:
- 只加载与当前请求相关的 Skills
- 通过匹配
description字段来判断相关性 - 避免将不相关的 Skill 内容加载到上下文中
这种设计的好处是:
- 节省上下文预算
- 提高响应速度
- 减少无关信息的干扰
自动热重载:
Skills 修改后自动生效,无需重启会话:
- 个人 Skills(
~/.claude/skills/)修改后立即可用 - 项目 Skills(
.claude/skills/)修改后立即可用 - 插件 Skills 安装/更新后自动加载
命名空间隔离:
- 手动安装的 Skills 直接使用名称,如
my-skill - 插件提供的 Skills 使用命名空间前缀,如
document-skills:pdf - 避免不同来源的 Skills 产生命名冲突
标准化格式:
遵循 Agent Skills 标准:
- 至少需要一个
SKILL.md文件 - 可选的模板、示例和脚本
- 统一的 frontmatter 格式(
name、description)
Skill 的存放位置
Skill 有三个存放位置:
| 位置 | 路径 | 适用范围 | 获取方式 |
|---|---|---|---|
| 个人 | ~/.claude/skills/<skill-name>/SKILL.md |
所有项目 | 手动创建 |
| 项目 | .claude/skills/<skill-name>/SKILL.md |
当前项目 | 手动创建 |
| 插件 | ~/.claude/plugins/cache/<marketplace>/<plugin>/skills/ |
所有项目 | 插件市场安装 |
核心原则:无论哪种位置,每个 Skill 都要有自己的文件夹,不是把 SKILL.md 直接扔进 skills/ 根目录。
关于插件 Skills
插件 Skills 是通过 Claude Code 插件市场安装的 Skill 集合。它们存储在 ~/.claude/plugins/cache/ 目录下,按市场和插件名组织。
插件 Skills 的特点:
- 命名空间 :插件内的 Skills 使用命名空间前缀,例如
document-skills:pdf - 版本管理:每个插件安装后带有版本哈希,便于更新和回滚
- 批量安装:一个插件可以包含多个相关 Skills
- 自动发现:安装后自动被 Claude Code 识别和加载
示例路径结构:
bash
~/.claude/plugins/cache/
└── anthropic-agent-skills/
└── document-skills/
└── <version-hash>/
└── skills/
├── xlsx/
├── docx/
├── pptx/
└── pdf/
插件 vs 手动 Skills:
| 特性 | 手动 Skills | 插件 Skills |
|---|---|---|
| 安装方式 | 手动复制/克隆 | 插件市场一键安装 |
| 版本管理 | 手动维护 Git | 自动版本控制 |
| 更新方式 | 手动 git pull | 插件更新机制 |
| 命名冲突 | 需自行避免 | 命名空间隔离 |
Skill 目录结构
一个完整的 Skill 目录结构如下:
text
my-skill/
├── SKILL.md # 主指令文件(必需)
├── template.md # Claude 填写的模板
├── examples/
│ └── sample.md # 示例输出
└── scripts/
└── validate.sh # Claude 可执行的脚本
SKILL.md 是入口文件。其他内容都可以按需加,用来放模板、示例或辅助脚本。
安装 Skill
安装他人的 Skill
Skill 本质上就是一个目录,所以"安装"的核心很简单:把完整的 Skill 目录放到 Claude Code 会扫描的位置。做法不止一种。
安装到个人技能库(所有项目可用):
bash
mkdir -p ~/.claude/skills/<skill-name>
# 将 SKILL.md 和相关文件复制进去
安装到当前项目(仅当前项目可用):
bash
mkdir -p .claude/skills/<skill-name>
# 将 SKILL.md 和相关文件复制进去
常见安装方式
除了手动复制,你也可以直接照着社区仓库的方式安装。常见有这几种:
方式 1:直接克隆整个仓库到技能目录
适合像 marketingskills 这种"一个仓库维护一组 Skill"的项目。
bash
git clone https://github.com/coreyhaines31/marketingskills.git ~/.claude/skills/marketingskills
克隆下来以后,可以按仓库说明直接使用,也可以把其中你需要的 Skill 单独整理到自己的目录里。
方式 2:复制仓库中的单个 Skill 目录
如果你只需要其中一个 Skill,直接复制对应目录就行:
bash
mkdir -p ~/.claude/skills/my-skill
# 将仓库中的某个 Skill 目录内容复制进来
方式 3:在项目内安装
如果这个 Skill 只服务当前项目,放到项目目录更合适:
bash
mkdir -p .claude/skills/my-skill
方式 4:通过插件市场安装
对于官方或社区发布的插件包,可以通过插件市场安装:
bash
# 安装插件(包含多个 Skills)
claude plugin install <plugin>@<marketplace>
# 示例
claude plugin install document-skills@anthropic-agent-skills
插件安装后,Skills 会出现在 ~/.claude/plugins/cache/ 目录下,并被 Claude Code 自动识别。实际使用时,通常直接在提示里点名 Skill 即可,例如 "Use the PDF skill..."。
查看已安装的插件:
bash
claude plugin list
关于"市场安装"
Claude Code 目前支持两种"市场"安装方式:
1. 插件市场(官方)
通过 claude plugin install 安装官方或社区认证的插件包。插件会自动管理版本和更新。
2. 第三方目录网站
社区里有不少 Skill 仓库、集合仓库和第三方目录网站:
- 在 GitHub 搜索公开 Skill 仓库
- 在 skills.sh 这类第三方 Skill 目录站里搜索
- 使用像
marketingskills这样的 Skill 集合仓库 - 将常用 Skill 整理到自己的
~/.claude/skills/或项目内.claude/skills/
对于第三方网站找到的 Skills,通常需要手动克隆或复制到 skills/ 目录。
创建自己的 Skill
自己写一个 Skill 也不复杂,最小可用版本只要两步:
1. 创建 Skill 目录
bash
mkdir -p ~/.claude/skills/my-skill
2. 编写 SKILL.md 文件
yaml
name: my-skill
description: 技能的描述,说明什么时候使用
你的技能指令...
SKILL.md 格式
一个 SKILL.md 通常分成两部分:
- YAML frontmatter:定义名称和描述
- Markdown 内容:Skill 的具体指令
Frontmatter 常用字段:
| 字段 | 说明 |
|---|---|
name |
Skill 名称 |
description |
描述,帮助 Claude 判断何时使用 |
示例:
yaml
name: deploy
description: 部署应用到生产环境时使用
部署步骤:
1. 运行测试
2. 构建应用
3. 推送到部署目标
使用 Skill
自动触发
Skill 的主要价值在于自动触发。Claude 会根据你的请求和 Skill 的 description 自动匹配。
触发原理:
当你的请求与某个 Skill 的描述相符时,Claude 会自动加载该 Skill。比如一个 Skill 的描述是"解释代码工作原理",当你问:
text
这段代码是怎么工作的?
Claude 就可能调用这个 Skill 来完成任务。
提高触发率:
- 在
description中包含用户可能说的关键词 - 描述要具体,避免过于宽泛
- 清晰说明使用场景
手动触发
除了自动触发,你也可以在提示里直接点名某个 Skill。
例如:
text
Use the PDF skill to extract the form fields from this file.
这种方式适合:
- 你明确知道要使用哪个 Skill
- 想降低自动匹配带来的歧义
- 需要更明确地约束执行流程
如果你想要固定的 /xxx 入口,应该创建自定义 Slash Commands,而不是依赖 Skill 的自动触发。
更新 Skill
手动更新
直接编辑 Skill 文件是最直接的更新方式。
编辑个人 Skill:
bash
# 使用你喜欢的编辑器
code ~/.claude/skills/my-skill/SKILL.md
# 或
vim ~/.claude/skills/my-skill/SKILL.md
编辑项目 Skill:
bash
# 编辑项目内 Skill
code .claude/skills/my-skill/SKILL.md
手动更新的场景:
- 修复 Skill 中的错误
- 调整
description提高触发率 - 优化指令内容
- 添加新的模板或示例
命令更新
如果 Skill 是从 GitHub 仓库克隆的,可以用 Git 命令更新。
更新单个克隆的 Skill:
bash
# 进入 Skill 目录
cd ~/.claude/skills/marketingskills
# 拉取最新代码
git pull origin main
批量更新所有克隆的 Skill:
如果你克隆了多个 Skill 仓库,可以写个简单脚本批量更新:
bash
# 在 skills 目录下遍历所有子目录
for dir in ~/.claude/skills/*/.git; do
repo=$(dirname "$dir")
echo "Updating $repo..."
cd "$repo" && git pull
done
更新 Fork 的 Skill:
如果你 Fork 了某个 Skill 并做了自己的修改:
bash
cd ~/.claude/skills/my-forked-skill
# 添加上游仓库(如果还没添加)
git remote add upstream https://github.com/original-owner/skill-repo.git
# 拉取上游更新
git fetch upstream
git merge upstream/main
插件更新
通过插件市场安装的插件可以使用插件管理命令更新:
bash
# 更新指定插件
claude plugin update <plugin>@<marketplace>
# 示例
claude plugin update document-skills@anthropic-agent-skills
插件更新会下载最新版本并替换缓存中的旧版本,但更新后通常需要重启 Claude Code 才会生效。
更新生效
自动热重载:
手动编辑 Skill 文件时,通常会比插件更新更快生效;但插件升级与部分缓存刷新场景,仍应按"重启后生效"来理解更稳妥:
- 个人 Skills(
~/.claude/skills/)修改后通常很快可用 - 项目 Skills(
.claude/skills/)修改后通常很快可用 - 插件 Skills 更新后建议重启 Claude Code
如果修改没有立即生效:
极少数情况下,如果修改没有自动重载,可以尝试:
text
# 按 Ctrl+D 退出当前会话,然后重新启动
claude
验证更新:
text
What skills are available?
确认你的 Skill 已出现在列表中,并且描述内容是最新的。
卸载 Skill
卸载手动安装的 Skill
直接删除对应目录:
bash
# 删除个人 Skill
rm -rf ~/.claude/skills/<skill-name>
# 删除项目 Skill
rm -rf .claude/skills/<skill-name>
卸载插件
使用插件管理命令卸载:
bash
# 卸载插件
claude plugin uninstall <plugin>@<marketplace>
# 示例
claude plugin uninstall document-skills@anthropic-agent-skills
卸载插件会自动清理 ~/.claude/plugins/cache/ 下的相关文件。
查找 Skill
查看所有可用 Skill
最稳妥的办法是先查看已安装插件,再在会话里直接询问 Claude:
bash
claude plugin list
然后也可以在 Claude Code 里问一句:
text
What skills are available?
从哪里找社区 Skill
现在比较常见的来源有:
- 在 GitHub 搜索公开 Skill 仓库
- 在 skills.sh 这类第三方 Skill 目录站里搜索
- 使用像
marketingskills这样的 Skill 集合仓库 - 将常用 Skill 整理到自己的
~/.claude/skills/或项目内.claude/skills/
用第三方目录网站找 Skill
如果你不想直接在 GitHub 里翻仓库,skills.sh 这种第三方目录站会更省事。
它的好处是:
- 可以直接按关键词搜索 Skill
- 能看到 Skill 的来源仓库和详情页
- 通常会直接给出安装命令
这类网站本身不是 Claude Code 官方内置功能,但在开源 Skill 生态里已经很常见,拿来做发现入口很合适。
用元 Skill 先搜,再安装
除了自己去网站搜,另一种更顺手的方式,是先装一个专门"帮你找 Skill"的元 Skill。
比如你可以放一个类似 find-skills 或 /find-skill 的 Skill,让 Claude 先根据你的需求去搜索相关 Skill,再把安装命令返回给你。一个典型流程是:
- 先描述你的需求,比如"帮我找一个适合做 SEO 审计的 Skill"
- 让这个元 Skill 去搜索
skills.sh或其他 Skill 来源,比如调用npx skills find <query> - 根据返回结果执行安装,比如:
bash
npx skills add <owner/repo@skill>
如果你希望直接让 Claude 帮你完成整个过程,也可以把这类元 Skill 设计成"两步走":
- 第一步:搜索并列出候选 Skill
- 第二步:确认后自动执行安装
要注意的是,这种 find-skills 或 /find-skill 工作流通常是社区实践,不是 Claude Code 默认自带的官方命令。它好用的地方在于,把"找 Skill"这件事也变成了一个 Skill。
管理 Skill
限制 Claude 使用 Skill
如果你想完全禁用 Slash Commands,当前 CLI 提供的是 --disable-slash-commands。至于 Skill,本质上还是两件事:目录里有没有这个 Skill,以及 Claude 会不会在当前上下文里选中它。
高级使用建议
Skill 目录里除了 SKILL.md,还可以放示例、模板、脚本和参考资料。任务稍微复杂一点时,这样组织会顺手很多:
- 在
SKILL.md里写清触发条件和步骤 - 把长模板拆到单独文件
- 把校验或辅助逻辑放到
scripts/目录
安全使用第三方 Skills
第三方 Skills 可以大幅提升效率,但也存在安全风险。安装前务必进行安全审查。
理解风险类型
| 风险类型 | 潜在危害 | 示例场景 |
|---|---|---|
| 数据泄露 | Skill 脚本读取并上传敏感文件、API Key、环境变量 | 脚本扫描 ~/.ssh/ 并发送到外部服务器 |
| 命令注入 | 恶意脚本执行破坏性系统命令 | rm -rf 删除项目文件、修改系统配置 |
| 供应链攻击 | 第三方仓库被植入恶意代码 | 流行 Skill 的维护者账号被盗 |
| 隐私追踪 | Skill 记录用户使用习惯和 Prompt 内容 | 将用户请求发送到分析服务 |
| 依赖混淆 | Skill 依赖的外部资源被劫持 | 模板中引用的外部 URL 被替换 |
安装前检查清单
在安装任何第三方 Skill 之前,按以下步骤逐一检查:
1. 验证来源可信度
bash
# 检查仓库的 stars 数和维护者信誉
# 查看 GitHub 仓库的 stars、forks、最近活跃度
# 确认维护者是否有其他被认可的项目
评估标准:
- ✅ stars 数 > 100,有持续更新
- ✅ 维护者有其他高质量项目
- ⚠️ stars 数 < 10,需额外谨慎
- ❌ 长期未更新(超过 6 个月)
2. 阅读 SKILL.md 全文
- 理解 Skill 的功能描述
- 检查是否有可疑的外部链接
- 注意是否要求敏感权限
3. 审查 scripts/ 目录
bash
# 查看 Skill 中的脚本内容
cat ~/.claude/skills/<skill-name>/scripts/*.sh
cat ~/.claude/skills/<skill-name>/scripts/*.py
危险信号:
- ❌ 包含
curl或wget下载外部文件 - ❌ 包含
rm、delete等删除操作 - ❌ 尝试访问
~/.ssh/、~/.aws/等敏感目录 - ❌ 尝试上传数据到外部服务器
4. 检查社区反馈
bash
# 查看 GitHub Issues 和 Discussions
# 搜索 "<skill-name> security" 或 "<skill-name> malicious"
5. 验证插件来源
bash
# 查看已安装插件的来源
claude plugin list
# 确认插件来自可信的市场
# 官方市场: anthropic-agent-skills
官方插件 vs 第三方 Skills
| 特性 | 官方插件 | 第三方 Skills |
|---|---|---|
| 安全审查 | ✅ 经过官方审核 | ❌ 无审查机制 |
| 信任度 | 高 | 需自行评估 |
| 版本控制 | 严格版本管理 | 依赖维护者 |
| 问责机制 | 明确的支持渠道 | 缺失 |
| 更新频率 | 定期安全更新 | 不确定 |
| 命名空间 | 使用前缀隔离 | 可能冲突 |
建议: 优先使用官方插件。第三方 Skills 仅在充分验证后使用。
沙箱隔离策略
对于来源不明的 Skills,采用隔离策略降低风险:
1. 使用专用测试环境
bash
# 在 Docker 容器中测试可疑 Skills
docker run -it --rm node:18 bash
# 在容器内安装并测试 Skill
2. 限制文件系统访问
bash
# 为 Claude Code 创建专用的受限目录
mkdir -p ~/claude-sandbox
# 在该目录内运行 Claude Code
cd ~/claude-sandbox && claude
3. 定期审查已安装 Skills
bash
# 列出所有已安装 Skills
ls -la ~/.claude/skills/
ls -la .claude/skills/
# 定期清理不用的 Skills
企业/团队安全策略
如果你在企业环境或团队中使用 Skills:
1. 建立 Skill 审批流程
成员发现 Skill → 填写评估表 → 安全部审查 → 批准安装 → 定期审计
2. 维护团队 Skill 白名单
bash
# 将团队认可的 Skills 放在共享仓库
# 团队成员从白名单安装,禁止自行安装第三方 Skills
3. 使用私有 Skill 注册表
bash
# 搭建内部的 Skill 市场
# 所有 Skills 需通过安全审查才能上架
4. 监控 Skill 使用
bash
# 记录 Skill 的安装、更新、卸载操作
# 定期审计 Skills 的使用情况
发现恶意 Skill 后的处理
如果你怀疑某个 Skill 是恶意的:
1. 立即卸载
bash
# 卸载插件
claude plugin uninstall <plugin>@<marketplace>
# 删除手动安装的 Skill
rm -rf ~/.claude/skills/<skill-name>
rm -rf .claude/skills/<skill-name>
2. 检查系统痕迹
bash
# 检查最近的文件修改
find ~/ -type f -mtime -1 -name "*"
# 检查网络连接
lsof -i -n -P | grep ESTABLISHED
3. 旋转敏感凭证
bash
# 如果怀疑 API Key 或 Token 泄露,立即更换
# 旋转 SSH 密钥
# 更改密码
4. 报告问题
bash
# 向 Skill 仓库提交 Issue
# 向 Claude Code 官方报告
# 通知社区
安全最佳实践
DO ✅:
- 优先使用官方插件
- 安装前完整阅读 SKILL.md
- 审查 scripts/ 目录的所有脚本
- 定期更新 Skills
- 在隔离环境测试可疑 Skills
- 建立团队的 Skill 管理规范
DON'T ❌:
- 不要安装来源不明的 Skills
- 不要跳过 scripts/ 审查
- 不要在生产环境直接使用未测试的 Skills
- 不要授予 Skills 不必要的权限
- 不要使用长期未维护的 Skills
快速安全检查命令
bash
# 一键检查 Skill 的安全性
check-skill-security() {
local skill_path="$1"
echo "🔍 检查 Skill: $skill_path"
echo ""
# 检查 SKILL.md
echo "📄 SKILL.md 存在: $([ -f "$skill_path/SKILL.md" ] && echo '✅' || echo '❌')"
# 检查 scripts 目录
if [ -d "$skill_path/scripts" ]; then
echo "⚠️ 发现 scripts 目录,包含以下文件:"
ls -la "$skill_path/scripts/"
fi
# 检查外部链接
echo "🔗 外部链接:"
grep -h 'http' "$skill_path/SKILL.md" 2>/dev/null || echo "无"
echo ""
echo "⚠️ 请手动审查上述内容后再安装"
}
# 使用方法
check-skill-security ~/.claude/skills/my-skill
常见问题
Skill 不触发
如果 Claude 没按预期使用你的 Skill,优先检查这三件事:
- 检查 description 是否包含用户可能说的关键词
- 确认对应插件已安装,或 Skill 已放在正确目录下
- 尝试用更匹配描述的措辞
Skill 触发过于频繁
如果 Claude 老是误触发:
- 让
description更具体 - 避免使用过宽泛的描述词
看不到所有 Skill
Skill 的描述会被加载进上下文。如果你装得太多,可能会撞上字符预算限制。遇到这种情况,可以用 /context 看看有没有相关警告。