Skip to content
FunCoding

Search

Search docs, agents, posts, Skills and MCP servers

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 far

fork 出现在提示下方的面板里并在后台运行,你可以继续工作;完成时结果作为一条消息到达主对话。

观察与引导运行中的 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 在每种会话里关闭它。