How to manage multiple coding agents on your Mac

The OffiAI team, Delicatino GmbH ·

With one coding agent, you simply follow its terminal. With several, the work is keeping track: which agent has which task, which one is waiting for a permission and where to answer it, and where the next task goes when every desk is busy. This is how we run Claude Code, Codex and Claude Cowork sessions side by side, with early Gemini support, in OffiAI, a free app for Macs with Apple silicon that we make. Each session works at its own desk in one office window.

An office with six occupied desks: a desk labelled “Explain hello.sh beha…” with a large hologram, two desks with smaller holograms and “Needs you” chips, three desks with “Delivered” chips, and “1 task in line” above the reception pad.
Six demo sessions in one office: two desks need you, three have delivered, and the reception pad says “1 task in line”. The desk at the top left is the Codex session from the pictures below, running a command; its hologram looks different from the Claude Code ones.

If you only want your Claude Code sessions side by side, read How to see all Claude Code sessions at once on your Mac first. This post covers the rest of the workflow: starting work, answering approvals, lining up tasks and reviewing the results.

A few terms: a desk is one agent session with its own conversation; click it to open its panel, whose Talk drawer holds the conversation. Reception is where you start new work from the app. Needs you means a session is waiting for your answer. Delivered means an agent finished its turn; whether the work is accepted stays your decision. Desks that are working or waiting also show a hologram, a see-through figure at the desk.

Which agents can share the office

Every agent keeps its own login and subscription. To tell desks apart, open a desk’s panel: the Talk heading carries a badge with the agent’s name, such as “Claude Code” or “Codex”. Each agent has its own hologram look. Reception counts the team at the top, for example “5 Claude · 1 Codex”.

Start work from Reception

Click the round pad in the middle of the office to open Reception. Choose a working folder, write the task and pick the agent. The agent list shows each agent with the version OffiAI found, or the reason it cannot start right now; in our demo profile it read “Gemini — Gemini is off in Settings. Turn it on, then reopen OffiAI.” Press “Start at a desk” and the agent starts in that folder at a free desk, and the desk’s Talk drawer opens.

Sessions you start yourself in a terminal still get a desk. You can message a terminal-started Claude Code session from its desk while it is not busy in the terminal. Codex and Gemini sessions started in your own terminal are shown read-only; the drawer says, for example, “Observed only — continue this session in Codex.”

If the folder is a Git repository, Reception can put a Claude Code task on its own branch, so two tasks in one repository do not edit the same working folder.

Know where each approval is answered

Every agent asks before some actions, and each asks in its own place. Only Claude Code requests can be answered inside OffiAI. For the other agents, OffiAI shows that a desk is waiting and where to answer:

If you are not looking at the office, alerts can tell you when a desk finishes, waits or gets stuck. They are off by default, apart from the in-app “Delivered” chip; Alerts when any agent finishes, gets stuck or needs you lists them.

When every desk is busy: the line

When every desk is held, new work takes over the desk that has been idle longest. Desks that are working, need you, or hold a result you have not marked done yet (Delivered, or Reviewed: you looked at it but did not mark it done) are not taken over. When no desk can be taken over, write the task in Reception as usual and press “Add to the line” instead of “Start at a desk”. How many desks an office has is explained in the Claude Code sessions post.

The task waits in Reception’s “In line” list with its agent, its position and “Waiting for a desk”, and the reception pad shows how many tasks are waiting (“1 task in line” in the picture above). You can move a task up or down or remove it before it starts, and the line holds up to 20 tasks. The line is not saved: quitting OffiAI discards tasks that have not started.

A waiting task starts as soon as a desk can be taken over, for example when you release one. Delivering, reviewing, answering an approval or pressing Stop does not free a desk for the line. In our demo every desk was held, so we marked one Claude Code job done and pressed “Release idle desk” in its drawer; the waiting task started at that desk by itself.

Review what each agent delivered

When a turn finishes, the desk says “Delivered”. That means the agent is done, not that the work is accepted. In the Talk drawer you choose “Mark reviewed”, then “Mark done”, or “Reopen”. In our demo the Claude Code and Codex desks showed the same row; the Codex one is pictured below. A job you have not marked done keeps its desk, so unreviewed work does not get pushed out.

To see what changed, open Changes in the drawer. For Claude Code, OffiAI keeps the files the session edited. For Codex and Gemini it can check the folder for current changes, but it cannot tell which agent made them. See what each agent changed, and open it in your editor covers this in detail.

Find work again in the Archive

Click “Archive” in the top bar. It lists the sessions OffiAI has seen from every agent, newest first, with their agent and state. You can filter by state (Working, Delivered, Reviewed, Done) and search as you type. A session that still holds a desk shows that desk (“Desk 4”), and a Claude Code session that no longer has a desk can be reopened onto a free one. How search works is in the Claude Code sessions post.

What you need, and the limits

OffiAI reads these sessions on your Mac and has no server that would receive them. Our data statement is at offiai.app/app-data.

Try it

Download OffiAI from the release page, connect the agents you use, and start your next task from Reception.

In pictures

The lower part of Reception: the agent choice “Claude Code · 2.1.312”, the buttons “Start at a desk” and “Add to the line”, the note “Starts automatically when a desk is free”, and an In line list with one task, “Agent: Claude Code · Position 1”, “Waiting for a desk”.
“Add to the line” keeps a task waiting until a desk is free: “Position 1”, “Waiting for a desk”.
The Talk section of a Codex desk: a Codex badge, “Explain hello.sh behavior · demo-cli · Codex session”, “Idle · gpt-6.1-sol”, the review row “Reviewed · Mark done · Reopen” and the latest answer “finished”.
The Talk section of the Codex desk: its Codex badge, the review row (already “Reviewed”) and the latest answer, “finished”, which is the reply to our second demo prompt (run a command, then answer with one word).
The Archive with 7 of 7 sessions: a Claude Code session marked Delivered at Desk 4, a Codex session marked Reviewed at Desk 1, and a Claude Code session marked Done with a Reopen button.
The Archive lists Claude Code and Codex sessions together, each with its state. Sessions that still hold a desk show it; the one marked done offers Reopen.

Want to try it? Join the preview.

More