07. 并行工作

分叉会话

/fork 把当前对话复制成这个 Matcha CLI 进程里的对等顶层会话。子会话从同一份历史开始,然后自己跑。文件改动仍在当前检出里,除非你同时要求一个 git worktree。

这不是远程助手,也不是 matcha worktree。Cloud Agent(cloud_agent)在本构建中不可用。worktree 是另一份 git 检出;/fork 是对话分叉,可以顺带创建一个 worktree。

什么时候分叉

想开第二条线、又不离开手头会话时,用分叉:

  • 试另一条路(/fork try the async rewrite),原会话继续跟原来的计划。
  • 把同一份上下文交给兄弟会话,让它并行调研或实现。
  • 一个会话继续跟你说话,另一个去跑长任务。

新会话(/newCtrl+N)从空白开始。分叉带着上下文开始。

`/fork` 怎么工作

/fork 只在会话里有效。在已打开的对话里运行,不要在欢迎屏上跑。

/fork [--worktree|--no-worktree] [directive]
你输入结果
/fork打开对等会话,复制这份历史,不发第一条提示。
/fork investigate the rate-limit path同样复制,然后把这段文字作为子会话的第一条提示发出。
/fork --worktree try the async approach复制历史,并把子会话放到新的隔离 git worktree 里。
/fork --no-worktree quick check在当前工作目录里复制历史。

--worktree--no-worktree 互斥。标志后面的未知词会变成指令,所以 /fork --foo bar 的第一条提示是 --foo bar,不是报错。

worktree 询问

两个标志都省略、且会话在 git 仓库里时,Matcha 会问这次分叉要不要自己的 worktree:

  • **Yes** — 隔离检出。
  • **No** — 与父会话同一 cwd(两个会话都能改同一批文件)。
  • **Always worktree** / **Never worktree** — 把选择记进 [hints] fork_worktree_modealways / never)。把该键改回 ask 就会再问。

键未设置时,/fork 默认 **ask**。不在 git 仓库里则跳过询问,就地分叉。在 git 仓库外使用 /fork --worktree 会被拒绝并弹出提示。

父会话的滚动记录会写下 ForkedForked: <directive>。然后 Matcha 切到子会话。用助手看板(/dashboardCtrl+\)跳回去。

分叉不是什么

/fork在 worktree 里开的新会话matcha worktree
复制当前对话
创建 git 检出仅在 --worktree / Yes 时是(matcha --worktree=…Ctrl+W否 — 它列出、查看、删除并 gc Matcha 已经建好的检出
在本机运行
Cloud Agent不可用不可用不可用

隔离检出、生命周期和磁盘清理,见 Git worktree。

无界面的历史分叉是另一条入口:matcha --resume <id> --fork-session 把已保存的会话复制成新的会话 ID。那不是 TUI 的 /fork 命令。

限制

  • /fork 只在已加载的会话里有效。会话还在创建中时,Matcha 弹出提示,然后什么也不做。
  • 分叉是**对等会话**,不是子助手。子助手由助手通过 spawn_subagent 拉起,只在父会话下嵌套一层;见子助手与角色。
  • Cloud Agent(cloud_agent)默认关闭。没有远程路径能把这次分叉跑到官方云上。