Operator · a macOS app for Claude Code
You run the agents.
Work a project by deciding what its agents do. Tune each lane's model and effort so the plan runs close to its limit and never past it.
A living tool: built for the way I run Claude Code all day, changed whenever that changes. Public in case it resembles your setup.
Orchestrating01 – 03
Staff the project once, then work the board
project homeEach lane pins a model, an effort level, and permissions, so a correctly configured session is one click. The card is the task, the agent is a chip on it, and Waiting is the column that needs you. Finishing runs the project's check command, so done can read done and green. A task whose lane vanished reads abandoned: nobody saw the work finish.
Hand work between agents, on the record
the comms logdev/briefs/tray.md.dev/briefs/reply-impl.md.One agent routes a task to another and every hop lands here with its outcome on a chip. A dispatch from a lane that is not the coordinator is held until you approve it, chains brake themselves, and nothing retries. It is a record, not a mailbox: you open it when something looks wrong.
Run agents in parallel without collisions
one worktree per taskOne git worktree per task, so parallel agents never share a checkout and nothing touches your working tree until you say so. Fan-out sends the same prompt to N of them at once; you read the diffs side by side and keep one.
Tuning04 – 06
Set the model and the effort per agent
your .claude/agentsHaiku for extraction, Sonnet for the everyday, Opus where it earns its keep, and effort from low to max beside it. These two knobs decide what a lane spends, set where you say what the agent is for. Hover a lane and the card shows the model and effort it is actually running beside the ones you asked for.
Run close to the limit, never past it
the readingSession, week, and the model with its own cap, each with when it resets. Amber means tune the lanes down; headroom means turn one up. A timed-out read says no data, never 0%.
Review the diff and land it in place
local onlyWhat the tokens bought comes back as a diff you read in place, then commit, merge, or discard without leaving the window.
Scope
Operator hosts Claude Code's own CLI over a pty and reads the transcripts it writes. Everything above follows from that, including the parts it will not do.
| Behaviour | Status | Why |
|---|---|---|
| Stop an agent mid-run | does | Send becomes Stop. That is Claude Code's own interrupt, not a kill: the session survives and hands the turn back. |
| Set a lane's effort | does | Passed as --effort at launch, all five levels. settings.json keeps four and drops the fifth without a word, so Operator never writes it there. |
| Push a message into a busy lane | leaves alone | One submit queue per terminal. A mid-turn message rides the lane's own queue and is read at the turn boundary. |
| Let two agents talk forever | leaves alone | A reply chain with no human in it hits a hop limit, and a pair sending too fast is suspended. |
| Host the model, or send anything to a server | leaves alone | It runs the CLI you already have, on your auth, and reads the transcripts it writes. No upload, no telemetry, no account. The code is public, so this row is checkable. |
| Estimate what a session cost | leaves alone | Tokens are measurable. Dollars depend on your plan. |
Why it exists
I use Operator to work on projects. I decide what the agents do, hand work between them, and read the diff before it lands. Most of all I tune the model and the effort of every lane so the plan runs close to its limits without reaching them: cheap models where the work is mechanical, high effort only where it pays.
It is a living tool, not a product. It changes whenever the way I work changes: no roadmap, no support queue, no telemetry, no account. The source is MIT, so if it is close but not quite right for you, it is yours to change.
Operator, standing by.
Free. A living tool for the Claude Code sessions you already run.