本文教你像拆解精密机械一样逆向分析Claude Code Skill的内部构造,掌握SKILL.md全字段规范,学会改造社区Skill适配自身需求,并通过编排模式将多个Skill串联为自动化工作流。适合已了解Skill基础概念、希望进阶到Skill定制和编排的开发者。
学习目标:读完本文后,你能拆解任意一个已安装的Skill并理解其触发机制,能改造社区Skill适配自己的工作流,能设计并实现多Skill编排工作流。
适用人群:有Claude Code基础使用经验,已完成至少一个Skill的创建或安装,希望深度定制和编排Skill的中级用户。
github.com/anthropics/skills 获取).claude/ 目录结构一个完整的Skill不是单个文件,而是一个目录生态系统:
.claude/skills/my-skill/
├── SKILL.md # 核心指令文件(必需)
├── references/ # 参考文档目录(可选)
│ ├── api-docs.md # API参考
│ └── examples.md # 示例代码
├── templates/ # 模板文件(可选)
│ └── component.tsx # 代码模板
└── tests/ # 测试用例(可选)
└── test-cases.md # 验证场景
逆向要点:SKILL.md 是入口,references/ 是上下文扩展,templates/ 是输出约束。三者协同决定Skill的行为边界。
每个SKILL.md由两个核心层组成:
---
# 第一层:元数据层(YAML Frontmatter)
# 决定"何时触发"和"用什么资源"
name: my-skill
description: >
精确描述此Skill做什么。这段文字是模型判断
是否激活此Skill的关键依据。
triggers:
- "关键词或短语"
- "另一组触发条件"
tools:
- Read
- Write
- Bash
- Glob
- Grep
dependencies:
- another-skill
model: sonnet
effort: high
---
# 第二层:指令层(Markdown Body)
# 决定"怎么执行"
# 这里是具体的执行指令、流程步骤、输出格式规范
关键洞察:模型的决策链是 description → 判断相关性 → 读取body → 执行指令。逆向工程的第一步就是分析这两个层的信息密度和触发信号。
| 字段 | 类型 | 必需 | 作用 | 逆向关注点 |
|---|---|---|---|---|
name |
string | 是 | Skill唯一标识符 | 是否被其他Skill依赖 |
description |
string | 是 | 触发判断依据 | 关键词覆盖度 |
triggers |
string[] | 否 | 显式触发关键词 | 与description的重叠度 |
tools |
string[] | 否 | 限定可用工具集 | 最小权限原则 |
dependencies |
string[] | 否 | 前置Skill依赖 | 依赖链深度 |
model |
enum | 否 | 模型偏好(haiku/sonnet/opus) | 成本vs质量权衡 |
effort |
enum | 否 | 投入级别(low/medium/high) | 影响输出详略 |
disable-threading |
bool | 否 | 禁用多线程 | 特殊场景约束 |
allowed-tools |
string[] | 否 | 等同tools | 新版兼容字段 |
max-tokens |
int | 否 | 最大输出长度 | 长文本Skill需设大 |
temperature |
float | 否 | 创造性控制 | 创意类Skill设高 |
选择一个已安装的Skill作为拆解对象。查看当前已安装的Skill列表:
# 列出项目级Skill
ls -la .claude/skills/
# 列出用户级Skill
ls -la ~/.claude/skills/
# 递归查看Skill目录结构
find ~/.claude/skills/ -type f -name "SKILL.md"
以一个典型的 code-review Skill为例,逐字段逆向分析:
---
name: code-review
description: >
Perform a comprehensive code review on changes. Use when the user
asks to review code, check PR changes, or when completing tasks
before requesting code review. Analyzes code quality, security
vulnerabilities, performance issues, and adherence to project
conventions.
tools:
- Read
- Glob
- Grep
- Bash
effort: high
model: sonnet
---
逆向分析清单:
code-review — kebab-case命名,被 /code-review 斜杠命令直接调用Read读代码、Glob/Grep搜索上下文、Bash运行检查工具指令Body通常遵循以下结构模式:
# 指令Body的典型结构(通用模板)
## 上下文
说明此Skill在什么场景下被激活,以及用户期望什么
## 执行流程
分步骤描述执行逻辑,每步有明确的输入/输出
## 输出格式
定义最终输出的格式规范(JSON、Markdown表格、代码等)
## 约束条件
列出不能做的事情、边界情况处理
## 示例(可选)
给出1-2个完整的输入→输出样例
逆向技巧:将Body内容按"条件分支"提取为决策树。每个 if/when 语句就是一个分支节点:
flowchart TD
A[Skill被激活] --> B{变更类型?}
B -->|新功能| C[检查架构合理性]
B -->|Bug修复| D[验证修复完整性]
B -->|重构| E[评估行为等价性]
C --> F[安全扫描]
D --> F
E --> F
F --> G[生成Review报告]
G --> H[输出格式化结果]
Skill有两种激活方式,逆向时需分别验证:
方式一:斜杠命令显式触发
用户输入 /skill-name 直接激活。这种方式100%可靠,不依赖description质量。
方式二:自动触发
模型根据用户意图与Skill的 description 匹配度决定是否激活。这个过程的关键信号是:
用户消息: "帮我审查一下最近的代码变更"
↓
模型解析意图: code review → 匹配description中的"review code"
↓
激活Skill → 读取完整Body → 执行指令
逆向验证方法:用不同表述测试同一个Skill的自动触发率:
# 测试自动触发的不同表述
claude -p "check the recent changes for issues"
claude -p "review my code"
claude -p "find bugs in my latest commit"
claude -p "审计代码质量" # 中文表述
观察哪些表述成功触发,哪些没有,从中推断模型的匹配逻辑。
flowchart LR
A[发现目标Skill] --> B[复制到本地]
B --> C[分析触发词]
C --> D[修改description]
D --> E[调整指令Body]
E --> F[添加references]
F --> G[测试触发率]
G -->|触发率低| D
G -->|触发率高| H[部署到团队]
假设你需要将通用的 code-review Skill改造为适配TypeScript + React项目:
Step 1 — 复制原始Skill
mkdir -p .claude/skills/ts-react-review
cp -r ~/.claude/skills/code-review/* .claude/skills/ts-react-review/
Step 2 — 重写Frontmatter
---
name: ts-react-review
description: >
TypeScript + React项目专用代码审查。当用户要求审查React组件、
检查TypeScript类型安全、验证Hook使用规范、或审查Next.js路由时
自动激活。覆盖:组件设计模式、性能优化(useMemo/useCallback)、
类型安全(strict mode)、可访问性(aria属性)、测试覆盖率。
tools:
- Read
- Glob
- Grep
- Bash
effort: high
model: sonnet
---
改造要点:
- name 改为项目专属名称,避免与原Skill冲突
- description 注入领域关键词:React组件、Hook、TypeScript类型、Next.js路由
- 保持 tools 不变但可能增加(如需要 mcp__plugin_playwright 做UI审查)
Step 3 — 添加项目references
mkdir -p .claude/skills/ts-react-review/references
创建 references/conventions.md:
# 项目约定
## 组件命名
- PascalCase for components
- camelCase for utilities
- kebab-case for file names
## Hook规则
- 自定义Hook必须以 use 开头
- useEffect依赖数组必须显式声明
- 禁止在条件语句中调用Hook
## 类型规范
- 禁止使用 any,使用 unknown + 类型守卫
- Props必须定义interface,不用type
- 泛型参数命名 T开头 (TData, TError)
Step 4 — 改造指令Body
## 审查流程
1. **定位变更文件**
使用 Bash 运行 `git diff --name-only` 获取变更列表
2. **分类审查**
- `.tsx` 文件 → 执行React组件审查
- `.ts` 文件 → 执行TypeScript类型审查
- `.test.*` 文件 → 执行测试质量审查
3. **React组件审查清单**
- 组件是否拆分合理(<200行)
- 状态管理是否使用正确Hook
- 是否存在不必要的re-render
- JSX可读性和可访问性
4. **TypeScript审查清单**
- 类型覆盖率(无 any/unknown)
- 泛型使用是否合理
- 类型导出是否完整
5. **输出格式**
按严重级别分类输出:
- 🔴 Critical: 类型安全漏洞、安全漏洞
- 🟡 Warning: 性能隐患、不良模式
- 🟢 Suggestion: 改善建议、最佳实践
# 测试1:显式触发
claude -p "/ts-react-review"
# 测试2:隐式触发(不同表述)
claude -p "review my React components"
claude -p "检查TypeScript类型是否安全"
claude -p "这个组件有没有性能问题"
# 测试3:边界情况
claude -p "review this Python file" # 不应触发
flowchart TB
subgraph 链式编排
A1[Skill A] --> A2[Skill B] --> A3[Skill C]
end
subgraph 并行编排
B1[Skill A] --> B3[汇总]
B2[Skill B] --> B3
end
subgraph 条件编排
C1[Skill A] --> C2{条件判断}
C2 -->|满足| C3[Skill B]
C2 -->|不满足| C4[Skill C]
end
链式编排通过Skill的 dependencies 字段和Body中的流程指令实现。每个Skill的输出作为下一个Skill的输入。
实战案例:自动化发布流水线
创建编排Skill .claude/skills/release-pipeline/SKILL.md:
---
name: release-pipeline
description: >
执行完整的发布流水线:代码审查 → 测试 → 变更日志 → 版本发布。
当用户说"发布新版本"、"准备release"、"执行发布流程"时激活。
tools:
- Read
- Write
- Bash
- Glob
- Grep
dependencies:
- code-review
effort: high
---
## 发布流水线
按顺序执行以下步骤,每步必须通过才继续:
### Step 1: 代码审查
运行 /code-review 审查所有未提交变更。
如果发现 Critical 级别问题,暂停并报告,不继续。
### Step 2: 测试验证
运行项目测试套件:
- 单元测试: npm test
- 类型检查: npm run typecheck
- Lint: npm run lint
任何测试失败都暂停流水线。
### Step 3: 生成变更日志
分析 git log --oneline 自上次tag以来的所有commit:
- 按feat/fix/breaking分类
- 生成 CHANGELOG.md 新条目
### Step 4: 版本号更新
根据变更类型决定版本号:
- breaking → major
- feat → minor
- fix → patch
更新 package.json 中的版本号。
### Step 5: Git标签
创建版本标签并推送。
### 输出
发布总结报告,包含版本号、变更列表、测试结果。
链式编排的关键:在Body中明确写出"按顺序执行"和"前一步失败则停止"的逻辑。模型会遵循这些指令按序调用依赖Skill。
并行编排利用Claude Code的Task工具特性,同时派发多个子任务给不同Skill处理。
实战案例:全方位项目健康检查
创建 .claude/skills/health-check/SKILL.md:
---
name: health-check
description: >
项目全方位健康检查。同时执行代码质量、依赖安全、测试覆盖率、
文档完整性四个维度的检查。当用户说"项目健康检查"、"全面审查
项目"、"检查项目质量"时激活。
tools:
- Read
- Bash
- Glob
- Grep
effort: high
---
## 项目健康检查
同时启动四个维度的检查:
### 维度1: 代码质量
- 统计代码行数和文件数
- 检查是否存在超大文件(>500行)
- 分析圈复杂度热点
### 维度2: 依赖安全
- 运行 npm audit
- 检查过时的依赖 (npm outdated)
- 识别未使用的依赖
### 维度3: 测试覆盖率
- 运行 npm test -- --coverage
- 分析覆盖率趋势
- 识别未测试的关键模块
### 维度4: 文档完整性
- 检查 README.md 是否存在
- API文档覆盖率
- CHANGELOG维护状态
### 输出格式
| 维度 | 状态 | 评分 | 关键发现 |
|------|------|------|----------|
| 代码质量 | ✅/⚠️/❌ | A-F | ... |
| 依赖安全 | ✅/⚠️/❌ | A-F | ... |
| 测试覆盖 | ✅/⚠️/❌ | A-F | ... |
| 文档完整 | ✅/⚠️/❌ | A-F | ... |
最终给出综合健康评分和改善优先级列表。
并行编排的关键:在Body中使用"同时启动"而非"按顺序"的措辞。模型理解这种语义差异并可能利用Task工具并行派发。
条件编排通过Body中的分支逻辑实现,根据代码分析结果动态选择后续Skill。
实战案例:智能修复路由器
创建 .claude/skills/auto-fixer/SKILL.md:
---
name: auto-fixer
description: >
智能问题诊断与自动修复。分析错误类型后自动选择合适的修复策略。
当用户报告bug、测试失败、或构建错误时激活。
tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
dependencies:
- code-review
effort: high
---
## 智能修复流程
### Step 1: 错误分类
分析用户提供的错误信息或测试输出,判断类型:
- **Type Error** → 执行TypeScript修复流程
- **Import Error** → 执行模块解析修复
- **Runtime Error** → 执行逻辑调试
- **Test Failure** → 执行测试驱动修复
- **Build Error** → 执行构建配置修复
### Step 2: 定位根因
根据错误类型使用不同策略:
- Type Error: 读取相关 .ts/.tsx 文件,追踪类型链
- Import Error: 检查 tsconfig paths、package.json exports
- Runtime Error: 添加调试日志,分析调用栈
- Test Failure: 读取测试文件,理解期望行为
- Build Error: 检查构建配置、环境变量
### Step 3: 实施修复
应用修复后必须:
1. 重新运行失败的测试/构建
2. 确认修复未引入新问题
3. 如果修复失败,回退变更并尝试方案B
### 输出
修复报告,包含:错误类型、根因分析、修复方案、验证结果。
现在将上述所有技术整合为一个完整的多Skill编排系统。
flowchart TD
subgraph 触发层
T1[/review-full 斜杠命令]
T2["自然语言触发"]
end
subgraph 编排层
ORCH[review-orchestrator<br/>主编排Skill]
end
subgraph 执行层
S1[ts-react-review<br/>TypeScript审查]
S2[security-scan<br/>安全扫描]
S3[perf-audit<br/>性能审计]
end
subgraph 汇总层
AGG[review-report<br/>报告生成]
end
T1 --> ORCH
T2 --> ORCH
ORCH --> S1
ORCH --> S2
ORCH --> S3
S1 --> AGG
S2 --> AGG
S3 --> AGG
AGG --> OUT[结构化Review报告]
mkdir -p .claude/skills/review-orchestrator
.claude/skills/review-orchestrator/SKILL.md:
---
name: review-orchestrator
description: >
全方位代码审查编排器。协调TypeScript审查、安全扫描和性能审计
三个专业Skill,生成综合审查报告。当用户说"全面审查"、"完整
review"、"代码评审"时激活。也可通过 /review-full 显式调用。
tools:
- Read
- Bash
- Glob
- Grep
dependencies:
- ts-react-review
- security-scan
- perf-audit
effort: high
---
指令Body:
## 全方位代码审查编排
### 阶段1: 变更收集
运行以下命令获取待审查的代码变更:
```bash
git diff --name-only HEAD~1
如果用户指定了文件范围,使用用户指定的文件列表。
将文件按类型分发给对应的专业审查Skill:
TypeScript/React文件 (.ts, .tsx, .js, .jsx): - 调用 ts-react-review 的审查逻辑 - 关注类型安全、组件设计、Hook规范
安全相关 (所有文件): - 运行安全扫描检查 - 关注:注入漏洞、XSS、敏感信息泄露、不安全的依赖
性能相关 (.tsx, .css, 配置文件): - 运行性能审计 - 关注:bundle大小、不必要的re-render、大循环、内存泄漏
收集三个维度的审查结果,生成统一格式的报告:
# 代码审查报告
## 概要
- 审查文件数: X
- Critical: X 🔴
- Warning: X 🟡
- Suggestion: X 🟢
## TypeScript审查结果
[ts-react-review的输出]
## 安全扫描结果
[security-scan的输出]
## 性能审计结果
[perf-audit的输出]
## 修复优先级
1. [最关键的修复建议]
2. [次关键的修复建议]
3. ...
### 5.3 创建安全扫描子Skill
```bash
mkdir -p .claude/skills/security-scan
.claude/skills/security-scan/SKILL.md:
---
name: security-scan
description: >
代码安全扫描。检查OWASP Top 10漏洞、敏感信息泄露、
不安全的依赖版本。当用户提到安全审计、漏洞扫描、
security review时自动激活。
tools:
- Read
- Bash
- Grep
effort: high
---
## 安全扫描流程
### 检查项
1. **敏感信息泄露**
搜索以下模式:
- API keys (grep -r "api_key\|apiKey\|API_KEY")
- 密码硬编码 (grep -r "password\|passwd" --include="*.ts")
- JWT secrets
- .env文件是否被git追踪
2. **注入漏洞**
- SQL注入: 检查原始SQL查询
- XSS: 检查 dangerouslySetInnerHTML
- 命令注入: 检查 child_process 使用
3. **依赖安全**
运行 npm audit --json,分析结果
4. **认证/授权**
- 检查路由是否有权限守卫
- Token存储方式是否安全
- CORS配置是否合理
### 输出格式
按严重级别分类,每项包含:
- 🔴/🟡/🟢 严重级别
- 文件路径:行号
- 问题描述
- 修复建议(含代码示例)
mkdir -p .claude/skills/perf-audit
.claude/skills/perf-audit/SKILL.md:
---
name: perf-audit
description: >
前端性能审计。分析React组件渲染性能、Bundle大小、
网络请求优化、图片资源优化。当用户提到性能优化、
页面加载慢、性能审查时激活。
tools:
- Read
- Bash
- Glob
- Grep
effort: medium
---
## 性能审计流程
1. **Bundle分析**
检查 package.json 依赖大小:
```bash
npx bundlephobia-client
```
2. **React渲染优化**
- 搜索缺少 key 的列表渲染
- 检查是否滥用 useState 导致不必要渲染
- 查找缺少 React.memo 的纯展示组件
- 检查 useEffect 缺少依赖数组
3. **资源优化**
- 图片是否使用现代格式(WebP/AVIF)
- 是否有懒加载 (lazy loading)
- CSS是否按需引入
4. **网络优化**
- API调用是否有去重/缓存
- 是否使用 SWR/React Query
- 是否有不必要的瀑布请求
### 输出
每个发现附带性能影响评估(高/中/低)和具体优化方案。
# 验证目录结构
find .claude/skills/ -name "SKILL.md" | sort
预期输出:
.claude/skills/review-orchestrator/SKILL.md
.claude/skills/ts-react-review/SKILL.md
.claude/skills/security-scan/SKILL.md
.claude/skills/perf-audit/SKILL.md
测试触发:
# 测试编排器显式触发
claude -p "/review-orchestrator"
# 测试自然语言触发
claude -p "请全面审查一下最近的代码变更"
# 测试子Skill独立触发
claude -p "检查代码里有没有安全漏洞"
claude -p "分析一下前端性能问题"
通过在Body中写条件逻辑实现动态依赖选择:
## 动态路由
首先判断项目类型:
1. 如果存在 `package.json` 且包含 "next" → 这是Next.js项目
→ 调用 nextjs-specific 审查规则
→ 检查 App Router vs Pages Router
2. 如果存在 `Cargo.toml` → 这是Rust项目
→ 调用 rust-specific 审查规则
→ 检查 unsafe 代码块
3. 如果存在 `go.mod` → 这是Go项目
→ 调用 go-specific 审查规则
→ 检查 goroutine 泄漏
多个Skill通过共享references目录实现知识复用:
.claude/
├── skills/
│ ├── review-orchestrator/
│ │ └── SKILL.md
│ ├── ts-react-review/
│ │ ├── SKILL.md
│ │ └── references/
│ │ └── ts-conventions.md
│ └── security-scan/
│ ├── SKILL.md
│ └── references/
│ └── owasp-checklist.md
└── rules/
└── project-standards.md ← 全局规则文件
CLAUDE.md 中引用全局规则确保所有Skill共享项目上下文:
# 项目规则
所有Skill执行时参考:
- @rules/project-standards.md
- 编码规范遵循 Airbnb Style Guide
- 提交信息遵循 Conventional Commits
在编排器中定义错误处理策略:
## 错误处理策略
### 子Skill失败时的降级方案
1. 如果 ts-react-review 执行失败(如文件格式不支持)
→ 降级为通用代码审查,不丢失功能
2. 如果 security-scan 的 npm audit 超时
→ 跳过依赖检查,仅报告代码层面的安全问题
→ 在报告中标注"[依赖安全检查已跳过]"
3. 如果 perf-audit 无法分析bundle大小
→ 仅报告代码层面的性能建议
→ 标注"[Bundle分析不可用]"
### 硬性约束
- 所有Critical级别的发现必须报告,即使其他检查被跳过
- 最终报告必须明确标注哪些检查被跳过及原因
原因:description中的关键词与用户的实际表述匹配度不够。
解决方案:
# 错误写法 — 太抽象
description: "Code review for TypeScript projects"
# 正确写法 — 覆盖多种表述
description: >
TypeScript React项目代码审查。当用户要求审查代码、
review PR、检查TypeScript类型、审查React组件、
code review、代码评审时激活。覆盖类型安全、Hook
规范、组件设计、性能优化、安全漏洞检查。
验证技巧:在description中包含中英文双语触发词,提高跨语言触发率。
原因:dependencies 字段只声明依赖关系,不会自动执行被依赖的Skill。
解决方案:在编排器的Body中明确写出调用指令:
## 执行步骤
1. 首先执行 /ts-react-review 审查代码质量
2. 然后执行 /security-scan 检查安全漏洞
3. 最后执行 /perf-audit 审计性能
4. 汇总三个结果生成报告
原因:不同Skill可能输出不同格式的结果,汇总时难以统一。
解决方案:在每个子Skill的Body末尾统一输出格式:
## 输出格式(必须严格遵守)
```json
{
"skill_name": "ts-react-review",
"findings": [
{
"severity": "critical|warning|info",
"file": "path/to/file",
"line": 42,
"message": "问题描述",
"suggestion": "修复建议"
}
],
"summary": "总体评价"
}
### Q4: Skill执行时上下文溢出
**原因**:references目录中放了大量文件,全部加载超出上下文窗口。
**解决方案**:
1. 将references文件控制在500行以内
2. 使用分层references:`references/essential.md`(核心)+ `references/extended.md`(扩展)
3. 在Body中明确指示"仅在需要时读取extended.md"
---
## Skill编排工作流总结
```mermaid
flowchart TB
START[开始] --> DISCOVER[发现/搜索Skill]
DISCOVER --> ANALYZE[逆向分析Skill结构]
ANALYZE --> DECIDE{是否满足需求?}
DECIDE -->|是| INTEGRATE[直接集成使用]
DECIDE -->|部分满足| FORK[Fork并改造]
DECIDE -->|不满足| CREATE[从零创建]
FORK --> TEST1[测试触发与输出]
CREATE --> TEST1
INTEGRATE --> TEST1
TEST1 --> MULTIPLE{需要多Skill协作?}
MULTIPLE -->|是| ORCHESTRATE[设计编排模式]
MULTIPLE -->|否| DEPLOY[部署使用]
ORCHESTRATE --> TEST2[端到端测试]
TEST2 --> DEPLOY
DEPLOY --> ITERATE[持续迭代优化]
ITERATE --> DISCOVER
| 维度 | 评估 |
|---|---|
| 适用训练营 | AI编程进阶营、DevOps自动化营、团队工具链营 |
| 教学时长 | 4-6小时(含实操) |
| 难度等级 | ⭐⭐⭐⭐ 中高级 |
| 前置要求 | Claude Code基础使用、至少一个Skill使用经验 |
| 实操占比 | 70%(大量拆解和改造练习) |
| 最佳分组 | 2-3人一组,每组选择不同的社区Skill进行逆向和改造 |
建议教学节奏: - 第1小时:Skill解剖结构讲解 + Frontmatter全字段解读 - 第2小时:现场逆向拆解一个社区Skill - 第3-4小时:学员分组改造Skill适配各自项目 - 第5小时:编排模式讲解 + 编排器创建 - 第6小时:各组展示成果 + 集体Review
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
