MUNDERDIFFLIN / LEARN
CHAPTER 06
02 · LAUNCH PATH12 分钟阅读深入

一个 Agent 如何真正跑起来

从 Add Agent 表单到外部 CLI 的完整入口链:参数校验、provider 推断、CLI 安装探测、Git 隔离、Hive 注入、恢复会话、权限姿态、PTY spawn。

本课核心问题一次创建 Agent 如何变成可恢复、可观察的真实进程?
学完你能
  • 追踪 spawnAgentCore 的输入、分支与产物。
  • 识别工作区、provider 与 PTY 三个失败面。
01
主调用链

Renderer 只提出请求,Main 才能创建进程

AddAgentModal 生成稳定 id 与 ptyId,preload 把结构化 SpawnPtyOptions 映射为 pty:spawn,Main 从唯一入口 spawnAgentCore 继续。

交互图解

Agent 启动主链

AddAgentModal校验表单 / tokenize
preload.spawnPtyipcRenderer.invoke
spawnAgentCoreprovider · install · resume
Git + Hiveworktree · identity · env
PtyManager.spawncommand · cwd · args · env
CLI Agent拥有 agent loop
一个入口串起 UI、IPC、workspace、Hive、provider 适配与真实进程。
02
启动前编排

在 pty.spawn 之前,控制面已经完成六类决策

实际顺序不是“点击后直接 spawn”。Main 会先扩展路径、判定 provider、检查/安装 CLI、创建 worktree、建立 Hive agent 目录与 bridge、补充模型/权限/恢复参数。

  • 01路径:expandTilde 后再写入 registry 与 PTY,避免 `~` 被 Node 当成普通目录。
  • 02引擎:inferAgentProvider 以显式 provider 为先,否则从 executable 推断。
  • 03缺失 CLI:只运行 provider preset 内硬编码的可信安装命令,并在同一终端显示。
  • 04隔离:isolate=true 且 cwd 是 Git repo 时创建 `agent/<id>` worktree;失败会降级到共享 cwd。
  • 05Hive:ensureAgent 写 identity、memory、邮箱、registry,并生成 provider 对应 hook/proxy。
  • 06恢复:Claude 用 --resume;Codex 用 resume 子命令与正确 CODEX_HOME;其他 provider 读取 preset。
03
最终边界

PtyManager.spawn 才真正创建 CLI 进程

最终调用 node-pty 的 pty.spawn(file, args, {cwd, env, cols, rows})。从这一刻起,外部 CLI 自己拥有 agent loop、模型连接、工具执行与上下文。

04
失败推导

创建链要按阶段提交,否则会留下半个 Agent

工作区、provider 命令、PTY、roster 与 UI session 任一步都可能失败。为每一阶段写出已创建资源、补偿动作和用户可见错误。

像办理入住:房间没准备好就不能发房卡;发了房卡后失败则必须注销记录。

LESSON CHECKPOINT

能用自己的话回答核心问题了吗?

创建 Agent 是跨状态、文件、Git、PTY 的事务式编排。