HS logo
back to work
case study · 2026 · Blue Diamond Attachments

Agent Fleet

Eight agents that audit a live ERP feed every 30 minutes and may only act where they can prove the fix worked. Most of the engineering went into catching the bugs in the monitor itself.

PythonSupabaseClaudeJiraWindows Task SchedulerVercel

The problem

A platform fed daily from an ERP fails quietly, a half-empty feed, a moved price, a stale stock count, until a rep quotes something wrong. The fleet audits it every 30 minutes and escalates only what a human needs to see.

The eight agents

Sentinel watches whether the feed arrived and is plausible; Auditor checks catalog integrity against the 11 rules; Guardian handles build safety; Evaluator replays golden queries to catch drift. Verifier re-runs a detector after a repair and is believed over the repair's own success claim; Coordinator correlates and dedupes; Adjudicator weighs everything at ERROR and above and can only lower a severity, never raise one; Resolver opens a PR for a proven fix but never merges.

How a finding becomes a fix

Every finding posts to a Jira board, deduped by a stable id so the same problem recurring across runs collapses to one ticket instead of spamming the board. The Adjudicator decides what deserves a human. For anything it can prove, the Resolver reads the ticket, applies a repair that carries its own detector, re-runs it, and opens a PR on a branch, then stops. A human reviews and merges. The fleet can find, prove, and propose the fix on its own, but a person still signs off before anything reaches production.

The hard part: the monitor's own bugs

Most of the engineering went into catching bugs in the monitor itself. A resolved finding could never come back: an omitted column let a merge-on-write keep anything ever resolved as resolved, so the board showed 1 row while the Auditor emitted 3 errors a cycle. The contradiction rule was wrong twice, once keying off a gate instead of the finding, once firing on problems already open in their own right, which is exactly why the Adjudicator exists. The lesson throughout: the check and what it checks have to be one and the same.

how it fits together

Agent Fleet · architecture

Eight agents on a findings bus, acting only where they can prove it

Runs every 30 minutes (sync → agents → adjudicator → escalate → resolver). Deterministic rules do the scanning; a model is called only when the rules can't settle a call.

  1. Sentinel
    Watches the feed itself: did the daily feed land, is it fresh, did the row count move, did SKUs vanish, did prices jump.
  2. Auditor
    Catalog integrity against 11 machine-checkable rules.
  3. Guardian
    Build and deploy safety: rebuild on change, diff vs last-good, roll back. Cannot push.
  4. Evaluator
    Replays golden rep queries; asserts every returned SKU still passes the oracle. Catches drift.
  5. Verifier
    Re-runs the detector after a repair, and is believed over the repair's own claim of success.
  6. Coordinator
    Correlates findings, dedupes, detects contradictions no single agent can see.
  7. Adjudicator
    Weighs everything at ERROR and above and decides what deserves a human. Can only lower a severity, never raise one.
  8. Resolver
    Reads the Jira board, applies only repairs that carry their own detector, re-runs it, and opens a PR on a branch for a human to merge. Never pushes to main.
clean run
rules pass, nothing escalated
silent bad feed
feed looks healthy, catalog is wrong
PR opened
a proven fix, never merged unattended
Python (stdlib) · Supabase · Claude · Jira · Windows Task Scheduler · Vercel

product screens

The floor: agents as stations on a line.
Hovering a station for its latest findings.
The fleet dashboard: what's breaking right now.

key engineering decisions

Autonomy is earned by verifiability

An agent may only act where it can prove the fix worked; the Verifier re-runs the detector and is believed over the repair's own claim of success.

Read-only by default, tiered repairs

Repairs are tiered 0–3 (silent, logged, proposed, escalated); Guardian can roll back but not deploy, Resolver opens a PR but never merges. Nothing auto-pushes to production.

results & outcomes

  • Catches pricing and data errors before a rep can quote them, the kind worth thousands per unit, so a bad feed never becomes a bad quote.
  • Audits a live platform around the clock with no one watching, turning what used to be manual spot-checks into a standing safety net.
  • Files each issue as a Jira ticket, proves a fix, and opens a PR, but leaves the merge to a human, so automation moves fast without ever publishing unattended.
  • Runs at roughly zero model cost, so continuous monitoring spends compute, not API budget.