A few words in. Agents in lanes. Reviewed PRs out.
openlanes is a software factory for your terminal. You write a short brief in spec.md; a crew of specialist agents researches, specifies, plans, builds, reviews and verifies it, until it's a set of reviewed, CI-passing pull requests. You merge. It runs on your laptop, and other machines can join the same board.
brew install A Homebrew package is on its way.
openlanes start and it opens on 127.0.0.1:11000.No database. The folder name is the state.
- Every feature is a folder under
.plans/, namedNNN.MM━━emoji━━❯slug. - When an agent finishes, openlanes renames the folder with
git mv, sogit logis the audit trail. - A folder may only claim a state its files prove.
openlanes resync dirsfixes any that lie. - Done, deferred and discarded plans move into
archive/,deferred/andabandoned/.
$ ls .plans/
How the factory is wired
A Ruby engine runs in rounds. Each round it reads every plan folder, hands each plan to the agent that owns its state, and stops when a full round changes nothing. Hover or tab through the map.
Engine
Lines show who talks to whom.
From a brief to ready-to-merge
Each state belongs to one agent. It does its job, then the folder is renamed to the next state. Nothing merges automatically.
- Newleah-researcher
- Researchedyoda-writer
- Ready for planningluthen-rael-planner
- Plannedluke-backend
- Buildingluke + rey-frontend
- Ready for reviewharness opens PR
- In reviewhansolo-reviewer
- Verifyingchewie-verifier
- Approved & mergedYou merge
Blocked
A question only a person can answer goes into blocked.md. lando-broker folds your answer back in.
Changes requested
hansolo or chewie sends the plan back to the builders with what failed.
Bomb
A block left too long while other plans wait on it halts the run until someone answers.
Stuck rebase
bb8-resolver resolves a rebase onto main that stopped, and never moves a plan.
Choose where each plan starts
Not every change needs a researcher. starts: takes one of three values: set a default in .openlanes.yml and override it in any plan's spec.md frontmatter.
- researcher
- writer
- planner
- backend + frontend
- reviewer
- verifier
- planner
- backend + frontend
- reviewer
- verifier
- mechanic
- reviewer
- verifier
Settings resolve in this order: a typed flag, then spec.md frontmatter, then .openlanes.yml, then the built-in default. openlanes create --starts building split big migration skips straight to the mechanic.
Watch it work, step in when asked
openlanes start boots the engine and the control room together. Clone the project on a second machine, point it at the same Redis, and both work the same board.
- Swim lanesEach row is a plan, coloured by where it starts, with its tokens and the agent working it right now.
- Message an agentSwitch its model or write to it; it reads your note at its next step.
- Chat with the copilotAsk it anything about the board while plans build. Type
/stop 004,/restart 004or/concurrency 6in the same box to steer the run. - Needs YouAnswer blocks on the page instead of editing
blocked.md. - All machinesRemote nodes show up read-only, each on its own plans.
- Stop All LocalThe off switch for every local agent and the page.
Start on one laptop. Grow a cluster.
openlanes runs entirely on your machine. Start it on a second one with the same repository and the same REDIS_URL, and the two become nodes of one cluster with one board. Redis is the only wire between them.
- Your laptop
openlanes startPlans 001, 004 - Desktop
REDIS_URL=… openlanes startPlans 002, 005 - Build box
REDIS_URL=… openlanes startPlan 003
- Local firstOne machine is a complete factory. Nothing to host, no account to make.
- Join, don't configureSame repo, same Redis. The new node shows up under All machines.
- Each node owns its plansA node builds the plans it claimed; the others show them read-only.
Agents write code. They don't ship it.
The autonomy boundary is enforced by the harness, not by asking nicely in a prompt.
- No commits, no pushes
Agents never run
git commit,git pushorgh pr merge. Web access is off unless an agent declares it. - Checked after every agent
The harness confirms
HEADdidn't move and no remote ref was pushed, then publishes the branch itself. - Verified, not just reviewed
chewie-verifier starts the app and walks the plan's How to test before anything is labelled ready.
- Survives a lost Redis
Agents pause, Redis is retried with jittered backoff, and work resumes from whichever state copy is newer.
The crew
Each agent runs on the model its job needs. Read any definition with openlanes describe <name>, and change its model per phase in spec.md.
- leah-researcher
Researches a new idea across many sources.
haiku / medium - yoda-writer
Turns research into a full spec.
sonnet / medium - luthen-rael-planner
Splits the spec into work units built in parallel.
opus / high - luke-backend
Builds data, domain and API, with tests.
opus / high - rey-frontend
Builds the interface on top of that API.
sonnet / medium - r2d2-mechanic
Builds plans that start at building, on its own.
haiku / medium - hansolo-reviewer
Checks the pull request against what the spec asked for.
sonnet / high - chewie-verifier
Runs the app through the plan's How to test.
sonnet / medium - lando-broker
Folds your answers back into the plan.
haiku / low - bb8-resolver
Resolves a rebase onto main that stopped.
sonnet / high - c3po-operator
The control room's copilot: chat with it about the board.
haiku / low
Opus: planning and back endSonnet: writing, UI, reviewHaiku: research and paperwork
Still being built, in the open
openlanes builds itself: most of its recent pull requests went through its own lanes. Expect sharp edges and fast releases.
- Shipped
3.1.0 on RubyGems
Plan folders, the three starts, the crew, blocks, and the control room.
- On main
4.0
chewie-verifier, multi-machine boards, the progress journal and Redis outage recovery.
- Next
Homebrew package
One
brew install, no Ruby setup to think about. - Soon
A video walkthrough
A real run, from a brief to a merged pull request.
Try it today
Install the gem now. When the Homebrew package lands, it'll be the easy way in. Watch the repo to hear about it first.
Installs the gem and its three names for one executable:
openlanes,lanesandol, plusagent-lock, which lets several agents share one checkout without overwriting each other. Needs Ruby 3 or newer.Makes your shell notice the new
olon yourPATH.Installs what's missing with Homebrew, then checks the
claudeCLI,gh authand Redis. Add-nto see the list first.Run it inside your repository. Writes
.openlanes.ymland creates.plans/.Starts the engine and the control room together, with up to 8 agents working at once. The board opens on
127.0.0.1:11000.
Then, day to day
- ol create
- Starts the next numbered plan from a few words and opens its
spec.md. - ol run -n
- Shows which agent would take which plan, changing nothing.
- ol start
- Engine plus control room, until Stop All Local or Ctrl-C.
- ol status
- Every open plan, its state and its pull requests.
- ol unblock
- Folds answers from
blocked.mdback into the plan.
brew install Coming soon.

