乐于分享
好东西不私藏

Claude Code 源码十大亮点04:In-Process Teammate

Claude Code 源码十大亮点04:In-Process Teammate

Digital Strategy Review | 2026

Claude Code 十大亮点解读 04|同进程 Teammate Runtime:在性能和隔离之间找到更好的平衡

文 / 果叔 · 阅读时间 / 8 Min

写在前面

多 Agent 走到协作层,最容易卡住的地方就是运行形态怎么选:太重会拖垮体验,太轻又会把边界做乱。Claude Code 这一层很值得看,因为它给出的并不是折中口号,而是一套真正能跑起来的中间路线。

01

同进程 Teammate Runtime:在性能和隔离之间找到一个极佳平衡点

多 Agent 系统走到协作这一步,通常会卡在一个老问题上:

• 每个 Agent 都起独立进程,隔离强,但成本高、同步复杂

• 全塞同一个主上下文,成本低,但边界混乱

Claude Code 的答案是:引入 in-process teammate。

它不是独立 OS 进程,也不是主 Agent 的普通子调用,而是一个运行在同一进程中的、具备独立身份和任务状态的 teammate。

相关核心实现主要在:

• src/utils/swarm/spawnInProcess.ts

• src/utils/swarm/inProcessRunner.ts

• src/tasks/InProcessTeammateTask/*

02

一、为什么要做 in-process teammate

如果你只做普通 subagent,其实已经能实现一些委派了。 但 Claude Code 想解决的是更进一步的问题:

• 多个 Agent 长时间协作

• 彼此有明确团队身份

• 能被 UI 统一查看

• 仍然保持较低运行成本

如果全用 tmux pane 或独立子进程来做,这套系统会变得很重。

于是 Claude Code 选择了一个非常务实的折中:

同进程运行,但身份、权限、任务、消息都做专门隔离。

Claude Code 选择的是第三条路:不走重进程,也不把边界全部抹平。

03

二、这个设计最妙的地方:它不是“偷懒地共用进程”

有些系统说自己“轻量多 Agent”,实际只是把多个逻辑分支塞进一个事件循环里,根本谈不上隔离。

Claude Code 不是这样。

它为 in-process teammate 做了很多专门机制:

• 独立 AbortController

• teammate identity

• 独立 task state

• AsyncLocalStorage / teammate context

• 独立 pending user messages

• 专门的 permission bridge

• 与 leader 的 mailbox 协作

所以它的本质不是“多个 Agent 恰好在同一进程”,而是:

多个 Agent 在同一进程中,以专门的上下文与状态壳运行。

04

三、spawnInProcessTeammate 解决了什么

spawnInProcess.ts 这一层主要负责:

01 生成 teammate 的稳定身份

02 创建独立 abort controller

03 创建 teammate context

04 构造 InProcessTeammateTaskState

05 注册到 AppState

也就是说,它做的是把 teammate 正式注册成系统对象

这一步很重要,因为它意味着 teammate 不是 runAgent 的一个参数,而是一个在系统里真实存在、可被追踪的执行体。

05

四、inProcessRunner.ts 才是 teammate 真正跑起来的地方

这个文件的意义在于: 它没有另搞一套特殊 Agent 引擎,而是让 teammate 最终也回到同一套 runAgent(...) 上。

换句话说:

• 同进程 teammate 有自己的外壳

• 但核心推理执行仍然是 Claude Code 的标准 agent loop

这是一种非常成熟的架构取舍:

• 外层按运行形态分化

• 内层尽量共用执行引擎

这样就不会出现“普通 subagent 一套行为,teammate 又是另一套奇怪行为”的问题。

06

五、为什么这个设计对 UI 非常友好

因为 teammate 最终是 task,所以 REPL 可以非常自然地支持:

• teammate 列表

• transcript 查看

• 用户给 teammate 注入消息

• teammate 的 pending 状态与运行状态

如果 teammate 只是若干后台 Promise,这些体验会非常难实现。

Claude Code 通过 in-process teammate 设计,把“协作中的其他 Agent”也纳入了统一可视化对象体系。

这正是它的 UI 看起来比普通终端 Agent 更像“协同工作台”的原因之一。

07

六、性能上的优势非常现实

1. 启动快

不用反复起新进程,也不必额外建太多 IPC 基础设施。

2. 共享运行时环境

同一进程里,很多基础能力可以共享:

• 已初始化的运行环境

• 部分缓存

• 状态桥接

• 权限交互通道

3. 适合大量轻量级协作

某些任务其实只需要:

• 快速搜代码

• 跑几个只读分析

• 做短平快验证

这些场景下,用 in-process teammate 比重型隔离 Agent 更划算。

08

七、当然,它也不是万能的

这类设计的边界也很明确。

1. 隔离程度不如独立进程 / worktree / remote

如果任务非常重、非常长,或者需要更强环境隔离,同进程 teammate 未必是最佳选择。

2. 权限和控制面必须做得更仔细

因为它共享主进程,所以更需要 leader permission bridge、mailbox、context 隔离来防止混乱。

3. 生命周期处理要非常小心

中断、切后台、用户注入消息、shutdown request,都必须处理得很稳,不然很容易出现悬挂状态。

Claude Code 恰恰是在这些细节上做得足够扎实,才让这条路线可用。

09

八、一张图看懂这件事

10

九、结论

同进程 teammate runtime 之所以是亮点,不是因为它“更省资源”这么简单,而是因为它在:

• 运行成本

• 身份隔离

• 控制面统一

• 协作体验

之间取得了非常好的平衡。

很多系统在多 Agent 这一步,要么太重,要么太乱。 Claude Code 用 in-process teammate 给出了第三种答案:

不必每个 Agent 都是独立进程,但每个 Agent 都必须是独立对象。