← All work

Agent Harness

The control room where my agents work — and wait for my sign-off.

An in-house tool. AI agents review pull requests, fix what they find, keep branches up to date and repair production errors — each in a sealed container, and nothing leaves without my approval.

My role
Sole developer · in-house tool
When
2026 — now

This site promises that agents keep working on your software after launch. This is the machinery I built for that — and it was itself built by agents in four days, with every change reviewed by me.

How it works

  1. 01

    Work that never stops coming in

    Pull requests waiting for a review. Errors in production. Branches falling behind while nobody looks. Across several client projects, that adds up — every single day.

  2. 02

    One place that hands out the jobs

    Every new pull request and every error alert lands in the control room and becomes a job in a queue. Each night, the foreman also looks for pull requests that have fallen behind.

  3. 03

    Every agent gets a sealed room

    Each job runs in a fresh container that’s thrown away afterwards, with only what that job needs. The key to GitHub is never in the same room as the client’s code.

  4. 04

    Nothing leaves without me

    A review, a fix or a repaired error waits at the approval gate. I get a ping in Slack and approve or reject it — from my desk or my phone.

  5. 05

    Then it goes back to the team

    Approved work is posted where the developers already are — a review with numbered findings, a fix on their branch, or a draft pull request for the error.

open PReventserrorsnew jobstartpromptsresultSlack pingpostError alertsSentryGitHubpull requestsDevelopersopen PRs, read reviewsControl roomdashboard & webhooksThe foremanqueue & scheduleSealed workshopone container per jobAI modelsClaude · CodexApproval gatenothing ships unaskedCasperapproves or rejects
  • Built by me
  • Outside service
  • People

Choices I made

  1. 01

    The fixer never grades its own homework

    An agent that says “fixed” might only have fixed half of it.

    A fix can only mark a finding as “attempted”. Only a fresh, independent review can close it.

    The catch Every fix costs one more review — and I start each round myself, so it can never loop on its own.

  2. 02

    Rules in code, not in the prompt

    The agents run the client’s own code. Asking them nicely to behave is not security.

    Each run is split into sealed steps, and sensitive files — secrets, settings, database changes — are blocked by the system itself.

    The catch It’s slower and more complex. The review agents still found ways around early versions — which is exactly why they’re there.

  3. 03

    Try the free way first

    Bringing every open pull request up to date with AI each night would cost money every night.

    The nightly job tries plain git first and only calls a model when there’s a real conflict.

    The catch Approvals expire after five days, and if the pull request has changed meanwhile, the work is done again.

The result

Under the hood — for the technical reader

Stack Next.js · TypeScript · Bun · PostgreSQL · Docker · Claude Agent SDK

  • Control room 2026

    Dashboard, admin login with 2FA and the webhooks for GitHub and Sentry, behind Caddy.

    Next.js 16 · React 19 · Tailwind 4 · Better Auth · GitHub App

  • Queue & worker 2026

    Jobs live in Postgres — SKIP LOCKED to hand them out, LISTEN/NOTIFY to wake the worker, no Redis. The worker runs the nightly schedule and expires old approvals.

    Bun · PostgreSQL 17 · Drizzle ORM

  • Agent sandbox 2026

    A per-job runner image chained across several containers, so tokens and untrusted code never meet. Every agent must return a structured, validated result.

    Docker · Claude Agent SDK · Codex CLI · Zod

  • Approval gates 2026

    Hard floors — never merge, never write to main, force-push only with a lease — plus per-repository policy and budget limits, with Slack notifications.

    TypeScript · Slack