在软件开发过程中,我们经常会遇到一些重复性的任务,比如代码审查、测试编写、文档生成等。Claude Code内置的通用子代理虽然能处理大部分基础任务,但当遇到需要特定领域知识的场景时,就显得力不从心了。
举个例子,假设你的团队使用特定的代码规范:
每次进行代码审查时,你都需要反复向Claude解释这些规则,效率低下且容易遗漏。自定义子代理就是为了解决这个问题而生的。
自定义子代理本质上是一个Markdown文件,包含两部分内容:
这种设计有以下几个优点:
一个典型的子代理文件结构如下:
markdown复制---
name: code-reviewer
description: 专注代码质量审查的子代理
model: sonnet
tools:
- Read
- Glob
- Grep
- Bash
permission: default
---
你是一个严格的代码审查员。审查时重点关注:
1. 安全漏洞:SQL注入、XSS等
2. 性能问题:N+1查询、内存泄漏等
3. 代码规范:命名、注释等
4. 可维护性:函数长度、复杂度等
输出分三级:
- 🔴 严重问题
- 🟡 警告
- 🔵 建议
自定义子代理可以部署在两个位置:
项目级:.claude/agents/
全局级:~/.claude/agents/
注意:项目级子代理会覆盖全局级同名子代理,这是有意设计的优先级规则。
除了固定目录,还有两种临时加载方式:
bash复制claude --agents /path/to/custom-agents/
agents/目录会被自动扫描,适合团队统一分发标准化的子代理集合。yaml复制tools:
- Read # 读取文件
- Glob # 文件匹配
- Grep # 内容搜索
- Edit # 编辑文件
- Bash # 执行命令
工具配置遵循最小权限原则:
yaml复制permission: default # 默认,需要确认
permission: acceptEdits # 自动接受编辑
permission: dontAsk # 不询问直接执行
permission: bypassPermissions # 绕过所有检查
permission: plan # 只规划不执行
根据子代理的用途选择合适的权限级别:
在项目根目录创建.claude/agents/code-reviewer.md:
markdown复制---
name: code-reviewer
description: 代码质量审查专家
model: sonnet
tools:
- Read
- Glob
- Grep
- Bash
---
你是一个专业的代码审查员,重点关注:
1. 安全漏洞
2. 性能问题
3. 代码规范
4. 可维护性
输出格式:
- 🔴 严重问题(必须修复)
- 🟡 警告(建议修复)
- 🔵 建议(优化项)
每个问题需包含:
- 文件路径
- 行号
- 问题描述
- 修复建议
准备一个有问题的代码文件src/auth.py:
python复制def validate_user(input):
# SQL注入风险
query = f"SELECT * FROM users WHERE username = '{input}'"
result = db.execute(query)
return result is not None
def load_user_data(user_id):
# N+1查询问题
user = get_user(user_id)
for item in user.items:
item.details = get_item_details(item.id)
return user
调用审查:
bash复制claude --agent code-reviewer
> 请审查src/auth.py
预期输出:
code复制🔴 安全漏洞:SQL注入风险
文件:src/auth.py 行号:3
问题:直接拼接用户输入到SQL查询
建议:使用参数化查询
🟡 性能问题:N+1查询
文件:src/auth.py 行号:9
问题:循环内执行数据库查询
建议:使用JOIN或批量查询
.claude/agents/test-writer.md:
markdown复制---
name: test-writer
description: 单元测试生成专家
model: sonnet
tools:
- Read
- Glob
- Grep
- Edit
- Bash
permission: acceptEdits
---
你是一个测试工程师,负责:
1. 识别测试框架(pytest/unittest等)
2. 分析函数输入输出
3. 生成完整测试用例
4. 确保测试通过
测试文件存放于:
- Python: __tests__/目录
- JavaScript: test/目录
- Go: _test.go文件
对之前的auth.py生成测试:
bash复制claude --agent test-writer
> 为src/auth.py生成测试
预期行为:
__tests__/test_auth.py可以让不同子代理协同工作:
yaml复制isolation: worktree
这个配置让子代理在独立的Git工作区操作,不会影响主代码库,适合尝试性修改。
yaml复制background: true
让子代理在后台执行,不阻塞主对话,适合耗时任务。
| 调用方式 | 语法 | 适用场景 | 确定性 |
|---|---|---|---|
| 自然语言 | "用code-reviewer检查" | 日常使用 | 中等 |
| @提及 | @code-reviewer 检查 | 确保触发 | 高 |
| 全局模式 | claude --agent code-reviewer | 专项工作 | 最高 |
选择建议:
子代理不生效
权限问题
输出不符合预期
自定义子代理是提升开发效率的利器,通过将领域知识固化到Markdown文件中,你可以打造出真正懂你项目、懂你团队的智能助手。从简单的代码审查开始,逐步扩展到更多场景,你会发现Claude Code变得越来越"懂你"。