AgentDesk audit viewer

Evidence that a three-agent pipeline can be governed so it cannot ship a confident lie.

AgentDesk itself is a command-line tool with no UI of its own. This page is a static replay of 18 completed runs, not a live or interactive demo — nothing here calls an API. Pick a run on the left to see its actual gate log.

What am I looking at?

AgentDesk turns a company name into a researched outreach email using three separate AI agents — but the point of this project isn't the emails. It's that the pipeline is governed so it structurally cannot ship a claim nobody can back up.

Researcher Haiku web search · read-only
Drafter Sonnet no internet access
QA Reviewer Opus different model family · can't edit
Five checkpoints stand between a company name and a human inbox — only one is a model:
  1. Prompt contract — each agent's rules of engagement
  2. Schema validation — malformed output is rejected, never retried
  3. Deterministic checks — word count, banned phrases, every claim traced to a source
  4. Adversarial review — the one model judgment call, scored against the brief
  5. Release decision — recomputed in code; the reviewer's own verdict is advisory
ESCALATED and HALTED are success states, not errors. If research comes up thin, the pipeline refuses to draft rather than invent facts — that's a halt. If the reviewer keeps blocking a draft after the retry budget runs out, the system routes it to a human instead of quietly lowering the bar — that's an escalation. Both mean a gate did its job.
REJECTED is different — it's a defect, not the gate doing its job. It means an agent's own output broke its contract: a field over its length limit, a malformed id, an unparseable reply. The gate correctly refused to pass it on, but the correct next step isn't "nothing to see here" — it's fixing the agent that produced it. Of the 12 REJECTED runs below: 7 were the researcher's own schema violations (field-length overruns, malformed claim ids) — the researcher's prompt under-specified those constraints relative to its own schema, and that's since been fixed in the source. 3 were an output-budget truncation at the drafter or QA stage, already fixed in an earlier pass (before this run set). The remaining 2 were a citation-markup leak and one structurally malformed reply — the first has reinforced guidance now, the second was a one-off. These runs predate all of that and are left as-is, not backfilled or hidden.

Quality gate, measured honestly: on an 18-case mutation harness, deterministic code alone catches 14 of 18 bad drafts and briefs at zero false positives. The remaining four need a model's judgment call to catch, and that measurement hasn't been run yet — stated here as a limitation, not rounded up.