Open source · MITmacOS

Claude Code and Codex,
in one window.

Carbon is a desktop app for both coding agents, running on the subscriptions you already pay for. Plan with one model, build with another, watch it work in a built-in browser, and review the diff without leaving the conversation.

Free foreverMIT — fork itBring your own subscriptionNo API key
Carbon running Opus 5 on high effort in Auto mode: the conversation on the left has just edited four files, and the built-in browser on the right is rendering the landing page it produced

One prompt, one turn — the agent wrote the page on the left, the built-in browser is rendering it on the right.

01 · Two providers

Both agents. Your own subscriptions.

Carbon drives the Claude Agent SDK and the Codex SDK, which drive the same CLIs you already signed into. Your Claude plan and your ChatGPT plan, in one picker. No API key, no metered billing, nothing new to pay for — and a chat you start here lands in the same session logs as a terminal one.

  • Reuses your existing claude and codex logins.
  • Switch provider mid-conversation — the outgoing model writes a brief the incoming one picks up.
  • Reasoning effort and speed per model, changed live without losing the thread.
Carbon's model picker: a Claude Code group listing Opus 5, Fable 5, Sonnet 5 and Haiku 4.5, a Codex group listing GPT-5.6 Sol, and reasoning and speed rows beneath
Carbon's plan review panel awaiting approval, with the Build with picker open showing Claude and Codex models together, an effort control, and an Approve plan button
02 · Plan → build

Plan with one model. Build with another.

Plan mode keeps the agent read-only until it hands you a written plan. Read it in the side panel, ask for changes, and when you approve, choose who implements it — the same model, a cheaper one, or a model from the other provider entirely.

Carbon tears down the review, switches backends and hands the plan across verbatim. The plan is the artifact; nothing gets lost in translation.

03 · See it, then ship it

A browser and a diff, both in the window.

Carbon starts your dev server and renders the result next to the conversation — and it can hand a screenshot straight back to the agent, so “the spacing is off” becomes something it can actually see. When you're happy, the review pane carries a commit → push → gh pr create ladder that already knows which rung you're on.

  • A real browser pane — it starts the dev server and reloads itself.
  • A diff chip per turn, and an Undo for the edits that turn made.
  • Commit, push and open the PR without touching a terminal.
Carbon's review pane: a syntax-highlighted working-tree diff, a staged and changed file list with per-file line counts, and a Publish to GitHub button
04 · Appearance

Six themes, authored twice.

Carbon, Obsidian, Ember, Tide, Moss and Iris — each one drawn for light and dark separately rather than auto-inverted, so light mode is a design and not an afterthought. Frost the sidebar and the desktop blurs through behind it.

Carbon's Appearance settings: a Dark, Light and System mode switch above a grid of six theme cards — Carbon, Obsidian, Ember, Tide, Moss and Iris — each previewing its light and dark halves
Carbon's edit summary card and composer in dark mode
Dark
The same edit summary card and composer in light mode
Light
The rest

Everything else in the window.

The unglamorous parts that make a tool something you keep open all day.

Parallel git worktrees

Point a chat at a new worktree and it gets its own branch and directory. Several agents, no collisions.

Checkpoint and rewind

Jump the conversation back to any message, take a different path, and the files come with it.

Files, editor, terminal

A file tree, a real editor, and a real PTY terminal in the same window as the chat.

Usage and rate limits

Plan headroom in the sidebar, plus a spend breakdown by provider, model, and day.

MCP server status

See which of your configured MCP servers actually connected, and which quietly didn't.

History that survives

Every chat persists to SQLite and resumes exactly where it left off after a restart.

Install

One line, then it's yours.

Carbon ships through its own Homebrew tap. The cask clears the quarantine flag on the way in, so there's no Gatekeeper detour — and it's the route that upgrades in place.

Requires macOS and Node 24+Plus a claude or codex login you can already use
Install
brew install --cask achour/carbon/carbon
Upgrade
brew update && brew upgrade --cask carbon

The brew update is load-bearing: Homebrew only re-pulls a tap once a day, so a bare upgrade can read a stale cask and tell you you're already current. Carbon notices when it was installed this way and shows you the upgrade command in-app when a release lands.

Prefer to build it? It's four commands in theREADME — and an app you compiled yourself never meets Gatekeeper at all.

Under the hood

One contract, three layers.

Both providers live in the Electron main process and normalize into a single event stream, so the UI never knows which agent it's talking to. Chats persist to SQLite with incremental, windowed writes — which is why a 36 MB conversation still opens instantly.

ElectronReact 19TypeScriptTailwind v4Base UInode:sqliteClaude Agent SDKCodex SDK

Built to be read

No telemetry, no accounts, nothing phoning home. The repo documents its own invariants — persistence, session flow, worktree design — for the humans and the agents working in it.

macOS only, for now

The build config and the update check already handle Windows and Linux artifacts. Nobody has tested them — so if that's your machine, the repo is open.

MIT licence

Fork it. Do whatever you want with it.

Carbon is fully open source. Read it, change it, ship your own build, use it at work, put it in a product you charge for. Keep the licence notice and that's the only string attached — no CLA, no open-core tier, no telemetry, nothing held back.

brew install --cask achour/carbon/carbon