Agent factory
Hand work to cloud coding agents and keep every change reviewable. Four planes, five tools and a team harness repo, for a team of six running about sixty agent sessions.
Sixty agents at once breaks the way a team works
Six engineers, about ten streams each. Nobody can watch them all.
Every change still needs a human. Reviewers become the bottleneck.
A new skill or prompt is judged by impressions, not paired runs.
Ticket text and web pages can steer an agent toward a push.
Four planes, one loop, one gate
A Jira ticket to a merged PR
Twenty-six agents. Five need you.
Needs you is the console's first tab: held tool calls and questions, one decision at a time, soonest to expire on top.
- Decide and the next one rises; the agent continues the moment you do.
- A deny needs a reason. It goes on the receipt and back to the agent.

Review the change, reply to the agent
A job's detail carries the agent's summary, a composer and the change as a greyscale diff. Your reply runs the next turn; the PR updates.
- +5 −1 across 2 files, against the base commit, from the sandbox.
- Only a failing test lights a hunk; additions and deletions stay grey.

The whole fleet, one row per agent
List and Board are two views of the same agents. 25 of 120 slots in use.
- Each row shows what the agent is doing now, its owner and its stage: plan, edit, test, PR.
- Open an agent in place to decide what it holds without leaving the Fleet.

Change the harness on evidence, not impressions
- Change a skill, hook or plugin in the harness
- Freeze a good run into harness.lock
- Experiment: stable against candidate, paired
- Report the verdict with intervals on the PR
- Promote: move stable; drift checks guard it
The verdict lands on the harness PR
flightdeck posts one comment on the pull request that changes the harness and updates it in place: the verdict, both variants' pins, the outcome and its interval.
- Candidate is better than control on resolved: +21.2 pp, CI +1.5 to +43.9.
- Paired by task; infrastructure failures are excluded and listed.

Risky actions fail closed and leave a receipt
Reading a web page, a remote MCP server or a ticket marks the run.
Sandboxes can't push. hangar delivers one commit through its gateway.
Release, landing, egress and secrets go to Tower: allow, deny or wait.
The requester never approves their own risky work. Every decision is signed.
The Desk: what needs you, what finished, who you approve for
Tower's home for a person: start work, approve or deny the cards that need you, and see the day's receipts.
- Each card says what will run, why it asked and what approving does.
- Every decision files a receipt, chained into the record.

Business objects by reference
A Jira issue, a pull request, a hangar job: each is a chip, and each chip opens a page with what touched it and what is in play.
- Tower keeps a reference, never a copy; title and state are read from the source.
- The receipt carries the reference, hashed into the chain.

One design system, every screen
Airframe holds the parts a person needs to work with an agent: approval card, question, composer, diff, object chips. Every screen in this deck is built from it.
- Tokens and af- classes only; a test in each repo fails on a color literal.
- Night and Day, forced colors and reduced motion, in one stylesheet.

Running and measured today, governed next
Safe to run
- Sandboxes, jobs and sessions on GKE
- Intake posture, taint gates, sealed graders
- Manifests and traces with harness digests
- flightdeck data plane and statistics
Measure everything
- Harness lock: freeze, check, thaw
- Run outbox and nightly compactor
- Reports, behavior specs, pinned trials
- Slack inbox, Tower's decision API
Governed and decided
- Tower decisions in shadow, then enforce
- One real flightdeck decision
- Team harness, frozen from a good run
- Outbox and compactor on in the cluster