# Claude Code 自定义 Agent 配置完整指南

本文档提供了在 Claude Code 中配置和使用自定义 sub agent 的完整说明。

## 目录

1. [基础知识](#基础知识)
2. [YAML Frontmatter 格式](#yaml-frontmatter-格式)
3. [工具权限配置](#工具权限配置)
4. [Agent 识别和加载](#agent-识别和加载)
5. [常见问题排查](#常见问题排查)
6. [最佳实践](#最佳实践)

---

## 基础知识

### 什么是 Claude Code Sub Agent？

Sub agent 是专门化的 AI 助手，用于处理特定类型的任务。每个 sub agent：
- 拥有独立的上下文窗口
- 可配置特定的工具访问权限
- 使用自定义的系统提示（system prompt）

### Agent 文件位置

Sub agent 配置文件可以存放在两个位置：

1. **项目级别**（优先）：`.claude/agents/`
   - 仅对当前项目有效
   - 项目成员共享

2. **用户级别**：`~/.claude/agents/`
   - 对所有项目有效
   - 用户私有配置

**重要**：同名 agent 时，项目级别优先于用户级别。

---

## YAML Frontmatter 格式

### 完整格式

每个 agent 文件必须以 YAML frontmatter 开头：

```yaml
---
name: agent-name
description: When this agent should be invoked
tools: Tool1, Tool2, Tool3
model: inherit
---

# Agent Title

Your agent's system prompt goes here...
```

### 字段说明

| 字段 | 必需 | 说明 | 示例 |
|------|------|------|------|
| `name` | ✅ 是 | Agent 唯一标识符，小写字母+连字符，最大64字符 | `researcher`, `backend-dev` |
| `description` | ✅ 是 | 描述 agent 用途和调用时机，最大1024字符 | `Technical research specialist for finding docs` |
| `tools` | ❌ 否 | 逗号分隔的工具列表，省略则继承所有工具 | `Read, Write, Bash` |
| `model` | ❌ 否 | 使用的模型：`sonnet`, `opus`, `haiku`, `inherit` | `inherit` |

### 字段详解

#### `name` 字段
- **格式要求**：小写字母、数字、连字符（-）
- **长度限制**：1-64 字符
- **示例**：
  - ✅ 正确：`researcher`, `backend-dev`, `ux-ui`
  - ❌ 错误：`Researcher`（大写）, `backend_dev`（下划线）, `backend dev`（空格）

#### `description` 字段
- **作用**：Claude 根据此字段决定何时调用该 agent
- **最佳实践**：
  - 描述 agent 的职责和专长
  - 说明何时应该使用该 agent
  - 包含关键词便于 Claude 识别
- **示例**：
  ```yaml
  description: Technical research specialist for finding documentation, best practices, and up-to-date technical knowledge. Use for technology research, API documentation lookup, and technical problem investigation.
  ```

#### `tools` 字段
- **省略时**：agent 继承主线程的所有工具，包括 MCP 工具
- **指定时**：agent 仅能使用列出的工具
- **可用工具**：
  - 文件操作：`Read`, `Write`, `Edit`, `Glob`, `Grep`
  - 执行：`Bash`
  - 任务：`TodoWrite`
  - 网络：`WebSearch`, `WebFetch`
  - MCP 工具（如已连接）

**重要**：工具名称区分大小写，必须精确匹配。

#### `model` 字段
- **`inherit`**（推荐）：继承主线程的模型配置
- **`sonnet`**：Claude 3.5 Sonnet（平衡性能和成本）
- **`opus`**：Claude 3 Opus（最强性能）
- **`haiku`**：Claude 3.5 Haiku（快速且经济）

---

## 工具权限配置

### 自动继承权限（推荐）

**省略 `tools` 字段时，agent 自动继承所有工具权限，无需用户审批。**

```yaml
---
name: researcher
description: Research specialist
# 省略 tools 字段 = 继承所有工具
model: inherit
---
```

**优点**：
- ✅ 无需用户审批，agent 可直接使用所有工具
- ✅ 自动获取新增的 MCP 工具
- ✅ 配置简单

**缺点**：
- ⚠️ 安全性较低（所有工具都可用）

### 限制工具访问（推荐用于敏感操作）

```yaml
---
name: backend
description: Backend development specialist
tools: Read, Edit, Write, Bash, TodoWrite, Glob, Grep
model: inherit
---
```

**优点**：
- ✅ 更安全（仅授权必要工具）
- ✅ 防止意外操作

**缺点**：
- ⚠️ 需要明确列出所有需要的工具
- ⚠️ MCP 工具需单独配置

### 工具使用策略

#### 研究类 Agent
```yaml
tools: WebSearch, WebFetch, Read, Grep, Glob, TodoWrite
```

#### 开发类 Agent
```yaml
tools: Read, Edit, Write, Bash, TodoWrite, Glob, Grep
```

#### 规划类 Agent
```yaml
tools: Read, Write, Edit, TodoWrite
```

---

## Agent 识别和加载

### 如何验证 Agent 是否被识别

1. **检查 agent 文件格式**
   ```bash
   # 确保文件以 .md 结尾
   ls .claude/agents/
   ```

2. **验证 YAML frontmatter**
   - 确保有正确的 `---` 分隔符
   - 检查 `name` 和 `description` 字段是否存在
   - 验证 YAML 语法（使用在线 YAML 验证器）

3. **使用 `/agents` 命令**（Claude Code 内）
   ```
   /agents
   ```
   这会列出所有已识别的 agent。

### Claude Code 如何选择 Agent

Claude 基于以下因素决定调用哪个 agent：

1. **任务描述**：你提出的请求内容
2. **Agent 的 `description`**：与任务的匹配度
3. **当前上下文**：项目状态、已有信息
4. **可用工具**：agent 是否有完成任务所需的工具

**示例**：

```
用户请求："研究 NestJS 最佳实践"
Claude 分析：
  - 关键词：研究、NestJS、最佳实践
  - 匹配 agent: researcher
  - 原因：description 包含 "research", "best practices"
```

---

## 常见问题排查

### 问题 1: "Agent type 'xxx' not found"

**原因**：
- Agent 文件缺少 YAML frontmatter
- `name` 字段缺失或格式错误
- 文件不在正确的目录

**解决方案**：
1. 确认文件在 `.claude/agents/` 目录
2. 检查 YAML frontmatter 格式：
   ```yaml
   ---
   name: your-agent-name
   description: Your description
   ---
   ```
3. 确保 `name` 使用小写字母和连字符
4. 重启 Claude Code

### 问题 2: Agent 被识别但不被调用

**原因**：
- `description` 与任务不匹配
- Claude 选择了其他更合适的 agent
- Agent 缺少必需的工具

**解决方案**：
1. 改进 `description`，包含更多关键词
2. 明确告诉 Claude 使用特定 agent：
   ```
   请使用 researcher agent 查找 NestJS 文档
   ```
3. 检查 `tools` 字段是否包含必需工具

### 问题 3: YAML 解析错误

**常见错误**：
```yaml
# ❌ 错误：缺少结束的 ---
---
name: researcher
description: Research specialist

# ✅ 正确：有完整的分隔符
---
name: researcher
description: Research specialist
---
```

**解决方案**：
- 使用在线 YAML 验证器检查语法
- 确保没有隐藏字符（BOM、特殊空格）
- 使用 UTF-8 编码保存文件

### 问题 4: 工具权限不足

**表现**：Agent 运行时提示缺少工具权限

**解决方案**：
1. **方案A**：省略 `tools` 字段（继承所有工具）
   ```yaml
   ---
   name: researcher
   description: Research specialist
   # 省略 tools
   ---
   ```

2. **方案B**：明确添加所需工具
   ```yaml
   ---
   name: researcher
   description: Research specialist
   tools: WebSearch, WebFetch, Read, TodoWrite
   ---
   ```

---

## 最佳实践

### 1. Agent 设计原则

#### 单一职责
每个 agent 专注一个领域：
- ✅ 好：`researcher`（技术研究）
- ❌ 坏：`general-helper`（什么都做）

#### 清晰的边界
```yaml
# ✅ 好：职责明确
name: backend
description: Backend development for APIs, databases, and business logic

# ❌ 坏：职责模糊
name: developer
description: Writes code
```

### 2. Description 最佳实践

```yaml
# ✅ 优秀的 description
description: Technical research specialist for finding documentation, best practices, and up-to-date technical knowledge. Use for technology research, API documentation lookup, and technical problem investigation.

# 要素：
# - 角色定义：Technical research specialist
# - 核心能力：finding documentation, best practices
# - 使用场景：technology research, API documentation lookup
```

### 3. 工具配置策略

#### 渐进式工具授权
```yaml
# 阶段1：最小权限（测试阶段）
tools: Read, TodoWrite

# 阶段2：增加必要工具（稳定后）
tools: Read, Write, Edit, TodoWrite

# 阶段3：完全权限（信任后）
# 省略 tools 字段
```

### 4. 系统提示（System Prompt）设计

```markdown
---
name: researcher
description: Research specialist
tools: WebSearch, WebFetch, Read, TodoWrite
---

# Researcher Agent

You are a technical research specialist.

## Your Role
[明确定义角色]

## Core Responsibilities
1. Technical documentation research
2. Best practices discovery
3. Technology evaluation

## Tool Usage Priority
1. **WebSearch** - Primary tool for research
2. **WebFetch** - For specific URLs
3. **Read** - For local context

## Output Format
[定义输出格式]

## Best Practices
[列出最佳实践]
```

### 5. 版本控制

```bash
# 将 agent 配置纳入版本控制
git add .claude/agents/
git commit -m "Add custom sub agents configuration"

# 在 .gitignore 中排除敏感配置
# .gitignore
.claude/settings.local.json
```

### 6. 团队协作

**项目 README 中说明**：
```markdown
## Claude Code Sub Agents

本项目配置了以下 sub agents：

- `researcher` - 技术研究
- `architect` - 架构设计
- `backend` - 后端开发
- `frontend` - 前端开发
- `qa` - 质量保证

使用方式：
bash
# 直接向 Claude 提出请求，它会自动选择合适的 agent
"请研究 NestJS 最佳实践"  # → researcher
"实现用户登录API"        # → backend
```

---

## 完整配置示例

### 示例1: 技术研究 Agent

```yaml
---
name: researcher
description: Technical research specialist for finding documentation, best practices, and up-to-date technical knowledge. Use for technology research, API documentation lookup, and technical problem investigation.
tools: WebSearch, WebFetch, Read, Grep, Glob, TodoWrite
model: inherit
---

# Researcher Agent

You are the Research Specialist for the project.

## Core Responsibilities
1. Find official documentation
2. Research best practices
3. Compare technologies
4. Investigate technical problems

## Tool Usage
- **WebSearch**: Primary research tool
- **WebFetch**: Deep-dive specific URLs
- **Read**: Local project context

## Output Format
Always provide:
- Source URLs
- Version information
- Code examples
- Recommendations
```

### 示例2: 后端开发 Agent

```yaml
---
name: backend
description: Backend engineer for server-side development, API design, database implementation, and business logic. Use for backend code implementation, API development, and database work.
tools: Read, Edit, Write, Bash, TodoWrite, Glob, Grep
model: inherit
---

# Backend Agent

You are the Backend Engineer.

## Core Responsibilities
1. API development
2. Database design
3. Business logic implementation
4. Testing

## Code Standards
- TypeScript + NestJS
- 80%+ test coverage
- Proper error handling
- Clear documentation
```

---

## 权限管理高级配置

### settings.local.json 配置

在 `.claude/settings.local.json` 中可以预先授权常用操作：

```json
{
  "permissions": {
    "allow": [
      "Bash(npm test:*)",
      "Bash(npm run build:*)",
      "Bash(git status:*)",
      "Read(*)",
      "TodoWrite(*)"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(sudo:*)"
    ],
    "ask": [
      "Write(*)",
      "Edit(*)"
    ]
  }
}
```

**说明**：
- `allow`: 自动批准的操作（无需用户确认）
- `deny`: 拒绝的操作
- `ask`: 需要用户确认的操作

---

## 总结

### 快速检查清单

配置新的 agent 时，确保：

- [ ] 文件在 `.claude/agents/` 目录
- [ ] 文件名以 `.md` 结尾
- [ ] 有完整的 YAML frontmatter（`---` 包围）
- [ ] `name` 字段：小写字母+连字符
- [ ] `description` 字段：清晰描述用途
- [ ] `tools` 字段：省略（继承所有）或明确列出
- [ ] `model` 字段：推荐使用 `inherit`
- [ ] 系统提示清晰明确

### 推荐的 Agent 权限配置

```yaml
# 研究类（需要网络访问）
tools: WebSearch, WebFetch, Read, Grep, Glob, TodoWrite

# 开发类（需要文件操作和执行）
tools: Read, Edit, Write, Bash, TodoWrite, Glob, Grep

# 规划类（仅需文档操作）
tools: Read, Write, Edit, TodoWrite

# 完全信任（继承所有工具）
# 省略 tools 字段
```

---

## 参考资源

- [Claude Code 官方文档](https://docs.claude.com/en/docs/claude-code/sub-agents)
- [ClaudeLog - Custom Agents](https://claudelog.com/mechanics/custom-agents/)
- [YAML 语法验证器](https://www.yamllint.com/)

---

**最后更新**: 2025-11-02
**Claude Code 版本**: 2.0.31
