unitmux:一个用于在 tmux 中运行 Claude Code 和 Codex 的浮动桌面应用 - DEV Community

0 阅读1分钟

简介

如果你正在 tmux 中运行 Claude Code 或 Codex,你大概经历过这种情况:

你想一边在编辑器中阅读代码,一边给出指令,但每次都不得不按 Cmd+Tab 切回终端。

AI 询问"1. 是 / 2. 否"时,你只是为了输入 1 就得切换回终端。

同时并行运行多个 Claude 或 Codex 会话时,很难追踪每个面板当前处于什么状态。

这些细碎的上下文切换不断累积,反复打断你的思路,压力大得出乎意料。

为了解决这个问题,我开发了一款名为 unitmux 的桌面应用。

什么是 unitmux?

这是一款桌面应用,让你可以通过一个浮动窗口,直接向运行在 tmux 中的 Claude Code 或 Codex 发送指令。

它始终保持置顶显示,自动检测 tmux 面板,彻底消除了切换焦点到终端的需要。你可以在不打断编辑器工作流的情况下向 AI 发出指令。

除了 claudecodex 之外,它还能检测运行 ai 包装命令的面板。

一行命令即可安装:

brew install --cask yugo-ibuki/tap/unitmux

功能特性

一键响应选项

当 Claude Code 或 Codex 呈现编号选项时,unitmux 会自动显示可点击的按钮。

你也可以通过 Ctrl+1-Ctrl+9 键盘快捷键即时响应,甚至不需要伸手去够鼠标。

仅仅为了输入一个字符就要切换到终端,这个小烦恼就此消失。

更新:选项检测现在支持简单编号列表之外的多种模式:带标记前缀的选项(>)、冒号分隔的内联选项(如 1: staging 2: production 3: dev),以及包含完整命令文本的多行标签(如权限提示)。

它还能智能过滤"How is Claude doing?"等会话评分反馈和 CLI 页脚,避免出现误判。

Codex 支持也得到了改进。unitmux 能检测 Codex 风格的字母选项,并针对 Codex 提示使用独立的启发式规则,涵盖英语和日语选项上下文。

全局快捷键:随时随地访问

Cmd+Shift+H 可从任意应用切换焦点回 unitmux。

焦点会直接落在文本区域,你可以立即开始输入,按 Cmd+Enter 发送。

在 Chrome 中阅读文档的同时向 AI 发出指令,现在只需几秒钟,几乎无缝衔接。

更新:焦点快捷键现在可以在侧边栏设置中完全自定义。从其他应用触发时还会自动展开紧凑模式,让你立刻进入输入状态。

会话状态一目了然

面板以标签页形式列出,彩色圆点指示当前状态:

  • 绿色:等待输入

  • 橙色:处理中

  • 灰色:等待响应 / 有选项待处理

每个面板还会显示工具的小徽标:

  • CC:Claude Code

  • CX:Codex

并行运行多个 Claude 或 Codex 会话时,你再也不用猜"那个面板进行到哪一步了?"

使用 Cmd+↑ / Cmd+↓Ctrl+H / Ctrl+L 在面板间切换。

更新:面板现在按 tmux 会话分组显示在标题栏中,当你在不同会话中有大量面板时,导航更加便捷。也可通过 Ctrl+Cmd+H / Ctrl+Cmd+L 进行跨会话导航。

状态检测已得到优化。对于 Claude Code,unitmux 读取面板标题中的空闲标记和旋转字符,并解析最近的面板输出以识别等待提示和选项。Codex 状态检测使用其专属的启发式规则,例如 WorkingThinkingExecutingenter to send

unitmux 还能检测运行 ai 包装命令的面板,以及 claudecodex

弹窗中的 Git 操作

Ctrl+G 可打开 Git 操作弹窗。

它只涵盖简单操作,但在个人开发早期阶段需要频繁提交时,能够流畅地完成这些操作确实是一大优势。

你可以:

  • 暂存所有更改

  • 用 Space 选择单个文件

  • 用 Enter 暂存选中的文件

  • 输入提交信息并按 Enter

  • Ctrl+P 推送

弹窗支持 vim 风格的导航,使用 j / k

在 AI 完成一块工作后立即提交,无需切回终端,这种体验令人暗暗满足。

更新:Git 弹窗现在在标题栏显示当前分支名称,并展示详细的 Git 状态:已修改文件、未追踪文件、已删除文件等。它还会在每次操作后自动刷新面板详情,并显示 2 秒后自动消失的成功/错误反馈。

Git Diff 查看器

Ctrl+F 可打开 Git diff 查看器。

这与 Git 操作弹窗是分开的。Git 弹窗用于暂存、提交和推送,diff 查看器则用于快速检查变更内容。

它支持:

  • 未暂存 / 已暂存 diff 切换

  • 文件侧边栏

  • 目录折叠

  • 可折叠的文件区块

  • Hunk 导航

  • Vim 风格滚动

常用快捷键:

  • j / k:滚动

  • d / u:半页滚动

  • g / G:跳到顶部 / 底部

  • ]c / [c:下一个 / 上一个 hunk

  • s:切换已暂存 / 未暂存

  • q:关闭

这让你无需切回终端运行 git diff 就能轻松审查 AI 生成的变更。

半透明窗口叠加在编辑器上

你可以通过滑块将窗口不透明度调整为 50% 到 100%。

结合"始终置顶"功能,你可以透过窗口看到编辑器中的代码,同时向 AI 发出指令。

你可以在阅读代码的同时关注 Claude 或 Codex 的活动状态。

配合 Cmd+Shift+H,你可以将焦点切换到应用,编写提示或选择选项,全程无需动鼠标。

查看当前会话内容

Ctrl+P 让你无需查看终端就能检查会话对话内容。

当你只想看看之前问了什么问题,或者瞥一眼最后的回答时,这个功能让你快速查看后即可投入下一个提示。

Agent 运行时会产生大量日志输出,但你真正想看的通常只是最终结论。能够快速查看你关心的部分,然后立刻进入下一个提示,这才是真正的价值所在。

更新:预览叠加层现在有两种模式。

第一次按 Ctrl+P 显示静态快照。在叠加层打开时再次按 Ctrl+P 可切换到实时流式模式,该模式每 500ms 轮询一次面板内容,并显示 LIVE 徽标。

预览内部支持 Vim 风格导航:

  • j / k:逐行滚动

  • d / u:半页滚动

  • g / G:跳到顶部 / 底部

在可用时,unitmux 还会以 ~/.claude 下的 Claude JSONL 对话历史补充 tmux 面板输出,使更早的对话上下文更易于查阅。

图片附件

可通过 + 按钮附加图片,或将图片拖放到窗口上。

缩略图会在 unitmux 中显示,图片路径通过括号粘贴的方式发送给 AI CLI,以便 CLI 将其识别为图片输入。

这在你想就截图、UI 状态、图表或本地图片文件进行提问,而不想手动在终端中输入路径时非常实用。

紧凑模式

Ctrl+W 可将窗口收缩为约 70px 高度的最小化状态栏。

当你希望 unitmux 保持可见但又不占用太多屏幕空间时,这个功能非常有用。

展开时会恢复之前的窗口大小和位置。快捷键可自定义。

会话详情叠加层

Ctrl+D 显示所选面板的详细信息:

  • 模型名称

  • 会话 ID

  • Git 分支

  • Git 状态

  • 工作目录

  • 面板尺寸

  • 启动命令

  • PID / tty

还包含一个带确认对话框的关闭按钮,用于终止面板。

创建新会话

unitmux 可以从 UI 创建新的 Claude 或 Codex 会话。

有两种工作流:

  • Ctrl+N:快速向当前 tmux 会话添加一个 Claude 会话

  • Ctrl+Shift+N:打开对话框以创建新的 tmux 会话,或向现有会话添加 Claude/Codex 窗口

在对话框中,你可以选择目标 tmux 会话,并在 claudecodex 之间进行选择。

Shell 模式

Ctrl+B 可切换 Shell 模式。

在 Shell 模式下,unitmux 将输入发送到专用的 unitmux-shell tmux 窗口,而非所选的 AI 面板。

Shell 面板按需创建,使用你的默认 Shell。如果它被手动关闭,unitmux 会在下次发送或预览时重新创建它。

预览和实时流式功能同样适用于 Shell 输出。

当你想在 AI 会话附近运行快速命令而无需切回终端时,这个功能十分顺手。

侧边栏设置面板

可从标题栏访问专用设置面板,提供以下选项:

  • 始终置顶开关

  • 不透明度滑块

  • 主题切换:深色 / 浅色

  • 发送键配置:EnterCmd+Enter

  • Vim 模式开关

  • 字体大小控制

  • 紧凑、预览、详情、Git、diff 和焦点的可自定义快捷键

  • 选项修饰符:CtrlCmd

  • Slash 命令管理器

Slash 命令与 Skills 集成

在输入区域输入 / 可筛选并从已注册的命令中进行选择。

用户自定义的斜杠命令可在侧边栏中进行管理。你可以创建、编辑和删除可复用的命令,例如 /fix/review/test

此外,unitmux 还会自动发现以下来源中的 skill 命令:

  • ~/.claude/skills/

  • 所选项目中的 .claude/skills/

它会解析 SKILL.md 文件以获取名称和描述,并将其作为只读的斜杠命令候选项展示。

输入历史

最近 10 条不重复的输入记录会被保存。

在文本输入框中使用 / 进行导航。

向上导航时,当前草稿内容会被保留,返回时自动恢复。

Vim 模式

启用后,unitmux 会在你的文本前发送 Escape 然后是 i,以进入插入模式。

这在你使用 Claude CLI 的 vim 编辑器模式时不小心将面板留在普通模式下时非常有用。

在响应选择项时会跳过此操作,因为单个数字选项可以直接使用。

帮助覆盖层

Ctrl+, 可打开一个快速参考面板,按类别整理了所有键盘快捷键。

它支持与其他覆盖层相同的 vim 风格滚动操作。

安装与首次启动

brew install --cask yugo-ibuki/tap/unitmux

如果你希望通过 DMG 安装,请从 Releases 页面下载。

如果首次启动时出现 Gatekeeper 警告,请前往:

系统设置 → 隐私与安全性 → 仍要打开

结语

我为那些在 tmux 中使用 AI 编程助手、并希望简化"终端窗口太多"这一困境的人构建了这款工具。

核心设计理念是"简单,再简单"。

无需多余的鼠标操作。所有功能均围绕类 Vim 快捷键设计,使用起来自然流畅。

unitmux 并不试图取代 tmux 或成为一个完整的终端管理器,而是专注于让提示词输入和 Agent 监控尽可能省力。

tmux 依然是底层基础,unitmux 只是剥离了围绕它的上下文切换。

欢迎反馈与 PR。

👉 github.com/yugo-ibuki/…

点个 star 会给我很大的动力!

注意事项

Mac 是主要支持的平台。

Linux 构建版本存在,但 Linux 支持尚未经过充分验证,请知悉。

此外,由于我主要使用 Claude Code,Codex 的支持可能仍存在不足之处。

如需进一步操作,你可以考虑屏蔽该用户和/或举报滥用行为