项目快照:manaflow-ai/cmux,约 27,256 个 Star,2,376 个 Fork;最新推送时间 2026-09-19T15:52:55Z。本文基于仓库公开资料撰写。

项目地址:https://github.com/manaflow-ai/cmux · https://cmux.com

cmux 从代码、运行环境到实践流程的项目封面
cmux 的项目能力与实践流程示意。

项目速览(TL;DR)

cmux 是一个基于 Ghostty 的 macOS 原生终端应用,重点解决多工作区、分屏终端、AI 编程代理通知以及终端与浏览器协同操作的问题。根据 README,它使用 Swift 和 AppKit 构建,底层使用 libghostty 提供 GPU 加速渲染,并提供垂直标签、水平与垂直分屏、内置浏览器、SSH 工作区、Claude Code Teams 集成以及 CLI 和 socket API。

仓库当前默认分支为 main,GitHub 页面资料显示 Star 数为 27256、Fork 数为 2376,主要语言为 Swift。仓库页面的许可证元信息显示为 NOASSERTION,但仓库中的 LICENSE 文件明确写明,除文件级或随附声明另有说明外,项目材料采用 GPL-3.0-or-later;许可证边界应以仓库中的 LICENSE、第三方许可文件和文件级声明为准。

“A Ghostty-based macOS terminal with vertical tabs and notifications for AI coding agents”
来源:README

定位与目标用户

cmux 的定位不是单纯增加终端主题或快捷键,而是把多个终端会话、代码代理状态、项目上下文和浏览器操作放到同一个 macOS 应用中。它尤其关注同时运行多个 AI 编程代理时的注意力管理:代理需要人工确认时,窗格和标签会出现通知状态,用户可以从侧边栏集中查看待处理通知。

目标用户应当已经在 macOS 上使用 Ghostty 或类似终端工作流,并且需要长期维护多个项目、分支、远程会话或代理任务。对于只运行单个交互式 Shell、没有多窗格需求的用户,cmux 的工作区、通知和浏览器编排能力未必能带来相应收益。

适用的工作方式

  • 同时运行多个代码仓库或多个 Git 分支,需要通过垂直标签和侧边栏区分工作区。
  • 让 AI 编程代理执行较长任务,希望在代理需要关注时获得可见通知,而不必持续观察每个终端。
  • 需要在终端旁打开项目文档、开发服务器或本地页面,并希望通过应用内浏览器进行分屏操作。
  • 需要通过 SSH 进入远程机器,并将远程终端、远程网络中的浏览器页面和文件上传动作放到一个工作区内。

核心功能

cmux 的核心价值来自多个功能之间的联动:工作区负责组织会话,通知负责暴露状态,浏览器负责补足终端外的操作,CLI 与 socket API 则提供自动化入口。下面分别说明这些能力的触发条件、处理方式和依赖关系。

通知环与通知面板

当编码代理需要用户注意时,相关窗格会显示蓝色环,标签也会高亮。README 没有给出通知事件的完整协议、检测规则或可配置字段,因此不能据此推断具体代理命令、事件格式或超时策略。

侧边栏通知面板会集中展示待处理通知,并支持跳转到最近的未读通知。其输入是应用内部识别到的待处理状态,输出是窗格和标签上的视觉提示以及可导航的通知列表;详细的状态持久化方式和清除规则,官方仓库未提供该信息,建议以最新 README 和官方文档为准。

垂直标签、水平标签与分屏

侧边栏会展示 Git 分支、关联 Pull Request 的状态和编号、工作目录、监听端口以及最新通知文本。这些信息把终端会话的运行上下文直接放到工作区导航区域中,减少了仅依靠窗口标题区分任务的需要。

终端可以进行水平和垂直拆分。README 只明确说明了支持的布局能力,没有公开分屏数据结构、最大窗格数量或布局保存格式;因此,不能将该功能解读为存在固定的并发规模或性能保证。

内置浏览器

内置浏览器允许在终端旁分屏打开浏览内容,并提供可编程 API。README 说明该 API 是从 agent-browser 移植而来,但资料没有列出完整 API 签名、浏览器内核版本或支持的自动化动作清单。

浏览器窗格适合与终端任务形成对应关系,例如在一个项目工作区中同时保留 Shell、代码代理和项目页面。浏览器自动化依赖应用提供的脚本接口;若需要对网页执行会影响账号、数据或业务状态的操作,应先确认目标站点授权和组织内部规则。

浏览器数据导入

cmux 可以从 Chrome、Firefox、Arc 以及其他二十多个浏览器导入 Cookie、历史记录和会话,使浏览器窗格能够以已有登录状态启动。该能力的输入是本机浏览器数据,输出是 cmux 浏览器窗格可使用的浏览上下文。

资料没有说明导入范围是否可逐项选择、数据保存位置、加密方式、清理命令或跨用户迁移规则。由于 Cookie 和会话令牌属于敏感认证材料,启用前应检查本机访问权限、备份策略和组织的凭据管理要求。

SSH 工作区

执行 cmux ssh user@remote 会为远程机器创建一个工作区;通过 --command 可以在第一个远程终端中执行初始命令。README 还说明,浏览器窗格会通过远程网络路由,因此远程机器上的 localhost 可以在对应浏览器上下文中工作。

将图片拖入远程会话时,cmux 会通过 SCP 上传。这个行为的输入是本地拖入的图片和已建立的远程 SSH 会话,输出是远程机器上的上传文件;资料没有提供目标路径选择、覆盖策略、认证方式或主机密钥管理细节,使用时应以 SSH 客户端和官方文档的实际行为为准。

Claude Code Teams

执行 cmux claude-teams 可以启动 Claude Code 的 teammate mode。各个 teammate 会以原生分屏出现,并在侧边栏显示元数据和通知;README 明确指出这一工作流不需要 tmux。

该功能的依赖关系是 cmux 提供工作区与分屏承载,Claude Code 提供 teammate mode,通知机制负责暴露子任务状态。资料没有说明 Claude Code 的安装方法、版本要求、团队规模限制或 API 凭据配置,因此这些内容不能从仓库资料中补充推断。

自定义命令与程序化控制

项目支持通过项目级 cmux.json 定义自定义命令,并从命令面板启动。它还提供 CLI 和 socket API,用于创建工作区、拆分窗格、发送按键以及自动化浏览器。

这些能力适合将重复的项目启动流程变成可审查的命令入口,例如把项目工作区初始化、终端分屏和浏览器打开动作组合起来。README 没有给出 cmux.json 的完整字段表,也没有列出 socket 地址、认证方式或请求格式,不能在此虚构接口示例。

系统架构与关键模块

从公开资料可以确认,cmux 是 Swift 编写的 macOS 原生应用,采用 AppKit 而不是 Electron;终端渲染由 libghostty 支撑,外围功能则围绕工作区、标签、分屏、通知、浏览器和自动化接口组织。仓库没有提供足够资料证明存在固定的模块目录、进程拓扑或 IPC 消息定义,因此下面只描述已公开的边界。

原生应用层

Swift 和 AppKit 负责 macOS 应用的窗口、侧边栏、标签和原生交互。README 将其描述为 Native macOS app,并强调不是 Electron,但没有公布最低 macOS 版本、Xcode 版本、构建方案或签名流程;这些运行与开发要求,官方仓库未提供该信息,建议以最新 README 为准。

终端渲染层

cmux 基于 Ghostty,并通过 libghostty 实现 GPU 加速渲染。它还会读取用户现有的 ~/.config/ghostty/config,用于主题、字体和颜色配置,因此已有 Ghostty 配置可以成为终端外观的一部分。

“兼容 Ghostty 配置”不等于所有 Ghostty 配置项都已在 cmux 中验证兼容。README 只明确列出主题、字体和颜色读取能力,其他配置键的支持范围、冲突优先级和错误处理方式均未提供。

工作区与自动化层

工作区将终端窗格、浏览器窗格和侧边栏元数据组合起来。CLI 和 socket API 位于应用外部控制面,能够创建工作区、拆分窗格、发送按键和自动化浏览器;自定义命令则从项目配置和命令面板连接到这套控制能力。

仓库资料没有说明 CLI 是否通过单独守护进程工作,也没有说明 socket API 是否仅限本机。将其用于自动化前,应在实际版本中核对监听范围、权限控制和错误返回行为。

依赖与运行环境

明确可核查的运行环境是 macOS,因为 README 提供 macOS DMG 下载入口,项目描述也将其定义为 macOS terminal。Swift 是仓库主要语言,应用使用 AppKit 和 libghostty;官方资料未给出最低 macOS 版本、CPU 架构支持矩阵或最低内存要求。

仓库根目录的 package.json 表明,项目还包含 JavaScript、TypeScript 和 Web 相关工具链。该文件列出的运行依赖包括 React 19.2.3、React DOM 19.2.3、Solid 1.9.13、ProseMirror 相关包、@opentui/core、Vercel,以及开发依赖 Biome 2.5.0、esbuild 0.27.0、Tailwind CSS 4.3.0 和其 CLI。

依赖或组件 来源 版本 用途
Swift GitHub 仓库元信息 未提供 macOS 原生应用的主要实现语言
AppKit README 未提供 原生 macOS 应用界面与交互框架
libghostty README 未提供 终端 GPU 加速渲染
react package.json 19.2.3 Web 界面或 WebView 相关依赖
react-dom package.json 19.2.3 React DOM 渲染依赖
solid-js package.json 1.9.13 JavaScript 界面依赖
@opentui/core package.json 0.1.106 终端用户界面相关依赖

快速开始

最快的验证路径是下载官方 DMG、在 macOS 中启动应用,再创建一个工作区或远程 SSH 工作区。README 提供了最新 DMG 下载地址,但没有给出命令行安装器、Homebrew 配方或从源码构建的完整步骤。

安装

使用浏览器打开 README 中提供的官方 DMG 地址,完成 macOS 应用安装。下载地址如下,实际版本由该地址对应的最新 release 决定;本文不虚构具体 release 版本号。

Bash
open "https://github.com/manaflow-ai/cmux/releases/latest/download/cmux-macos.dmg"

上面的命令使用 macOS 的 open 打开官方 DMG 下载地址。安装后从应用程序目录启动 cmux;官方仓库未提供应用包名称、安装路径或首次启动参数。

运行与验证

启动应用后,可以先创建本地终端工作区,观察侧边栏、垂直标签和分屏入口是否出现。若需要验证 README 明确记录的 SSH 工作区命令,可在已获授权的远程主机上执行以下命令。

Bash
cmux ssh user@remote

其中 user@remote 是 SSH 用户名和远程主机占位符,不是固定账号或固定域名。验证结果应包括:cmux 创建远程工作区,并在其中显示第一个远程终端;远程主机、账号和认证材料应由使用者自行提供,不要将真实凭据写入脚本或公开仓库。

最小功能闭环

  1. 安装并启动 macOS DMG 中的 cmux 应用。
  2. 创建本地终端工作区,确认侧边栏能够显示工作区与窗格。
  3. 在已授权环境中执行 cmux ssh user@remote,确认远程工作区创建成功。
  4. 在工作区内拆分终端,或从命令面板启动一个项目自定义命令,检查侧边栏中的目录、分支或通知信息。

如果本机没有可用的远程主机,也可以只完成前三步中的本地应用启动和本地工作区验证。README 没有提供专门的健康检查命令、版本查询命令或自动化测试命令,因此不能用未公开的 CLI 参数替代上述验证。

配置说明

已公开的配置入口主要分为 Ghostty 配置、项目自定义命令和 JavaScript 工具项目配置。能够确认的字段和默认值如下;对于没有在资料中出现的字段,统一标记为“未提供”,不根据依赖名称推断其配置格式。

字段名 类型 默认值 作用
~/.config/ghostty/config 文件路径 未提供 提供 Ghostty 主题、字体和颜色配置,cmux 会读取其中相关设置
cmux.json JSON 文件 未提供 定义项目级自定义命令,并从命令面板启动
scripts.agent-session-web:build package.json 脚本字符串 sh scripts/build-agent-session-web.sh 构建 agent session web
scripts.agent-session-web:test package.json 脚本字符串 bun test webviews/src/agent-session/shared/*.test.ts 运行 agent session web 的测试文件
scripts.biome:check package.json 脚本字符串 biome check . 执行 Biome 检查
scripts.feed-tui package.json 脚本字符串 bun Resources/feed-tui/index.ts 运行 feed-tui 脚本
scripts.iroh:relay-catalog:check package.json 脚本字符串 bun web/tools/generate-managed-iroh-relay-catalog.ts --check 检查 managed iroh relay catalog

Ghostty 配置边界

cmux 会读取现有的 Ghostty 配置,用于主题、字体和颜色。资料没有说明是否支持通过 cmux 界面覆盖这些值,也没有列出配置解析失败时的错误表现,因此调整配置前应保留原文件副本,并以当前版本实际结果为准。

package.json 脚本

如果参与仓库开发,可以根据 package.json 中已公开的脚本运行检查或测试。下面的命令只调用资料中真实出现的脚本名称,不额外假定包管理器、依赖安装命令或 Swift 构建命令。

Bash
bun run agent-session-web:test
bun run biome:check

这些命令需要仓库现有开发环境和对应工具可用。package.json 没有列出 Bun 的版本、Swift 工具链版本或安装步骤,缺少这些条件时,官方仓库未提供该信息,建议以最新 README 和项目贡献文档为准。

进阶用法

进阶使用的重点是把工作区组织能力与项目自动化结合,而不是单独堆叠终端窗口。CLI、socket API、项目自定义命令和浏览器窗格可以形成可重复的开发入口,但具体组合应建立在已核对的接口文档之上。

使用初始远程命令

SSH 工作区支持在第一个远程终端启动时执行初始命令。README 给出的形式如下,示例中的命令和主机仍需替换为已授权环境中的实际值。

Bash
cmux ssh user@remote --command 'omp "investigate auth"'

user@remote 是远程连接目标,omp "investigate auth" 是 README 中给出的初始命令示例。资料没有解释 omp 属于哪一个外部程序,也没有说明其安装方式,因此不能把它列为 cmux 自带命令。

组织代理任务

对于 Claude Code Teams,可以使用 README 中的命令启动 teammate mode:

Bash
cmux claude-teams

该命令的实际前置条件是本机已经具备可运行 Claude Code 的环境,但仓库资料没有给出其安装步骤、认证方式或版本要求。使用时应把团队任务拆分、权限范围和代码写入目录限制在已授权项目中,并通过侧边栏通知确认子任务状态。

自定义命令的设计建议

项目自定义命令适合封装项目级重复操作,例如启动开发会话、打开相关页面或建立固定分屏布局。由于 README 没有提供 cmux.json 示例,不能给出未经验证的 JSON 字段;建议先查阅官方文档中的 Custom Commands 页面,再将命令提交到项目仓库进行代码审查。

可观测性与运维

cmux 面向交互式开发工作流,其公开可见的运行状态主要来自侧边栏元数据和通知系统,而不是 README 中定义的监控指标体系。当前资料没有提供日志目录、日志级别、指标端点、崩溃上报策略、健康检查接口或服务等级承诺。

运维排查可以从可见状态入手:检查工作区是否存在、窗格是否显示、侧边栏中的工作目录和分支是否正确、通知是否进入未读列表,以及远程浏览器是否能访问预期的 localhost。若问题涉及 socket API、浏览器会话导入或远程网络路由,应记录 cmux 版本、macOS 环境和可复现步骤,但不要在问题报告中上传 Cookie、SSH 私钥或业务数据。

项目的性能资料仅说明使用 GPU 加速渲染、原生 Swift 和 AppKit,README 未提供启动时间、内存占用、并发窗格数或渲染基准。任何性能结论都不应超出这些公开描述;根据本文作者的经验判断,实际资源占用应通过目标机器上的本地测试评估,而不是引用未发布的数字。

安全与合规边界

cmux 涉及 SSH 远程访问、浏览器 Cookie 和会话导入、网页自动化、AI 编程代理以及文件上传,因此安全边界取决于输入数据和执行目标。以下内容只适用于拥有明确授权的本机、远程主机、网站账号和代码仓库,不提供面向未授权目标的访问、攻击或绕过检测方法。

凭据与隐私

  • 浏览器导入功能会处理 Cookie、历史记录和会话数据,使用前应确认导入范围、存储位置和访问权限。
  • SSH 工作区涉及远程主机、主机密钥和认证材料;不要将私钥、口令或短期令牌写入 cmux.json、脚本或公开 issue。
  • 拖拽图片到远程会话会触发 SCP 上传,上传前应确认目标路径、文件内容和远程主机归属。
  • 浏览器自动化可能读取或提交账号可见的数据,运行自动化前应获得网站所有者或组织的授权。
  • AI 编程代理可能读取项目文件并执行终端命令,应为代理配置最小必要目录和权限,并审查其生成的变更。

隔离与审计

README 没有说明 cmux 是否提供沙箱、容器隔离、浏览器站点白名单、socket API 认证或细粒度权限控制,因此不能把应用默认视为安全隔离边界。高敏感项目应在单独的 macOS 用户、测试仓库或组织批准的隔离环境中验证。

当项目需要满足隐私、数据驻留、审计或供应链要求时,应额外检查第三方依赖、第三方许可证、浏览器数据处理方式和代理服务条款。资料未提供合规认证、SLA、CVE 修复承诺或企业审计报告。

许可证与商用条款

LICENSE 文件写明,除文件或随附声明另有规定外,cmux 项目贡献材料采用 GNU General Public License version 3 or later,即 GPL-3.0-or-later。LICENSE 同时说明其他贡献者和第三方仍保留其材料的版权,具体文件可能受不同的许可和声明约束。

GPL-3.0-or-later 允许在许可条件下复制、修改、分发和使用软件,包括商业使用场景;但分发修改版本或组合产品时,必须遵守适用的 GPL 条款、版权声明、许可证文本、源代码提供义务及其他相关条件。这里的“可以商用”不等于可以删除版权声明、闭源分发受 GPL 约束的修改部分,具体义务应结合分发方式和组合组件判断。

LICENSE 还提到,Manaflow 可能仅针对其控制必要权利的材料另行提供商业条款;该等商业条款不会自动重新许可第三方材料或外部贡献。产品如果组合了 cmux 材料和第三方材料,仍需同时遵守适用的第三方许可和通知要求,具体以仓库的 THIRD_PARTY_LICENSES.md、文件级声明及 LICENSE 为准。

GitHub 元信息显示为 NOASSERTION,这与仓库 LICENSE 中的 GPL-3.0-or-later 文本并列存在。进行再分发、闭源集成或商业授权前,应以仓库 LICENSE 和相关文件级许可为准,并让具备资质的法律顾问审查具体方案。

局限性与已知限制

公开资料足以说明产品方向和主要能力,但不足以构成完整的工程规格。以下限制是资料缺失或功能边界的明确记录,不应扩展为对未公开行为的推断。

  • 仅明确提供 macOS DMG 下载入口,未提供 Windows、Linux 或移动平台支持信息。
  • 未提供最低 macOS 版本、CPU 架构矩阵、内存要求和性能基准。
  • 未提供 CLI 全部命令、socket API 请求格式、认证模型和错误码。
  • 未提供 cmux.json 的完整 schema、字段默认值和校验规则。
  • 未提供通知事件来源、清除条件、持久化策略以及与具体 AI 编程代理的通用适配协议。
  • 未提供浏览器导入的详细权限模型、数据落盘位置和清理流程。
  • 未提供 SSH 认证配置、远程浏览器路由实现细节、SCP 目标路径规则和失败重试策略。
  • 未提供 SLA、官方支持响应时间、长期维护承诺或安全漏洞响应流程。

适合谁 / 不适合谁

适合与否主要取决于工作流是否需要多会话组织和代理状态管理,而不是单看终端渲染能力。下面的判断信号可用于在引入前做小范围验证。

适合谁

  • 每天需要同时维护多个 Git 分支、项目目录和终端会话,并希望通过侧边栏查看上下文。
  • 使用 AI 编程代理处理耗时任务,需要蓝色通知环、标签高亮和通知面板提醒。
  • 在 macOS 上已经使用 Ghostty 配置,希望继续复用主题、字体和颜色设置。
  • 需要把终端、远程 SSH 会话、浏览器页面和本地开发端口放进同一个工作区。
  • 愿意通过 CLI、socket API 或 cmux.json 将项目启动流程自动化,并能自行核对未公开细节。

不适合谁

  • 主要工作环境不是 macOS,且要求项目提供 Windows 或 Linux 的官方运行方案。
  • 只需要一个简单终端窗口,不使用分屏、垂直标签、通知或浏览器协同功能。
  • 组织禁止桌面应用导入浏览器 Cookie、历史记录或会话数据,且没有替代认证流程。
  • 需要公开、稳定且有完整版本承诺的自动化 API,但当前资料无法满足对 socket 协议、错误码或 SLA 的要求。
  • 项目要求明确的企业支持、合规认证或已验证的高并发性能指标,而仓库资料没有提供这些承诺。

常见问题与排查(FAQ / Troubleshooting)

排查应优先区分安装问题、应用界面问题、远程连接问题和浏览器数据问题。资料没有提供统一诊断命令,因此以下方法以可观察现象和已公开命令为基础。

无法确认应用是否支持当前系统,怎么办

README 只提供 macOS 应用和 DMG 下载入口,没有列出最低 macOS 版本或 CPU 架构要求。应查看最新 release 说明和官方文档;若仍无明确答案,官方仓库未提供该信息,不应依据其他项目的系统要求进行推断。

SSH 工作区没有创建成功,怎么办

先确认命令格式为 cmux ssh user@remote,并检查目标主机、用户名、网络和 SSH 本身是否可用。不要在公开日志中粘贴私钥、口令或完整认证错误上下文;cmux 的具体错误输出、重试策略和认证参数未在资料中说明。

远程 localhost 无法在浏览器窗格访问,怎么办

README 说明浏览器窗格会通过远程网络路由,使 localhost 可以工作,但没有给出端口参数或诊断接口。应先确认服务确实运行在远程机器上,再确认访问地址使用的是远程服务实际监听的地址;若仍失败,查看当前版本文档和 issue 中的具体实现说明。

通知没有出现,怎么办

确认任务确实由 cmux 支持的工作区或代理流程启动,并检查窗格、标签和通知面板三个位置。通知触发事件、代理兼容范围和清除规则未在 README 中完整公开,因此不能通过未记录的环境变量或命令行参数强行启用。

为什么不能直接给出 cmux.json 示例

README 只确认存在项目级 cmux.json 和自定义命令功能,没有提供字段结构或示例文件。为避免写出无法验证的配置,实际使用应以官方 Custom Commands 文档和仓库当前版本样例为准。

项目地址与资源

以下链接均来自仓库资料或 README 中出现的官方站点,适合用于下载、查阅文档、了解项目动态和参与社区讨论。