首页 › tutorials › Skill与Subagent联合编排实战

概述

在Claude Code的扩展体系中,Skill和Subagent是两个核心机制。大多数开发者只熟悉其中之一——要么写过简单的SKILL.md,要么配置过基本的自定义命令。但当我们将两者结合,利用Skill的动态上下文注入(!command``语法)与Subagent的隔离执行能力进行联合编排时,就能构建出远超单一功能的自动化工作流。

本文将从架构层面剖析Skill与Subagent的协作关系,通过一个完整的实战案例——构建「智能PR审查工作流」——演示如何将动态数据采集、多Agent并行分析、结果聚合与报告生成串联为一个端到端的自动化流程。这不是一篇入门教程,而是一次深入Claude Code高级编排模式的实战探索。

graph TB
    A[用户调用 /pr-review] --> B[Skill: pr-review]
    B --> C{动态上下文注入}
    C --> C1["!`gh pr diff`"]
    C --> C2["!`gh pr view --comments`"]
    C --> C3["!`gh pr diff --name-only`"]
    C1 & C2 & C3 --> D[渲染后的完整Skill内容]
    D --> E{context: fork}
    E --> F[Subagent: Explore]
    F --> F1[Glob搜索相关文件]
    F --> F2[Grep查找模式匹配]
    F --> F3[Read读取关键代码]
    F1 & F2 & F3 --> G[审查报告返回主会话]

    style A fill:#4A90D9,color:#fff
    style B fill:#7B68EE,color:#fff
    style C fill:#FF6B6B,color:#fff
    style E fill:#FFD93D,color:#333
    style F fill:#6BCB77,color:#fff
    style G fill:#4D96FF,color:#fff

前置知识

在深入本文之前,你需要具备以下基础:

必备条件: - Claude Code CLI已安装并可正常使用(v2.1.63+) - 理解SKILL.md的基本结构(frontmatter + markdown指令) - 了解Claude Code的权限系统基础 - 熟悉Git和GitHub CLI(gh命令)的基本操作

建议了解: - Subagent的基本概念(独立上下文窗口、工具限制) - CLAUDE.md的配置方式 - MCP协议的基础知识

环境准备: - 一个包含Git仓库的项目目录 - 已安装并认证的GitHub CLI(gh auth login) - 文本编辑器(用于创建Skill文件)

正文

1. 理解Skill与Subagent的协作架构

1.1 两种扩展机制的本质差异

Skill和Subagent虽然都是Claude Code的扩展手段,但它们的定位截然不同:

Skill 是「知识注入」——它将指令、模板、上下文加载到当前会话中,Claude在主会话上下文中执行这些指令。Skill的内容一旦加载,就会在后续所有轮次中保留。

Subagent 是「任务隔离」——它在一个独立的上下文窗口中启动,拥有自己的系统提示词、工具集和权限。Subagent完成后只将结果摘要返回主会话,所有中间过程(文件搜索、代码阅读、命令输出)都留在隔离的上下文中,不会污染主会话。

graph LR
    subgraph 主会话上下文
        A[CLAUDE.md] --> B[Skill内容]
        B --> C[Claude主线程]
    end

    subgraph Subagent隔离上下文
        D[自定义系统提示词] --> E[受限工具集]
        E --> F[独立Agent执行]
    end

    C -->|"Agent工具委托"| D
    F -->|"结果摘要返回"| C

    style C fill:#4A90D9,color:#fff
    style F fill:#6BCB77,color:#fff

关键区别在于:Skill的内容会持续占用主会话的token预算,而Subagent的工作过程完全隔离。这意味着当你需要处理大量中间数据(如完整的diff、搜索结果、日志输出)时,Subagent是更好的选择。

1.2 context:fork——连接Skill与Subagent的桥梁

Claude Code提供了一个关键特性 context: fork,它让Skill可以在Subagent中执行。当Skill设置了 context: fork 时:

  1. Skill的SKILL.md内容被作为任务提示词传递给Subagent
  2. Subagent在独立上下文中执行,不接触主会话历史
  3. 执行完成后,只有结果摘要返回主会话

这创造了一种强大的模式:在Skill中定义"做什么"和"怎么做",在Subagent中隔离执行"做的过程"。

1.3 动态上下文注入——让Skill拥有实时数据

Skill的另一个强大特性是 !command`` 语法(称为"shell injection"或"动态上下文注入")。当Skill加载时,Claude Code会先执行这些shell命令,将输出替换到Skill内容中,然后才将最终结果发送给Claude。

这意味着Claude接收到的不是命令本身,而是命令的实际输出。例如:

## 当前变更
!`git diff HEAD`

当这个Skill被加载时,git diff HEAD 会先被执行,其输出替换 !...`` 占位符。Claude最终看到的是当前工作树的实际diff内容。

关键点: 动态注入发生在Skill渲染阶段,而非Claude执行阶段。Claude只看到最终结果,无法修改或注入新的命令。

2. 实战:构建智能PR审查工作流

现在我们将上述三个核心概念——Skill定义、动态上下文注入、Subagent隔离执行——组合为一个完整的自动化工作流。

2.1 需求分析

我们的目标是构建一个 /pr-review Skill,它能够:

  1. 自动获取当前PR的diff、评论和变更文件列表
  2. 将这些数据连同分析指令发送给一个只读Subagent
  3. Subagent在隔离上下文中完成深度代码审查
  4. 将审查报告返回主会话

这个设计的好处是:大量diff数据和中间搜索过程不会占用主会话上下文。

2.2 创建Skill目录结构

mkdir -p ~/.claude/skills/pr-review

2.3 编写SKILL.md

创建文件 ~/.claude/skills/pr-review/SKILL.md,内容如下:

---
name: pr-review
description: >
  深度审查当前Pull Request。当用户要求审查PR、检查代码变更、
  或提到PR review时自动触发。分析代码质量、安全性、性能和可维护性。
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

# Pull Request 深度审查

## PR上下文数据

以下是当前PR的实时数据:

### 变更文件列表
!`gh pr diff --name-only 2>/dev/null || echo "未检测到PR上下文,请在PR分支上运行"`

### 完整Diff
!`gh pr diff 2>/dev/null | head -3000`

### PR评论与元信息
!`gh pr view --comments --json title,body,comments,reviews,labels,additions,deletions,changedFiles 2>/dev/null || echo "{}"`

## 审查任务

基于以上PR数据,执行以下审查流程:

### 第一步:理解变更范围
- 分析变更文件列表,识别受影响的模块
- 统计新增、修改、删除的文件数量
- 识别核心变更文件(变更行数最多的文件)

### 第二步:逐文件深度审查
对每个核心变更文件:
1. 使用Glob查找文件位置
2. 使用Read读取完整文件内容(不仅是diff片段)
3. 评估以下维度:
   - **代码质量**:命名规范、函数长度、代码重复
   - **安全性**:SQL注入、XSS、敏感信息暴露、不安全的依赖
   - **性能**:N+1查询、不必要的循环、内存泄漏风险
   - **可维护性**:过度嵌套、魔法数字、缺失的错误处理
   - **测试覆盖**:变更部分是否有对应测试

### 第三步:关联分析
- 检查变更是否影响其他模块的接口
- 使用Grep搜索项目中是否有调用被修改函数的其他位置
- 评估向后兼容性

### 第四步:生成审查报告

按以下格式输出:

## 审查报告

**PR标题**: [从数据中提取]
**变更统计**: [文件数] 个文件,+[新增行] / -[删除行]

### 关键发现

#### 🔴 必须修复
[列出严重问题,包含文件路径和行号]

#### 🟡 建议改进
[列出中等问题]

#### 🟢 值得肯定
[列出好的实践]

### 风险评估
- 向后兼容性: [高/中/低]
- 安全风险: [高/中/低]
- 性能影响: [高/中/低]

### 建议的测试补充
[列出需要补充的测试用例]

2.4 配置解析

让我们逐一分析这个Skill的关键配置:

context: fork — 这是整个设计的核心。它确保PR的大量diff数据、文件搜索过程都在隔离的Subagent上下文中处理。主会话只接收最终的审查报告。

agent: Explore — 指定使用内置的Explore Subagent。Explore是一个只读Agent,使用Haiku模型,速度快且成本低。它拥有Glob、Grep、Read等只读工具,非常适合代码审查场景。

allowed-tools: Bash(gh *) — 预授权GitHub CLI命令。这里的工具授权发生在Skill渲染阶段(动态注入 !gh...`` 命令),而非Subagent执行阶段。Subagent本身使用Explore Agent的只读工具集。

!gh pr diff... — 三处动态上下文注入,在Skill加载时并行执行。Claude看到的是命令的输出结果,而非命令本身。

2.5 工作流执行流程

sequenceDiagram
    participant U as 用户
    participant CC as Claude Code
    participant SE as Shell引擎
    participant SA as Explore Subagent

    U->>CC: /pr-review
    CC->>CC: 识别Skill: pr-review
    CC->>SE: 执行 !`gh pr diff --name-only`
    CC->>SE: 执行 !`gh pr diff | head -3000`
    CC->>SE: 执行 !`gh pr view --comments --json ...`
    SE-->>CC: 返回命令输出
    CC->>CC: 渲染完整Skill内容<br/>(替换占位符为输出)
    CC->>SA: context:fork<br/>发送渲染后的Skill内容
    Note over SA: 在隔离上下文中执行
    SA->>SA: 分析变更文件列表
    SA->>SA: Glob查找核心文件
    SA->>SA: Read读取文件内容
    SA->>SA: Grep搜索关联引用
    SA->>SA: 生成结构化审查报告
    SA-->>CC: 返回审查报告摘要
    CC-->>U: 展示完整审查报告

2.6 测试Skill

在一个有活跃PR的Git仓库中:

# 确保在PR分支上
git checkout feature/my-feature
gh pr status

# 启动Claude Code
claude

# 方式1:直接调用
/pr-review

# 方式2:自然语言触发
请帮我审查当前的Pull Request

如果一切正常,你会看到Claude启动一个Explore Subagent,后者在隔离上下文中分析代码,最终返回一份结构化的审查报告。

3. 进阶:多Skill串联编排

单个Skill已经能完成不少工作,但真正的威力在于多个Skill之间的串联编排。

3.1 设计一个三层审查体系

我们可以设计三个Skill,分别处理不同维度的审查:

Skill 1: /pr-review — 代码质量审查(已创建)

Skill 2: /pr-security — 安全漏洞专项检查

---
name: pr-security
description: >
  PR安全专项审查。检查SQL注入、XSS、CSRF、敏感信息泄露、
  不安全的依赖引入等安全问题。
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

# PR安全审查

## PR Diff
!`gh pr diff 2>/dev/null | head -3000`

## 变更文件
!`gh pr diff --name-only 2>/dev/null`

## 安全检查清单

逐一检查以下安全维度:

### 输入验证
- 搜索所有用户输入处理点(使用Grep搜索 req.body, params, query)
- 验证是否有适当的输入验证和消毒
- 检查是否存在原型污染风险

### 认证与授权
- 搜索认证相关代码(搜索 auth, token, session, cookie)
- 检查是否有权限绕过风险
- 验证敏感操作是否有适当的权限检查

### 数据保护
- 搜索敏感数据模式(搜索 password, secret, key, token, api_key)
- 检查是否有硬编码的凭据
- 验证日志中是否泄露敏感信息

### 注入风险
- 搜索SQL查询构建(搜索 query, execute, raw)
- 检查是否有参数化查询
- 搜索DOM操作(搜索 innerHTML, dangerouslySetInnerHTML)
- 检查命令注入风险(搜索 exec, spawn, system)

### 依赖安全
- 如果存在package.json变更,检查新增依赖的已知漏洞
- 检查是否有不安全的API使用

## 输出格式

### 🛡️ 安全审查报告

**严重程度**: 🔴 高危 / 🟡 中危 / 🟢 低危 / ✅ 安全

对每个发现的问题,提供:
- 问题类型和严重程度
- 文件路径和代码位置
- 潜在攻击向量
- 修复建议(含代码示例)

Skill 3: /pr-test-check — 测试覆盖分析

---
name: pr-test-check
description: >
  检查PR的测试覆盖情况。分析哪些变更代码缺少对应测试,
  并建议需要补充的测试用例。
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---

# PR测试覆盖分析

## 变更文件
!`gh pr diff --name-only 2>/dev/null`

## PR Diff
!`gh pr diff 2>/dev/null | head -3000`

## 分析流程

### 第一步:识别变更的生产代码文件
从变更文件列表中,过滤出生产代码文件(排除test、spec、__tests__目录)。

### 第二步:定位对应测试文件
对每个变更的生产代码文件:
1. 使用Glob搜索对应的测试文件
   - `src/foo.ts` → 搜索 `**/*foo*.test.*`、`**/*foo*.spec.*`
2. 使用Read读取找到的测试文件
3. 分析测试是否覆盖了新增/修改的函数和方法

### 第三步:评估覆盖缺口
对每个缺少测试的变更:
- 列出未覆盖的函数/方法
- 建议应编写的测试用例
- 评估风险等级(核心逻辑 vs 辅助函数)

## 输出格式

### 🧪 测试覆盖报告

**已覆盖变更**: [文件数]/[总数]
**覆盖率**: [百分比]%

#### ❌ 缺少测试的变更
| 文件 | 变更内容 | 建议测试 | 风险等级 |
|------|---------|---------|---------|
| ... | ... | ... | ... |

#### 建议新增的测试用例
[为每个缺口提供具体的测试代码建议]

3.2 编排层:统一调用接口

现在我们有三个独立的审查Skill,可以在主会话中通过一个CLAUDE.md规则实现统一编排。在项目的 .claude/CLAUDE.md 中添加:

## PR审查规则

当用户要求"全面审查PR"或使用 `/pr-full-review` 时:

1. 依次执行以下三个Skill:
   - `/pr-review` → 获取代码质量报告
   - `/pr-security` → 获取安全审查报告
   - `/pr-test-check` → 获取测试覆盖报告

2. 汇总三个报告,生成综合评估:
   - 整体风险等级
   - 必须修复的阻塞问题
   - 合并建议(通过/需修改/拒绝)

也可以创建一个编排Skill:

---
name: pr-full-review
description: >
  一键执行完整的PR审查流程,包括代码质量、安全性和测试覆盖分析。
  自动串联三个专项审查Skill并汇总结果。
disable-model-invocation: true
---

# 全面PR审查

执行完整的PR审查流程:

1. 使用 /pr-review 进行代码质量审查
2. 使用 /pr-security 进行安全专项检查
3. 使用 /pr-test-check 进行测试覆盖分析

收集三个审查的报告后,生成综合评估:

## 综合评估

### 风险矩阵
| 维度 | 风险等级 | 关键发现数 |
|------|---------|-----------|
| 代码质量 | ... | ... |
| 安全性 | ... | ... |
| 测试覆盖 | ... | ... |

### 合并建议
基于综合分析,给出明确的合并建议:
- ✅ 可以合并
- ⚠️ 修复后可合并(列出必须修复项)
- ❌ 不建议合并(列出阻塞原因)

### 优先修复事项
按紧急程度排列所有必须修复的问题。
graph TB
    A["/pr-full-review"] --> B["/pr-review<br/>代码质量"]
    A --> C["/pr-security<br/>安全审查"]
    A --> D["/pr-test-check<br/>测试覆盖"]

    B --> E["Explore Subagent<br/>隔离执行"]
    C --> F["Explore Subagent<br/>隔离执行"]
    D --> G["Explore Subagent<br/>隔离执行"]

    E --> H["质量报告"]
    F --> I["安全报告"]
    G --> J["测试报告"]

    H & I & J --> K["主会话汇总"]
    K --> L["综合评估 + 合并建议"]

    style A fill:#4A90D9,color:#fff
    style E fill:#6BCB77,color:#fff
    style F fill:#6BCB77,color:#fff
    style G fill:#6BCB77,color:#fff
    style L fill:#FF6B6B,color:#fff

4. Subagent选择与自定义策略

在上面的案例中我们使用了内置的Explore Agent。但Claude Code允许创建自定义Subagent,为Skill提供更精准的执行环境。

4.1 创建专用的代码审查Subagent

创建文件 ~/.claude/agents/code-analyzer.md:

---
name: code-analyzer
description: 专注代码分析的高级Agent,支持深度代码理解
tools: Read, Grep, Glob, Bash
model: sonnet
---

你是一位资深代码分析师。你的任务是深度分析代码变更并生成结构化报告。

## 工作原则

1. **上下文优先**:在分析任何变更前,先理解所属模块的整体架构
2. **证据驱动**:每个发现都必须引用具体的文件路径和代码片段
3. **分层报告**:按严重程度分级,区分阻塞性问题和改进建议
4. **可操作性**:每个建议都附带具体的修复方案

## 分析框架

- 变更影响范围分析
- 代码模式识别(反模式检测)
- 依赖关系追踪
- 接口兼容性评估

## 输出要求

使用中文输出报告。技术术语保持英文原文。

然后在Skill中引用这个自定义Agent:

---
name: pr-review-pro
description: 使用自定义分析Agent进行深度PR审查
context: fork
agent: code-analyzer
---

4.2 Agent选择决策矩阵

场景 推荐Agent 原因
快速代码探索 Explore (Haiku) 速度快、成本低、只读安全
深度代码分析 自定义code-analyzer (Sonnet) 更强的推理能力
需要修改代码 general-purpose 拥有Edit/Write工具
规划与研究 Plan 自动跳过CLAUDE.md,节省上下文

4.3 Skill预加载到Subagent

反向场景:你可以将Skill预加载到Subagent中,而不是让Skill运行在Subagent里。这适用于你需要给Subagent提供领域知识的情况:

---
name: api-developer
description: 按团队规范实现API端点
tools: Read, Edit, Write, Bash
skills:
  - api-conventions
  - error-handling-patterns
---

实现API端点。严格遵循预加载的约定和模式。

当这个Subagent被调用时,api-conventions 和 error-handling-patterns 两个Skill的完整内容会被注入到Subagent的启动上下文中。这意味着Subagent不需要在运行时发现和加载这些Skill,它们从一开始就在上下文里。

两种模式对比:

graph LR
    subgraph "模式A: Skill在Subagent中运行"
        A1[SKILL.md] -->|"context:fork"| A2[Subagent执行]
    end

    subgraph "模式B: Skill预加载到Subagent"
        B1[Agent定义] -->|"skills字段"| B2[Skill内容注入]
        B2 --> B3[Subagent启动时已拥有知识]
    end

    style A1 fill:#7B68EE,color:#fff
    style B1 fill:#6BCB77,color:#fff

5. 动态上下文注入的深度应用

5.1 多行命令与复杂脚本

动态注入不仅支持单行命令,还支持多行脚本块:

## 环境信息
```!
node --version
npm --version
git log --oneline -5
git status --short
使用 ` ```! ` 语法(三个反引号加感叹号)可以执行多行命令,所有输出合并替换整个代码块。

### 5.2 条件化上下文

通过shell逻辑实现条件化上下文注入:

```markdown
## 测试状态
!`if [ -f "package.json" ]; then npm test 2>&1 | tail -20; elif [ -f "pytest.ini" ]; then pytest --tb=short -q 2>&1 | tail -20; else echo "未检测到测试框架"; fi`

这段注入会根据项目类型自动选择合适的测试命令。

5.3 使用${CLAUDE_SKILL_DIR}引用技能内文件

当Skill包含辅助脚本时,使用 ${CLAUDE_SKILL_DIR} 变量确保路径正确:

## 执行分析脚本
```!
python3 ${CLAUDE_SKILL_DIR}/scripts/analyze.py
Skill目录结构:

codebase-analyzer/ ├── SKILL.md ├── scripts/ │ └── analyze.py └── templates/ └── report.md

## 6. 错误处理与边界情况

### 6.1 命令执行失败

当动态注入的命令失败时(非零退出码),Claude Code会将错误信息插入到Skill内容中。为了优雅地处理这种情况,使用shell的错误处理:

```markdown
## PR信息
!`gh pr view --json title,body 2>/dev/null || echo '{"error": "未在PR上下文中,请确保当前分支有关联的Pull Request"}'`

6.2 输出过大时的截断

大型diff或日志可能超出上下文窗口。务必使用管道限制输出:

## 有限Diff
!`gh pr diff 2>/dev/null | head -3000`

6.3 Skill内容的生命周期管理

Skill内容一旦加载,会在整个会话期间保留。对于大型Skill,这会持续消耗token。context: fork 模式天然解决了这个问题——Skill内容在Subagent的隔离上下文中,不会影响主会话的token预算。

但在非fork模式下,需要注意: - 保持SKILL.md简洁,控制在500行以内 - 将详细参考资料放入单独的文件,在SKILL.md中链接引用 - 使用 disable-model-invocation: true 防止Skill被意外加载

7. 性能优化实践

7.1 模型选择策略

Subagent的模型选择直接影响成本和速度:

graph TD
    A[任务类型分析] --> B{需要深度推理?}
    B -->|是| C{需要修改代码?}
    B -->|否| D[使用 Haiku<br/>快速、低成本]
    C -->|是| E[使用 Sonnet<br/>平衡能力与成本]
    C -->|否| F[使用 Sonnet<br/>强推理、只读执行]

    D --> D1[Explore Agent<br/>只读工具集]
    E --> E1[general-purpose<br/>全工具集]
    F --> F1[自定义只读Agent<br/>Sonnet + 只读工具]

    style D fill:#6BCB77,color:#fff
    style E fill:#FFD93D,color:#333
    style F fill:#FFD93D,color:#333

7.2 并行Subagent执行

当多个审查任务互相独立时,可以让Claude并行启动多个Subagent。在编排Skill中明确指示:

请并行执行以下三个审查任务,不要等待前一个完成再启动下一个:
1. 使用pr-review进行代码质量审查
2. 使用pr-security进行安全审查
3. 使用pr-test-check进行测试覆盖分析

Claude会根据任务描述自动决定是否并行。明确的指令可以帮助它做出正确判断。

7.3 上下文预算管理

Claude Code对Skill描述有一个上下文预算(默认为模型上下文窗口的1%)。当Skill数量很多时,低优先级Skill的描述可能被截断。

使用 skillOverrides 设置控制哪些Skill应该保留完整描述:

{
  "skillOverrides": {
    "pr-review": "on",
    "pr-security": "on",
    "pr-test-check": "on",
    "legacy-helper": "name-only"
  }
}

实战案例:运行效果演示

以下是一个真实的 /pr-review 执行过程的模拟:

场景:一个Node.js项目,PR新增了一个用户注册API端点。

用户输入:

/pr-review

Claude Code执行流程:

  1. 动态注入阶段(约2-3秒): - gh pr diff --name-only → 输出5个变更文件 - gh pr diff → 输出约800行diff - gh pr view --json → 输出PR元信息

  2. Subagent启动阶段(约1秒): - 创建Explore Agent隔离上下文 - 注入渲染后的Skill内容(包含实际diff数据)

  3. Subagent执行阶段(约30-60秒): - Explore Agent分析变更文件列表 - 使用Glob查找 src/routes/auth.ts、src/models/user.ts - 使用Read读取完整文件 - 使用Grep搜索 password、hash、validate 关键词 - 生成结构化审查报告

  4. 结果返回(约2秒): - 审查报告摘要返回主会话

输出示例:

## 审查报告

**PR标题**: feat: add user registration endpoint
**变更统计**: 5 个文件,+247 / -12

### 关键发现

#### 🔴 必须修复
1. **src/routes/auth.ts:34** — 密码未使用bcrypt哈希,直接存储明文
   ```typescript
   // 当前代码
   const user = await User.create({ email, password });
   // 建议修改
   const hashedPassword = await bcrypt.hash(password, 12);
   const user = await User.create({ email, password: hashedPassword });
   ```

2. **src/routes/auth.ts:28** — 缺少输入验证,存在注入风险

#### 🟡 建议改进
1. **src/models/user.ts:15** — 邮箱唯一约束缺少数据库层索引
2. **src/routes/auth.ts:45** — 错误消息过于详细,可能泄露系统信息

#### 🟢 值得肯定
1. 使用了参数化查询
2. 引入了速率限制中间件

### 风险评估
- 向后兼容性: 高(新增端点,不影响现有API)
- 安全风险: 高(密码存储和输入验证问题)
- 性能影响: 低

关键观察:整个审查过程(包括800行diff、5个文件的完整读取、多个关键词搜索)都在Explore Agent的隔离上下文中完成。主会话的上下文窗口只增加了审查报告本身(约500 tokens),而非完整的中间数据(可能超过10,000 tokens)。

Mermaid流程图:完整的Skill-Subagent协作架构

graph TB
    subgraph 用户层
        U[开发者] -->|"/pr-review<br/>/pr-security<br/>/pr-full-review"| CLI[Claude Code CLI]
    end

    subgraph Skill层
        CLI -->|识别与加载| SK1[pr-review SKILL.md]
        CLI -->|识别与加载| SK2[pr-security SKILL.md]
        CLI -->|识别与加载| SK3[pr-test-check SKILL.md]
        CLI -->|识别与加载| SK4[pr-full-review SKILL.md]
    end

    subgraph 动态注入层
        SK1 & SK2 & SK3 -->|!`command`| SH[Shell执行引擎]
        SH -->|替换占位符| RENDER[渲染后的完整内容]
    end

    subgraph Subagent调度层
        RENDER -->|context:fork| DISP[Agent调度器]
        DISP -->|agent:Explore| EXP[Explore Agent]
        DISP -->|agent:code-analyzer| CUSTOM[自定义Agent]
    end

    subgraph 隔离执行层
        EXP --> TOOLS1["工具集: Glob, Grep, Read"]
        CUSTOM --> TOOLS2["工具集: Read, Grep, Glob, Bash"]
    end

    subgraph 结果层
        TOOLS1 & TOOLS2 --> RESULT[审查报告]
        RESULT -->|返回摘要| CLI
        CLI -->|展示| U
    end

    style U fill:#4A90D9,color:#fff
    style EXP fill:#6BCB77,color:#fff
    style CUSTOM fill:#6BCB77,color:#fff
    style RESULT fill:#FF6B6B,color:#fff

延伸阅读

训练营适用性评估

评估维度 评分 说明
概念难度 ★★★★☆ 需要理解Skill、Subagent、动态注入三个独立概念及其协作关系
实践门槛 ★★★☆☆ 只需创建Markdown文件,但需要理解shell命令和Git工作流
调试难度 ★★★★☆ 隔离上下文中的错误不易追踪,需要查看Subagent日志
实用性 ★★★★★ PR审查、代码分析、安全审计等场景均有直接价值
可扩展性 ★★★★★ 模式可复用于任何需要"数据采集+隔离分析+结果汇总"的场景
推荐学员级别 中高级 建议已具备Claude Code基础使用经验,理解Git和CLI工具

适合的训练营模块: - Day 3-4:高级扩展机制(Skill + Subagent联合使用) - 作为「从基础Skill到生产级编排」的进阶课程内容 - 小组项目:各团队设计并实现一个面向特定场景的审查/分析工作流

前置模块建议: 1. Claude Code基础操作与CLAUDE.md配置 2. Skill基础:创建简单的SKILL.md 3. 本文内容:Skill与Subagent联合编排

[!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 等场景全覆盖。

51学通信知识星球海报-扫码加入