一、项目概述
cmux 是一个基于 Ghostty 引擎构建的 macOS 原生终端应用,专门为运行 AI 编码代理(如 Claude Code、Codex)而优化。它解决了开发者在并行运行多个 AI 代理会话时的核心痛点:如何快速识别哪个代理需要你的输入确认。
传统的终端通知只能显示 “Claude is waiting for your input”,无法提供上下文信息。当打开大量标签页时,标题甚至无法完整显示。cmux 通过通知环系统和垂直侧边栏优雅地解决了这个问题——当代理等待输入时,对应的窗格会出现蓝色光环,标签页会高亮显示,让你一眼就能定位到需要关注的会话。
核心特性:
- 通知环系统:窗格蓝色光环 + 标签高亮,精准定位待处理会话
- 内置浏览器:可直接在应用内分屏浏览,支持脚本化 API
- 垂直侧边栏:显示 Git 分支、PR 状态、工作目录、监听端口、最新通知文本
- Claude Code Teams 原生支持:一键启动队友模式,无需 tmux
- SSH 远程工作区:浏览器窗格自动路由远程网络,拖拽图片即可 SCP 上传
- 原生性能:基于 Swift/AppKit 构建,非 Electron,启动快、内存占用低
二、技术原理
2.1 架构设计
cmux 的核心架构基于 Ghostty 终端引擎(libghostty),这是一个 GPU 加速的终端渲染库。项目通过 Swift 桥接头文件直接调用 Ghostty 的 C API:
// cmux-Bridging-Header.h
@import GhosttyKit;
// ghostty.h
#include "ghostty/include/ghostty.h"
这种设计让 cmux 能够:
- 复用 Ghostty 的渲染管线:获得流畅的 GPU 加速显示
- 继承用户配置:自动读取
~/.config/ghostty/config中的主题、字体、颜色设置 - 保持 ABI 兼容:通过标准化 C API 确保跨版本稳定性
2.2 通知系统实现
cmux 的通知系统是其核心创新。它监听终端的 OSC 转义序列(OSC 9/99/777),这些是终端通知的标准协议:
# 通过 CLI 发送通知
cmux notify --title "Build Complete" --body "Tests passed"
通知系统的设计流程:
- 终端序列捕获:解析 OSC 转义序列
- 状态持久化:写入
~/.cmuxterm/目录的会话映射 - UI 反馈:触发蓝色光环动画和标签高亮
- 快捷跳转:
Cmd+Shift+U跳转到最新未读通知
2.3 浏览器集成
内置浏览器移植自 agent-browser,提供脚本化 API:
# 创建工作区分屏浏览器
cmux workspace create --name "dev"
cmux split right --type browser --url "http://localhost:3000"
# 通过 socket API 自动化
cmux socket send '{"action": "snapshot_a11y"}'
浏览器窗格支持:
- Cookie/历史导入:从 Chrome、Firefox、Arc 等 20+ 浏览器导入
- 无障碍树快照:供 AI 代理理解页面结构
- 元素操作 API:点击、填表、执行 JS
2.4 Claude Code Teams 集成
cmux claude-teams 命令一键启动 Claude Code 的队友模式:
# 启动 Claude Code Teams
cmux claude-teams
底层实现:
- 调用 Claude Code CLI 的 teammate 子命令
- 为每个队友创建原生分屏窗格
- 侧边栏显示队友元数据和通知状态
- 完全替代 tmux 会话管理
三、安装与快速开始
3.1 环境要求
- macOS 12.0+(Monterey 或更高)
- 支持 Apple Silicon 和 Intel Mac
3.2 安装方式
方式一:DMG 安装(推荐)
# 下载最新版本
open "https://github.com/manaflow-ai/cmux/releases/latest/download/cmux-macos.dmg"
# 拖拽到 Applications
# 首次启动需在"系统设置 > 隐私与安全"中确认
方式二:Homebrew
brew tap manaflow-ai/cmux
brew install --cask cmux
# 更新
brew upgrade --cask cmux
3.3 Agent Hooks 配置
安装 Agent CLI 后配置通知钩子:
# 安装通用钩子
cmux hooks setup
# 安装特定代理钩子
cmux hooks setup codex
cmux hooks setup --agent opencode
支持的代理:Claude Code、Codex、Grok、OpenCode、Pi、Amp、Cursor CLI、Gemini、Rovo Dev、Copilot、CodeBuddy、Factory、Qoder。
四、使用方法与实战
4.1 工作区管理
# 创建新工作区
cmux workspace create --name "frontend"
# SSH 到远程机器
cmux ssh user@remote-server
# 列出工作区
cmux workspace list
4.2 分屏操作
# 右侧分屏
cmux split right
# 下方分屏
cmux split down
# 方向键切换焦点(Option+Cmd+方向键)
4.3 浏览器分屏
# 在右侧打开浏览器
cmux split right --type browser --url "http://localhost:3000"
# 或使用快捷键 Cmd+Shift+L
4.4 会话恢复
cmux 支持会话快照恢复:
# 保存位置
~/Library/Application Support/cmux/
# 手动恢复
cmux restore-session
# 或使用快捷键 Cmd+Shift+O
配置文件 ~/.config/cmux/cmux.json 可关闭自动恢复:
{
"terminal": {
"autoResumeAgentSessions": false
}
}
4.5 自定义命令
在项目根目录创建 cmux.json:
{
"commands": [
{
"name": "Run Tests",
"command": "npm test",
"shortcut": "Cmd+T"
}
]
}
通过命令面板(Cmd+P)快速执行。
五、常见问题与解决方案
Q1:首次启动提示"无法验证开发者"
原因:macOS Gatekeeper 安全机制。
解决:
- 打开"系统设置 > 隐私与安全"
- 找到 cmux 的提示,点击"仍要打开"
- 或右键点击应用,选择"打开"
Q2:通知不显示或延迟
原因:Agent hooks 未正确安装或通知权限未授予。
解决:
# 重新安装 hooks
cmux hooks setup
# 检查系统通知权限
# 系统设置 > 通知 > cmux
Q3:SSH 会话中浏览器窗格无法访问 localhost
原因:网络路由问题。
解决:cmux 的浏览器窗格会自动通过 SSH 隧道路由,确保使用最新版本。手动配置:
cmux ssh user@remote --tunnel-browser
Q4:性能问题或内存占用高
原因:浏览器窗格过多或滚动缓冲区过大。
解决:
- 关闭不需要的浏览器窗格
- 在 Ghostty 配置中限制滚动缓冲区:
# ~/.config/ghostty/config
scrollback-limit = 10000
Q5:与现有 Ghostty 配置冲突
原因:cmux 读取同一配置文件。
解决:cmux 设计为兼容 Ghostty 配置,大部分设置可直接复用。如有冲突,可在 ~/.config/cmux/cmux.json 中覆盖。
六、总结
cmux 填补了 AI 编码代理工作流的终端工具空白。它不是简单的终端复用器,而是为"人类监督多个 AI 代理"这一新工作模式量身定制的工具。通过通知环系统,开发者可以同时运行数十个代理会话,而不必担心错过关键确认点。
其开源协议(GPL-3.0-or-later)和原生技术栈(Swift/AppKit + libghostty)确保了性能和可扩展性。对于重度使用 Claude Code、Codex 等 AI 编码工具的开发者,cmux 是值得尝试的生产力倍增器。
项目地址:https://github.com/manaflow-ai/cmux