Fork a Claude Code session and spwn branches the conversation and the code together — explore several approaches at once, each on its own git branch with its own live environment, and merge the one that worked.
Claude Code is a single conversation in a single terminal. Real work isn’t linear:
you want to try an idea one way, back out, try it another, run a few agents at once, and
keep whichever result is best. Doing that by hand means juggling git worktrees, terminal
tabs, and copy-pasted context — and losing running work every time a window closes.
spwn is a native macOS app built around two ideas. When you fork a session it
branches the conversation and the code together, so exploration is cheap and every
branch runs in isolation. And a per-session hook system lets each branch stand up its
own environment — a dev server, a seeded database, containers — and tear it down when the
session is gone.
A single conversation is a straight line; real work isn’t. Fork any session and
spwn branches the conversation and the code in one gesture — the child inherits
the full history and gets its own git branch in its own worktree, forked from the
parent’s. The original keeps running, untouched. Explore many branches cheaply, then
merge back only what worked — with a click or plain git merge. Or use the
Timeline to rewind a session to an earlier turn: conversation, files, or both.
⚓ The hook system
Each session lives on its own branch in its own worktree, so it’s the natural unit
for per-session setup and teardown. spwn does this the unix way: one shell script
per lifecycle event (session-created, session-ready, session-turn,
session-deleted), with the session’s details injected as SPWN_* env vars. Start a
dev server, seed a DB, copy secrets, clean up on delete. spwn even runs on its own
hooks — worktree management, per-turn commits, and checkpoints ship as default
scripts you can read, extend, or delete.
Every session gets its own git branch and worktree. Launch several at once on
different approaches — one refactor, one experiment, one bug hunt — and none of them
touches the others or your project folder. Switching tabs is a pure focus change.
Build from the first second
Each new workspace is copy-on-write seeded with your heavy folders
(node_modules, target, dist, …), so an agent can build, test, and run
immediately — no cold reinstall in every branch.
Merge only what worked
Each session commits its work as it goes. When one produces something you want,
merge its branch back with a click — or with plain git. Nothing lands
automatically; you decide what and when.
Merge tray
Collect notes, files, and the best turns from any session into a per-project
tray, then Inject them as the first message of a fresh session — so you start
primed instead of cold.
Scheduled tasks
Have Claude run a read-only task on a schedule — a daily status report, a nightly
review — reusing the project’s Merge tray. Results wait as ready-to-read sessions.
Survives restarts
Quit spwn, reopen it, and every session is right where you left it, running programs
and all — a clean, scrollable conversation on one side and full Claude Code on the other.