cmux 使用教程:专为 AI Coding 打造的终端工作流引擎
如果你还在用 iTerm2 或 Ghostty 跑 Claude Code,可能已经错过了 2026 年最好的终端体验。
前言
2026 年,AI Coding Agent 已经成为开发者的日常。Claude Code、Codex、OpenCode、Gemini CLI... 我们同时跑着多个 Agent,处理不同的任务。
但你的终端,还是为"命令行时代"设计的吗?
cmux 是一款专为 AI Coding 设计的 macOS 原生终端,它不是另一个"好看的终端",而是一个工作流引擎。
- 官网:cmux.com
- GitHub:github.com/manaflow-ai...
- 文档:cmux.com/docs
一、cmux 是什么?
快速了解
| 特性 | 说明 |
|---|---|
| 定位 | 专为多任务和 AI Coding Agent 设计的 macOS 终端 |
| 技术栈 | Swift + AppKit 原生开发,基于 libghostty 渲染 |
| 平台 | macOS 14.0+(Apple Silicon / Intel) |
| 价格 | 免费开源 |
| 不是 | Ghostty 的 fork(是使用其渲染库的独立应用) |
解决什么问题?
如果你同时使用多个 AI Coding Agent,这些痛点你一定懂:
- 标签页管理混乱 --- iTerm2 的水平标签在打开 10+ 个会话时难以定位
- 通知感知弱 --- Agent 完成任务后没有醒目提醒,容易错过
- 缺少 Agent 集成 --- 需要手动配置 hooks 和通知
- 复用器配置复杂 --- tmux 需要配置文件和前缀键,学习成本高
cmux 的答案:
| 功能 | 说明 |
|---|---|
| 垂直标签页 | 左侧边栏显示所有工作区和会话,一目了然 |
| 分屏面板 | 内置分屏功能,无需 tmux |
| 通知系统 | OSC 9/99/777 标准 + macOS 桌面通知 + 侧边栏未读标记 |
| 内置浏览器 | 查文档不用切出终端 |
| Socket API | 外部工具可控制 cmux(自动化脚本友好) |
| 零配置 | 无需配置文件,开箱即用 |
二、核心理念:三个思维转变
1. 从"标签页"到"工作区"
传统终端思维:打开 10 个标签页 → 用颜色/名字区分 → 在水平标签栏里找
cmux 思维:
- 每个工作区 = 一个任务上下文
- 工作区之间物理隔离,不会混淆
- 垂直侧边栏 + 未读标记,一眼定位
css
侧边栏结构:
├─ 🔴 项目 A - Claude Code (有未读通知)
├─ 🟢 项目 B - Codex
├─ 🔵 调试 - 日志监控
└─ 🟡 学习 - 文档阅读
精髓:用工作区隔离不同任务,而不是把所有会话塞进一个窗口。
2. 从"被动等待"到"通知驱动"
传统终端:Agent 跑完了?你得自己回去看。
cmux:
- Agent 完成任务 → 自动通知
- 通知面板 → 一键跳转
- 桌面提醒 → 离开终端也能收到
精髓:让 Agent 主动找你,而不是你盯着终端等结果。
3. 从"配置驱动"到"开箱即用"
tmux 思维:先写 200 行配置文件,再学前缀键组合。
cmux 思维:
- 默认快捷键已经够用
- 需要改?设置里点几下
- 想版本控制?编辑
~/.config/cmux/settings.json
精髓:工具应该服务于工作,而不是让你服务于工具。
三、核心工作流:AI Agent 多任务管理
场景:同时跑 3 个 Agent
bash
# 工作区 1: Claude Code - 主开发
claude
# 工作区 2: Codex - 代码审查
codex review --pr 123
# 工作区 3: 监控 - 日志/构建
tail -f logs/build.log
传统做法:3 个 iTerm2 窗口,Alt+Tab 切换,容易迷路。
cmux 做法:
Ctrl+B, C新建工作区- 每个工作区跑一个 Agent
- 侧边栏看状态,通知跳转
通知集成:让 Agent"会说话"
方式一:CLI(最简单)
在 Agent 的 hook 脚本中:
bash
#!/bin/bash
cmux notify --title "Claude Code" --body "任务完成"
方式二:OSC 777(通用)
任何终端脚本都能用:
bash
printf '\e]777;notify;构建完成;所有测试通过\a'
封装成函数:
bash
notify_osc777() {
local title="$1"
local body="$2"
printf '\e]777;notify;%s;%s\a' "$title" "$body"
}
notify_osc777 "Build Complete" "All tests passed"
方式三:Claude Code Hooks(推荐)
创建 Hook 脚本 ~/.claude/hooks/cmux-notify.sh:
bash
#!/bin/bash
[ -S /tmp/cmux.sock ] || exit 0 # 只在 cmux 中生效
EVENT=$(cat)
EVENT_TYPE=$(echo "$EVENT" | jq -r '.hook_event_name')
case "$EVENT_TYPE" in
"Stop")
cmux notify --title "Claude Code" --body "会话完成"
;;
"PostToolUse")
[ "$(echo "$EVENT" | jq -r '.tool_name')" = "Task" ] && \
cmux notify --title "Claude Code" --body "Agent 完成"
;;
esac
配置 Claude Code ~/.claude/settings.json:
json
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/cmux-notify.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Task",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/cmux-notify.sh"
}
]
}
]
}
}
精髓:通知不是炫技,是减少上下文切换的成本。
四、快捷键哲学:两层设计
第一层:一键直达(高频操作)
| 快捷键 | 功能 |
|---|---|
Cmd+B |
切换侧边栏 |
Cmd+Shift+I |
打开通知面板 |
Cmd+Shift+U |
跳转到最新未读通知 |
Cmd+T |
新建表面(tab) |
第二层:前缀键组合(低频操作)
cmux 支持两步和弦(类似 tmux):
json
// ~/.config/cmux/settings.json
{
"shortcuts": {
"bindings": {
"newSurface": ["ctrl+b", "c"],
"showNotifications": ["ctrl+b", "i"],
"toggleSidebar": "cmd+b"
}
}
}
- 使用 plain string 表示一键操作
- 使用两元素数组表示和弦(前缀 + 后续键)
精髓:高频操作一键直达,低频操作不怕复杂。
五、配置最佳实践
1. 终端配置(Ghostty 兼容)
~/.config/ghostty/config:
ini
# 字体
font-family = SF Mono
font-size = 13
# 主题
theme = One Dark
# 回滚行数
scrollback-limit = 50000
# 工作目录
working-directory = ~/code
# 分屏分隔线
split-divider-color = #3e4451
2. cmux 专属配置
~/.config/cmux/settings.json:
json
{
"$schema": "https://raw.githubusercontent.com/manaflow-ai/cmux/main/web/data/cmux-settings.schema.json",
"schemaVersion": 1,
// 外观
"app": {
"appearance": "dark",
"newWorkspacePlacement": "afterCurrent"
},
// 浏览器
"browser": {
"openTerminalLinksInCmuxBrowser": true,
"hostsToOpenInEmbeddedBrowser": ["localhost", "*.internal"]
},
// 快捷键
"shortcuts": {
"bindings": {
"toggleSidebar": "cmd+b",
"newSurface": ["ctrl+b", "c"]
}
},
// 通知命令(每次通知时执行)
"notifications": {
"command": "say \"$CMUX_NOTIFICATION_TITLE\""
}
}
3. 热重载配置
修改配置后不需要重启:
bash
# 方式一:快捷键
Cmd+Shift+,
# 方式二:CLI
cmux reload-config
精髓:配置应该可版本控制、可热重载、可增量修改。
六、高级技巧
1. 通知 + TTS 语音提醒
配置自定义通知命令:
json
{
"notifications": {
"command": "say \"$CMUX_NOTIFICATION_TITLE: $CMUX_NOTIFICATION_BODY\""
}
}
效果:Agent 完成任务后,Mac 会语音播报"Claude Code: 会话完成"。
环境变量可用:
CMUX_NOTIFICATION_TITLE- 通知标题CMUX_NOTIFICATION_SUBTITLE- 副标题CMUX_NOTIFICATION_BODY- 正文
2. 内置浏览器自动打开本地链接
json
{
"browser": {
"openTerminalLinksInCmuxBrowser": true,
"hostsToOpenInEmbeddedBrowser": ["localhost", "127.0.0.1", "*.internal"]
}
}
效果:终端里的 http://localhost:3000 链接直接在内置浏览器打开,不用切出。
3. Socket API 自动化
cmux 暴露 socket API,外部脚本可控制:
bash
# 列出所有工作区
cmux list-workspaces
# 设置状态(可在状态栏显示)
cmux set-status claude_code "Running"
# 发送通知
cmux notify --title "构建完成" --body "无错误"
用途:
- CI/CD 完成后通知
- 脚本执行进度提醒
- 多 Agent 状态同步
4. 工作区颜色编码
json
{
"workspaceColors": {
"colors": {
"Red": "#C0392B",
"Blue": "#1565C0",
"Neon Mint": "#00F5D4"
}
}
}
效果:不同工作区用不同颜色标记,视觉上快速区分。
七、常见场景模板
场景 1:前端开发
yaml
工作区 1: Claude Code - 主开发
└─ pane 1: claude (写代码)
└─ pane 2: yarn dev (开发服务器)
工作区 2: 测试
└─ pane 1: yarn test --watch
└─ pane 2: 内置浏览器打开 localhost:3000
工作区 3: 文档
└─ pane 1: 内置浏览器看文档
└─ pane 2: 笔记
场景 2:多项目并行
less
工作区 1: 项目 A (红色标记)
└─ claude --project A
工作区 2: 项目 B (蓝色标记)
└─ claude --project B
工作区 3: 项目 C (绿色标记)
└─ claude --project C
通知配置:每个项目完成时语音播报项目名称。
场景 3:监控 + 开发
yaml
工作区 1: 开发
└─ claude
工作区 2: 监控
└─ pane 1: tail -f logs/app.log
└─ pane 2: top / htop
└─ pane 3: 网络监控
通知:日志中出现 ERROR 时触发通知
八、与 tmux 对比:何时用哪个?
| 场景 | 推荐 | 理由 |
|---|---|---|
| 本地 macOS + AI Agent | cmux | 通知、浏览器、零配置 |
| 远程服务器 | tmux | 会话保持、SSH 友好 |
| 多窗口复杂布局 | tmux | 更灵活的分屏 |
| 快速上手 | cmux | 开箱即用 |
| 版本控制配置 | 两者 | 都支持配置文件 |
我的建议:本地开发用 cmux,远程 SSH 用 tmux,两者可以共存(在 cmux 里跑 tmux 也行)。
九、避坑指南
坑 1:会话不恢复
问题:重启 cmux 后,Claude Code 会话没了。
原因:cmux 只恢复布局和元数据,不恢复进程状态。
解决:
- 重要工作用 tmux(在 cmux 里跑 tmux)
- 或者接受每次重启后重新连接
坑 2:快捷键冲突
问题 :Cmd+B 和浏览器冲突。
解决 :在 settings.json 中自定义:
json
{
"shortcuts": {
"bindings": {
"toggleSidebar": "ctrl+`"
}
}
}
坑 3:通知太多
问题:每个 Agent 输出都触发通知,烦。
解决:
- 只在关键节点通知(Stop、Task 完成)
- 使用
matcher过滤特定事件
十、安装与快速开始
安装方式
方式一:DMG(推荐)
- 从官网下载 .dmg
- 拖入 Applications 文件夹
- 自动通过 Sparkle 更新
方式二:Homebrew
bash
brew tap manaflow-ai/cmux
brew install --cask cmux
# 更新
brew upgrade --cask cmux
CLI 配置
在 cmux 外部使用 CLI 需要创建 symlink:
bash
sudo ln -sf "/Applications/cmux.app/Contents/Resources/bin/cmux" /usr/local/bin/cmux
验证安装
打开 cmux,你应该看到:
- 左侧垂直标签页侧边栏
- 一个初始工作区
- Ghostty 驱动的终端就绪
总结
一句话
cmux 是为 AI Coding 设计的终端工作流引擎,核心是"通知驱动 + 工作区隔离"。
三个关键点
- 工作区隔离 --- 一个任务一个工作区,不混淆
- 通知驱动 --- Agent 主动找你,减少等待成本
- 开箱即用 --- 默认够用,配置可选
适合谁
✅ 推荐:
- 同时跑多个 AI Agent
- 需要频繁切换任务
- 不想折腾配置
❌ 不推荐:
- 只用一个 Agent
- 重度 tmux 用户(会话恢复刚需)
- Windows/Linux 用户(仅支持 macOS)
最后
cmux 最大的价值不是功能多,而是减少上下文切换。如果你发现自己整天在 iTerm2 标签页里迷路,或者等 Agent 跑完不知道,cmux 值得试试。
2026 年是"终端复兴"的一年,cmux 代表了 AI First 终端的新方向。它没有重新发明终端,而是针对 AI Coding 场景做了精准的优化。
慢工出细活,选对工具更重要。 🐌
参考链接:
- cmux 官网:cmux.com
- GitHub:github.com/manaflow-ai...
- 文档:cmux.com/docs
- The Changelog AI 播客:changelog.com/topic/ai
如果你觉得这篇文章有帮助,欢迎点赞、收藏、关注~