Eight stages. Exactly one of them is a human, and it is deliberately the last one that
can change anything.
- 01 Intake
- I describe a job from my phone. A Telegram bot turns it into a properly scoped GitHub issue, which matters more than it sounds: a badly scoped issue is the single most expensive failure mode this system has.
- 02 Trigger
- I add one label. Nothing runs without it, and labelling several repos at once runs them at once.
- 03 Runner
- A self-hosted runner picks the job up on a home server, isolated from the rest of the network, so agent-authored code never touches anything that matters.
- 04 Build
- A manager agent on Opus reads the code itself, then delegates implementation and adversarial review to a crew on Sonnet and Haiku. It is allowed to decide a subagent is not worth the handoff, and it regularly does. The models are named by alias rather than pinned version, so when Opus 5 shipped the factory picked it up on the next run with no config change at all: the ledger shows 76 runs on 4.8 and then 22 on 5, with nothing in between but a date.
- 05 Gates
- Lint, typecheck and build run before the push. In CI, a Playwright job drives every key route at desktop and mobile, screenshots them, and asserts the things a diff cannot show you.
- 06 Pull request
- The agent opens the PR as itself, through its own GitHub App, on a branch named after the issue. It is structurally incapable of merging its own work.
- 07 Review
- Me, in GitHub. I open the pull request, read the diff, check the gates went green and merge it if I am happy. Usually a couple of minutes. Sometimes I send it back. This is the only place a human can change the outcome, which is exactly why it is the last step rather than an earlier one.
- 08 Deploy
- Nobody. Merging to main builds the image, backs up the database, pulls the new digest, migrates on boot, gates on a health check, and rolls back automatically if that check fails.
Why Telegram, though
Strictly speaking I do not need it. Any Claude session with GitHub access can file and
tag an issue, and sometimes that is exactly what I do. But my ideas do not arrive at a
desk. They arrive on a walk, on the loo, or in the shower, which a waterproof phone
turns into a legitimate place of work. The bot is the difference between an idea that
becomes a pull request and one that evaporates on the way back to the office.
None of the agent's instructions live in the product repository. The manager's brief,
the rules, the crew definitions and a per-repo build sheet all live in a private control
repo and are rendered onto the runner by a config-sync tool. Edit main, wait a few
minutes, and every repo's agent has updated itself. What each product repo actually
contains is a six-line stub.