cmux:为 AI 编码代理而生的 macOS 终端,把通知和标签页变成工作流
cmux 是一款基于 Ghostty 的开源 macOS 终端,提供垂直标签页和通知提示圈,当 AI 编程智能体需要关注时会亮起提醒。
秒懂
- 它是什么?
- cmux 是一个基于 Ghostty 的开源 macOS 终端,用垂直标签页和通知环解决 AI 编码代理并行会话时的注意力管理问题。它面向重度使用 Claude Code 或 Codex 的开发者,提供原生性能与可编程接口。
- 适合谁用?
- 如果你同时运行多个 Claude Code 或 Codex 会话,且受够了 macOS 通知只有「Claude is waiting for your input」这种无上下文提示,cmux 值得一试。它把通知、标签页和浏览器整合进一个原生终端,适合愿意用 CLI 和 socket API 定制工作流的开发者。
- 能商用吗?
- 请先确认。这个仓库使用的许可证不在我们自动归类的范围内,商用前请阅读仓库里的 LICENSE 文件。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Swift(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
一个为「并行代理」设计的终端
cmux 解决的问题很具体:当你在一个终端里同时跑多个 AI 编码代理(比如 Claude Code 和 Codex)时,怎么知道哪个代理在等你?macOS 原生通知只告诉你「Claude is waiting for your input」,没有上下文,标签页一多连标题都读不完。cmux 的定位是给这类重度用户一个原生、可编程的终端,而不是又一个 Electron 套壳。它基于 Ghostty 的 libghostty 渲染,读取你现有的 `~/.config/ghostty/config`,所以主题、字体、颜色都能继承。目标用户是那些不想被 GUI 编排器锁定工作流,更喜欢在终端里自己组合工具的开发者。
通知环与侧边栏:注意力管理的核心机制
cmux 的侧边栏是垂直标签页,每个 workspace 显示 git 分支、关联 PR 的状态和编号、工作目录、监听端口,以及最新通知文本。当代理等待输入时,对应 pane 会出现蓝色环,标签页也会亮起。通知系统识别终端序列 OSC 9、OSC 99、OSC 777,同时提供 `cmux notify` 命令行工具,可以接进 Claude Code、OpenCode 等代理的 hooks。Cmd+Shift+U 直接跳到最近未读通知。这个设计把「哪个代理需要我」从猜测变成了视觉扫描,比原生通知的「无上下文弹窗」更直接。但注意,通知能否生效取决于代理是否支持这些 OSC 序列,或者你是否愿意自己配置 hook,这不是开箱即用的。
内置浏览器:让代理直接操作你的 dev server
cmux 内置了一个可脚本化的浏览器,API 移植自 vercel-labs/agent-browser。代理可以快照 accessibility tree、获取元素引用、点击、填表、执行 JS。你可以把一个浏览器 pane 和终端 split 在一起,然后让 Claude Code 直接和本地 dev server 交互。浏览器还支持从 Chrome、Firefox、Arc 等 20 多个浏览器导入 cookies、历史和会话,这样浏览器 pane 启动时就是已登录状态。这个功能把「终端 + 浏览器」合并成一个可编程环境,但它的能力边界取决于 agent-browser 的 API 完整性,如果你需要复杂的浏览器自动化(比如多标签管理),可能需要等待项目补齐。
SSH 与 Claude Code Teams:远程工作流的两个入口
`cmux ssh user@remote` 会为远程机器创建一个 workspace,你可以用 `--command 'omp "investigate auth"'` 在第一个远程终端里执行初始命令。浏览器 pane 会路由到远程网络,所以 localhost 直接可用。拖拽图片到远程会话会自动通过 scp 上传。另一个入口是 `cmux claude-teams`,它运行 Claude Code 的 teammate 模式,teammates 会以原生 split 形式出现,带侧边栏元数据和通知,不需要 tmux。这两个功能把远程开发和团队协作都纳入了 cmux 的 workspace 模型,但注意,SSH 的浏览器路由和 scp 上传是项目自定义的实现,如果你依赖特定的 SSH 配置(比如跳板机、多跳),可能需要额外验证。
安装与配置:从 Homebrew 到自定义命令
安装方式有两种。推荐用 DMG 安装包,拖入 Applications 文件夹,之后通过 Sparkle 自动更新。或者用 Homebrew:`brew tap manaflow-ai/cmux` 然后 `brew install --cask cmux`,更新用 `brew upgrade --cask cmux`。首次启动 macOS 会要求确认打开来自已识别开发者的应用。配置方面,cmux 读取 Ghostty 的配置,同时支持 `cmux.json` 定义项目特定的自定义命令,从命令面板启动。CLI 和 socket API 可以创建 workspaces、split panes、发送按键、自动化浏览器。注意,目前只有 nightly 版本在持续发布,v0.64.22 和 v0.64.21 的发布日期在 2026 年 8 月,而 nightly 更新到 2026 年 2 月,说明项目处于快速迭代阶段,API 可能变动。
局限性与替代方案:不是所有场景都适合
cmux 明确声明是 GPL 许可,但仓库元数据标注 unknown,这是个需要警惕的信号。如果你所在团队有许可证合规要求,必须在采用前核实。功能上,cmux 只支持 macOS,没有 Linux 或 Windows 版本。它依赖 Ghostty 的 libghostty,这意味着 Ghostty 的更新节奏会直接影响 cmux 的稳定性。替代方案方面,你可以继续用 Ghostty 加 tmux,搭配原生 macOS 通知脚本,但那样你无法获得垂直标签页的元数据展示(git 分支、PR 状态)和内置浏览器的脚本化 API。另一个方向是使用 GUI 编排器(如 Claude Code 的桌面版),但那些通常是 Electron/Tauri 应用,性能上不如原生 Swift/AppKit。cmux 的取舍是:牺牲生态成熟度,换取原生性能和可组合性。如果你不需要浏览器自动化,或者你的代理不支持 OSC 通知,那么它的核心价值就打了折扣。
维护与升级成本:nightly 版本的双刃剑
项目目前以 nightly 版本为主,v0.64.22 和 v0.64.21 是 2026 年 8 月的版本,而 nightly 更新到 2026 年 2 月,时间线有些混乱,可能意味着 nightly 和稳定版并行发布。使用 nightly 意味着你提前获得新功能,但也可能遇到未修复的 bug。Sparkle 自动更新只适用于 DMG 安装,Homebrew 用户需要手动 `brew upgrade --cask cmux`。文档方面,README 提供了多语言版本和指向 cmux.com/docs 的链接,但具体配置键和 API 细节需要查阅在线文档。如果你计划深度定制,建议先阅读「The Zen of cmux」一文,它阐述了项目理念:cmux 是原语而非解决方案,不强制你使用某种代理工作流。这种哲学意味着你需要自己维护工作流脚本,而不是依赖开箱即用的集成。
编辑结论
如果你同时运行多个 Claude Code 或 Codex 会话,且受够了 macOS 通知只有「Claude is waiting for your input」这种无上下文提示,cmux 值得一试。它把通知、标签页和浏览器整合进一个原生终端,适合愿意用 CLI 和 socket API 定制工作流的开发者。但如果你依赖成熟的插件生态、需要跨平台支持,或者不想维护一个快速迭代的 nightly 版本,那它目前不是合适的选择。在采用前,先确认你的 Ghostty 配置能被正确读取,并检查你常用的 agent 是否能通过 OSC 序列或 `cmux notify` 接入通知系统。另外,项目许可证在 README 中写的是 GPL,但仓库元数据标注为 unknown,正式采用前请务必核实许可证细节。
社区笔记