Fork:继承整个对话的子智能体
用 /subtask 启动继承完整对话的 fork、在面板里观察与引导它、与普通子智能体的区别,以及 fork 模式的开关。
命令名随版本变化,以官方为准:运行 fork 子智能体的
/subtask需要 v2.1.212+;v2.1.161 到 v2.1.211 里该命令是/fork。关闭 agent view 后/subtask不可用,此时/fork启动 fork 子智能体;否则/fork把整个会话复制成一个新的后台会话。
fork 是继承到目前为止整个对话的子智能体,而不是从头开始。这放弃了子智能体通常提供的输入隔离:fork 看到与主会话相同的系统提示、工具、模型和消息历史,所以你可以把旁支任务交给它而无需重新解释局面;它自己的工具调用仍留在你的对话之外,只有最终结果回来,主上下文窗口保持干净。当任何其他子智能体都需要太多背景才有用时,或想从同一起点并行尝试多种做法时,用 fork。
Claude 通过 Agent 工具请求 fork 子智能体类型来启动 fork,是否能这么做由 fork 模式控制(交互会话里默认开启)。你可以自己用 /subtask 加任务启动 fork,无论 fork 模式是否开启;Claude Code 以任务的前几个词给 fork 命名。例如在主会话继续实现时,让 fork 起草测试用例:
/subtask draft unit tests for the parser changes so farfork 出现在提示下方的面板里并在后台运行,你可以继续工作;完成时结果作为一条消息到达主对话。
观察与引导运行中的 fork
运行中的 fork 显示在提示输入下方的面板里,主会话一行、每个 fork 一行。成功完成的 fork 其行被移除;失败或被你停止的保留 30 秒,与其他后台子智能体相同(v2.1.232 之前完成的 fork 行也保留 30 秒)。面板按键:
| 按键 | 动作 |
|---|---|
↑ / ↓ | 在行之间移动 |
Enter | 打开所选 fork 的转录并向它发送后续消息 |
x | 停止运行中的所选 fork,或在它已不在运行时清除其行;在主会话行、或你用 Enter 打开了转录的 fork 行上,x 改为向提示里输入 |
Esc | 把焦点还给提示输入 |
打开某个 fork 或子智能体的转录时,后续消息和 Skill 发给该智能体,内置命令发给主对话,并有这些保护:/compact、/clear、/rewind 作用于主对话,所以在此视图里运行它们之前 Claude Code 会请你确认;/model 和 /fast 设置的是主对话的模型和 fast 模式而不是所查看智能体的,所以不会在此视图里运行,并有通知说明原因。想让所查看的智能体在它所等待的工作结束之前就读到你的消息,用 Ctrl+Enter 或 Ctrl+X Ctrl+S 发送:它所等待的、可以移到后台的 shell 命令或子智能体会移到后台继续运行;智能体正在写回复、或所等待的工作无法后台化时,它继续进行并在那件事完成后读取你的消息(需要 v2.1.286+)。
fork 与其他子智能体的区别
fork 继承主会话在生成那一刻拥有的一切,其他子智能体则从自己的定义开始:
| Fork | 非 fork 子智能体 | |
|---|---|---|
| 上下文 | 完整对话历史 | 全新上下文加你传入的提示 |
| 系统提示与工具 | 与主会话相同 | 来自子智能体的定义文件,后台运行时会被过滤 |
| 模型 | 与主会话相同 | 来自子智能体的 model 字段 |
| 权限 | 提示出现在你的终端 | 后台运行时提示出现在主会话 |
| 提示缓存 | 与主会话共享 | 独立缓存 |
因为 fork 的系统提示和工具定义与父对话相同,它的第一次请求就能复用父对话的提示缓存,所以对需要相同上下文的任务,fork 比生成全新子智能体更便宜。Claude 通过 Agent 工具生成 fork 时可以传 isolation: "worktree",让 fork 的文件编辑写入单独的 git worktree 而不是你的检出。fork 不能再生成 fork。
开关 fork 模式
Claude Code 在交互会话里默认开启 fork 模式,在非交互 -p 模式和 Agent SDK 里默认关闭;交互默认需要 v2.1.232+,更早版本里把 CLAUDE_CODE_FORK_SUBAGENT 设为 1 才开启。fork 模式开启时可以从 Claude Code 处理 Agent 工具的方式看出来:
- Claude 可以通过请求
fork子智能体类型来生成 fork;Claude 没有请求类型时,得到general-purpose子智能体(只要会话里仍有该类型)。从定义生成的子智能体(如 Explore)照常工作。 - Claude Code 在后台运行 Claude 生成的子智能体,fork 与非 fork 一律如此(那些保持前台的情形除外,见「使用子智能体」),并移除 Agent 工具的
run_in_background参数,让 Claude 无法要求前台。
用环境变量 CLAUDE_CODE_FORK_SUBAGENT 覆盖默认:1 在非交互模式和 Agent SDK 里也开启 fork 模式;0 在每种会话里关闭它。