
docs.anthropic.com
Create custom subagents - Claude Code Docs
Claude Code 官方子代理完整文档,覆盖内置代理详情、配置字段说明、权限模式与实战示例。

Claude Code Subagents 的调度权由 description 字段掌控——写法不对,自定义代理就不会被主动使用。本文完整拆解五个内置代理的分工与成本差异、description 字段的调度机制与写法对比、tools/disallowedTools 工具权限隔离的正确姿势、Fork 与普通 subagent 的本质区别,以及后台权限预授权、嵌套限制等常见坑,附三个可直接使用的生产级配置。

리서치 브리프
description 字段怎么写才能让 Claude 主动委托任务,到 tools/disallowedTools 如何做工具隔离,再到 Fork 模式与普通 subagent 的本质区别,以及最容易踩的几个坑。| 代理 | 模型 | 工具权限 | 触发时机 |
|---|---|---|---|
| Explore | Haiku | 只读 | Claude 需要搜索或分析代码库但不修改时 |
| Plan | 继承主会话 | 只读 | Plan 模式下的前置研究 |
| general-purpose | 继承主会话 | 全工具 | 复杂多步任务、无法匹配专用代理时兜底 |
| statusline-setup | Sonnet | 受限 | 运行 /statusline 时 |
| claude-code-guide | Haiku | 受限 | 询问 Claude Code 自身功能时 |
---
name: code-reviewer
tools: Read, Grep, Glob
model: sonnet
---
You are a code reviewer. Analyze the code and provide specific, actionable feedback on quality, security, and best practices.description 是调度层,YAML 正文是系统提示层。两者职责不同。description 决定是否委托,不是用系统提示。当你的请求触发任务分配时,Claude 把任务描述和所有可用子代理的 description 做语义匹配,命中的代理获得委托。系统提示是子代理拿到任务后的行为规范,调度阶段根本读不到它。description 写得差,子代理就不会被自动调用。社区里有两个写法技巧:use proactively 或 MUST BE USED,明确告知 Claude 应在什么条件下主动委托3Use this agent when... 开头,描述触发场景而非代理能力# 弱描述(不易触发自动委托)
Reviews code changes.
# 强描述(能稳定触发自动委托)
Expert code review specialist. Use proactively after writing or modifying any code.
Reviews for quality, security, and maintainability, then provides structured feedback by priority.# 白名单:只允许这些工具
tools: Read, Grep, Glob, Bash
# 黑名单:继承全部工具,排除这些
disallowedTools: Write, Edittools 白名单,明确列出 Read, Grep, Glob,保证代理无法修改任何文件disallowedTools,避免重复罗列所有允许工具tools 字段能覆盖的是「工具类型」的限制,对同一工具下的精细操作(比如「允许 SELECT 不允许 INSERT」)无能为力。这种场景需要配合 PreToolUse 钩子:hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate-readonly-query.sh"
CLAUDE_CODE_FORK_SUBAGENT=1)解决这个场景:Fork 继承父会话完整的上下文和系统提示,首次请求直接复用父会话的提示缓存,成本低于新建子代理。2| 对比项 | 普通 subagent | Fork |
|---|---|---|
| 初始上下文 | 空白(只有委托 prompt) | 继承父会话完整对话历史 |
| 系统提示 | 来自子代理定义文件 | 与父会话相同 |
| 提示缓存 | 需要从头构建 | 复用父会话缓存,首次成本低 |
| 工具权限 | 来自子代理定义 | 与父会话相同 |
| 适用场景 | 任务范围明确、背景可简洁描述 | 任务需要全部对话历史才能继续 |
| 版本要求 | 全版本 | v2.1.117+,实验性 |
/fork <指令> 触发,或者开启 Fork 模式后自动替代 general-purpose。开启 Fork 模式后,所有子代理调用都会在后台并发运行。Ctrl+B 反向操作:从前台切后台;前台运行则不要按 Ctrl+B)。context: fork 字段在子代理里注入另一套指令集——但这本质上是在同一个代理里加载不同的提示,不是真正的嵌套委托。isolation: worktree 的适用场景isolation: worktree 让子代理在一个独立的 git worktree 里运行——它的文件修改不会影响你的工作目录。适合「让子代理在隔离环境里跑修复实验,成功再合并」的场景,但多了 worktree 的创建和清理开销,不适合只读的探索任务。---
name: code-reviewer
tools: Read, Grep, Glob, Bash
model: sonnet
---
When invoked, run `git diff` to see recent changes.
Focus on modified files. Review for:
- Code clarity and naming
- Error handling completeness
- Security issues (exposed secrets, missing input validation)
- Test coverage adequacy
Provide feedback by priority: Critical (must fix) → Warning (should fix) → Suggestion.---
name: debugger
tools: Read, Edit, Bash, Grep, Glob
model: inherit
---
Workflow: capture error → identify reproduction steps → isolate failure location → implement minimal fix → verify.
For each issue: explain root cause, provide evidence, give specific fix, suggest prevention.
Fix the underlying issue, not the symptom.---
name: db-reader
tools: Bash
hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate-readonly-query.sh"
---
You have read-only database access. Execute SELECT queries only.
If asked to INSERT, UPDATE, or DELETE, explain you only have read access.validate-readonly-query.sh 脚本的逻辑:从 stdin 读取 JSON,提取 tool_input.command,用正则检测写操作关键字,exit code 2 则拦截。description 写清楚触发时机、tools 精确控制权限范围、钩子处理需要比工具级别更细的约束。description 的准确性,范围重叠的两个代理会让 Claude 的调度决策变得随机。宁可一个代理覆盖相关场景,也不要把一类任务拆成三个只有细微差别的代理。
Claude Code 官方子代理完整文档,覆盖内置代理详情、配置字段说明、权限模式与实战示例。

Claude Code 上下文窗口交互式可视化:展示 subagent 如何在独立窗口处理任务,以及 /compact 后各机制的存留情况。
이 콘텐츠를 둘러싼 관점이나 맥락을 계속 보강해 보세요.