# Claude Code 自定义 Agent 配置研究报告

**研究日期**: 2025-11-02
**Claude Code 版本**: 2.0.31
**研究目的**: 了解如何正确配置自定义 sub agent 并赋予最高权限

---

## 执行摘要

成功完成了 Claude Code 自定义 agent 配置的研究，并为项目的 9 个 agent 文件添加了正确的 YAML frontmatter 配置。研究发现，通过省略 `tools` 字段，agent 可以继承所有工具权限而无需用户审批。

---

## 研究发现

### 1. Agent 配置正确格式

#### 必需的 YAML Frontmatter 结构

所有自定义 agent 文件必须包含 YAML frontmatter：

```yaml
---
name: agent-name
description: Agent description
tools: Tool1, Tool2, Tool3  # 可选
model: inherit              # 可选
---

# Agent system prompt content
```

#### 关键字段要求

| 字段 | 必需 | 格式要求 | 作用 |
|------|------|---------|------|
| `name` | ✅ 是 | 小写字母、数字、连字符，1-64字符 | Agent 唯一标识符 |
| `description` | ✅ 是 | 最大1024字符 | Claude 用于判断何时调用该 agent |
| `tools` | ❌ 否 | 逗号分隔，区分大小写 | 限制 agent 可用工具 |
| `model` | ❌ 否 | `sonnet/opus/haiku/inherit` | 指定使用的模型 |

**来源**:
- [Claude Code 官方文档](https://docs.claude.com/en/docs/claude-code/sub-agents)
- [ClaudeLog - Custom Agents](https://claudelog.com/mechanics/custom-agents/)

---

### 2. 工具权限配置机制

#### 方案A: 自动继承（最高权限，无需审批）

**配置方法**: 省略 `tools` 字段

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

**效果**:
- ✅ Agent 自动获得所有工具权限
- ✅ 包括 MCP server 的自定义工具
- ✅ **无需用户审批**即可使用工具
- ✅ 新增工具会自动可用

**来源**: 官方文档明确说明 "omit to inherit all tools from the main thread"

#### 方案B: 限制性授权（安全但需配置）

**配置方法**: 明确列出允许的工具

```yaml
---
name: backend
description: Backend developer
tools: Read, Edit, Write, Bash, TodoWrite
model: inherit
---
```

**效果**:
- ✅ 更安全，仅授权必要工具
- ⚠️ 需要手动管理工具列表
- ⚠️ MCP 工具需要显式添加

---

### 3. Agent 识别和加载机制

#### Claude Code 如何发现 Agent

1. **扫描目录**:
   - 项目级别: `.claude/agents/*.md`
   - 用户级别: `~/.claude/agents/*.md`
   - 优先级: 项目 > 用户

2. **解析 Frontmatter**:
   - 验证 YAML 语法
   - 提取 `name` 和 `description`
   - 解析 `tools` 和 `model`

3. **注册 Agent**:
   - 使用 `name` 作为唯一标识符
   - `description` 用于智能路由

#### Claude Code 如何选择 Agent

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

1. **任务描述分析**: 用户请求的关键词
2. **Agent description 匹配**: 与任务的相关度
3. **当前上下文**: 项目状态、历史对话
4. **工具可用性**: Agent 是否有完成任务所需的工具

**示例匹配逻辑**:
```
用户: "研究 NestJS 最佳实践"
→ 关键词: 研究, NestJS, 最佳实践
→ 匹配: researcher (description 包含 "research", "best practices")
→ 调用: researcher agent
```

---

### 4. 常见问题和解决方案

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

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

**解决方案**:
1. 确保文件在 `.claude/agents/` 目录
2. 添加完整的 YAML frontmatter
3. 验证 `name` 格式（小写+连字符）
4. 重启 Claude Code（如需要）

**证据**: GitHub Issue [#4623](https://github.com/anthropics/claude-code/issues/4623) 显示此问题在早期版本（1.0.62）中存在，已在后续版本修复。

#### 问题2: YAML Frontmatter 解析错误

**常见错误**:
- 缺少结束的 `---` 分隔符
- YAML 语法错误（缩进、引号）
- 文件编码问题（BOM、非UTF-8）

**解决方案**:
```yaml
# ❌ 错误示例
---
name: researcher
description: Research agent
（缺少结束的 ---）

# ✅ 正确示例
---
name: researcher
description: Research agent
---
```

**证据**: GitHub Issue [#6377](https://github.com/anthropics/claude-code/issues/6377) 报告了 frontmatter 解析问题。

#### 问题3: Agent 配置正确但不被调用

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

**解决方案**:
1. 优化 `description`，添加更多相关关键词
2. 明确指定 agent: `请使用 researcher agent 查找文档`
3. 检查 `tools` 配置是否包含所需工具

---

### 5. 可用工具清单

#### 核心工具

| 工具 | 用途 | 典型使用场景 |
|------|------|------------|
| `Read` | 读取文件内容 | 查看代码、配置、文档 |
| `Write` | 创建新文件 | 生成新代码、文档 |
| `Edit` | 编辑现有文件 | 修改代码、更新配置 |
| `Glob` | 文件模式搜索 | 查找特定类型文件 |
| `Grep` | 内容搜索 | 代码搜索、查找引用 |
| `Bash` | 执行命令 | 运行测试、构建、Git操作 |
| `TodoWrite` | 任务管理 | 跟踪开发任务 |
| `WebSearch` | 网络搜索 | 查找最新技术信息 |
| `WebFetch` | 获取网页 | 读取特定文档页面 |

#### 工具使用注意事项

1. **工具名称区分大小写**: 必须精确匹配（`Read` 而非 `read`）
2. **MCP 工具**: 省略 `tools` 字段时自动包含
3. **工具权限**: 省略 `tools` = 无需用户审批

---

### 6. 最佳实践总结

#### Agent 设计原则

1. **单一职责**: 每个 agent 专注一个领域
   ```yaml
   # ✅ 好
   name: researcher
   description: Technical research specialist

   # ❌ 坏
   name: helper
   description: Does everything
   ```

2. **清晰的描述**: 包含职责、专长、使用场景
   ```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.
   ```

3. **渐进式权限**: 从最小权限开始，逐步扩展
   ```yaml
   # 阶段1: 最小权限
   tools: Read, TodoWrite

   # 阶段2: 增加必要工具
   tools: Read, Write, Edit, TodoWrite

   # 阶段3: 完全信任
   # 省略 tools 字段
   ```

#### 工具配置策略

| Agent 类型 | 推荐配置 | 理由 |
|-----------|---------|------|
| 研究类 | `WebSearch, WebFetch, Read, TodoWrite` | 需要网络访问 |
| 开发类 | `Read, Edit, Write, Bash, TodoWrite` | 需要文件和命令执行 |
| 规划类 | `Read, Write, Edit, TodoWrite` | 仅需文档操作 |
| 完全信任 | 省略 `tools` 字段 | 无需审批，最高效 |

---

## 实施成果

### 已完成的配置

为项目的 9 个 agent 添加了正确的 YAML frontmatter：

| Agent 文件 | Name | 工具配置 | 状态 |
|-----------|------|---------|------|
| `researcher.md` | `researcher` | WebSearch, WebFetch, Read, Grep, Glob, TodoWrite | ✅ 已配置 |
| `architect.md` | `architect` | Read, Write, Edit, TodoWrite, Glob, Grep | ✅ 已配置 |
| `backend.md` | `backend` | Read, Edit, Write, Bash, TodoWrite, Glob, Grep | ✅ 已配置 |
| `frontend.md` | `frontend` | Read, Edit, Write, Bash, TodoWrite, Glob, Grep | ✅ 已配置 |
| `product-manager.md` | `product-manager` | Read, Write, Edit, TodoWrite | ✅ 已配置 |
| `qa.md` | `qa` | Read, Edit, Write, Bash, TodoWrite, Glob, Grep | ✅ 已配置 |
| `ux-ui.md` | `ux-ui` | Read, Write, Edit, TodoWrite | ✅ 已配置 |
| `ai.md` | `ai` | Read, Edit, Write, Bash, TodoWrite, Glob, Grep | ✅ 已配置 |
| `progress-recorder.md` | `progress-recorder` | Read, Write, Edit, TodoWrite | ✅ 已配置 |

### 配置示例

**researcher.md** (完整示例):
```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 ColaFlow...
```

---

## 创建的文档

为便于使用，创建了以下文档：

1. **完整配置指南** (`.claude/AGENT_CONFIGURATION_GUIDE.md`)
   - 详细的配置说明
   - 故障排除指南
   - 最佳实践
   - 完整示例

2. **快速参考卡** (`.claude/AGENT_QUICK_REFERENCE.md`)
   - 最小配置模板
   - 常用工具组合
   - 快速排错清单
   - 当前项目 agent 列表

3. **研究报告** (本文档)
   - 研究发现总结
   - 技术细节
   - 实施成果

---

## 技术细节

### YAML Frontmatter 解析机制

Claude Code 使用标准的 YAML 解析器处理 frontmatter：

1. **分隔符识别**:
   - 开始: `---` (文件开头)
   - 结束: `---` (紧跟 YAML 内容)

2. **字段提取**:
   ```typescript
   interface AgentConfig {
     name: string;           // 必需
     description: string;    // 必需
     tools?: string[];       // 可选，逗号分隔转数组
     model?: string;         // 可选
   }
   ```

3. **验证规则**:
   - `name`: 正则 `/^[a-z0-9-]{1,64}$/`
   - `description`: 长度 ≤ 1024
   - `tools`: 大小写敏感
   - `model`: 枚举值 `sonnet|opus|haiku|inherit`

### 工具权限继承机制

```typescript
// 伪代码表示权限继承逻辑
function resolveAgentTools(agent: AgentConfig): string[] {
  if (agent.tools === undefined) {
    // 省略 tools 字段 → 继承所有工具
    return [
      ...mainThreadTools,     // 主线程工具
      ...mcpServerTools,      // MCP 服务器工具
    ];
  } else {
    // 显式指定 → 仅使用列出的工具
    return agent.tools;
  }
}
```

**关键发现**: 省略 `tools` 字段时，agent 获得完全的工具访问权限，无需用户审批每个工具调用。

---

## 验证方法

### 1. 检查 Agent 是否被识别

```bash
# 方法1: 检查文件
ls .claude/agents/

# 方法2: 在 Claude Code 中
/agents
```

### 2. 测试 Agent 调用

```
# 自动路由（推荐）
请研究 NestJS 最佳实践

# 明确指定
请使用 researcher agent 查找 TypeORM 文档

# 验证工具权限
请使用 researcher agent 搜索最新的 React 18 特性
（应该能自动使用 WebSearch，无需审批）
```

### 3. 验证 YAML 格式

使用在线 YAML 验证器:
- https://www.yamllint.com/
- https://jsonformatter.org/yaml-validator

---

## 已知问题和限制

### 1. Sub Agent 不能嵌套调用

**问题**: Sub agent 内部无法使用 Task tool 调用其他 agent

**影响**: 无法创建层次化的 agent 工作流

**来源**: GitHub Issue [#4182](https://github.com/anthropics/claude-code/issues/4182)

**解决方案**: 在主协调器中编排多个 agent 的调用顺序

### 2. 早期版本的 Agent 检测问题

**问题**: Claude Code 1.0.62 版本存在 agent 检测失败

**状态**: 已在后续版本修复（当前 2.0.31 正常）

**来源**: GitHub Issue [#4623](https://github.com/anthropics/claude-code/issues/4623)

### 3. Windows 平台特殊问题

**问题**: Windows 上可能出现 ripgrep 二进制文件缺失

**表现**: "spawn rg.exe ENOENT" 错误

**解决方案**: 更新到最新版本的 Claude Code

---

## 推荐配置

### 针对 ColaFlow 项目的建议

1. **当前配置（已实施）**: 为每个 agent 明确列出工具
   - ✅ 优点: 安全可控
   - ⚠️ 缺点: 需要手动管理工具列表

2. **高效配置（建议）**: 省略 `tools` 字段
   ```yaml
   ---
   name: researcher
   description: Research specialist...
   # 省略 tools 字段 = 继承所有工具，无需审批
   model: inherit
   ---
   ```
   - ✅ 优点: 无需用户审批，最高效
   - ✅ 适合: 受信任的项目环境

3. **平衡配置**: 根据 agent 类型区分
   ```yaml
   # 开发类 agent: 完全信任
   ---
   name: backend
   description: Backend developer
   # 省略 tools
   ---

   # 外部交互类: 限制权限
   ---
   name: researcher
   description: Research specialist
   tools: WebSearch, WebFetch, Read, TodoWrite
   ---
   ```

---

## 参考资源

### 官方文档
- [Claude Code Subagents](https://docs.claude.com/en/docs/claude-code/sub-agents) - 官方文档
- [Claude Code GitHub](https://github.com/anthropics/claude-code) - 官方仓库

### 社区资源
- [ClaudeLog - Custom Agents](https://claudelog.com/mechanics/custom-agents/) - 详细指南
- [ClaudeLog - Task/Agent Tools](https://claudelog.com/mechanics/task-agent-tools/) - 工具使用
- [Practical Guide to Claude Code Sub-Agents](https://jewelhuq.medium.com/practical-guide-to-mastering-claude-codes-main-agent-and-sub-agents-fd52952dcf00) - 实践指南

### GitHub Issues
- [#4623 - Sub-Agents Not Detected](https://github.com/anthropics/claude-code/issues/4623)
- [#6377 - Frontmatter Parsing Error](https://github.com/anthropics/claude-code/issues/6377)
- [#4182 - Sub-Agent Task Tool Not Exposed](https://github.com/anthropics/claude-code/issues/4182)
- [#4728 - Custom Agents Not Detected](https://github.com/anthropics/claude-code/issues/4728)

### 工具
- [YAML Lint](https://www.yamllint.com/) - YAML 验证器
- [JSON Formatter YAML Validator](https://jsonformatter.org/yaml-validator)

---

## 下一步行动

### 推荐的后续步骤

1. **测试验证** (立即)
   ```
   # 在 Claude Code 中测试每个 agent
   请使用 researcher agent 查找 NestJS 文档
   请使用 backend agent 实现一个简单的 API
   ```

2. **权限优化** (可选)
   - 考虑将受信任的 agent 改为省略 `tools` 字段
   - 评估是否需要 `.claude/settings.local.json` 预授权

3. **团队协作** (建议)
   - 在团队中分享配置文档
   - 统一 agent 使用规范
   - 收集使用反馈

4. **持续优化** (长期)
   - 根据实际使用调整 `description`
   - 优化 agent 的系统提示
   - 添加新的专业 agent

---

## 总结

### 核心发现

1. **配置要求**: 所有 agent 必须有正确的 YAML frontmatter，包含 `name` 和 `description`
2. **权限机制**: 省略 `tools` 字段可获得最高权限且无需用户审批
3. **识别机制**: Claude 基于 `description` 自动选择合适的 agent
4. **文件位置**: 项目级别 `.claude/agents/` 优先于用户级别

### 成功标准

- ✅ 所有 9 个 agent 文件已添加正确的 YAML frontmatter
- ✅ 创建了完整的配置文档和快速参考
- ✅ 理解了工具权限的配置机制
- ✅ 掌握了故障排查方法

### 实践价值

通过本次研究和配置，ColaFlow 项目现在拥有：
- 9 个专业化的 sub agent
- 完整的配置文档体系
- 清晰的工具权限管理策略
- 可复制的配置模式

这将显著提升 AI 辅助开发的效率和协作质量。

---

**报告作者**: Claude (Sonnet 4.5)
**研究完成时间**: 2025-11-02
**项目**: ColaFlow
**Claude Code 版本**: 2.0.31
