一个把 AI 编码 CLI 变成桌面工作台的本地优先应用
在一个界面里管理 Claude Code / Codex / OpenCode / pi、多 Provider、MCP、Skills、Git Review、内置终端与内置浏览器,并可把任务派给 Agent 看板执行、用定时任务按时自动开工。
CodeMUX 是一个本地优先的桌面应用,由 Electron 桌面壳 + 独立 Rust daemon + React 渲染层 + Node.js sidecar 组成,目标不是做一个“再包一层聊天窗口”,而是把真实的 AI 编码工作流搬到一个更顺手的 GUI 里。
如果你平时在 Claude Code、Codex、OpenCode 这类 CLI 智能体上工作,通常会遇到这些问题:
- 对话、工具调用、文件改动、终端输出分散在不同地方
- 多 provider、多模型、多项目切换成本高
- MCP、Skills、权限模式、历史会话都缺少统一管理入口
- 想做代码审查或开一个项目终端,还要在应用外反复切换
CodeMUX 的做法是把这些环节收拢到一个桌面工作台里:会话、项目、Provider、Agent、MCP、Skills、Review、Terminal、Browser 都放在同一个界面中完成,还能派发工作任务与定时任务,让 Agent 在隔离分支上把活干完。
当前真正可用的核心运行时:
Claude CodeCodexOpenCode(基于官方@opencode-ai/sdk,可在运行时设置中按版本安装)pi(基于 pi RPC 的极简多供应商运行时,经临时扩展支持审批与提问)
Gemini CLI 已完成接入位与 MCP 适配位,运行时仍处于预留阶段。
Claude Code:基于官方@anthropic-ai/claude-agent-sdk,可在运行时设置中选择版本安装Codex:基于官方codex app-server子进程(stdio JSON-RPC 长连接),支持工具审批、Plan Mode 闭环与原生上下文压缩;第三方供应商经本地代理做协议翻译OpenCode:基于官方@opencode-ai/sdk,运行时同时安装opencode-aiCLI,支持会话持久化与恢复、原生权限桥接、Plan/Build 双 Agent 切换、图片附件输入pi:基于 pi RPC 的极简多供应商运行时,支持会话恢复、工具审批、AskUserQuestion问答与 steer- 各 Agent 共用统一事件模型、工具卡片、权限审批 UI 和会话管理
- 业务权威是独立的 Rust 进程
codemux-daemon:拥有 SQLite、会话、Agent 编排、Sidecar、MCP、Skills与定时任务,壳崩溃不影响权威 - Electron 壳只做窗口、托盘、单实例、通知、自动更新与 Browser Host,并作为 supervisor 拉起/守护 daemon(版本配对仲裁)
- 桌面 UI、浏览器/手机网页端与 CLI 都是 Daemon Client,统一走回环 Companion REST/WS + CodeMUX Event 协议,本机连接使用 Local Daemon Token
- 前端只有一套产物:
npm run build:web产出dist-web/,由 daemon 直接服务;同机浏览器走简化配对(壳内确认一次),手机/远程浏览器扫码配对后即可查看与驱动桌面会话;apps/cli提供本机命令行客户端
- 项目分组 + 多会话管理
- 流式对话、Thinking、Todo、工具调用卡片
- 整轮 AI 输出折叠为「已处理 + 时长 + 步骤数」,可展开查看思考、读取、搜索、终端与子智能体的完整过程
- 子智能体有独立时间线与实时预览面板
- 变更文件预览、Diff 展示
- 会话归档、置顶、重命名、恢复
- 任意用户消息上可「回退」(只回对话 / 同时回滚文件 / 两者),也可从任意回复「分叉」出新会话
AskUserQuestion交互卡片,支持选项选择与自由文本回答- 图片附件输入与预览;模型无视觉能力时可用兜底视觉模型解析后注入上下文
- 流式生成时显示实时输出速度(
xx.x tok/s) - 实时上下文使用进度,展示当前 token 占用与上下文窗口占比
- 可导入 Claude Code / Codex / OpenCode 的外部 CLI 会话历史并归入对应项目
- 内置
Review面板查看staged/unstaged改动与 Diff - 内置
Terminal面板在项目目录直接开 PTY 终端 - 内置
浏览器面板:沙箱 webview(独立 partition,可配 CDP),Agent 可被授权操作网页、选取网页元素加入对话 - Git 分支管理:分支切换、新建分支、AI 辅助生成 Commit Message、Commit / Push 与创建 Pull Request
- 右侧 Side Panel 支持多标签切换
- 输入、代码审查、文件变更、终端、网页不用再来回切应用
- 四列看板:待办 / 进行中 / 等你处理 / 完成
- 任务 = 标题 + 指令 + 项目 + Agent 与模型;启动后由 daemon 按项目配额排队,创建真实会话执行
- 默认在
git worktree隔离分支里干活,不污染当前工作区 - 跑完进入「等你处理」,查看 Diff 统计后三选一:合并(可自定义提交信息)/ 直接完成 / 重新开始
- 支持按项目筛选、列表 / 看板视图切换、归档与一键归档全部已完成
- 支持一次性、每日、每周、间隔等时点,到点自动新建会话并执行指令
- 可绑定项目与 Agent,支持建议模板(如「每日提交简报」「每周回顾」「跟进监控」)
- 每个任务有独立启停开关、立即执行、运行历史回看与时区显示
- 仅在 CodeMUX 运行时触发(含托盘隐藏),不会补跑错过的任务
- 内置 13 条命令(后退 / 前进、新建会话、打开设置、搜索、折叠侧边栏 / 侧面板、放大 / 缩小 / 恢复界面缩放、切换思考级别、停止生成、聚焦输入框)
- 点键位即进入录制,拒绝无修饰键与系统保留键位,并检测键位冲突
- 支持单项禁用、单项恢复默认与一键恢复全部默认
- 键位按物理键匹配,与键盘布局无关;绑定存于 daemon 配置,所有客户端一致
- 「设置 → 模型配置」用一份统一的供应商列表管理多家上游,按名称搜索、逐个启停
- 每个供应商可配置
API 密钥、Anthropic/OpenAI 兼容/OpenAI Responses三类端点与模型列表 - 支持测试连通性、从接口拉取模型列表、添加 / 删除模型与 Token 单价
- 支持
Codex 需要兼容代理路由开关与1M context标记 - 「设置 → 智能体运行时」为 Claude Code / Codex / OpenCode / pi 分别指定默认智能体、新建会话默认模型与默认权限
- OpenCode 支持
@ai-sdk/openai、@ai-sdk/anthropic、@ai-sdk/openai-compatible、@ai-sdk/google、@ai-sdk/amazon-bedrock等多 adapter - 运行时安装与升级都在设置内完成,不依赖系统全局 CLI;另有只读的「外部 CLI 诊断」
- 内置本地代理路由
- 用于兼容非原生 OpenAI Responses API 上游(Responses ↔ Chat 协议翻译)
- 设置页可直接启动 / 停止
- 状态栏可观察运行状态
- MCP 支持
stdio、http、sse - 支持 JSON 编辑、配置向导、探测、从本机工具导入
- 内置
codemux-controlMCP 承载浏览器与桌面两类工具(共 27 个),随「设置 → 浏览器控制」「电脑控制」两个开关增减,设置页直接显示当前可用工具数 - 每个 MCP 可单独启用到 Claude Code / Codex / OpenCode / pi
- Skills 以
~/.codemux/skills/为单一数据源,Windows 下按 symlink → junction → copy 回退链处理 - Skills 支持内置同步、预览、启用 / 禁用、卸载
- 启用的 Skills 会自动注册到斜杠命令系统,每个 Skill 维护 4 个独立的 per-agent 启用开关
- Claude、Codex、OpenCode 各自拥有独立的权限配置模型
- 会话级保存权限配置和
plan mode - Codex 支持 sandbox / approval / network access 组合配置
- Claude 支持不同 permission mode
- OpenCode 保留原生权限语义,CodeMUX 负责展示、审批与响应转发,支持
once/always/reject三档响应
- 365 天活跃热力图,按 token 消耗着色,悬停查看当日会话数与 token 明细
- 每日 token 柱状图,分输入 / 缓存 / 输出堆叠展示
- 按 Agent / 模型分布统计,支持时间窗口与 Agent 类型筛选
- 概览卡片:会话总数、累计 token、缓存命中率
- 任务完成、需要权限审批、需要用户回答时自动触发系统通知
- 应用非活跃状态下点击通知可唤醒主窗口(Windows 通过 Electron AppUserModelID + 单实例拦截实现)
- 内置多种提示音(bell / chime / ding / success / task-complete),支持预览与切换
- 内置 electron-updater,启动时自动检查 GitHub Releases 最新版本
- 支持用户确认后下载、退出时自动安装并重启
- 侧边栏更新入口展示版本信息与进度
整轮 AI 输出可折叠为「已处理 + 时长 + 步骤数」,展开后是完整的思考、读取、搜索、终端与子智能体过程。
右侧面板内嵌沙箱浏览器,Agent 可被授权直接操作网页。
- 经常用
Claude Code、Codex或OpenCode做工程任务的开发者 - 希望把多 provider、多项目、多会话统一管理的人
- 想要可视化工具调用、Diff、终端与 Review 面板的人
- 希望把 MCP / Skills 当作长期工作流能力来管理的重度用户
- 关注 token 用量、成本与活跃度,想要长期统计洞察的人
- 想把任务直接派给 Agent 在隔离分支上跑完、再统一验收合并的人
Node.js >= 18Rust stable(编译 daemon)
Windows 通常还需要:
- Visual Studio C++ Build Tools(Rust 工具链)
npm ci
cd apps/sidecar
npm ci
npm run build
cd ../..
npm run build:daemonnpm run dev:desktop一键启动:等 Vite(端口 1420)就绪后拉起 Electron 壳,daemon 由壳内 supervisor 自动拉起,退出时统一清理子进程。
如果只开发前端:
npm run dev也可以分别手动跑 npm run dev(渲染层)与 npm run dev:electron(壳,需渲染层已在 1420 就绪)。
npm run build:electron-installer产物(NSIS 安装包 + latest.yml)输出到 apps/desktop/release/,详见桌面端发版指南。
# 前端测试
npx vitest run
# sidecar 测试
cd apps/sidecar
npx vitest run
# Electron 壳类型检查
cd apps/desktop
npm run typecheck
# Rust(daemon crate)检查
cd crates/daemon
cargo check --all-targets --all-features
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings在「设置 → 模型配置」里维护一份统一的供应商列表,可新增、启停并搜索。每个供应商需要填写:
API 密钥Anthropic/OpenAI 兼容/OpenAI Responses端点(按供应商实际协议填)模型列表(模型 ID 与显示名称,可从接口拉取)
如果目标上游不是原生 OpenAI Responses API,在该供应商上开启“Codex 需要兼容代理”。
在「设置 → 智能体运行时」中为每个智能体选择默认模型与默认权限,并设定默认智能体。当前已可用运行时:
Claude CodeCodexOpenCodepi
同一页面还能安装 / 校验托管 Runtime、升级版本与回滚,并查看系统 PATH 上的外部 CLI 诊断。
在「设置 → 浏览器控制」打开开关后,右侧面板会出现「浏览器」标签,同时内置的 codemux-control MCP 会注入浏览器类工具,会话即可直接操作网页。
在“MCP”设置中可以:
- 新增 / 编辑 server
- 使用向导生成配置
- 对不同工具单独启用
- 从本机已有工具配置导入
- 执行连接探测
在“Skills”设置中可以:
- 浏览并安装内置 Skills 与 GitHub Skills
- 预览 Skill 内容
- 为 Claude Code / Codex / OpenCode / pi 单独启用 / 禁用
- 卸载已安装 Skills
Skills 以 ~/.codemux/skills/ 作为单一数据源;Windows 下按 symlink → junction → copy 回退链处理跨卷与权限问题。已启用的 Skills 会自动注册为斜杠命令。
进入项目会话后,可在右侧 Side Panel 打开:
审查:查看并操作 Git 改动、切换分支、提交并推送,并可发起创建 Pull Request(GitHub / GitLab / Gitee)终端:在项目根目录打开内置终端浏览器:内嵌沙箱浏览器,可手动浏览,也可授权 Agent 接管操作网页
创建 Pull Request 的使用要求:
- 当前分支必须是普通分支,并且相对 base 分支至少有一个已提交的 commit。
- 工作区必须干净;未提交改动不会被自动 commit,需要先在审查面板提交。
- GitHub 使用本机
gh登录,GitLab 使用本机glab登录。 - Gitee 需要在设置 → Git 中配置 Personal Access Token;Token 只保存到系统凭据存储。
- 流程固定为检查、补全标题/正文、检查重复 PR、推送分支、创建 PR;推送或创建失败后可以安全重试。
在设置 → “使用统计”中可以:
- 查看 365 天活跃热力图(按 token 消耗着色)
- 切换时间窗口(7 / 30 / 90 / 365 天)与 Agent 类型筛选
- 查看每日 token 堆叠柱状图与缓存命中率
- 查看 Agent / 模型分布与累计会话数
在侧边栏的「工单」中新建任务,选择项目、Agent 与模型并写下指令即可启动。任务由 daemon 按项目配额排队,在隔离的 git worktree 分支里创建真实会话执行;完成后任务进入「等你处理」,可查看 Diff 统计并选择合并、标记完成或重新开始。
在侧边栏的「自动化」中按模板或从零创建定时任务,绑定项目与 Agent 后启用。到点会自动新建会话执行指令,并保留运行历史供回看。
- 「设置 → 快捷键」:点键位进入录制,可重绑、禁用或恢复默认
- 「设置 → 外观」:主题、强调色、界面字体与字号、代码字号、圆角风格、幕布宽度、对比度
所有会话都支持一组基础命令:
/new/clear/compact/cost/status
Claude 当前额外支持的常用命令包括:
/init/review/code-review/security-review/debug/verify/deep-research/simplify/batch/loop/run/heapdump/insights/goal
Codex 当前额外支持:
/plan/init/review
OpenCode 通过 plan / build 双 Agent 切换支持计划模式,并在会话中复用上述通用命令与已注册 Skills 命令。
通用自定义命令:
/explain <文件路径>/test/fix [描述]/refactor <目标>
已安装并启用的 Skills 也会注册为斜杠命令。
| 层 | 技术 |
|---|---|
| 前端 | React 18, TypeScript, Vite 6 |
| UI | Tailwind CSS v4, Radix UI, lucide-react, shadcn/ui |
| 状态管理 | Zustand |
| 对话渲染 | @assistant-ui/react, react-markdown, streamdown |
| 代码 / Diff | Monaco (@monaco-editor/react), diff, parse-diff, highlight.js |
| 终端 | @xterm/xterm, @xterm/addon-fit |
| 桌面壳 | Electron 33(窗口、托盘、单实例、通知、electron-updater、Browser Host) |
| 后端 | Rust 2021 daemon(codemux-daemon): Tokio, Reqwest, Rusqlite,内嵌 Companion Server(回环 REST/WS) |
| 客户端协议 | Companion REST/WS + CodeMUX Event(桌面渲染层 / 浏览器与手机网页端 / CLI 共用) |
| 本地数据库 | SQLite |
| Sidecar | Node.js + TypeScript |
| Agent SDK | 由 CodeMUX 使用本机 npm 安装到托管 Runtime 目录:@anthropic-ai/claude-agent-sdk、@openai/codex(CLI,供 app-server 使用)、@opencode-ai/sdk |
| OpenCode AI Adapter | @ai-sdk/openai, @ai-sdk/anthropic, @ai-sdk/openai-compatible, @ai-sdk/google, @ai-sdk/amazon-bedrock |
应用主要数据保存在本地:
- 会话 / 项目 / MCP / Skills 元数据:
SQLite - 提供商、主题、默认智能体等:
config.json - Claude Code 配置:
~/.claude/settings.json(默认供应商直接复用,切换时自动备份) - Codex 配置:
~/.codex/(保留登录与 vendor 信息) - OpenCode 配置:
~/.config/opencode/opencode.json(默认不覆盖用户配置) - Skills 单一数据源:
~/.codemux/skills/ - 本机守护凭证(Local Daemon Token)与 daemon 运行状态(
daemon-run-state.json):应用数据目录(%APPDATA%/com.codemux.desktop及平台等价目录) - Agent 原生历史:由各自运行时和 sidecar 管理
在设置 -> 常规中可以直接查看和打开配置目录。
- 独立进程启动即监听回环,写
daemon-run-state.json(port / pid / version / managed_by) - 拥有 SQLite(会话 / 项目 / Timeline)、配置文件、Agent 编排、Sidecar 生命周期、MCP / Skills 适配、Provider Profile、Git、终端、文件系统与定时任务
- 内嵌 Companion Server:回环 REST/WS + Local Daemon Token 鉴权,是唯一的客户端业务协议;局域网 / 中继暴露由用户显式开启
- 广播 CodeMUX Event 与桌面 UI 事件(sessions-changed 等),并提供受控的浏览器自动化接缝
- 承载窗口、托盘、单实例锁、原生对话框、通知(AppUserModelID)与 electron-updater
- 按 supervisor 契约拉起 / 附着 / 重启 daemon(健康检查 + 版本配对仲裁),只管理自己拉起的 daemon
- Browser Host:渲染层沙箱
<webview>(独立 partition,与应用 IPC 隔离),CDP 经webContents.debugger可用 - 壳能力经 contextBridge(
window.codemuxDesktop)暴露给渲染层;壳崩溃不影响 daemon
- React 渲染桌面 UI,Zustand 管理会话、设置、MCP、Skills、侧边面板等状态
- 作为 Daemon Client 通过 Companion REST/WS 订阅 CodeMUX Event、驱动动作
@assistant-ui/react作为对话运行时框架,自定义 Thread / Composer / Tool 卡片
- 封装 Claude Code、Codex、OpenCode 等 Agent 运行时
- 处理会话启动、流式事件归一化、历史恢复、代理路由、权限桥接等逻辑
- OpenCode 通过官方 SDK 启动独立 Server,建立 Client 与 Session,并通过 SSE 订阅事件
codeMUX/
├─ src/ # React 统一前端(桌面 UI、PC 浏览器、手机浏览器共用一套构建)
│ ├─ components/agent/ # 对话面板、工具卡片、权限卡片、上下文进度
│ ├─ components/settings/ # 设置页(Provider / MCP / Skills / 通知 / 使用统计 / 日志)
│ ├─ components/workspace/ # Review / Terminal / Browser 等侧边面板
│ ├─ components/automation/ # 定时任务面板与编辑器
│ ├─ components/worktask/ # 工作任务看板
│ ├─ stores/ # Zustand 状态(agent / session / mcp / skill 等)
│ └─ lib/ # 工具函数(通知、权限、模型、上下文计算等)
├─ apps/
│ ├─ desktop/ # Electron 壳(main / preload / supervisor / Browser Host / updater)
│ ├─ sidecar/ # Node.js Agent Sidecar(Claude / Codex / OpenCode / pi 运行时)
│ └─ cli/ # 本机命令行 Daemon Client
├─ crates/
│ └─ daemon/ # Rust daemon crate(Tauri 壳已移除,目录由 src-tauri/ 改名)
│ ├─ src/bin/ # codemux-daemon 入口
│ ├─ src/daemon/ # daemon 装配与生命周期
│ ├─ src/companion/ # Companion Server(REST/WS、鉴权、配对、浏览器自动化接缝)
│ ├─ src/agent/ # 会话生命周期、历史导入、Timeline 持久化
│ ├─ src/agent_runtime/ # Claude / Codex / OpenCode / pi 运行时抽象
│ ├─ src/mcp/ src/skills/ # MCP / Skills 各 Agent 适配器
│ ├─ src/model_providers/ # Model Provider 服务
│ └─ src/scheduled_tasks/ # 定时任务
├─ public/ # 静态资源与截图
├─ scripts/ # 开发 / 发布 / e2e / relay 脚本
├─ docs/ # 设计文档、ADR 与实现说明
└─ README.md
更细的目录约定请参考 CONTRIBUTING.md 和仓库内的 AGENTS.md / 开发文档。
- 贡献指南
- 更新日志
- 桌面端发版指南
- 智能体供应商使用说明
- Codex 路由代理说明
- MCP 统一管理说明
- Skills 统一管理说明
- AI Agent 权限审批说明
- OpenCode SDK Agent 接入设计
- ADR 0011 — Daemon 权威与 Local Daemon Token
- ADR 0012 — Daemon 独立进程与 Electron 桌面壳
- ADR 0013 — 用户可配置键盘快捷键
- 统一前端(桌面 / 浏览器 / 手机共用一套构建)
- 内置浏览器设计
- Agent 任务看板设计
- 定时任务设计
- pi Agent 接入设计
- 架构:Electron 桌面壳 + 独立 Rust daemon(
codemux-daemon),Tauri 壳已移除(daemon crate 位于crates/daemon/,目录由src-tauri/改名) Claude Code:主力运行时,支持最完整Codex:已集成并可用,包含本地代理兼容链路OpenCode:已集成并可用,基于官方@opencode-ai/sdk,从托管 Runtime 目录启动独立 Serverpi:已集成并可用,基于 pi RPC 的极简多供应商运行时Gemini CLI:界面与适配位已预留,运行时待继续完善
本项目基于 MIT License 开源。
Made by kfumi











