The short answer
Plenty of developers now run two coding agents side by side: Codex grinding through a refactor while Claude Code writes tests in another folder. The friction is that each agent has its own interface and its own session history, so answering "which one is waiting on me?" means checking both. BotBus is an always-on app (a menu bar app on the Mac, a background command-line service on Linux) that connects to the local Codex and Claude Code installs at the same time, merges their tasks into a single list, and syncs that list to your iPhone and Apple Watch. You keep starting each agent the way you already do.
Below: how BotBus hooks into each agent, what the combined view looks like, where the two agents' capabilities differ, and the limits worth knowing.
Why running two agents is becoming normal
Codex and Claude Code have different strengths, different models, different default tools and different habits around approvals. A common split in practice is one agent on the long-running change and the other on review, tests or a quick side fix. Some people deliberately open a session in each agent on the same repository to compare the approaches.
The cost is attention. With both running you are tracking three things at once: which session is blocked on an approval, which one finished, and which one has drifted off course. When that information is scattered across terminal windows, the Codex desktop app and Claude sessions, stepping away from your desk means coming back and checking each one by hand. Putting both agents' state in one list is the most direct fix.
How BotBus connects to each agent
BotBus treats each agent on your computer as a connector. The "Local Agents" section of the menu bar and the settings window both list them with their name, availability and task count. Codex and Claude Code are wired in differently, and that explains most of the capability differences later on.
Codex: read-only watching plus app-server control
Codex keeps its session threads in SQLite databases under ~/.codex. BotBus reads them roughly every two seconds to build the task list. It never writes to them. If BotBus finds both the codex executable and those databases, the Codex row shows as healthy; if only one is present, it tells you what's missing.
Actions from your phone (start a task, follow up, approve, answer a question, interrupt) go through Codex's own codex app-server interface rather than touching the database. If you use the Codex desktop app and want phone and desktop to drive the same session, finish what's running, quit Codex, then click "Launch Codex" in the Codex row of the BotBus menu. The desktop app and BotBus then share one channel, and whichever side answers an approval first wins. More detail in how to monitor Codex from your iPhone.
Claude Code: hooks plus claude -p
Claude Code has no state database to read, so BotBus installs Claude Code hooks from its settings window. The installer only merges entries tagged as BotBus's own into ~/.claude/settings.json, leaving the rest of your configuration alone, and uninstalling removes only those entries. Once hooks are installed, sessions you open in the terminal or the desktop app report to BotBus: prompts, permission requests and endings. At launch BotBus also does a read-only scan of the last seven days of session transcripts, so sessions from before the hooks were installed, or from while BotBus wasn't running, show up in the list too.
When you start or continue a Claude Code session from your phone, BotBus runs a claude -p subprocess, and approvals for that turn travel over its stdin/stdout straight to your phone. That path doesn't need hooks. Hooks are what make sessions you started on the computer visible and approvable from the phone. The full flow is in how to approve Claude Code from your phone.
What the combined view looks like
One list, grouped by computer and project
On the phone you pick a computer first. At the top of its page are tabs for each agent that's installed or has tasks there, plus an "All" tab. Under "All", Codex sessions and Claude Code sessions in the same folder sit under the same project. So you see "what's happening in this repository" rather than "what Codex is doing" and "what Claude is doing" separately. Tap an agent's tab if you want just one.
Each computer's page pins the sessions that need you most: anything waiting on you comes first, then anything running. The ordering is the same regardless of which agent the session came from.
Same notification rules
Both agents produce the same four kinds of notification: waiting for approval, waiting for a reply, task completed and task failed. Tapping one opens that session. The menu bar icon reflects the merged state as well. The eyes scan left and right while any task is running, the headlights flash in turn when any task needs approval or a reply, and a count of pending items appears next to the icon.
Choosing an agent for a new task
When you start a new chat from your phone, you pick the agent. A quick chat defaults to the agent you used last, falling back to the one behind your most recent task. Inside a specific project it defaults to the agent of that project's latest session. You can always switch, and only agents that are available and enabled on an online computer appear as options.
Where the two agents differ
A unified list doesn't mean identical capabilities. These differences come from how each agent is wired in:
- Interrupting. Codex sessions can be interrupted through app-server. For Claude Code, interrupt only works on processes BotBus started and owns; a Claude session you opened in a terminal has to be stopped in that terminal.
- Continuing a desktop session. Continuing a Claude Code desktop session may fork a new session via
--resume; the phone follows the actual new session. If a Codex session is held by a separately running Codex process, a follow-up from the phone reportsalready has an active writer. Connect the desktop app through BotBus as described above. - Questions with options. Both work. Codex's input requests and Claude Code's
AskUserQuestionshow their options on the phone so you can tap an answer. - Model and reasoning effort. Both let you switch when following up or starting a task, but the choices come from different places: Codex reports its own model list, while Claude Code offers model aliases plus the effort levels your local
claudesupports. - Sending images and auto-approve. Today only Codex and Claude Code accept images from the phone and support per-project auto-approve. Other connected agents don't yet.
Turning an agent off
Every connector has an enable switch in settings, and the phone can flip the same switch. When one is off, its tasks drop out of the list and its task count goes to zero. When you turn it back on, the first sync is silent, so you don't get a burst of stale "task completed" notifications. If you're only using Claude Code this week, switching Codex off keeps the list tidy.
Not just these two
Besides Codex and Claude Code, BotBus has built-in support for Hermes, Pi, OpenClaw and DeepSeek Harness, and other agents that implement ACP (Agent Client Protocol) can be connected too. See connect your agent. They all land in the same list; what you can do with each depends on that agent. Pi, for example, has no approvals.
Limits
- Viewing works offline; acting doesn't. Synced tasks stay on your phone when the computer goes offline and are marked offline. Approving, following up, starting and interrupting all need that computer online, and depend on the connector and task state.
- Claude Code needs hooks to see computer-side sessions. Without hooks you only get phone-started sessions plus the recent sessions recovered at launch. With hooks, new activity is reported live.
- Not a second-by-second stream. The list refreshes about every two seconds, titles and latest output are truncated summaries, and full conversations load on demand.
- Push depends on the system. You need to allow notifications on the phone, and delivery depends on system settings.
- Content is end-to-end encrypted, but not everything is hidden. Tasks, conversations, commands and notification text are encrypted on your devices before they leave. The server can still see device IDs, online status, update times and data sizes, and a task ID's prefix reveals whether it came from Codex or Claude Code. Details in the end-to-end encryption notes.
Availability
On the computer side there's a Mac app (a menu bar app, macOS 26 or later) and a Linux version (a command-line program for x86_64 and aarch64; see the install guide); you can download both from the website. The menu bar icon and the Local Agents section described above are part of the Mac app. The iPhone and Apple Watch app is available on the App Store. Windows and Android versions are planned.
FAQ
Will Codex and Claude Code sessions in the same project overwrite each other?
No. Every session carries its own source, and a task is identified by computer plus task ID. Sessions from both agents appear side by side under the same project.
I only use one of them. Is that a problem?
No. BotBus only connects agents it detects on the machine, so the missing one simply doesn't appear. You can also switch any connector off in settings.
Does installing Claude Code hooks overwrite my own settings?
No. The installer only merges hook entries tagged as BotBus's own and keeps everything else in ~/.claude/settings.json. Uninstalling removes only those entries.
Can I see both agents' tasks on Apple Watch?
Yes. The watch gets pairing details from your iPhone and then connects on its own. It shows the same merged task list and can handle approvals and replies.
What if Codex runs on one Mac and Claude Code on another?
That works too. Several Macs can pair with the same phone. Each computer's tasks are listed separately, and the same path on two computers counts as two different projects.