Whatever coding agents you run, however many of them,all at once.

Built around the terminal, and tied to no model or harness. The terminal, the browser and the simulator are all made to be used by a human and driven by an agent. You get told when an agent needs you, and left alone when none of them do.

Synth with three projects in the
             sidebar, Claude Code on the left and the live website in a browser pane on the right.

No agent to commit to.

Whichever agent is best this month is unlikely to be the one that's best next month. Synth detects what you already have installed and integrates with them all, so a new model or a new harness is something you adopt rather than something you migrate to.

Claude Code
OpenCode
Antigravity
Your own

Install it and it just works

You don't point Synth at anything or configure individual agents. What you have installed is what shows up, and it keeps up on its own when that changes.

Your agent gets abilities it didn't have before

Every agent gets the same tools, including a real browser and a booted iPhone it can drive. You don't wire that up, and you don't wire it up again for the next one.

Change agent, keep everything else

Your keys, your layout and everything you have open are all the same afterwards. The only difference is which agent is running inside them. Next month you can change your mind again.

Many things at once, orchestrated.

Work is organised by project and by branch, each with its own code and its own sessions running inside it. Agents can hand off work to other branches, so however much is in flight, it stays one list you can take in at a glance.

Set up before you get there

Your setup script runs in every new branch: copy the .env across, install dependencies, whatever the new copy needs. The sessions you always want are open by the time you look at it.

You never put anything down

The other branch is already on disk exactly as you left it, sessions and all, so you click it and carry on where you stopped. Nothing to stash and nothing to check out.

The list only shows live work

Once a branch is merged and clean, Synth archives it and reclaims the folder, so what you glance at is what is still going on. The row comes back from ⌘K whenever you want it.

You'll know which agent needs you.

Every session has a state, whether it's an agent mid-turn or a terminal running a build. Synth notifies you when one needs you, a question or a failure. Everything else, working or running or finished, you read at a glance.

?Waiting on you. An agent has stopped and asked a question.
!Failed. Something ended badly and nobody has looked.
Alive. An agent is working. It doesn't want anything.
Running. A process is up. Also doesn't want anything.
Finished. A process ran to the end without a problem.
Synth's sidebar: three projects, each branch carrying the state of what is inside it, and a notification card for the session that has stopped to ask something.

Working or waiting, you can tell

An agent thinking and an agent stuck waiting for you look identical in a terminal. In Synth the one waiting is marked in the sidebar, so you can see it without opening anything.

⌘↩ takes you straight to it

Get to whatever agent or terminal needs you most with a single motion. Keeping you in flow state for longer and allowing you to unblock work quicker.

GitHub state, without opening GitHub

Each branch shows its pull request beside it, whether that's open, merged, closed or in the merge queue.

Your agent can do more than write code.

It can open your app in a real browser, tap through it on a booted iPhone, and start a new branch when work belongs elsewhere. You can watch any of it, and take over whenever you like.

Synth's browser pane showing this landing page, with two comments pinned on it and the send bar ready to hand them to an agent.

A real browser you can both use

The agent opens your app in a real browser window and clicks, types and scrolls through it. You can use the same window, click any element to leave a note, and send your comments over together.

From that window it can also read the console and the network, throttle the connection to see the page on a slow one, and record the run as a video rather than describing it afterwards.

Synth's simulator pane showing this landing page's mobile layout on a booted iPhone 16 Pro.

A real iPhone, not a preview

Boot one from the fleet you already have installed, then tap, type and swipe into it. The agent uses the same screen you are looking at, and can install a build, launch it, open a URL or turn the device on its side.

Synth reads the device's screen directly instead of opening Simulator.app, so the session keeps working when that window would have been minimised, on another Space, or closed by Xcode entirely.

Synth's command menu asking whether to create the branch an agent has requested.

You approve it. You don't brief it.

When work belongs somewhere else, the agent writes the brief and asks for a branch of its own. You see the project, the base and what it means to do; one click makes it and starts an agent inside that already knows what it is there for.

The alternative is stopping what you're doing, making the branch yourself, and typing the context out again.

Looking should cost nothing.

The terminal is libghostty, drawn on the GPU. The application is Swift, not Electron. ⌘K, then ⌘T, then ⌘1, one after another, and it keeps up.

A tree you glance at only works if glancing is free. The moment checking costs you something you stop doing it, and you're back to going and looking.

⌘KEverything, scoped to whatever you have focused
⌘TNew terminal, here
⌘⇧TA scratch shell for the errand, gone when you dismiss it
⌘0⌘1Sidebar, session
⌘↩Go to whatever is at the front of the deck

Try it on your own repositories.

Free · macOS 14 or later · Apple silicon · signed and notarised