先说结论
很多人现在是两种 agent 混着用:Codex 跑一个重构,Claude Code 同时在另一个目录里补测试。麻烦在于两边各有各的界面、各有各的会话记录,想知道“哪个在等我”得分别去看。BotBus 的做法是在电脑上常驻一个应用(Mac 上在菜单栏,Linux 上是命令行后台程序),同时接入本机的 Codex 和 Claude Code,把两边的任务合进同一个列表,再同步到 iPhone 和 Apple Watch。你继续用原来的方式启动它们,不用为了统一管理改工作流。
下面讲它分别怎么接入两种 agent、合在一起之后界面是什么样、两边能做的事有哪些不同,以及需要注意的边界。
为什么混用两种 agent 会越来越常见
Codex 和 Claude Code 的长处不完全一样,模型、默认工具、审批习惯也各不相同。实际工作里常见的分法是:一个负责长时间的改动,另一个负责审查、写测试或者处理一个临时的小问题;或者同一个仓库里用两种 agent 各开一个会话,比较它们给出的方案。
问题在于注意力。两种 agent 同时跑时,你要记住三件事:哪个会话停在审批上、哪个跑完了、哪个跑偏了。如果这些信息分散在终端窗口、Codex 桌面 app 和 Claude 的会话里,人一离开电脑,基本就只能靠回来时挨个翻。把两边的状态放进同一个列表,是解决这个问题最直接的办法。
BotBus 怎么分别接入两种 agent
BotBus 把电脑上的每种 agent 当成一个“连接器”。菜单栏的「本机 Agent」分区和设置页各列一份,显示名称、是否可用和任务数。Codex 和 Claude Code 的接入方式不一样,这也决定了后面能做的事有所不同。
Codex:只读观察加 app-server 控制
Codex 会把会话线程记在本机 ~/.codex 下的 SQLite 数据库里。BotBus 大约每 2 秒只读一次这些数据库,整理出任务列表,不写入、不改结构。BotBus 同时找得到 codex 可执行文件和这些数据库时,Codex 这一行显示为正常;只找到其中之一时会标出缺什么。
从手机发起的操作(新建、续聊、审批、回答提问、中断)走 Codex 自己的 codex app-server 接口,不直接改数据库。如果你平时用 Codex 桌面 app,想让手机和桌面操作同一个会话,第一次接入时先完成桌面上的任务、退出 Codex,再从菜单栏 Codex 那一行点「启动 Codex」,这样桌面和 BotBus 共用同一条通道,审批以先回答的一端为准。详细说明见在 iPhone 上查看 Codex 任务。
Claude Code:hooks 观察加 claude -p 控制
Claude Code 没有可以直接读的状态数据库,所以 BotBus 的做法是:在设置页安装它的 hooks。安装器只合并 ~/.claude/settings.json 里带 BotBus 标记的条目,保留你原有的其他设置;卸载时也只移除自己的那几条。装好之后,你在终端或桌面 app 里开的 Claude Code 会话,从提交提示词、请求权限到结束,都会报给本机的 BotBus。启动时它还会只读扫一遍最近 7 天的会话记录,把 hooks 装之前或 BotBus 没开时的会话也补进列表。
从手机新建和续聊 Claude Code 会话时,BotBus 起的是 claude -p 子进程,这一轮里的审批经它的标准输入输出直接回到手机,不依赖 hooks。所以即使没装 hooks,手机开的任务照样能审批;装了 hooks,电脑上开的会话才看得见、才能在手机上审批。更细的流程见在手机上审批 Claude Code。
合在一起之后是什么样
一个列表,按电脑和项目分组
手机上先选电脑,电脑页顶部是这台电脑上装着或有任务的 agent 标签,另有一个「全部」。在「全部」里,同一个目录下的 Codex 会话和 Claude Code 会话归在同一个项目下,你看到的是“这个仓库现在有哪些会话”,而不是“Codex 有哪些、Claude 有哪些”。想只看一种,点对应的标签即可。
每台电脑的页面顶部会挂出最需要注意的几条会话:等你处理的排在最前,其次是正在运行的。不管它来自哪种 agent,排序规则都一样。
通知规则也一样
两种 agent 的通知都只有四类:等你审批、等你回复、任务完成、任务失败。点开通知直接跳到对应的会话。菜单栏图标也是合并后的状态:任一边有任务在跑,眼睛就左右扫视;任一边有任务等审批或等回复,两盏头灯就交替闪,右边显示待处理的总数。
新建时选用哪个 agent
在手机上新建对话时要选 agent。快速对话默认用上次用过的那个,没有的话用最近一条任务所在的 agent。在某台电脑、某个项目里新建时,默认用这个项目最近一条会话的 agent。当然都可以手动改。只有在线电脑上可用并且启用了的 agent 才会出现在可选列表里。
两边能做的事不完全一样
统一列表不等于两边能力完全相同。下面这些差异来自两种 agent 本身的接入方式:
- 中断:Codex 的会话可以经 app-server 中断。Claude Code 的中断只对 BotBus 自己启动并持有的进程有效,你在终端里开的 Claude 会话要回终端里停。
- 续聊电脑上的会话:Claude Code 续聊桌面会话时,可能通过
--resume分出一个新会话,手机上会跟到实际的新会话。Codex 的会话如果正被另一个独立运行的 Codex 进程持有,手机续聊会提示already has an active writer,按上面说的方式接入桌面即可。 - 提问:两边都支持带选项的提问。Codex 的提问和 Claude Code 的
AskUserQuestion都会把选项显示在手机上,直接点选回答。 - 换模型与思考强度:两边都支持在续聊或新建时换,但列表来源不同。Codex 的可选模型来自它自己报告的模型列表,Claude Code 的可选项是模型别名加本机
claude支持的强度档。 - 发图与自动批准:目前只有 Codex 和 Claude Code 支持从手机发图,以及按项目开启自动批准。其他接入的 agent 暂时不支持。
怎么开关某一种 agent
设置页里每个连接器都有一个启用开关,手机上也能翻同一个开关。关掉之后,这种 agent 的任务不再出现在列表里,任务数归零;重新打开后第一次同步是静默的,不会把积压的状态一次性推成一堆“任务完成”通知。比如这周你只用 Claude Code,就可以先把 Codex 关掉,列表会清爽很多。
不止这两种
除了 Codex 和 Claude Code,BotBus 还内置接入 Hermes、Pi、OpenClaw 和 DeepSeek Harness,实现了 ACP(Agent Client Protocol)的其他 agent 也能接进来,接入方法见连接你的 agent。它们和 Codex、Claude Code 进同一个列表,只是能做的操作取决于各自的能力,比如 Pi 没有审批。
限制与边界
- 看不需要电脑在线,操作需要。 已同步的任务在电脑离线后仍留在手机上,只是标成离线;审批、续聊、新建和中断都要那台电脑在线,并取决于连接器和任务状态。
- Claude Code 需要装 hooks 才看得到电脑上的会话。 不装 hooks,只有手机开的会话和启动时补回的最近会话;装了之后,新动静才会实时报上来。
- 不是逐秒直播。 列表大约每 2 秒刷新一次,标题和最后一条输出是截断后的摘要,完整对话要点进去按需读取。
- 推送取决于系统。 通知要在手机上允许推送权限才能收到,还取决于系统设置。
- 内容端到端加密,但不是什么都藏得住。 任务、对话、命令和通知正文都在设备上加密后才发出,服务器仍然看得到设备编号、在线状态、更新时间和数据大小,任务编号的前缀也能看出来源是 Codex 还是 Claude Code。细节见端到端加密说明。
现在能不能用
电脑端有 Mac 版(菜单栏应用,需要 macOS 26 或更新)和 Linux 版(x86_64 / aarch64 的命令行程序,见安装说明),都可以在官网下载。下文的菜单栏图标与「本机 Agent」分区说的是 Mac 版。iPhone 和 Apple Watch 版已在 App Store 上架;Windows 与 Android 版在计划中。
常见问题
同一个项目里同时有 Codex 和 Claude Code 的会话,会不会互相覆盖?
不会。每条会话都带着自己的来源,任务身份是“哪台电脑 + 哪个任务”,两种 agent 的会话在同一个项目下并列显示,互不影响。
我只用其中一种,另一种没装,会有问题吗?
没有。BotBus 只接入本机探测到的 agent,没装的那种不会出现在列表里,也可以在设置页直接关掉。
装 Claude Code 的 hooks 会改掉我自己的配置吗?
不会。安装器只合并带 BotBus 标记的 hook 条目,保留 ~/.claude/settings.json 里的其他内容;卸载时也只移除这些条目。
能在 Apple Watch 上同时看两种 agent 的任务吗?
可以。手表从 iPhone 同步配对信息后自己联网,看到的是同一份合并后的任务列表,也能处理审批和回复。
两台 Mac 各跑一种 agent,也能放在一起看吗?
能。多台 Mac 可以配对到同一部手机,每台电脑的任务分开列出,同一个路径在不同电脑上算不同的项目,不会混在一起。