ai-dev-deploy-demo

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.

For leadership

    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

      04 The stack

      05 Guardrails

      06 When things go wrong

      07 Customising the agents

      08 Questions asked while building this

      09 Glossary

      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
        BranchWho owns itWhat the pipeline does
        human/<slug>YouCI 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 agentCI, review, automatic fixes after a rejection, merge and deploy. Don’t use this prefix yourself: the Fixer would start pushing to your branch.
        mainNobody directlyNever 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
        LabelPut onEffect
        ai:readyIssue (you)Starts the Developer agent.
        ai:opusIssue (you)Use the larger model for a hard task.
        ai:in-progressIssue (automatic)The Developer is working on it.
        ai:approvedPR (Reviewer)Triggers squash-merge, then deploy.
        ai:changes-requestedPR (Reviewer)On ai/ branches, starts the Fixer. On your own branches it is just a verdict.
        ai:needs-humanIssue or PR (automatic)The agents are stuck or a guardrail was hit: your move.
        ai:bugIssue (automatic)Filed with ai:ready when a deploy or smoke test fails, so the agents fix it.
        ai:backlogIssueParked 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.