过去的终端是给一个人用的。

你打开一个 shell,输入命令,看输出,切到另一个 tab,再回来继续。即使窗口里有很多 pane,本质上也还是一个人在主动操作一组命令行。

AI 编码 agent 改变了这个关系。现在更常见的画面是:一个 agent 在修 bug,一个 agent 在读代码,一个 agent 在跑测试,另一个 agent 在某个 worktree 里试一个不确定的方案。人不再只是“使用终端”,而是在监督多个终端里的工作。

这时候,传统 tab 和分屏就开始吃力。

问题不是终端不够好

很多终端工具会强调启动速度、渲染性能、主题、补全、命令提示。这些都重要,但它们解决的是“单个终端是否好用”。

多 agent 编码的问题不是这个。

真正的问题是:

  • 哪个 agent 正在跑?
  • 哪个 agent 在等我输入?
  • 这个终端属于哪个 worktree?
  • 这个 diff 是谁改出来的?
  • 哪个任务已经可以收尾?
  • 哪条线索只是暂时搁置,不应该从脑子里消失?

这些问题很少能靠一个更漂亮的 terminal tab 解决。因为它们不是字符渲染问题,而是工作现场的组织问题。

多 agent 工作需要空间感

人类本来就靠空间组织工作。

你可能会把文档放在左边,把终端放在右边,把浏览器放到另一个屏幕。时间久了,位置本身会变成记忆的一部分。你不需要每次都读标题,只要看一眼位置,就知道那块区域在做什么。

AI agent 的工作也适合这样组织。

一个负责 review 的终端,不应该和一个负责实现的终端混在同一排 tab 里。一个实验性的 worktree,不应该和主线工作长得完全一样。一个已经完成但还要回看的会话,也不应该立刻从视野里消失。

可视化工作台的价值,就在于把这些关系摆出来:

  • 相关终端可以放在一起。
  • 不同 worktree 可以形成清晰边界。
  • 正在进行、等待输入、已经完成的会话能被一眼区分。
  • 暂时不用看的内容可以移到旁边,而不是彻底丢进历史记录。

这不是为了好看,而是为了减少脑内记账。

A project branches into three worktrees, each connected to a terminal and AI coding agent role
把 Project、Worktree、Terminal 和 Agent 的关系摆出来,人的注意力就不用再靠一排 tab 勉强维持。

Worktree 应该是一级对象

如果只是在一个仓库里同时开几个 agent,很快就会乱。

一个 agent 改了文件,另一个 agent 也改同一片区域。一个 agent 跑测试失败,另一个 agent 又在同一个目录里生成了新的中间状态。最后你很难分清哪个变化属于哪条任务线。

Git worktree 的意义就在这里。它给不同任务一个相对独立的工作区。每个 agent 可以在自己的分支和目录里试错,不会直接踩到别人的现场。

但在很多工具里,worktree 只是一个路径。你需要自己记住这个终端在哪个目录、对应哪个分支、负责什么任务。

TermCanvas 把它显式摆出来:项目、worktree、终端之间是有层级关系的。这样你看到一个终端时,不只是看到一段输出,而是能知道它处在项目的哪条工作线里。

人需要看到 agent 的状态

AI agent 经常会长时间运行。它可能在读文件、跑命令、等待输入、总结结果,也可能已经卡住但没有明显提醒。

如果所有状态都藏在终端输出里,人就必须不断翻日志。这个过程很累,也很容易漏。

更合理的方式是让状态浮到工作台层面:

  • 哪些会话正在运行。
  • 哪些会话需要关注。
  • 哪些任务已经完成。
  • 哪些终端关联了某个 Pin 或某条工作线索。
  • 哪些 worktree 产生了值得查看的变更。

当这些信息变成可见状态,而不是一段段终端文本时,人才能真正监督多个 agent。

可视化不是替代终端

这里有一个容易误解的点:可视化工作台不是要把终端藏起来,也不是要把开发变成低代码界面。

终端仍然重要。agent 需要真实 shell、真实仓库、真实命令、真实测试输出。问题只是,当终端数量从一个变成很多个时,原来的组织方式不够用了。

TermCanvas 做的是给终端外面加一层工作空间。终端负责执行,worktree 负责隔离,Pin 负责固定上下文,画布负责让这些东西在空间里保持关系。

它解决的不是“如何输入命令”,而是“当多个 agent 同时工作时,人如何保持掌控”。

怎么用才有意义

如果只开一个终端,画布不会带来太多新东西。它真正有价值的场景,是你开始并行处理多条工作线。

一种比较自然的用法是:

  1. 给每个明确任务分一个 worktree。
  2. 每个 worktree 里只放相关的 agent 和终端。
  3. 把 bug、截图、后续想法写成 Pin,贴在项目旁边。
  4. 需要 agent 继续处理时,把 Pin 作为上下文交给它。
  5. 完成的会话和 Pin 及时收起,避免画布变成堆积场。

这样做之后,画布不是一个“更大的终端窗口”,而是一张当前项目的工作地图。

核心变化

AI 编码让开发者的角色发生了一点变化。

你不再只是命令的输入者,而更像一个带着多个 agent 工作的 lead。你需要分配任务、观察状态、判断是否介入、决定哪条分支值得合并,哪条线索应该搁置。

这个角色变化需要新的界面形态。

可视化终端工作台的意义就在这里:让多 agent 编码从一堆难以追踪的终端,变成一个可以被观察、整理和接手的工作现场。