Case study
Kernel
A Mac app where Claude Code and Codex agents work on one repo at the same time, each in its own git worktree on its own branch. You brief the Lead, approve a plan, and agents build, ask before anything risky, open pull requests and wait for you to merge. It went from first commit to its ninth public release in eight days, signed, notarized and updating itself.
- Type
- Mac App · Developer Tool
- Role
- Creator, product and engineering
- Built
- October 2026 to present
- Client
- Personal · my own product
Stack
Electron 44 · React 19 · TypeScript (strict) · SQLite · Claude Agent SDK · Codex app-server · xterm.js / node-pty · Zod 4 · Vitest · Playwright · electron-builder
Why I built it
I build with Claude Code every day, and the work stopped fitting in one terminal. I would have three or four agents going on one repo, each in a different tab, and lose track of which one was waiting on me, which one had finished and which one was about to run a database migration I hadn't read.
The tools I tried either hid the agents behind their own account and server or gave me more terminals. I wanted the opposite. My own Claude plan, my own repos, plain files I could read without the app, and one screen that told me what needed me.
So Kernel treats each repo as a room and the agents in its .claude/agents folder as the team. Every status in the sidebar comes from a real Claude Code event. Nothing changes on a timer, so an idle agent looks idle.

Plan first, then hand off
Kernel is the Lead in every room. You brief it in a sentence or two, it reads the code in plan mode and comes back with a plan split into tasks, each one named for the agent that will do it. You approve it or ask for changes.
Once you approve, Kernel creates one workspace per task and hands each to the right teammate. The Lead never edits a file in this mode. Its job is to plan and hand out work through its own MCP tools, which keeps one agent from quietly doing the whole job badly.

One worktree per task
A workspace is one task. Kernel makes a git worktree on a new branch, copies in the gitignored files the app needs, gives it a free port for its dev server and runs the repo's setup script. Four agents on one repo means four branches and four ports, and none of them touch each other's files.
Inside a workspace you chat with the agent, read the diff file by file, run scripts, and open a pull request when it's ready. Checks show up in the same place. The agent fixes failing checks and answers review comments itself, using instructions Kernel fits to the repo's own PR template and contributing guide. After the merge you archive the workspace and the worktree goes away.

You stay in control
Anything that needs a decision lands in the Inbox. A command an agent wants to run, a plan to review, a question, a pull request that's ready to merge. You can approve a command once or always allow it in that room. Nothing merges by itself.
Before Claude Code runs a shell command, Kernel's guard reads it the way a shell does. Quotes, wrappers, aliases and flag order don't change the answer. Never allow rules, protected branches and the network switch hold in every permission mode, including the one that skips the questions.

Checkpoints
Kernel snapshots the worktree after every agent turn. It writes the snapshot through a private copy of git's index, so it never touches your staging area or your branch history. If a turn goes wrong, you revert to an earlier checkpoint and the files go back while the chat stays.
When you want plain Claude Code, you open a terminal tab in the workspace. It runs Claude Code in the same worktree, and Kernel still follows that session through Claude Code's hooks, so its approvals land in the same Inbox.

Key decisions
Four rules shaped the app, and each one is something a user can check.
No Kernel account, no Kernel server
Kernel runs on the Claude Code login you already have. Rooms, chats and history live in a local SQLite database. The README lists every network call the app makes, and usage data stays off until you turn it on.
Real events only
Statuses come from Claude Code and Codex events, never from a timer. Sessions started outside Kernel report through http hooks on localhost, so a session you started in your own terminal still shows up.
Plain files where possible
Agents are the subagent files Claude Code already reads, and repo settings are TOML files in the repo. Hiring or editing an agent can go out as a pull request, so the team setup works outside Kernel too.
Two providers, one engine
Each chat runs on a runner, Claude Code through the Agent SDK or Codex through its app-server. Queues, limits, approvals and plans sit above the runner, so a Codex agent and a Claude agent go through the same Inbox.
How it was built
Claude Code agents built Kernel one Linear issue at a time, working from a canvas of screen designs, with me as the Lead. Every choice someone might later want to undo is written down with its reason, which comes to more than 500 records. The repo keeps them as they were written.
Speed didn't come at the cost of the boring parts. Engine tests run against real git repos and a real hook server, and a fixture mode renders every screen from saved data, so each one can be shot and compared against its design. Releases are code signed, notarized by Apple, and rolled out to a percentage of installs before they reach everyone.
What it proves
The source is public and the app is a download away, so none of this needs taking on trust. Open the commit history and you can see a signed desktop app go from an empty repo to its ninth release in eight days.
It's also the way I work for clients. Agents do the typing, and I own the plan, the review and the merge. That's how a project ships in weeks rather than months without the code falling apart a month later.
Quarter
Rooms, meter readings and rent for a small boarding house, from a phone at the gate.
SaaS · Web App · PWA