内容来源:Software Engineer's Blog / Jamongx。https://jamongx.com/claude-code-skills-guide-teaching-ai-your-workflow/
原题:Claude Code Skills Guide: How to Automate Your Development Workflow
原发布时间:2026-01-04

Claude Code Skills 能把重复流程封装起来,让 Claude 自动审查代码、落实项目约定,并帮助团队保持一致的质量标准。

Claude Code Skills 指南:如何自动化开发工作流

Claude Code 是一个在终端中运行的编程智能体。它不只是生成代码,还能自动完成开发工作流中的重复性环节。

本文不讲安装或基础用法,而是写给已经在使用 Claude Code,并希望掌握如何设计真正能为实际项目带来自动化与一致性的 Skills 的开发者。

在 Claude Code 的各种功能中,Skills 是规定 Claude 如何处理重复任务、遵循项目工程约定的主要方式。本文将具体看看,它们如何帮助团队维持一致的代码质量。

2026 年 7 月更新——本指南 1 月发布的版本,把 Skills 描述为 .claude/commands/ 中的单个 .md 文件。此后,Skills 已改为目录结构(.claude/skills/<name>/SKILL.md),采用正式的 Frontmatter 规范,并在 agentskills.io 成为开放标准。本次修订已反映当前格式,示例也都来自我在真实项目中实际使用的 Skills。


1. Skills 是什么?

在 Claude Code 中,Skill 是一个包含 SKILL.md 文件的目录。这个文件定义 Claude 调用该 Skill 时需要遵循的指令、资源和执行步骤。对于个人和项目 Skills,目录名就是命令名:.claude/skills/code-review/SKILL.md 会提供 /code-review 命令。(插件 Skills 则会加上插件名称作为命名空间,例如 /my-plugin:review。)

Rules 是你的“政策文件”
Skills 是你的“标准作业程序”

需要分清的一点是:Skill 不是独立智能体。 它封装指令、资源与工具权限;除非 Frontmatter 对调用方式作出限制,否则由 Claude 或你来决定何时调用。

如果你还记得“自定义斜杠命令”.claude/commands/*.md):它们已经并入 Skills。.claude/commands/deploy.md 文件和 .claude/skills/deploy/SKILL.md Skill 都会创建 /deploy,旧命令文件也仍然有效。Skills 是推荐格式,因为它支持辅助文件、调用控制以及更丰富的 Frontmatter。如果两者定义了同名命令,Skill 优先。


2. Skill 的文件结构与位置

Skills 既可以按项目管理,也可以在整台机器上全局管理:

作用域 位置 适用范围
个人 ~/.claude/skills/<name>/SKILL.md 你的所有项目
项目 .claude/skills/<name>/SKILL.md 仅当前项目(通过 Git 共享)
插件 <plugin>/skills/<name>/SKILL.md 启用了该插件的所有位置

文件必须准确命名为 SKILL.md,而且 Skill 是一个目录,不是单个文件。这个目录可以携带辅助材料,只在需要时加载:

code-review/
├── SKILL.md          # 必需:Frontmatter + 指令
├── references/       # 详细文档,按需加载
├── scripts/          # 可执行辅助程序(运行,但不载入上下文)
└── assets/           # 模板、静态资源

在我看来,这是相较旧版单文件格式最实用的改进。尽量把 SKILL.md 控制在约 500 行以内,把大段参考资料放进 references/。Skill 正文加载后会在整个会话中留在上下文里,因此每一行都会持续产生 Token 成本。

关键:YAML Frontmatter

---
name: code-review
description: 对照 .claude/rules/ 审查代码,找出违反架构和约定的问题。
argument-hint: "[path] [--staged|--branch] [--fix]"
allowed-tools: Read Glob Grep Bash(git *)
---

☝️ description 字段依然至关重要。Claude 通常能看到可用 Skills 的名称和描述,并通过这些元数据判断哪一个与当前任务有关。如果你说“审查我的代码”,系统会拿这项请求与 Skill 描述进行匹配,所以描述必须包含明确、便于检索的关键词

在看表格之前,还应了解一个区别:Agent Skills 标准定义了可移植的核心字段(namedescriptionlicensecompatibilitymetadataallowed-tools)。下面其余字段——argument-hintdisable-model-invocationuser-invocablecontext——则是 Claude Code 扩展。这张表只介绍本文用到的字段,并未穷尽 Claude Code 的全部选项(此外还有 when_to_usemodelpathshooks 等):

字段 作用
name 显示名称(默认使用目录名)
description 自动调用的触发依据。为兼容其他工具,请控制在 1,024 个字符以内
argument-hint 输入 /name 后显示的自动补全提示
allowed-tools Skill 运行期间 Claude 无需申请权限即可使用的工具(标准要求以空格分隔;Claude Code 也接受逗号)
disable-model-invocation true = 只有你能触发;Claude 绝不会自动调用
user-invocable false = 不显示在 / 菜单中;仅供 Claude 使用的背景知识
context: fork 在隔离的子智能体上下文中运行 Skill

其中两个字段表达了旧格式无法描述的设计决策:谁有权扣动扳机。 对部署、提交、发送消息等会产生副作用的工作流,应设置 disable-model-invocation: true,避免 Claude 自行认定“现在正适合部署”。对于纯背景知识,则设置 user-invocable: false,让它不出现在命令菜单中。


3. 真实示例:/code-review Skill

这篇文章 1 月版本中的架构审查 Skill,至今仍是我每天都在使用的工具——只是现在已经成熟了许多。下面是我目前生产环境中 /code-review Skill 的 Frontmatter:

---
name: code-review
description: 对照 .claude/rules/ 审查代码,找出违反架构和约定的问题。
  支持 --staged、--head、--last、--today、--branch 作用域选项。
  添加 --fix 可自动修正。
argument-hint: "[path] [--staged|--head|--last|--today|--branch] [--fix]"
allowed-tools: Read, Glob, Grep, Edit, Bash(git *), Bash(find *)
---

当前版本依赖两项 1 月时还不存在的功能:

1. 参数。 Skill 正文中的 $ARGUMENTS 会替换为你在命令后输入的全部内容,因此一项 Skill 就能覆盖多种范围:

调用方式 审查范围
/code-review 最近 5 次提交中变更的文件
/code-review src/user/ 指定目录
/code-review --staged 提交前的最终检查
/code-review --branch 创建 PR 之前,对比当前分支与 main
/code-review --staged --fix 自动修复发现的问题

2. 动态上下文注入。 !`command` 占位符会在 Claude 看到 Skill 之前执行,并由命令输出替换。我的 Skill 用它预先列出规则文件和已变更文件:

- 项目规则:!`find .claude/rules -name "*.md" | sort`
- 已暂存文件:!`git diff --name-only --cached`

Claude Code 客户端会在预处理阶段执行这些命令;模型最终只会收到已展开的结果,作为 Skill 指令的一部分。这样可以消除整整一类“模型忘了先检查 X”的失败。

📎 完整可用示例:code-review SKILL.md归档副本)——把它保存为项目中的 .claude/skills/code-review/SKILL.md。创建 /code-review 命令的是目录名。

Claude Code 已经内置了一项 /code-review Skill。在个人或项目级添加自己的 code-review Skill 会覆盖内置版本——这正是我想要的结果:让审查由我自己的规则文件驱动,而不是采用通用规则。

这项 Skill 为什么强大

1、规则驱动的检查清单——Skill 会动态加载 .claude/rules/,而不是把政策硬编码进去。因此,同一个 Skill 能用于所有项目,并始终与当前规则文件保持一致。
2、严重程度定义——CRITICAL/WARNING/SUGGESTION 优先级可以避免注意力被琐碎问题淹没。
3、明确的执行流程——五步操作程序让审查过程更加稳定。


4. 输出示例

在终端运行 /code-review,会得到类似下面的结果:

> /code-review src/user/api/user_router.py

🔍 正在审查:src/user/api/user_router.py

## 发现架构违规

### 🚨 严重(2)

**第 45 行**:发现直接导入 Repository
  - 发现:`from src.user.repositories.user_repository import UserRepository`
  - 修复:删除这个导入,改用 Service 层。

**第 78 行**:API 层中存在业务逻辑
  - 发现:`if user.age >= 18 and user.verified:`
  - 修复:把这段验证移至 UserService.validate_user_eligibility()

### ⚠️ 警告(1)

**第 23 行**:手动实例化了 Service
  - 发现:`service = UserService()`
  - 修复:使用 `service: UserService = Depends(get_user_service)`

### 💡 建议(1)

**第 12 行**:建议添加返回类型注解
  - 当前:`async def get_user(user_id: int):`
  - 建议:`async def get_user(user_id: int) -> StandardResponse[UserResponse]:`

---
汇总:2 个严重问题、1 个警告、1 条建议
运行 `/code-review --fix` 自动修复适用的问题。

一条命令,就能根据项目已经记录的规则完成可重复的第一轮架构审查。它不能取代人工审查,却可以在 Pull Request 到达另一位开发者之前,捕捉常见违规。


安全说明:信任 Skill 之前先审查

让 Skills 变得强大的两项功能,也正是它们值得审计的原因。Skills 是可执行的工作流定义,而不是被动文档:

allowed-tools 会在 Skill 运行期间预先批准工具使用,不再弹出权限提示。
!`command` 这样的动态上下文表达式会在预处理期间运行,发生在渲染后的 Skill 内容到达模型之前。
• 对于陌生仓库中签入的 Skill,应当先阅读,再同意信任工作区。(你可以通过 disableSkillShellExecution 设置彻底禁用 Shell 预处理。)
• 权限应尽量收紧:Bash(git *) 优于 Bash(*),并且只列出流程确实需要的工具。


5. Skills 在哪些地方价值最大

① 保持代码质量一致

人工审查者的状态会随心情和精力变化。一项定义完善的 Skill 每次都会使用同一份检查清单,减少差异,也降低常见遗漏的概率。

② 封装复杂工作流

涉及多个文件的任务(例如添加新 API 端点需要 Router、Service、Schema 和测试文件),可以封装成一项 Skill,从而减少漏掉某个步骤的可能。

③ 把知识变成资产

把你的设计理念写入 Skill 文件,再通过 Git 共享。初级开发者也能生成始终符合已有资深工程师指南的代码。而且,Skills 遵循开放标准,你编码进去的标准作业程序不会被锁在某一种工具里。


6. 实用模式

下面这些都是我当前 ~/.claude/skills/ 和项目 .claude/skills/ 目录中真实存在的 Skills,并非假设示例:

Skill 命令 作用
/code-review 对照 .claude/rules/ 检查架构违规,按严重程度分类,并支持 --fix
/commit-push 暂存变更、生成 Conventional Commit 消息、确认并推送
/create-post 按全部内容约定搭建新博客文章骨架(Slug 规则、图片目录、Frontmatter Schema)
/feature-image 裁剪封面并在文件大小预算内转换为 16:9 WebP
/review-skill 元 Skill:对照开放标准审计 SKILL.md 文件,并支持 --fix

注意最后一行所体现的模式:一旦流程知识写进文件,你就可以创建用于维护其他 Skills 的 Skills。


7. 设计 Skills 的关键建议

1、认真编写描述——这是 Claude 决定何时自动加载 Skill 的主要信号。既要说明 Skill 做什么,也要说明什么时候使用:“审查代码是否符合整洁架构”要优于“代码审查”。
2、链接 Rules——不要在 Skill 内重复政策,而应加载它们:.claude/rules/ 是唯一信息源,Skill 则是应用规则的程序。
3、明确列出检查项——“审查这段代码”会产生不稳定的结果;“检查以下 5 项”才能带来可靠性。
4、定义严重程度——并非所有问题都同等重要,应在 Skill 中写明优先级判断标准。
5、加入验证步骤——最后始终执行“验证修改后的代码能否构建”或“运行 Lint”之类的检查。
6、保持 SKILL.md 精简——控制在约 500 行以内。把深度参考资料移至按需加载的 references/ 文件;Skill 正文会在整个会话中占用上下文。
7、控制触发者——部署、提交、发布等带副作用的工作流应设置 disable-model-invocation: true。护栏应写进 Frontmatter,而不是寄希望于模型自觉。
8、与 MCP 结合——如果你已经连接了 GitHub、数据库等外部工具的 MCP 服务器,就可以加入“编写代码之前先查询数据库 Schema”之类的指令,实现更智能的自动化。


结论

Claude Code Skills 能把反复说明的指令转变为可复用、受版本控制的工作流

它的质量并不太取决于提示词有多巧妙,更取决于你是否清楚地定义了 Claude 应当遵循的流程。

如果团队在代码审查中反复解释相同约定,那么这些约定就很适合封装为 Skill。先从一项范围明确的工作流开始,用真实任务测试,再随着流程变化不断改进。