Agent operations

Agent operations fleet

Six specialist agents run on a schedule. A reviewer reads what each one actually wrote, and every run lands in a log you can inspect.

  • 858

    runs logged

    On 117 distinct days.

    10 Jun – 5 Oct 2026

  • 125

    silent defects caught

    Each came from a run that had reported success. A person sees the note before acting on the file.

    28 Jul – 5 Oct 2026

  • ≈ $0.03

    median cost per run

    Estimated from logged tokens on 129 runs. Not an invoice.

    29 Aug – 5 Oct 2026

The same figures, restyled

Fleet activity · 10 Jun – 5 Oct 2026

858 runs on 117 days. Brighter: more runs. Dot: a review flagged a defect (52 days).

The problem

It runs overnight. By morning there is no telling what it did, whether it was right, or what it cost.

Before and after

Before

  • Agents report their own success.
  • Model names and settings scattered through code.
  • A failure is silence until someone looks.
  • Cost grows with every step of every loop.

After

  • A reviewer reads the file the agent wrote and annotates the digest.
  • One routing table; a bad edit degrades to a default.
  • Every run is a line in a log, rendered by a local dashboard.
  • History is trimmed to a budget, so cost stops compounding.

Activity — 10 Jun to 5 Oct 2026

Every day the fleet ran, and every review that found a defect.

One cell per day. Brightness: runs that day. Accent mark: at least one review flagged a defect.

JUNJULAUGSEPOCTMWF2026-06-10: 13 runs2026-06-11: 4 runs2026-06-12: 5 runs2026-06-13: 3 runs2026-06-14: 6 runs2026-06-15: 3 runs2026-06-16: 5 runs2026-06-17: 3 runs2026-06-18: 5 runs2026-06-19: 3 runs2026-06-20: 11 runs2026-06-21: 4 runs2026-06-22: 5 runs2026-06-23: 10 runs2026-06-24: 7 runs2026-06-25: 3 runs2026-06-26: 9 runs2026-06-27: 6 runs2026-06-28: 10 runs2026-06-29: 8 runs2026-06-30: 8 runs2026-07-01: 8 runs2026-07-02: 8 runs2026-07-03: 6 runs2026-07-04: 8 runs2026-07-05: 7 runs2026-07-06: 8 runs2026-07-07: 6 runs2026-07-08: 11 runs2026-07-09: 8 runs2026-07-10: 8 runs2026-07-11: 7 runs2026-07-12: 15 runs2026-07-13: 6 runs2026-07-14: 11 runs2026-07-15: 8 runs2026-07-16: 10 runs2026-07-17: 9 runs2026-07-18: 8 runs2026-07-19: 5 runs2026-07-20: 10 runs2026-07-21: 7 runs2026-07-22: 6 runs2026-07-23: 9 runs2026-07-24: 8 runs2026-07-25: 9 runs2026-07-26: 12 runs2026-07-27: 9 runs2026-07-28: 11 runs, 4 flagged reviews2026-07-29: 9 runs, 2 flagged reviews2026-07-30: 8 runs, 3 flagged reviews2026-07-31: 6 runs, 1 flagged review2026-08-01: 5 runs, 3 flagged reviews2026-08-02: 8 runs, 3 flagged reviews2026-08-03: 7 runs, 4 flagged reviews2026-08-04: 1 run2026-08-05: 8 runs, 4 flagged reviews2026-08-06: 6 runs2026-08-07: 7 runs, 3 flagged reviews2026-08-08: 6 runs, 1 flagged review2026-08-09: 9 runs, 3 flagged reviews2026-08-10: 5 runs, 1 flagged review2026-08-11: 7 runs, 2 flagged reviews2026-08-12: 5 runs, 1 flagged review2026-08-13: 3 runs, 1 flagged review2026-08-14: 4 runs, 2 flagged reviews2026-08-15: 6 runs, 3 flagged reviews2026-08-16: 3 runs, 1 flagged review2026-08-17: 12 runs, 1 flagged review2026-08-18: 6 runs2026-08-19: 8 runs2026-08-20: 6 runs, 2 flagged reviews2026-08-21: 8 runs, 4 flagged reviews2026-08-22: 6 runs, 2 flagged reviews2026-08-23: 0 runs2026-08-24: 13 runs, 5 flagged reviews2026-08-25: 8 runs, 4 flagged reviews2026-08-26: 6 runs, 1 flagged review2026-08-27: 7 runs, 2 flagged reviews2026-08-28: 6 runs, 2 flagged reviews2026-08-29: 7 runs, 1 flagged review2026-08-30: 7 runs, 1 flagged review2026-08-31: 8 runs2026-09-01: 5 runs2026-09-02: 9 runs2026-09-03: 6 runs2026-09-04: 8 runs2026-09-05: 6 runs2026-09-06: 9 runs2026-09-07: 6 runs2026-09-08: 8 runs2026-09-09: 7 runs2026-09-10: 8 runs2026-09-11: 6 runs, 1 flagged review2026-09-12: 8 runs, 1 flagged review2026-09-13: 7 runs2026-09-14: 9 runs, 1 flagged review2026-09-15: 7 runs, 2 flagged reviews2026-09-16: 8 runs, 3 flagged reviews2026-09-17: 6 runs, 2 flagged reviews2026-09-18: 8 runs, 1 flagged review2026-09-19: 5 runs, 1 flagged review2026-09-20: 9 runs, 2 flagged reviews2026-09-21: 6 runs, 1 flagged review2026-09-22: 7 runs, 1 flagged review2026-09-23: 6 runs, 2 flagged reviews2026-09-24: 25 runs, 17 flagged reviews2026-09-25: 11 runs, 6 flagged reviews2026-09-26: 7 runs, 2 flagged reviews2026-09-27: 9 runs, 2 flagged reviews2026-09-28: 7 runs, 2 flagged reviews2026-09-29: 8 runs, 1 flagged review2026-09-30: 7 runs, 3 flagged reviews2026-10-01: 5 runs2026-10-02: 7 runs, 2 flagged reviews2026-10-03: 5 runs, 1 flagged review2026-10-04: 8 runs, 3 flagged reviews2026-10-05: 5 runs, 1 flagged review

858

runs logged

117

active days

52

days with a flagged review

25

busiest day, 24 Sep

Run replay

One run, stage by stage.

858 logged runs: 611 finished ok, 200 failed, 45 skipped, 2 stopped on an exhausted provider key. 185 carry a review, 132 reviews completed, 125 flagged a defect and 7 passed.

Design decisions

What we chose, and what we turned down.

01

The reviewer reads the file, not the report.

Rejected

Review the agent’s own summary.

Why

A summary is the thing least likely to look wrong. The file is the evidence, so the reviewer is handed the newest output file and judges against checkable claims.

02

Review annotates. It never blocks and never retries.

Rejected

Fail the run on a bad review and retry.

Why

A reviewer told to assume the work is flawed flags nearly everything: 125 of 132 here. As a gate it would stop the fleet; as a note it costs a person a minute. A reviewer outage is logged as skipped and leaves the run’s status alone.

03

Routing lives in one editable table with a fail-safe default.

Rejected

Model names in code.

Why

A missing file, a malformed row or an unknown role falls to the default row, so a bad edit degrades routing and never kills an overnight run. One environment variable forces every role onto a single model when a provider is down.

04

Facts the model cannot check are computed and handed over.

Rejected

Ask the reviewer whether a batch repeats earlier ones.

Why

It cannot see earlier batches. Code computes the overlap and appends it to the evidence, labelled as not written by the worker.

Human in control

What a person still decides

The verdict sits beside the artifact in a digest. It never changes a run’s status. A person reads it and decides what to fix.

Mock — illustrative data
RunRun statusReviewIssues
Agent A · dailyokflagged4
Agent B · dailyokpass0
Agent C · weeklyokskipped–
Agent D · dailyfailednone–
Open artifactMark reviewedIllustrative data.

The hard part

A cost fix made 69% of runs fail

Symptom

After 29 Aug the share of failed runs went from 8% to 69%. 127 of the 128 failures were “ran out of steps”.

Obvious reading

The step limit is too low.

Root cause

The cost fix, trimming history before each model call, is its own graph node. A turn now cost three steps, not two, so an 80-step budget bought 25 turns instead of 39. The graceful out-of-steps guard did not count that node, so some budgets crashed instead of stopping.

Fix

Scale the limit by 3/2 and round to a multiple of 3, the only values that end on a turn boundary where the guard fires. Checked with a fake model.

Now guaranteed

Failures fell to 11% over the next eleven days, and running out of steps is a logged failure, never a crash.

Stack

Python agents on a graph runtime; a Markdown routing table; a JSON-lines run log; a standard-library dashboard that renders it to one self-contained HTML file; scheduled jobs.

Cost to run

Median ≈ $0.03 a run, estimated from logged token counts on 129 runs.

Where this engineering shows up

Every run logged and every output reviewed: the same audit trail sits behind every verdict in our compliance service.

Start here

Know which vendors are actually covered. Every week, without chasing anyone.

Within 7 business days you get a deficiency report: each certificate, each requirement it fails, and the page that shows it. No contract, no sales call.