Repository navigation
Agents
英文名:
agents· 领域:Agent 与编排 · 返回功能索引
子代理(subagent)是 Claude 临时叫来的帮手:它有自己独立的上下文,专门做一件事(搜代码、做方案、审 diff),做完把结果交回给主对话。好处是:
- 不占主对话的上下文:翻了几十个文件的过程留在子代理里,主对话只收到结论;
- 可以并行:几个子代理同时在后台跑,你在主对话继续说话;
- 可以专用:给子代理限定只读工具、指定模型、写专门的系统提示。
交互会话里子代理默认在后台运行。内置的有 Explore(快速搜代码,只读)、Plan(只分析不改代码,出实施方案)、general-purpose(通用)等。
1. Claude 启动子代理。 你让 Claude 去「扫一下仓库」之类的活,它会调用 Agent 工具。主对话立刻显示 Backgrounded agent,底部多出一个任务列表,显示每个子代理的类型、描述、已运行时间和 token:

2. 按 ↓ 进入任务列表。 用 ↑ ↓ 选中某个子代理:运行中的可以按 x 停止,已结束的按 x 从列表清掉;按 Enter 查看:

3. 查看子代理在做什么。 进入后看到的是这个子代理自己的对话记录;底部输入框变成 Message @Explore…,可以直接给它发消息。按 Esc 返回主对话:

4. 子代理结束后,主对话出现 Agent "scan repo" completed,Claude 会读它的报告继续工作。被你停止的显示 was stopped。
想让一个副本带着当前全部对话去做支线任务,而你继续在主线聊,用:
/subtask review the parser changes and list missing tests
它继承主对话的模型、工具和历史,在后台运行,回执显示名字和 ID 后四位:

1. 输入 /agents。下方列出内置子代理和它们用的模型;选 Create new agent:

2. 依次选择:保存位置(项目 .claude/agents/ 或个人 ~/.claude/agents/)→ 创建方式(让 Claude 生成,或 Manual configuration 手写)→ 名字 → 系统提示 → 什么时候用(description,Claude 靠这句话决定何时调用它)。
3. 选工具。下图只保留只读工具,这个子代理就不能改文件:

4. 再选模型、颜色、记忆范围,最后确认保存:

保存的文件就是一个普通 Markdown,可以直接手写或提交进仓库:
---
name: reviewer
description: "Use after finishing a change, before committing."
tools: Glob, Grep, Read, WebFetch, WebSearch
model: inherit
---
You review the staged diff and report concrete bugs with file:line. Do not edit files.本 fork 额外支持两个 frontmatter 字段:
| 字段 | 作用 |
|---|---|
omitClaudeMd: true |
作为子代理运行时不加载 CLAUDE.md,省 token |
autoCompactWindow: 150000 |
子代理的自动压缩窗口上限(100000–1000000),只能调小;CLAUDE_CODE_AUTO_COMPACT_WINDOW 优先 |
| 按键 | 位置 | 作用 |
|---|---|---|
↓ |
主输入框为空时 | 进入底部任务列表 |
↑ ↓ / Enter
|
任务列表 | 选择 / 查看子代理 |
x |
任务列表 | 停止运行中的子代理;清除已结束的 |
Esc |
子代理视图 | 返回主对话 |
ctrl+x ctrl+k(按两次确认) |
任意 | 停止所有后台子代理 |
ctrl+o |
主对话 | 展开子代理的详细过程 |
- 子代理跟随主会话当前的权限模式,你切模式它也跟着切;Agent 调用里显式写的
mode是上限。 - 自定义子代理里写的
permissionMode不能比主会话更宽,也永远不会给出bypassPermissions。 - 后台子代理需要你确认时,弹窗出现在主会话里,并注明来源,例如
from the general-purpose agent。 - 自动模式下,子代理用
SubagentHandback工具交回报告,报告也要过分类器;被拦时报告仍会送达,但带SECURITY WARNING。设CLAUDE_CODE_SENDMESSAGE_HANDBACK=0关闭。
-
续跑:子代理结束后,Claude 可以用
SendMessage给它发新消息,它带着原来的记录继续干,ID 不变。名字被新的子代理占用后,用旧名字发消息会被拒绝,需要用回执里的name [ref]或原 ID。 -
你停止的不会被自动续跑:用
x、ctrl+x ctrl+k或 SDKstop_task停的子代理,会记下「用户停止」,Claude 再发SendMessage会被拒绝(重启后也一样),只能开新的。Claude 自己用TaskStop停的不受此限。 -
等子任务:后台子代理自己又开了后台子任务时,它会先让出名额进入
waiting,子任务完成后自动以原 ID 续跑。 -
并发上限:同时运行的子代理默认最多 20 个,
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS可调;超出时启动会被拒绝。
交互会话默认开启 fork 模式,影响两件事:
- 子代理一律后台运行(模型看不到
run_in_background参数); - 模型可以用
subagent_type: "fork"启动一个继承整个当前对话的子代理(和/subtask一样),不写类型时仍是独立上下文的general-purpose。fork 子代理固定用主对话的模型,以复用缓存。
想让 Claude 能前台等子代理结果,用 CLAUDE_CODE_FORK_SUBAGENT=0 claude 关闭;非交互模式可用 =1 打开。/subtask 不受这个开关影响。
| 配置项 | 写法 | 说明 |
|---|---|---|
CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS |
1 |
去掉内置 Explore 和 Plan
|
CLAUDE_CODE_FORK_SUBAGENT |
0 / 1
|
关闭 / 开启 fork 模式 |
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS |
1 |
禁用所有后台任务,子代理一律前台;此时 SendMessage 续跑会等结果再返回 |
CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS |
正整数,默认 20
|
同时运行上限 |
CLAUDE_CODE_SENDMESSAGE_HANDBACK |
0 |
关闭自动模式下的 SubagentHandback
|
CLAUDE_CODE_HANDBACK_PROVENANCE |
0 |
续跑报告改用原始 JSON 格式 |
worktree.baseRef(settings) |
fresh(默认)/ head
|
isolation: "worktree"、--worktree、EnterWorktree 新分支的起点:fresh 基于 origin/<默认分支>,head 基于本地 HEAD(保留未推送提交) |
模型调用 Agent 工具时可用的参数:
{
"description": "检查配置映射",
"prompt": "核对 provider effort 的当前行为并报告证据。",
"subagent_type": "general-purpose",
"model": "sonnet",
"effort": "high",
"name": "effort-review",
"isolation": "worktree"
}EnterWorktree 也可以传 path 进入已有的 worktree;不在 .claude/worktrees/ 下的路径会先问你,退出时只能保留不能删除。
技能(skill)写 context: fork 就会在子代理里运行,交互模式默认后台;background: false 改为同步,agent: 指定用哪个子代理:
---
description: Review the supplied changes
context: fork
agent: my-plugin:reviewer
allowed-tools: Read, Grep, Glob
disallowed-tools: Bash, Write, Edit
background: false
---
Review $ARGUMENTS and report concrete findings.启动时会把技能身份和权限记录存到子代理的 transcript 目录,续跑时按当前技能重新计算权限;记录缺失或技能已不支持 fork 时拒绝续跑。
- 调试日志标签:
[AgentConcurrency]、[AgentLifecycle]、[ForkMode]、[ConversationFork]、[AgentResume]、[AgentCancellation]、[SendMessage](用--debug --debug-file <path>打开)。 - Mods 脚本:
$.agent.spawn()在全局额度不足时返回{ deny };$.agent.list()显示running/waiting/idle;$.tool.call({tool: 'SendMessage', …})走同一续跑路径。 - 相关测试:
src/tools/AgentTool/下的backgroundRouting、forkMode、backgroundOwner、AgentTool.receipt292测试,以及src/utils/forkedSkill.test.ts。 - 专项验收记录:并发、fork 技能名额、插件 fork、父子任务、fork 技能后台、默认后台、fork 模式、/subtask、同步续跑、用户停止、SendMessage 绑定。
- 尚未实现:内置
/fork(复制整个后台会话)和 fork 指令折叠 UI。
画面来自实际运行,模型回复由测试用假 API 生成(FAKE_DONE;提示词里的 DO<<…>> 是让假 API 调用工具的指令,__delay 用来让子代理跑久一点)。
本页由 docs/features/agents.md 自动同步,请在仓库中修改。
- Agent SDK 与 stream-json 控制协议
- Agent Teams
- Agent 与后台任务
- 自动模式(Auto mode)
- 背景会话、daemon 与 agents 视图
- 自定义 UI / Branding 与 Status line
- 构建、发布与终端验收工具
- Channels
- Codex Apps
- 自动压缩窗口
- 调试日志
- /diff 视图
- Direct Connect
- Effort 档位
- 自主 Goal
- Hooks 事件、匹配与输出校验
- 快捷键与 Vim 模式
- MCP 配置与认证
- 记忆:auto memory 与 SQLite FTS5 检索
- 模型自动发现与 Gateway
- Mods 远程客户端(stream-json)
- Mods / Function Hooks
- Monitor 工具
- OpenAI / Codex provider
- 独立会话通信
- 权限规则、权限模式与 Safe mode
- 插件与 Marketplace
- Prompt context 与 Tool search
- 请求韧性:重试、回退模型与默认模型
- Bash 沙箱
- 定时任务:Cron、/loop 与 ScheduleWakeup
- 会话命令
- Skills
- SSH Remote
- 遥测与反馈
- 终端程序状态(OSC 7501)
- Terminal 工具
- 用量、成本与状态
- VS Code 插件
- Dynamic Workflow