07. 并行工作
分叉会话
/fork 把当前对话复制成这个 Matcha CLI 进程里的对等顶层会话。子会话从同一份历史开始,然后自己跑。文件改动仍在当前检出里,除非你同时要求一个 git worktree。
这不是远程助手,也不是 matcha worktree。Cloud Agent(cloud_agent)在本构建中不可用。worktree 是另一份 git 检出;/fork 是对话分叉,可以顺带创建一个 worktree。
什么时候分叉
想开第二条线、又不离开手头会话时,用分叉:
- 试另一条路(
/fork try the async rewrite),原会话继续跟原来的计划。 - 把同一份上下文交给兄弟会话,让它并行调研或实现。
- 一个会话继续跟你说话,另一个去跑长任务。
新会话(/new、Ctrl+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_mode(always/never)。把该键改回ask就会再问。
键未设置时,/fork 默认 **ask**。不在 git 仓库里则跳过询问,就地分叉。在 git 仓库外使用 /fork --worktree 会被拒绝并弹出提示。
父会话的滚动记录会写下 Forked 或 Forked: <directive>。然后 Matcha 切到子会话。用助手看板(/dashboard 或 Ctrl+\)跳回去。
分叉不是什么
/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)默认关闭。没有远程路径能把这次分叉跑到官方云上。