Mission control ยท written by the thing it describes
How I developed this site with AI
A website built, reviewed and shipped by AI agents, with a human in charge.
01 The team
Five roles, each with its own instructions and a limited set of tools. Numbers are live from the pipeline's own logs.
02 The workflow, step by step
03 How developers work with it
07 Customising the agents
08 Questions asked while building this
10 Build log
One entry per pull request, newest first, written by the agent that made the change.
11 Branches, labels & git commands
Working on your own machine? What happens to your push depends on three things: the branch name, whether the PR is a draft, and which labels are on it. Nothing here is triggered by git tags — GitHub labels are the “tags” that drive the agents.
Pick your outcome
Review, then auto-deploy
Open a normal (non-draft) PR. After CI passes the AI Reviewer reviews it; if it approves, it adds ai:approved, auto-merge squash-merges, and the merge to main deploys.
git checkout -b human/my-change
git add -A && git commit -m "Describe the change"
git push -u origin HEAD
gh pr create --base main --fill
AI review only — no deploy
Open the PR as a draft. CI and the AI review still run, but auto-merge skips drafts, so nothing ships. Mark it ready (gh pr ready) when you want it to go live.
git push -u origin HEAD
gh pr create --base main --fill --draft
# later, to allow merge & deploy:
gh pr ready
Review, but you decide on merging
Stay on a draft PR and merge it yourself once you are happy with the review. Changing protected files (.github/, agents/, site/content/, CLAUDE.md…) also stops auto-merge: the PR gets ai:needs-human and only you can merge it.
gh pr merge --squash --delete-branch
Let the agents do it all
Don’t write code: file an issue and label it ai:ready. The Developer opens an ai/issue-N-slug branch and PR, and the pipeline takes it from there.
gh issue create --label ai:ready \
--title "Add a chart" --body "…"
Branch naming
Branch prefixes and what they mean
| Branch | Who owns it | What the pipeline does |
human/<slug> | You | CI and AI review run. Review comments are advice: the Fixer does not push to your branch. Reply @claude fix the review items if you want it to. |
ai/issue-<N>-<slug> | An agent | CI, review, automatic fixes after a rejection, merge and deploy. Don’t use this prefix yourself: the Fixer would start pushing to your branch. |
main | Nobody directly | Never push here. Every merge to it triggers the deploy and smoke test. |
Labels and what they do
Labels used by the pipeline and their effects
| Label | Put on | Effect |
ai:ready | Issue (you) | Starts the Developer agent. |
ai:opus | Issue (you) | Use the larger model for a hard task. |
ai:in-progress | Issue (automatic) | The Developer is working on it. |
ai:approved | PR (Reviewer) | Triggers squash-merge, then deploy. |
ai:changes-requested | PR (Reviewer) | On ai/ branches, starts the Fixer. On your own branches it is just a verdict. |
ai:needs-human | Issue or PR (automatic) | The agents are stuck or a guardrail was hit: your move. |
ai:bug | Issue (automatic) | Filed with ai:ready when a deploy or smoke test fails, so the agents fix it. |
ai:backlog | Issue | Parked follow-up work. Agents ignore it until it becomes ai:ready. |
Kill switch: set the repository variable AI_ENABLED to false and every AI workflow skips.