Athanor · the OpsFox software factory

Athanor.

The software factory. Agents build, other agents attack the work, and a person makes the calls that matter.

An athanor is the alchemist's slow furnace, built to hold a steady heat for days so the work goes on while nobody tends it. Ours builds software. Agents do the typing. People do the deciding.

The build wallboard: a dark single-screen dashboard with tiles for stories done and in flight, a ring gauge of progress, merges per day, the stories being worked on now with a five-stage tracker, the build queue, open pull requests with their review findings, and a story matrix.
The wallboardWatching the factory's first product, Sentinel. One Python file, standard library only, writes this page every 60 seconds.
  1. A person sets the direction.

    Taste, approvals, and every call that carries security, money, law or taste risk. Agents are fast and tireless. They are not accountable.

  2. One orchestrator directs.

    A long-lived Claude session picks the next story, starts and prompts every other agent, opens the pull requests and merges on the gate. It never writes product code.

  3. Builders build.

    BMAD personas write the PRD, the architecture and the stories. A developer agent takes one story on its own branch, in its own worktree, tests first. It commits. It never pushes.

  4. Critics attack.

    Code, security and QA review every story in three separate sessions. None of them saw the builder's reasoning. Then CI runs on machines the agents can't touch. One reviewer anchors on the builder's framing. Three find different things.

One story, start to finish
  1. build
  2. commit on story/N.M-slug
  3. pull request into dev
  4. three reports
  5. fix rounds
  6. Open findings: 0
  7. check green
  8. merge
  1. An agent builds it.

    One story, one branch, its own worktree. Tests first. Agents commit. They never push.

  2. Three critics attack it.

    Code, security and QA. Three separate sessions. They recheck every fix until all three say Open findings: 0.

  3. Then it waits for you.

    Routine work merges once the critics sign off. This one is a security call. A call on security, money, law or taste waits for a person.

  4. You decided. It went through.

    AI proposes. We decide. An agent can pass on a yes. It can't give one.

Scrolling won't move it.

On a normal day.

Most changes never wait for anyone. The ones that matter always do.

fix rounds
The developer fixes every finding and writes a fix log. Each reviewer rechecks and appends what it found. Up to four rounds.
routine merges
When all three reports read Open findings: 0 and the fast check is green, the merge into dev runs on its own.
promotion
Every two hours, if dev is ahead, a promotion pull request runs the full pipeline on a separate machine. main moves only if all of it is green.
what code can't close
An environment limit or a design trade-off goes to a person with a default. The decision goes in the story, with the date, before the merge.

Watch it work.

Every agent lives in a pane you can open. Its chat says what it thinks it did. lazygit, one tab over, shows what it did.

A Herdr terminal window. Left, a sidebar listing workspaces and agents with status dots. Across the top, tabs for the shell, lazygit and three reviewers. In the centre, a developer agent's transcript: a test diff, shell commands, notes on a rebase onto dev, and its one-line reply. At the bottom, a status line with model, context and usage.
HerdrThe workspace for story 4.7, a minute after its developer agent finished a rebase onto dev. Herdr is a terminal multiplexer built for running many coding agents at once, with an API the orchestrator scripts.
  1. spacesEvery workspace, each on its own worktree and branch, with its ahead and behind count.
  2. agentsEvery named Claude session and its status: working, idle or done.
  3. tabsThe shell, lazygit and three reviewers. Three separate sessions, not three prompts to one.
  4. the paneThe agent's live transcript: tool calls, diffs, test output. This is the evidence.
  5. the replyOne line the scripts match to fire the next step. Here: REBASED 4.7 462ef2c9.
  6. status lineModel and effort, context used, weekly usage. The budget watchdog reads it.
lazygitsame workspace, trimmed

branches

1hstory/ops.5-ci-reliability↑2

7hstory/6.13-operations-overvi…✓

11hstory/1.14-apache-licence-in…✓

11hstory/6.12-event-search↓65

5dmain↓287

commits

6567e322docs(story-6.8): rebase onto dev

343e0bafreview(6.8): recheck reports

ea4caf0ddocs(story-6.8): fix log for the…

b2342805fix(cases): evidence section rev…

d765e378fix(installer): back up and rest…

bf84246dfix(cases): review round for evi…

13badacctest(e2e): evidence journey thro…

201f9c6cfeat(cases): evidence attachment…

We check for the two forbidden states at a glance: a push and a stash. Agents do neither.
the reply linedeveloper pane, story 4.7

Ran 2 shell commands

REBASED 4.7 462ef2c9

Baked for 12m 9s · done 5:02 AM

orchestrator pane

Queue after: 6.9 (after 6.8), ops.6, 3.8.

Nothing needs you. Next report on the next merge.

Every prompt ends with the exact line to reply with. A watcher matches it and fires the next step. Nothing else the agent says reaches the orchestrator.

The wallboard

The screen at the top of this page. It reads open pull requests and CI, the sprint board, every review report's Open findings line, both sites and the running agents, then writes one static HTML file. No framework, no build step.

Status is written for a human: Being built. In review. Merged. A person reads it from a phone, over WireGuard.

Runs on

Claude Code. Claude Fable 5.1 orchestrates, Claude Opus 5.5 builds and reviews. Code, pull requests and CI live on a self-hosted Forgejo server. Nothing depends on a hosted AI platform other than the Claude models themselves.

It holds the heat.

A one-shot prompt ends when the model stops talking. A factory needs things that keep going until a condition is true. Never stop a turn with work still owed and no wait armed.

  • detached chainsShell scripts in their own process session: rebase, recheck, merge. They survive a Claude restart.
  • bmad-loopBuilds one story unattended. A fresh session per checkpoint, the tests between them, a token cap, a journal.
  • /loopPolls a long test or a deploy instead of blocking on it.
  • /goalDrives to an outcome until every acceptance criterion is verified with evidence.
  • guard loopsA watchdog stops every agent and chain at a weekly usage limit a person sets. The wallboard rebuilds every 60 seconds.

The budget and the wallboard's freshness are enforced by a process, not by remembering.

What it protects.

Fully autonomous means a person is asked rarely, and only about what matters. It does not mean the person is gone.

  1. 01

    Agents commit. They never push.

    The push is the moment the orchestrator takes responsibility for a branch. Agents also never merge into main, and never use a bare git stash, which every worktree shares.

  2. 02

    Nothing merges on an agent's word.

    Code, security and QA each end their report with Open findings: N. The merge waits for 0 three times, and a green check.

  3. 03

    Consequential calls go to a person.

    Security, money, law and taste. Licence, compliance order, hardware spend, what to defer and until when. Each is logged with a date.

  4. 04

    Silence is not a yes.

    The orchestrator asks with a default and carries on with everything that doesn't depend on the answer. What needs a yes waits for one.

  5. 05

    A peer can relay. It can't approve.

    When another session passed on that a pause had been lifted, the orchestrator held until a person confirmed in its own session. Resuming spent real budget.

  6. 06

    Blocks get reported, not routed around.

    Destructive git, and anything that reaches outside the repository, goes through a person or is blocked by Claude Code's permission classifier.

The trail is stories, reviews, decisions and CI logs, all kept in the repository. A new person, or a new agent, starts from the documents.

Next

Build your own.

The method, Herdr, worktrees, how the models behave, and the scripts. Written down in the Grimoire, so you can set up the same thing.

Open the Grimoire