开源项目

cmux

cmux

基于 Ghostty 的 macOS 原生终端,专为 AI coding agent 工作流优化,支持垂直标签、通知环和内置浏览器。亮点是原生 Swift/AppKit 构建(非 Electron),性能出色;内置可编程浏览器让 agent 直接操作 UI;一键启动 Claude Code Teams 并以原生分屏运行;通知系统可区分不同 agent 的等待状态。适合同时管理多个 AI agent 会话的开发者。

README

cmux

一款基于 Ghostty 的 macOS 终端,具有垂直标签和通知功能,专为 AI 编码代理设计

下载 cmux for macOS

English | 日本語 | Tiếng Việt | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | ភាសាខ្មែរ | Українська

X / Twitter Discord GitHub stars

cmux 截图

▶ 演示视频 · cmux 之道

特性

通知环

当编码代理需要你关注时,面板会显示蓝色环,标签会亮起
通知环

通知面板

在一个地方查看所有待处理通知,跳转到最新的未读消息
侧边栏通知徽章

内置浏览器

在终端旁分屏打开浏览器,内置可脚本化的 API(移植自 agent-browser)
内置浏览器

垂直 + 水平标签

侧边栏显示 git 分支、关联的 PR 状态/编号、工作目录、监听端口以及最新通知文本。支持水平和垂直分屏。
垂直标签和分屏面板

SSH

cmux ssh user@remote 为远程机器创建工作区。浏览器面板通过远程网络路由,因此 localhost 可正常运行。将图片拖入远程会话即可通过 scp 上传。
cmux SSH

Claude Code Teams

cmux claude-teams 通过一条命令运行 Claude Code 的队友模式。队友作为原生分屏启动,带有侧边栏元数据和通知。无需 tmux。
Claude Code Teams
  • 浏览器导入 — 从 Chrome、Firefox、Arc 等 20 多种浏览器导入 Cookie、历史记录和会话,使浏览器面板启动时即已认证
  • 自定义命令 — 在 cmux.json 中定义项目特定操作,可从命令面板启动
  • 可脚本化 — CLI 和 socket API 可创建工作区、分屏、发送按键和自动化浏览器
  • 原生 macOS 应用 — 使用 Swift 和 AppKit 构建,非 Electron。启动快,内存占用低。
  • Ghostty 兼容 — 读取你现有的 ~/.config/ghostty/config 以获取主题、字体和颜色
  • GPU 加速 — 基于 libghostty 实现流畅渲染

安装

DMG(推荐)

下载 cmux for macOS

打开 .dmg 并将 cmux 拖入应用程序文件夹。cmux 通过 Sparkle 自动更新,因此只需下载一次。

Homebrew

brew tap manaflow-ai/cmux
brew install --cask cmux

稍后更新:

brew upgrade --cask cmux

首次启动时,macOS 可能会要求你确认打开来自已识别开发者的应用。点击 打开 继续。

为什么选择 cmux?

我并行运行了大量 Claude Code 和 Codex 会话。当时使用 Ghostty 并开了一堆分屏面板,依赖原生 macOS 通知来了解代理何时需要我。但 Claude Code 的通知内容始终只是“Claude 正在等待你的输入”,毫无上下文,而且标签页开多了连标题都看不清。

我尝试过一些编码编排工具,但大多数都是 Electron/Tauri 应用,性能让我困扰。而且我更喜欢终端,因为 GUI 编排工具会把你锁死在它们的工作流里。所以我用 Swift/AppKit 构建了 cmux 这个原生 macOS 应用。它使用 libghostty 进行终端渲染,并读取你现有的 Ghostty 配置以获取主题、字体和颜色。

主要新增功能是侧边栏和通知系统。侧边栏包含垂直标签,显示每个工作区的 git 分支、关联的 PR 状态/编号、工作目录、监听端口以及最新通知文本。通知系统可以捕获终端序列(OSC 9/99/777),并提供一个 CLI(cmux notify),你可以将其接入代理钩子(如 Claude Code、OpenCode 等)。当代理正在等待时,它的面板会显示蓝色环,侧边栏中的标签也会亮起,这样我就能在多个分屏和标签页中知道哪个需要我。按 Cmd+Shift+U 可跳转到最新的未读消息。

内置浏览器包含一个可脚本化的 API,移植自 agent-browser。代理可以获取无障碍树、获取元素引用、点击、填写表单和评估 JS。你可以将浏览器面板与终端并排分屏,让 Claude Code 直接与你的开发服务器交互。

所有功能都可通过 CLI 和 socket API 脚本化 — 创建工作区/标签、分屏、发送按键、在浏览器中打开 URL。

cmux 之道

cmux 不规定开发者如何掌握自己的工具。它是一个带有 CLI 的终端和浏览器,其余由你决定。

cmux 是原语,而非解决方案。它为你提供终端、浏览器、通知、工作区、分屏、标签以及控制所有这一切的 CLI。cmux 不会强迫你接受某种固化的编码代理使用方式。你利用这些原语构建的东西属于你自己。

最优秀的开发者始终自己构建工具。目前还没有人找到与代理协作的最佳方式,而那些构建封闭产品的团队也肯定没找到。最接近自己代码库的开发者将率先找到答案。

给一百万个开发者可组合的原语,他们会集体找到最高效的工作流,速度远超任何产品团队自上而下的设计。

文档

有关如何配置 cmux 的更多信息,请访问我们的文档。

键盘快捷键

工作区

快捷键 操作
⌘ N 新建工作区
⌘ 1–8 跳转到工作区 1–8
⌘ 9 跳转到最后一个工作区
⌃ ⌘ ] 下一个工作区
⌃ ⌘ [ 上一个工作区
⌘ ⇧ W 关闭工作区
⌘ ⇧ R 重命名工作区
⌥ ⌘ E 编辑工作区描述
⌘ B 切换侧边栏
⌥ ⌘ B 切换右侧边栏
⌘ ⇧ E 切换右侧边栏焦点

表面(Surface)

快捷键 操作
⌘ T 新建表面
⌘ ⇧ ] 下一个表面
⌘ ⇧ [ 上一个表面
⌃ Tab 下一个表面
⌃ ⇧ Tab 上一个表面
⌃ 1–8 跳转到表面 1–8
⌃ 9 跳转到最后一个表面
⌘ W 关闭表面

分屏面板

快捷键 操作
⌘ D 向右分屏
⌘ ⇧ D 向下分屏
⌥ ⌘ ← → ↑ ↓ 按方向聚焦面板
⌘ ⇧ H 高亮聚焦的面板

浏览器

浏览器开发者工具快捷键遵循 Safari 默认值,可在设置 > 键盘快捷键中自定义。命令面板导航快捷键(包括 ⌃ P)也可自定义,并可清除以使按键传递到活动终端。

快捷键 操作
⌘ ⇧ L 在分屏中打开浏览器
⌘ L 聚焦地址栏
⌘ [ 后退
⌘ ] 前进
⌘ R 刷新页面
⌥ ⌘ I 切换开发者工具(Safari 默认)
⌥ ⌘ C 显示 JavaScript 控制台(Safari 默认)

通知

快捷键 操作
⌘ I 显示通知面板
⌘ ⇧ U 跳转到最新未读
⌥ ⌘ U 切换当前项未读状态
⌃ ⌘ U 将当前项标记为最早未读,并跳转到下一个最新未读

查找

快捷键 操作
⌘ F 查找
⌘ ⇧ F 在目录中查找
⌘ G / ⌥ ⌘ G 查找下一个/上一个
⌥ ⌘ ⇧ F 隐藏查找栏
⌘ E 使用选中的内容查找

终端

快捷键 操作
⌘ K 清除回滚
⌘ C 复制(选中时)
⌘ V 粘贴
⌘ + / ⌘ - 增大/减小字体大小
⌘ 0 重置字体大小

窗口

快捷键 操作
⌘ ⇧ N 新建窗口
⌘ ⇧ O 重新打开上一个会话
⌘ , 设置
⌘ ⇧ , 重新加载配置
⌘ Q 退出

每夜构建

下载 cmux NIGHTLY

cmux NIGHTLY 是一个独立的应用,拥有自己的 bundle ID,因此可与稳定版本同时运行。它自动从最新的 main 提交构建,并通过自己的 Sparkle 源自动更新。

在 GitHub Issues 或 Discord 的 #nightly-bugs 中报告每夜构建的 bug。

会话恢复

退出 cmux 会保存当前会话。重新启动时,cmux 会恢复应用拥有的状态:

  • 窗口/工作区/面板布局
  • 工作目录
  • 终端回滚(尽力而为)
  • 浏览器 URL 和导航历史

cmux 不会检查任意活动进程状态。tmux、vim、shell 以及不支持的终端应用会以正常终端的形式重新打开。

受支持的代理会话可以在钩子保存了原生会话 ID 后恢复。在安装代理 CLI 后安装钩子,以便其二进制文件位于 PATH 中:

cmux hooks setup
cmux hooks setup codex
cmux hooks setup --agent opencode

cmux hooks setup 会安装它能找到的受支持代理,并打印被跳过的代理的摘要。支持的恢复集成包括:Claude Code、Codex、Grok、OpenCode、Pi、Amp、Cursor CLI、Gemini、Rovo Dev、Copilot、CodeBuddy、Factory 和 Qoder。当 Claude 集成在设置中启用时,Claude Code 由 cmux Claude 包装器处理。

高级用户和集成可以将自定义恢复命令附加到当前终端表面。这对于具有自身持久状态的工具(如 tmux 会话或自定义代理 CLI)很有用:

cmux surface resume set --kind tmux --checkpoint work --shell "tmux attach -t work"
cmux surface resume show --json
cmux surface resume clear --checkpoint work

绑定会保持附加到 cmux 表面。除非你批准一个用于自动恢复的签名命令前缀,否则公开的 CLI 或 socket 创建的绑定会存储以供检查和手动恢复。已批准的前缀还会绑定到工作目录和精确的环境值(如果存在)。在 设置 > 终端 > 恢复命令 中查看或编辑批准。cmux 仅自动运行它标记为受信任的恢复绑定,例如实时进程检测到的 tmux 绑定或用户批准的前缀。在存储恢复绑定之前,会丢弃令牌、密码、密钥和 API 密钥等敏感环境键。

要恢复的代理终端保持空闲而不自动运行其恢复命令,请关闭 设置 > 终端 > 重新打开时恢复代理会话,或在 ~/.config/cmux/cmux.json 中设置:

{
  "terminal": {
    "autoResumeAgentSessions": false
  }
}

这仅禁用自动代理恢复命令。cmux 仍然恢复保存的布局、工作目录、回滚和浏览器历史记录。

如果需要手动重新应用上次保存的快照,请使用:

  • 文件 > 重新打开上一个会话
  • ⌘ ⇧ O
  • cmux restore-session

在底层,cmux 将版本化的快照写入 ~/Library/Application Support/cmux/,代理钩子将会话映射写入 ~/.cmuxterm/。恢复时,cmux 首先重建布局,然后在启用自动代理恢复时运行受支持代理的原生恢复命令。

阅读完整指南:https://cmux.com/docs/session-restore。

星标历史

星标历史图表

贡献

参与方式:

社区

创始人版

cmux 是免费、开源的,并且将永远如此。如果你想支持开发并抢先体验未来的功能:

获取创始人版

  • 优先处理功能请求/Bug 修复
  • 抢先体验:cmux AI,为你提供每个工作区、标签和面板的上下文
  • 抢先体验:iOS 应用,桌面和手机之间同步终端
  • 抢先体验:云虚拟机
  • 抢先体验:语音模式
  • 我的个人 iMessage/WhatsApp

许可证

cmux 根据 GPL-3.0-or-later 开源。

如果你的组织无法遵守 GPL,可提供商业许可证。联系 founders@manaflow.com 了解详情。

开源项目manaflow-ai2026-05-24原文

相关内容