MulmoTerminal:把多路 Claude Code 和 Codex session 放进浏览器网格
AI coding agent 进入日常之后,最先遇到的并不总是“模型不会写”。更常见的问题是:你开了几个终端,一个 Claude Code 在等权限,一个 Codex 已经跑完测试,另一个 session 正在输出很长的解释,但你已经忘了哪个目录、哪个 branch、哪个任务对应哪一屏。
今天想看的是 receptron/mulmoterminal。它不是新的 agent model,也不是 IDE,而是一个跑在浏览器里的 terminal grid:把多个 Claude Code 和 Codex session 放在同一个界面里,每个格子显示状态、目录、分支、token / cost 信息和 agent 摘要;底层用 real PTY、WebSocket、xterm.js 和 tmux,让 session 可以在重启或刷新后继续接上。
按 GitHub repository API、repository page、README、Latest Release、LICENSE、package.json 和默认分支 commit 在 2026-07-30 能核验的公开信息,receptron/mulmoterminal 当前有 70 stars、11 forks。仓库主语言是 TypeScript,许可证是 MIT。仓库创建于 2026-06-14 12:39:37 UTC,最近公开 push 是 2026-07-30 10:02:10 UTC。默认分支 main 的当前 HEAD 是 5b7bf2e,提交时间 2026-07-30 10:02:08 UTC。最新 GitHub Release 是 2.8.0,发布时间 2026-07-30 05:28:22 UTC;根 package.json 的 package name 是 mulmoterminal,version 为 2.8.0,要求 Node.js >= 22.9,CLI 入口包含 mulmoterminal 和 claude-ollama。
项目概览
| 属性 | 详情 |
|---|---|
| 仓库 | receptron/mulmoterminal |
| 定位 | 多 Claude Code / Codex session 的浏览器 terminal grid |
| Stars | 70 |
| Forks | 11 |
| 主要语言 | TypeScript |
| 许可证 | MIT |
| GitHub 创建时间 | 2026-06-14 12:39:37 UTC |
| 最新 push | 2026-07-30 10:02:10 UTC |
| 当前默认分支提交 | 5b7bf2e,2026-07-30 10:02:08 UTC |
| 最新 GitHub Release | 2.8.0,2026-07-30 05:28:22 UTC |
| npm package | mulmoterminal 2.8.0,Node.js >= 22.9 |
| 关键词 | Claude Code、Codex、browser terminal、xterm.js、tmux、git worktree、Web Push |
它解决的是“哪个 agent 在等我”
README 里的核心场景很具体:单个 agent 用普通 shell 就够了,但几个 agent 并行时,普通 terminal split 很快会变成注意力负担。MulmoTerminal 把每个 session 放进一个 cell,并用颜色标出 working、waiting、done、idle 等状态。你不用一屏屏翻输出,只要看哪些格子亮成需要你处理的状态。
这件事听起来像 UI 小改,但对 CLI agent 工作流很关键。Claude Code 和 Codex 都可能在中途等用户确认、请求权限、提示继续,或者跑完一段长任务后停在那里。如果人在几个 terminal tab 之间切换,最容易浪费时间的不是操作本身,而是重新判断“我刚才让这个 session 做什么”。
MulmoTerminal 在 cell header 里放 model、context 百分比、token 输入输出、分支 / 变更 chip 和 AI 摘要。它不是试图让 agent 更聪明,而是把 agent 的运行状态从聊天记录里提取出来,变成一个可以扫视的控制面。
tmux 和 worktree 让并行不那么脆
这个项目最实际的设计,是没有把浏览器 UI 当成唯一状态来源。README 说明每个 session 是服务器上的真实 PTY,通过 WebSocket 流到浏览器里的 xterm.js。tmux 负责让 terminal session 在服务重启、页面刷新或开发 server reload 后继续存在。
对 coding agent 来说,这比纯前端 terminal 重要。一个 agent 可能正在跑 build、测试、代码生成,或者在长时间分析仓库。浏览器刷新不应该直接杀掉它。tmux 把 session 生命周期放在服务器侧,MulmoTerminal 负责重新连接和展示状态。
另一个有用点是 git worktree。每个 repo cell 可以显示 branch chip,创建隔离 worktree,打开 diff panel,并支持 commit、push 和开 PR。多 agent 并行最大的问题之一,是几条任务线在同一个 checkout 里互相踩文件;worktree 至少让每条线拥有自己的目录和 branch,最后由人合并判断。
它不只是终端分屏
如果 MulmoTerminal 只是把终端四宫格化,那它的价值会比较有限。README 里更值得注意的是它把 agent 输出和周边动作也放进同一个界面。
一类是 GUI panel。项目通过 MCP / plugin 机制,把 agent 产生的文档、表单、图表、图片、HTML、collection cards 等结果渲染到 Canvas 区域。这个方向适合那些本来不应该只看纯文本的任务,例如让 agent 生成图表、整理报告、检查页面或处理结构化输出。
另一类是文件和路径处理。README 提到可以拖文件到 terminal,把截图直接粘进去,也能把 agent 输出的文件路径变成可点击入口。对长期跑 CLI agent 的人来说,这些细节往往比“又支持一个模型”更影响手感:你少复制几次绝对路径,也少让 agent 反复问“文件在哪”。
还有手机推送和 RemoteHost companion。任务完成或等待输入时可以通过 Web Push 把人叫回来,手机上也可以做简单的 yes / no / continue 响应。这个功能不是每个人都需要,但它说明项目的目标不是“把 agent 留在前台盯着”,而是让人可以暂时离开,再在真正需要介入时回来。
安装路径足够直接,但依赖不少
README 给的启动方式是:
npx mulmoterminal@latest
它默认在本机启动服务并打开浏览器。package.json 里也能看到 mulmoterminal CLI 入口。要求方面,Node.js 需要 >= 22.9,README 还列出 claude、git、gh 等工具,其中 codex 是可选项,用来在 cell 里跑 OpenAI Codex session。tmux 推荐安装,用来获得 session persistence;Docker、ffmpeg、ollama 也对应一些可选能力。
这意味着它不太像“点开网页就能用”的 SaaS,而更像本机开发工具。你要愿意在本地或开发机上跑一个 Node server,并把 agent CLI、GitHub CLI、tmux、repo 权限都配好。换来的好处是 session 和代码仍在自己的机器上,浏览器只是控制界面。
需要注意的边界
第一,项目非常年轻。它在 2026-06-14 创建,stars 还只有 70,虽然最近更新很频繁,但不能把它当成已经充分验证的基础设施。
第二,它默认面向个人或小范围工作流,而不是企业 agent 调度平台。README 强调的是本地 grid、worktree、PR 操作和 Web Push;如果你需要 SSO、审计、集中权限治理,这不是同一个问题域。
第三,权限边界要自己想清楚。MulmoTerminal 可以控制真实终端、agent CLI、repo 和 gh 登录态,所以它本质上接近开发机控制面。只在可信网络使用、理解端口暴露方式、避免把带凭据的开发机随手开到公网,是采用前应该先确认的事。
第四,GUI 不能替代 review。颜色、摘要、diff panel 和 PR 按钮能降低并行管理成本,但 agent 产生的代码仍然要 build、test、review。这个工具让你更容易同时监督多路 agent,不保证每路 agent 的结果正确。
总结
receptron/mulmoterminal 的有趣之处,是它抓住了 AI coding 工作流里一个正在变真实的问题:当 agent 从“一个助手”变成“几条并行任务线”,人需要的不是更多聊天窗口,而是可观察的运行面。
如果你只偶尔开一个 Codex 或 Claude Code session,普通 terminal 已经够用。但如果你经常同时跑几路 agent,反复忘记哪个 terminal 在等权限、哪个 branch 有 diff、哪个任务已经完成,MulmoTerminal 值得试一试。它不是让 agent 替你做判断,而是让你少在并行的终端状态里迷路。