> 此翻译由 Claude 生成。如有改进建议,欢迎提交 PR。
基于 Ghostty 的 macOS 终端,带有垂直标签页和为 AI 编程代理设计的通知系统
English | 日本語 | Tiếng Việt | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | ភាសាខ្មែរ | Українська
通知提示环当编程代理需要您注意时,窗格会显示蓝色光环,标签页会高亮 |
|
通知面板在一处查看所有待处理通知,快速跳转到最新未读通知 |
|
内置浏览器在终端旁边分割出浏览器窗格,提供从 agent-browser 移植的可脚本化 API |
|
垂直 + 水平标签页侧边栏显示 git 分支、关联 PR 状态/编号、工作目录、监听端口和最新通知文本。支持水平和垂直分割。 |
|
SSHcmux ssh user@remote 为远程机器创建工作区。浏览器窗格通过远程网络路由,因此 localhost 直接可用。将图片拖入远程会话即可通过 scp 上传。
|
|
Claude Code Teamscmux claude-teams 一条命令运行 Claude Code 的队友模式。队友以原生分割的形式生成,侧边栏显示元数据和通知。无需 tmux。
|
|
打开 `.dmg` 文件并将 cmux 拖动到"应用程序"文件夹。cmux 通过 Sparkle 自动更新,您只需下载一次。
### Homebrew
```bash
brew tap manaflow-ai/cmux
brew install --cask cmux
```
稍后更新:
```bash
brew upgrade --cask cmux
```
首次启动时,macOS 可能会要求您确认打开来自已验证开发者的应用。点击**打开**即可继续。
## 为什么做 cmux?
我同时运行大量 Claude Code 和 Codex 会话。之前我用 Ghostty 开了一堆分割窗格,依靠 macOS 原生通知来了解代理何时需要我。但 Claude Code 的通知内容总是千篇一律的"Claude is waiting for your input",没有任何上下文信息,而且标签页一多,连标题都看不清了。
我试过几个编程协调工具,但大多数都是 Electron/Tauri 应用,性能让我不满意。我也更喜欢终端,因为 GUI 协调工具会把你锁定在它们的工作流里。所以我用 Swift/AppKit 构建了 cmux,作为一个原生 macOS 应用。它使用 libghostty 进行终端渲染,并读取您现有的 Ghostty 配置中的主题、字体和颜色设置。
主要新增的是侧边栏和通知系统。侧边栏有垂直标签页,显示每个工作区的 git 分支、关联 PR 状态/编号、工作目录、监听端口和最新通知文本。通知系统能捕获终端序列(OSC 9/99/777),并提供 CLI(`cmux notify`),您可以将其接入 Claude Code、OpenCode 等代理的钩子。当代理等待时,其窗格会显示蓝色光环,标签页会在侧边栏高亮,这样我就能在多个分割窗格和标签页之间一眼看出哪个需要我。Cmd+Shift+U 可以跳转到最新的未读通知。
内置浏览器拥有从 [agent-browser](https://github.com/vercel-labs/agent-browser) 移植的可脚本化 API。代理可以抓取无障碍树快照、获取元素引用、执行点击、填写表单和执行 JS。您可以在终端旁边分割出浏览器窗格,让 Claude Code 直接与您的开发服务器交互。
所有操作都可以通过 CLI 和 socket API 进行脚本化 — 创建工作区/标签页、分割窗格、发送按键、在浏览器中打开 URL。
## The Zen of cmux
cmux 不规定开发者应该如何使用工具。它是一个带有 CLI 的终端和浏览器,其余的由你决定。
cmux 是原语,而非解决方案。它提供终端、浏览器、通知、工作区、分割、标签页,以及控制这一切的 CLI。cmux 不强迫你以特定方式使用编程代理。你用这些原语构建什么,完全取决于你自己。
最优秀的开发者一直在构建自己的工具。还没有人找到与代理协作的最佳方式,那些构建封闭产品的团队也没有找到。最接近自己代码库的开发者会最先找到答案。
给一百万个开发者可组合的原语,他们会比任何自上而下设计的产品团队更快地找到最高效的工作流。
## 文档
有关 cmux 配置的更多信息,请[查看我们的文档](https://cmux.com/docs/getting-started?utm_source=readme)。
## 键盘快捷键
### 工作区
| 快捷键 | 操作 |
|----------|--------|
| ⌘ N | 新建工作区 |
| ⌘ 1–8 | 跳转到工作区 1–8 |
| ⌘ 9 | 跳转到最后一个工作区 |
| ⌃ ⌘ ] | 下一个工作区 |
| ⌃ ⌘ [ | 上一个工作区 |
| ⌘ ⇧ W | 关闭工作区 |
| ⌘ ⇧ R | 重命名工作区 |
| ⌥ ⌘ E | 编辑工作区描述 |
| ⌘ B | 切换侧边栏 |
| ⌥ ⌘ B | 切换右侧边栏 |
| ⌘ ⇧ E | 切换右侧边栏焦点 |
### 界面
| 快捷键 | 操作 |
|----------|--------|
| ⌘ 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](https://github.com/manaflow-ai/cmux/releases/download/nightly/cmux-nightly-macos.dmg)
cmux NIGHTLY 是一个拥有独立 Bundle ID 的单独应用,因此可以与稳定版并行运行。它从最新的 `main` 提交自动构建,并通过独立的 Sparkle 更新源自动更新。
在 [GitHub Issues](https://github.com/manaflow-ai/cmux/issues) 或 [Discord 的 #nightly-bugs 频道](https://discord.gg/xsgFEVrWCZ) 上报告每夜构建的 bug。
## 会话恢复
退出 cmux 会保存当前会话。重新启动时,cmux 会恢复应用管理的状态:
- 窗口/工作区/窗格布局
- 工作目录
- 终端回滚缓冲区(尽力恢复)
- 浏览器 URL 和导航历史
cmux 不会为任意实时进程状态做检查点。tmux、vim、shell 和不支持的终端应用会作为普通终端重新打开。
当 hooks 保存了原生会话 ID 时,受支持的 agent 会话可以恢复。请在安装 agent CLI 之后再安装 hooks,以确保其二进制文件位于 `PATH` 上:
```bash
cmux hooks setup
cmux hooks setup codex
cmux hooks setup --agent opencode
```
`cmux hooks setup` 会安装它能找到的受支持 agent,并为跳过的 agent 打印摘要。受支持的恢复集成包括 Claude Code、Codex、Grok、OpenCode、Pi、Amp、Cursor CLI、Gemini、Rovo Dev、Copilot、CodeBuddy、Factory 和 Qoder。当在设置中启用了 Claude 集成时,Claude Code 由 cmux Claude wrapper 处理。
高级用户和集成可以把自定义恢复命令绑定到当前终端 surface。这适用于 tmux 会话或自定义 agent CLI 等拥有持久状态的工具:
```bash
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 surface。通过公开 CLI 或 socket 创建的绑定会保存用于检查和手动恢复,除非您为某个签名命令前缀批准了自动恢复。已批准的前缀还会绑定到工作目录和确切的环境变量值(如果存在)。可在 **设置 > 终端 > 恢复命令** 中查看或编辑批准项。cmux 只会自动运行它标记为可信的恢复绑定,例如从运行中进程检测到的 tmux 绑定或用户批准的前缀。令牌、密码、密钥和 API key 等敏感环境变量键会在保存恢复绑定前被丢弃。
如需让恢复的 agent 终端保持空闲,而不是自动运行其恢复命令,请关闭 **设置 > 终端 > 重新打开时恢复 Agent 会话**,或在 `~/.config/cmux/cmux.json` 中设置:
```json
{
"terminal": {
"autoResumeAgentSessions": false
}
}
```
这只会禁用自动的 agent 恢复命令。cmux 仍会恢复保存的布局、工作目录、回滚缓冲区和浏览器历史。
如果您需要手动重新应用上次保存的快照,请使用:
- `文件 > 重新打开上一个会话`
- `⌘ ⇧ O`
- `cmux restore-session`
在底层,cmux 会在 `~/Library/Application Support/cmux/` 下写入带版本的快照,agent hooks 会在 `~/.cmuxterm/` 下写入会话映射。恢复时,cmux 会先重建布局,然后在启用了自动 agent 恢复时运行受支持 agent 的原生恢复命令。
完整指南请见
WeChat:扫描二维码加入社区。