01 · YOUR TIMEMinutes from you, hours from the fleet
You talk to one agent, the coordinator. It grills you until it has every answer it needs, writes a spec, and once you approve it, the run is hands-off. From then on it only comes back for a call the spec didn’t cover. Everything else is done by short-lived agents, many at once.
youagents running at once
Agent time adds up every session from start to stop. Pauses and stretches with nobody at the keyboard are left out of every time on this page.
02 · THE WHOLE RUNOne conversation, then hands-off
OpenFleet writes every step to events.jsonl: who did what, to which repo, and when. Each unit
of work is a child, usually one repo, with its own git worktree and its own agents in turn:
a planner, an optional baseline tester, an
implementer and a tester. Press replay, or jump straight to a moment.
IN THIS RUN web is split into three children, run by their own
repo coordinator. The plans-ready gate opens at 1:49. Four children run a baseline before
any code changes (the outlined bars), and mobile waits for sdk-js, because the
spec ordered it that way.
plannerimplementertesterbaselinefailedintegration buildyoucoordinator event
Finished run, 4:28 in total. The grill and spec took 39 seconds and your approval 8 seconds. From about 0:50, all eight children planned. At 1:49 every plan agreed and the plans-ready gate opened. sdk-python and billing ran a baseline tester first, then web/app once web/setup was merged, and mobile once sdk-js was done. sdk-python’s first tester broke a baseline test at 3:15; a new implementer fixed it and the retry passed at 4:00. web’s repo coordinator merged setup, ui and app into one integration branch; its full build and tests passed there at 4:00, and web was done at 4:05. mobile started implementing at 3:27 and was done at 4:16. All six repos finished, then the coordinator finalized the run.
LATEST EVENTS
Bars are agents from start to stop; dots are file edits and test runs. Ticks on the web lane are its repo coordinator checking plans and merging children. The dashed segment is the only time the run waited on a person.
03 · PLAN BEFORE CODEEvery plan agrees before any code
Every child plans first. Each plan is checked against the spec, then against every other plan, and one that doesn’t fit is sent back. No code is written until the plans-ready gate opens. Then the coordinator starts the children in build order: a child waits in planned until what it builds on is done.
IN THIS RUN Every plan agreed at 1:49. mobile, web/app and
web/ui waited in planned for the children they build on. Watch step 5 of the build order: the
coordinator made a call the spec didn’t cover, and wrote it down for you to confirm.
plannerimplementertestercoordinator checkdone
| Child | pending | planning | plan-review | planned | baseline | implementing | testing | post-test | done |
|---|
Each cell shows how long that child spent in the phase; the highlighted cell is where it is now.
plan or contract checkedimplementer askedfailedfor youdone
04 · ONE COORDINATOROne coordinator, many repos
Agents never talk to each other. Each gets a single instruction from the coordinator, does its job in its
child’s worktree, and ends with a structured openfleet-report: a status, a summary and, if it
has one, a question. Only a question the spec can’t answer reaches you.
IN THIS RUN The coordinator runs the five single-child repos itself. For web it starts a
repo coordinator, which runs the three web children, merges them and reports back once.
plannerimplementertesterfailedyoudone
Finished run: the coordinator sent every instruction to the agents of the five single-child repos and one to web’s repo coordinator, which instructed the web children’s agents itself. You answered the grill and approved the spec at the start. All six repos are done.
05 · THE FLEETThe right model for each role
Every agent is its own session, so each role can run on its own host and model: Claude Code or Copilot CLI, a frontier model for planning, a local model on your laptop for the code. In step mode an implementer works one small step per fresh session, so a local model never holds more than it can, and a step it can’t finish goes to the fallback model.
IN THIS RUN Every role ran on Claude Code. Switch to the photo app to see three providers and a model on the laptop.
One row per role, host and model, worked out from the event log. Set each one in
openfleet.json, for example "implementer": "ollama:qwen3-coder:30b".
One bar per step, each a fresh session that sees only its own step. The laptop runs two at a time; a step the local model can’t finish moves to the Opus lane, and the job carries on from the next step.
06 · VERIFYIt checks its own work
A tester runs each child’s own checks: tests, types, lint, build, contract tests and a scope check that fails any child whose diff leaves its paths. A red check goes back to a fresh implementer with the tester’s findings, up to three times, and the tester runs again.
IN THIS RUN 193 tests. Contract tests check every consuming repo against the same rows in
account.json. Hatched cells are baselines, tests for today’s behaviour in four repos: old
callers in sdk-python, invoice totals in billing, the account page in
web/app and the offline cache in mobile. One broke in sdk-python, and
the retry passed. Then web’s repo coordinator ran all 47 web tests again on the merged branch.
own testscontract testsbaselinefailedpassed on retry
One cell per test. The ringed cell in sdk-python is the baseline test that broke on the first run and passed on the retry.
07 · WHEN SOMETHING GOES WRONGProblems stop at the child
Something always goes off plan. A plan builds past the spec, a check goes red, an agent writes outside its paths, a model gets stuck. Each is caught at the child it happened in, handled there, and logged, so one problem never spreads to the rest of the run.
IN THIS RUN Three moments went off plan. Each card replays what happened and what OpenFleet did.
08 · WHAT YOU GETTested work, merged by you
The run ends the way you chose in the grill. In draft PR mode, each repo gets one draft PR that links to the others and carries the run summary. In staged mode, the changes wait uncommitted in each worktree. Nothing merges until you do.
IN THIS RUN 427 lines across 29 files, and six draft PRs: web’s three children arrive as one PR from their integration branch. The run summary lists one assumption for you to confirm.
A file appears when its first edit is logged. The two “(retry)” rows are sdk-python’s second implementer.
REVIEW THE DRAFT PRS AND THE ASSUMPTION
gh pr list --author @me --draft
MERGE, THEN CLEAN UP
npx openfleet clean account-id --branches
FOUND A PROBLEM? PICK THE RUN BACK UP
npx openfleet resume account-id
Run it on your own repos
Three commands set up a workspace and open the grill for your change. You answer the questions once, then come back to tested work in every repo.
npm create @openfleet-tools@latest
The event types and fields follow the event log schema.