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.
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
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.
- SentinelWatches the feed itself: did the daily feed land, is it fresh, did the row count move, did SKUs vanish, did prices jump.
- AuditorCatalog integrity against 11 machine-checkable rules.
- GuardianBuild and deploy safety: rebuild on change, diff vs last-good, roll back. Cannot push.
- EvaluatorReplays golden rep queries; asserts every returned SKU still passes the oracle. Catches drift.
- VerifierRe-runs the detector after a repair, and is believed over the repair's own claim of success.
- CoordinatorCorrelates findings, dedupes, detects contradictions no single agent can see.
- AdjudicatorWeighs everything at ERROR and above and decides what deserves a human. Can only lower a severity, never raise one.
- ResolverReads 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.
product screens
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.
