ALL PROJECTS
TOOLING / HOW I SHIP

How My Agent Team Ships

How I run a team of AI agents to plan, build and ship software, with my approval on everything that matters.

Cursor · Codex · Grok Bot · AGENTS.md · release-kit · AWS

How the team is set up

Each project has a bot that owns it. Specialist bots help where they're needed, and work is handed between bots asynchronously. I approve every merge, production deploy and billable change, in my own words. One agent's say-so never counts.

Who does what
MeApproves merges, deploys and spend.
Primary botTakes my requests and routes them.
CoordinatorTracks the whole portfolio.
Projects
Project botsOne per project. Owns the work and reviews the code.See 01 ↓See 02 ↓
Specialists
DeployEvery release, through release-kit.
Cloud & accessAWS permissions.
Build serverRuns local CI and long checks.See 04 ↓
Coding agentsRuns Codex on approved prompts.See 03 ↓
UX designMocks and screenshot reviews.See 02 ↓
ResearchDocs, terms and options.
Dedicated build serverBackground work is offloaded here: builds, local CI and coding-agent runs. Hosted CI stays manual-only and costs nothing.See 04 ↓
AGENTS.mdIn every repo. The shared rules every agent reads first.

How a request flows

Work is split into lanes that run in parallel: one branch, one draft PR and one status file per lane. Coding agents write the code, and the bot that owns the project reviews it. One verify command decides pass or fail.

From request to live
MeAsk
Primary botRoute
Project botPlan
Coding agentsLanes
Build serverVerify
Project botReview
MeApprove?
Deploy botRelease

If I ask for changes, the work goes back to the lanes.

Releases go through release-kit, a small CLI I wrote: package, plan, my approval, apply and a smoke check, with the previous release kept for rollback.

HC Survive ships through release-kit.

Problems I worked through

Short write-ups, one per problem.

01A zero-downtime handoff, one layer at a timeSeveral review rounds, each one deeper.
Problem
A service on one of my projects needed to hand its work to a new instance without any downtime.
What I tried
The project bot opened the change and reviewers went over it in several rounds, each one a layer deeper: design, then runtime, then crash recovery, then data safety.
What I found
Each round found something the one before couldn't see. The design couldn't reclaim work, wrong content types blanked the page, a permit could get stuck after a crash, and a cleanup step could delete committed history. All of it was caught before merge. The final round passed its race checks and the full end-to-end suite, and staging showed no errors during the handoff.
What's next
It runs on staging now. Production waits for my OK.
02Bots catching each other's mistakesA blank map, and the wrong suspect.
Problem
On a map-based side project, the map background showed up blank.
What I tried
The first theory was that a security policy was blocking the map tiles.
What I found
The bot that owns the project read the code and showed the real cause: the app had no tile layer at all. It also checked the design notes against the code and corrected the ones that didn't match.
What's next
A real tile layer is planned for the map phase of the redesign.
03Choosing the cheap toolA coding agent isn't needed for a job that changes no code.
Problem
The first job on the new coding-agent runner was a check-only run on main. Nothing in it needed to write code.
What I tried
I ran it through Codex anyway, to prove the runner end to end.
What I found
It worked. The unit tests passed, the browser suite caught new regressions, and the startup benchmark held steady. But a fixed script can do a check-only job just as well.
What's next
Check-only jobs now run as a plain script. Codex is kept for code changes, and the first code-changing lane is queued for my approval.
04Local CI that found real issuesChecks moved onto the build server.
Problem
Hosted CI is manual-only, so checks need somewhere else to run.
What I tried
Each repo's full check now runs locally in Docker on the dedicated build server.
What I found
The first runs surfaced real problems: a formatting error on main, missing provider hashes in lockfiles, tests that broke on a newer Python, and shell-script errors. Project bots fixed each one in a PR, I approved, and the infrastructure bot re-verified.
What's next
Heavy runs stay milestone-only, after I say go.

What's next

  • Local language models on my own GPU for background work. Planned
  • Infrastructure and container releases in release-kit. Planned
NEXT PROJECTLocal Discovery Platform