Skip to main content

On the drawing boardStatus: Designing. Designed, or being designed, and not yet built.

Every project’s status →

01.14Agent coding pipeline

AI software factory: coding agents with gates

AR Labs' design for an AI software factory: coding agents take tasks from the task graph to merged code through gates, while a person orders and merges.

Rows of aircraft fuselages on a long factory assembly line, early 1940s
On this page
  1. What it is for
  2. Coding Planner today
  3. How the factory would work
  4. What the research found
  5. What exists today

A software factory, as AR Labs uses the term, is coding work flowing through many coding agents at once (AI agents that write code, such as Claude Code or Codex): tasks are dispatched, built in isolation, checked, reviewed and merged, while a person sets the order and steers from a high-level view instead of reading agent transcripts. This project is our design for getting our own coding work to run that way, written for engineers weighing how far to parallelise agent coding. It builds on Coding Planner, the tooling for our coding pipeline (the route every code change takes: spec, test-first build, second-model review, a person's merge), which today takes a task to merged code one agent at a time. It also builds on the terminal and browser views of VOX OS, our design for an operating layer over agent work. Most of the factory is designed rather than built.

What it is for

The target is a working routine for the person supervising the work:

  • see the projects that are active and, within each, the priority next actions;
  • launch those next actions at an orchestrator that farms them out to suitable agents, on the laptop or a server;
  • see the context around each action and the wider network of work it sits in;
  • give rulings, approvals and steering where each is due;
  • customise the order of work, including across projects.

Four parts deliver it. Taskgraph works out the order and the next actions. VOX Torch in the terminal and Vox Canvas in the browser show them and take the person's input. Coding Planner runs the work.

Coding Planner today

We track work in Beads, Steve Yegge's open-source issue tracker for coding agents, where each tracked task is a bead. A campaign is work planned in one PRP (product requirement prompt, a plan agents build from) and split into a tree of tasks under a parent bead, which the pipeline works through as one effort. Coding Planner keeps each bead's position in its route as metadata on the bead, and a stateless driver reads the tree and does whatever the recorded state says is next, starting a fresh agent session for each step. Its review step runs on a second model family, OpenAI's Codex, so that the reviewer is independent of the agent that wrote the code. Sibling tasks that touch the same files are serialised. The pipeline has run unattended, including overnight and headless through implementation.

It runs one agent at a time and waits for that agent to finish, so nothing runs in parallel. That is a deliberate choice: we add parallel agents only as fast as we can trust their output, and a person merges to the main branch.

Each task carries an autonomy level that sets which human gates the driver may pass on its own. At the default level the spec approval is relaxed: the driver moves a task past its spec and build gates without waiting for a person, while every machine check still runs and a failed review gets one automatic fix round. The firm human decision point is the merge to main. A person can instead choose a level that asks before each gate, or one that holds the task until they act.

How the factory would work

The figure separates what runs today from the design. Today one lane runs at a time, each bead going through spec, build, review and land; the three queues, the parallel lanes and the serial integrator, drawn dashed, are designed. Whichever lane a bead takes, a person merges to main.

Beads feeds Taskgraph, which sorts work into agent, shaping and human queues; lanes of spec, build, review and land; a designed serial integrator passes branches to a person who merges. Beads holds the task graph. Taskgraph reads it and orders the work. In the design, the work is sorted into three queues: one for agents, one for things that wait on a person (specs, rulings, reviews, merges) and one for shaping. A stateless driver claims ready work from the agent queue and runs each bead through the leaf route: spec, implement, cross-model review and deliver. Today one lane runs at a time; the design adds parallel lanes, each in its own worktree, and a serial integrator that rebases, re-checks and lands or parks each branch. Every step writes its result back to the bead. A person rules on and approves what waits in the human queue and merges to main. Spec and implement wait for a person unless the autonomy level lets an agent pass; review is a fully automated check by a model from a different family; deliver checks that the reviewed commit is on the target branch. Software factory: the loop and its gates BUILT TODAY: ONE AGENT AT A TIME · DESIGNED: QUEUES, PARALLEL LANES AND A SERIAL INTEGRATOR FIGURE SOFTWARE FACTORY LOOP DRAWN BY AR LABS SHEET 1 / 1 Beads [task graph] Tasks, edges, each bead's route state Taskgraph [built] Orders work, finds next actions THREE QUEUES Agent queue Ready for an agent Shaping queue Needs scoping first Human queue Specs, rulings, reviews, merges SPEC BUILD REVIEW LAND SPEC BUILD REVIEW LAND SPEC BUILD REVIEW LAND ONE LANE PER BEAD built: one at a time designed: in parallel, own worktrees Serial integrator [designed] Rebases each branch, re-checks it, then lands it or parks it Person [Person] Rules, approves, and merges to main GATES ON EVERY LANE Spec and build wait for a person, unless the bead's autonomy level lets an agent pass. Review a model from a different family checks four axes; the reviewed commit must be the head. Land a script confirms the reviewed commit is on the target branch. A review that fails gets one fix round; a second failure is parked for a person. reads sorts claims branches branch ready to merge answers every step writes its result back to the bead
Built today, one lane at a time; designed, queues, parallel lanes and a serial integrator, with a person merging to main.

Queues and sequencing. Beads already has queue mechanics: listing everything with no open blockers, claiming the first match atomically, sorting and filtering. What a backlog lacks is order. The design sequences work at four levels. Within a line of work, order comes from blocking edges, and Taskgraph derives it. Within a pathway, a custom ordered set of beads drawn from anywhere in the tree, the order is stored with the pathway and never becomes a false dependency. Across lines of work, each line gets a recorded focus (primary, secondary or parked) set at the weekly review. Per consumer, three derived lanes: an agent lane of ready, approved work marked safe to run unattended; a human lane of specs to approve, rulings, reviews and merges; and a shaping lane of work not yet workable.

Launch phases. Agents run inside tmux, and any window tool is only a view onto them, so agents stay reachable by hand if the window tool fails. Agents launch locally first, then on a server where they keep running when the laptop is closed, then either from one view.

Concurrency. Our gap analysis, described below, found that the driver has no representation of work in flight: it claims a task, waits while the agent runs, and releases the claim, so a task being worked and an untouched one look identical between passes. The recommended shape extends Coding Planner rather than adding a second state store. In stages: non-blocking dispatch that holds the claim through Beads' own atomic claim and records a crashed attempt; a pool of pre-warmed worktrees (separate checkouts of the repository, one per agent) with fencing, a guard that stops a stale clean-up from deleting later work; and one serial integrator that rebases, re-runs the declared checks and lands work or parks a mergeable branch for the person. The design is built for five to ten agents and run at two or three until measurements justify more.

What the research found

In September 2026 we surveyed the field. It splits into session managers, orchestrators that run agent teams over a task graph, pipeline factories, and in-house factories at large companies that publish designs but not code. No single tool was a complete factory. Throughput is limited by verification, review and merging, not by the number of agents, and nearly every production factory keeps a person at the merge.

A gap analysis then measured Coding Planner against that practice on five dimensions: ceremony and time, tokens and cost, concurrency, observability, and portability across agent runtimes. Its overall finding was that the planner's design is closer to current practice than we had assumed: it already has intent at every level in the bead tree, a sequence per level in its pipeline manifest, and a driver that decides purely from recorded state. What it lacked was mostly connective tissue. The executor discarded the session id, model and log path of each agent it ran, so nothing could join work to cost or duration, and nothing rendered the campaign state the driver already computed. Recording those facts on the bead and rendering them is the first step, and it is what VOX Torch is built to show.

We also studied OpenRig and other open-source orchestrators, recording which of their ideas to adopt, adapt or leave. We chose not to adopt persistent agent seats for pipeline roles, because a fresh session per step keeps each decision a function of recorded state and keeps the reviewer independent.

What exists today

Built: Coding Planner as a single-agent pipeline; Taskgraph; VOX Torch as a read-only view with a sequenced kanban per line of work; Vox Canvas's map mode; and gc-torch for watching Gas City, Steve Yegge's public agent orchestrator, which we run as a separate experiment on real coding work. Designed: the queue screen, dispatch from Torch, recording session, model and cost on each task, the worker pool and the serial integrator. We do not run a hands-off autonomous factory.