Skills 是 Claude Code 里最精妙的扩展机制——比 CLAUDE.md 更灵活,比 Plugins 更轻量,按需加载,几乎零上下文开销。官方文档把 Skills 定义为遵循 Agent Skills 开放标准的扩展,本文是 Skills 官方文档的完整中文整理,覆盖基础到高级模式。
Skills 是什么?
Skills 扩展 Claude 能做的事:创建一个带指令的 SKILL.md 文件,Claude 把它加入工具集。Claude 在相关时自动使用,或你直接用 /skill-name 调用。
什么时候创建 Skill:
- 你不断把同样的指令、检查清单或多步骤流程粘贴到对话里
- CLAUDE.md 的某个部分已经从"事实"变成了"流程"
Skills vs CLAUDE.md 的核心区别:
| CLAUDE.md | Skills | |
|---|---|---|
| 加载时机 | 每次会话自动加载 | 被调用时才加载 |
| Token 开销 | 每次请求都占用 | 不用时几乎为零 |
| 适合内容 | 规则、约定、事实 | 流程、检查清单、操作序列 |
| 长文档 | 不适合(每次都消耗) | 适合(按需加载) |
技能目录结构
每个 Skill 是一个目录,SKILL.md 是入口(必须):
my-skill/
├── SKILL.md # 主指令(必须)
├── template.md # Claude 填写的模板
├── examples/
│ └── sample.md # 展示期望格式的示例输出
└── scripts/
└── validate.sh # Claude 可以执行的脚本
存储位置和优先级
| 位置 | 路径 | 作用范围 |
|---|---|---|
| Enterprise | Managed settings | 组织内所有用户 |
| 个人 | ~/.claude/skills/<name>/SKILL.md | 你的所有项目 |
| 项目 | .claude/skills/<name>/SKILL.md | 仅当前项目 |
| Plugin | <plugin>/skills/<name>/SKILL.md | Plugin 启用的地方 |
优先级:Enterprise > 个人 > 项目。Plugin Skills 使用 plugin-name:skill-name 命名空间,不会冲突。
实时变更检测:修改 ~/.claude/skills/ 或项目 .claude/skills/ 里的文件,当前会话立即生效,不需要重启。
Monorepo 自动发现:在 packages/frontend/ 里工作时,Claude Code 自动发现 packages/frontend/.claude/skills/ 里的 Skills。
完整 Frontmatter 字段参考
---
name: my-skill # 显示名称,小写字母/数字/连字符,最多 64 字符
description: 技能描述 # 推荐填写,Claude 用这个决定何时使用
when_to_use: 触发词或示例请求 # 补充 description,合计不超过 1536 字符
argument-hint: "[issue-number]" # 自动补全时显示的参数提示
arguments: [issue, branch] # 命名位置参数,用于 $name 替换
disable-model-invocation: true # 只允许用户调用,Claude 不自动触发
user-invocable: false # 只允许 Claude 调用,不出现在 / 菜单
allowed-tools: Read Bash(git *) # 技能激活时预授权的工具
model: claude-sonnet-4-6 # 覆盖当前会话模型
effort: high # 覆盖当前努力等级(low/medium/high/xhigh/max)
context: fork # fork 在独立子 agent 上下文里运行
agent: Explore # context: fork 时使用哪种 subagent
paths: "src/**/*.ts" # 路径 glob,仅匹配文件时自动激活
shell: bash # 内联 shell 命令的 Shell(bash/powershell)
hooks: # 技能生命周期的 Hooks
PostSkillUse:
- type: command
command: echo "skill done"
---字符串替换(动态参数)
| 变量 | 含义 |
|---|---|
$ARGUMENTS | 调用时传入的全部参数 |
$ARGUMENTS[N] | 第 N 个参数(0-based) |
$N | $ARGUMENTS[N] 的简写 |
$name | 命名参数(在 arguments 里声明) |
${CLAUDE_SESSION_ID} | 当前会话 ID |
${CLAUDE_EFFORT} | 当前努力等级 |
${CLAUDE_SKILL_DIR} | 技能的 SKILL.md 所在目录 |
示例:带参数的 Skill
---
name: fix-issue
description: 修复 GitHub Issue
disable-model-invocation: true
allowed-tools: Bash(gh *) Read Glob Grep Edit Write
---
按照我们的编码规范修复 GitHub Issue $ARGUMENTS:
1. 用 `gh issue view $ARGUMENTS` 读取 Issue 详情
2. 理解需求
3. 实现修复
4. 写测试
5. 创建 commit(包含 "Fixes #$ARGUMENTS" 的 commit 消息)调用:/fix-issue 234
内容类型:参考 vs 任务
参考类(Reference)
把知识注入 Claude 的上下文,Claude 在工作时应用这些知识:
---
name: api-conventions
description: 这个代码库的 API 设计模式
---
编写 API 端点时:
- 使用 RESTful 命名约定
- 返回一致的错误格式 { code, message, details }
- 包含请求验证(Zod schema)
- 所有端点必须有 OpenAPI 注释任务类(Task)
给 Claude 执行特定操作的分步指令:
---
name: deploy
description: 部署应用到生产环境
context: fork
disable-model-invocation: true
---
部署 $ARGUMENTS 到生产环境:
1. 运行测试套件(`npm test`),失败则停止
2. 构建(`npm run build`)
3. 推送到部署目标
4. 验证部署成功(健康检查)
5. 通知 Slack #deployments 频道Skill 内容生命周期
加载后持续有效:Skill 被调用时,渲染后的 SKILL.md 以单条消息形式进入对话,在会话剩余时间里持续存在。Claude 不会在后续 turn 重新读取文件。
自动压缩(Auto-compaction)保留机制:
- 对话压缩时,Skills 会被重新附加到摘要后面
- 每个 Skill 保留前 5000 个 Token
- 所有重新附加的 Skills 共享 25000 Token 的总预算
- 从最近调用的 Skill 开始填充预算,较早的可能被完全丢弃
实践建议:如果 Skill 在第一次回复后不再影响行为,加强 description 和指令;或者在压缩后重新调用。
调用控制
| 配置 | 你能调用 | Claude 能调用 | 加载进上下文 |
|---|---|---|---|
| 默认 | ✅ | ✅ | description 始终在,全文在调用时加载 |
disable-model-invocation: true | ✅ | ❌ | 不加载 description,仅用户调用时加载全文 |
user-invocable: false | ❌ | ✅ | description 始终在,全文在调用时加载 |
高级模式一:动态上下文注入
用 !`命令` 语法在 Skill 内容发送给 Claude 之前运行 Shell 命令,输出替换占位符:
---
name: pr-summary
description: 总结 Pull Request 的变更
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---
## Pull Request 上下文(实时数据)
- PR 差异:!`gh pr diff`
- PR 评论:!`gh pr view --comments`
- 变更文件:!`gh pr diff --name-only`
## 你的任务
总结这个 Pull Request:
1. 主要变更是什么?
2. 有没有潜在风险?
3. 建议的测试重点工作流程:
- 每个
!`命令`在 Claude 看到任何内容前立即执行 - 命令输出替换占位符
- Claude 收到带有真实 PR 数据的完整提示
多行命令使用 ```! 代码块:
## 环境信息
```!
node --version
npm --version
git status --short
---
## 高级模式二:在 Subagent 里运行
添加 `context: fork` 让 Skill 在独立 Subagent 里运行,不访问对话历史:
```markdown
---
name: deep-research
description: 深入调研某个话题
context: fork
agent: Explore
---
彻底调研 $ARGUMENTS:
1. 用 Glob 和 Grep 找到相关文件
2. 阅读并分析代码
3. 用具体文件引用总结发现
可选的 agent 值:
Explore:只读工具,Haiku 模型,适合代码探索Plan:只读工具,适合规划阶段研究general-purpose:所有工具,适合复杂任务- 任何自定义 Subagent 的名称
高级模式三:路径限定自动激活
---
name: react-patterns
description: React 组件的最佳实践模式
paths: "src/components/**/*.tsx,src/pages/**/*.tsx"
---
编写 React 组件时:
- 使用函数式组件和 Hooks
- Props 用 interface 而非 type
- 使用 React.memo 包裹纯展示组件当你打开或修改 src/components/ 或 src/pages/ 里的 .tsx 文件时,此 Skill 自动激活。
实战 Skill 配置示例
Git Commit(任务类,只允许用户调用)
---
name: commit
description: 暂存并提交当前变更
disable-model-invocation: true
allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *) Bash(git diff *)
---
暂存并提交当前变更:
1. 运行 `git status` 查看变更
2. 运行 `git diff --staged` 检查暂存内容
3. 生成描述性 commit 消息(遵循 Conventional Commits 规范)
4. 运行 `git add -A && git commit -m "消息"`
5. 确认 commit 成功安全检查(参考类 + 任务类混合)
---
name: security-check
description: 对当前变更进行安全审查
allowed-tools: Read Glob Grep
effort: xhigh
---
对以下变更进行安全审查:!`git diff HEAD`
重点检查:
**输入验证**
- SQL 注入(字符串拼接 SQL)
- XSS(未转义的用户输入输出到 HTML)
- 路径遍历(用户控制的文件路径)
**认证和授权**
- 缺失认证检查
- 硬编码密钥或密码
- 不安全的 token 存储
**数据暴露**
- 日志里的敏感信息
- 过多的 API 响应字段
- 错误消息暴露内部细节
输出:按严重性排序的发现(Critical/High/Medium/Low),每项包含:位置、问题说明、修复建议。PR 描述生成器
---
name: pr-desc
description: 根据变更自动生成 PR 描述
disable-model-invocation: true
allowed-tools: Bash(gh *) Bash(git *)
---
## 当前变更
提交历史:!`git log main..HEAD --oneline`
变更统计:!`git diff main --stat`
## 生成 PR 描述
根据以上变更,生成符合以下模板的 PR 描述:
### What
(用 1-2 句话描述这个 PR 做了什么)
### Why
(为什么需要这个变更)
### How
(关键实现思路,不超过 5 个要点)
### Testing
(如何验证这个 PR,测试场景)
### Screenshots
(如有 UI 变更,在此说明截图位置)技术债检查器(路径限定)
---
name: debt-check
description: 检查当前文件的技术债标记
paths: "**/*.ts,**/*.tsx,**/*.py,**/*.go"
user-invocable: false
---
检查这个文件里的技术债标记:
1. 找出所有 TODO、FIXME、HACK、XXX 注释
2. 评估每个标记的:严重性、是否过时(结合 git blame)、预估修复时间
3. 如果有超过 90 天的 TODO,特别标注
输出简洁的摘要,不超过 10 行。内置 Bundled Skills
Claude Code 自带几个内置 Skill,无需安装:
| Skill | 说明 |
|---|---|
/simplify | 分析代码质量,建议简化 |
/batch | 在多个并行 Worktree 上执行大规模变更 |
/debug | 调试当前会话的问题 |
/loop | 定期重复执行某个命令 |
/claude-api | Claude API 使用指导 |
这些 Skill 基于提示词,和自定义 Skill 调用方式相同。
权限控制
拒绝所有 Skills:在 /permissions 里添加 Skill 到拒绝规则。
只允许特定 Skills:
# 允许规则
Skill(commit)
Skill(review-pr *)
拒绝特定 Skills:
# 拒绝规则
Skill(deploy *)
来源:Claude Code 官方文档 - Extend Claude with skills | 整理:ClaudeEagle