A git worktree + an isolated Docker stack per branch. Run many branches — or many coding agents — in parallel on one machine, each with its own database, ports, and data.
Stack-agnostic — your app runs natively, the way it always has. Requires git and Docker.
Work on a feature, get pulled onto a hotfix, and suddenly you're juggling one shared Postgres — migrating it back and forth, wiping data, fighting over port 5432. Running two branches at once is basically off the table.
Via git worktree, each branch lives in its own directory. Switching branches is switching folders.
A separate docker compose project per branch — own containers, own volumes, a free host port picked for you.
Steckling writes the right DATABASE_URL into a gitignored file your app reads, then runs your normal dev command.
Steckling never runs your app for you and knows nothing about your framework. It works for any language that reads its config from the environment. Read the concepts →
Isolation is what makes agentic coding parallel. Point a separate Claude session at each worktree — every session gets a database, ports, and data that belong to it alone. Agents can migrate, seed, and break things freely; nothing leaks across branches.
Merged a branch? steck prune reclaims the whole stack; add --purge to remove the worktree folder and branch too. Want agents to manage the fleet themselves? steck mcp →
Run steck init and the wizard writes both files (plus the .gitignore entry) for you — presets for Postgres, MySQL, Redis, Mongo, and RabbitMQ, and your detected run command. Or add them by hand: a services compose file and a steckling.yml. That's the whole integration.
Full walkthrough → Quickstart · already have a project? → Adopting an existing project
steck initSet up a repo interactively — service presets, detected run command, both config files written for yousteck new <branch>Create a worktree + allocate its service portssteck exec -- <cmd>Run a command wired to this branch's envsteck upServices up, provision on first boot, run the appsteck cockpitCockpit TUI: app pane + live service logs, per branch (via mprocs) — quit stops the services (--keep-up to leave running)steck rm / pruneReclaim a branch's stack / bulk-reclaim merged ones (--purge: folder + branch too)steck downStop the containers, keep the datasteck deployShip this branch's agent to Railwaysteck list / statusWhat's registered, running, and on which portssteck mcpRun the MCP server so Claude can drive the fleetsteck doctor / configCheck the environment / validate steckling.ymlsteck logs / destroyTail or tear down the deployed agentFull reference → Commands
steck mcp exposes the fleet to AI agents as MCP tools, plus a live registry resource. Because branches are fully isolated, you can point a separate Claude session at each one and let them work in parallel.
Plays well with your ticket tracker. Steckling can parse a ticket ID out of your branch name (tim/eng-123-fix-login → ENG-123), remember it, show it in steck list, inject it into every hook as $STECKLING_TICKET, and expose it over MCP — so “one ticket, one branch, one isolated stack, one agent” is a config block, not a platform.
Isolated worktree + Docker stack per git branch, with auto ports and env injection.