Research / Aufstin Filiko

Agents you
can check

I study how to oversee multi-agent coding systems from their real traffic: which completion claims are backed by evidence, which rules hold, and which layer actually enforces them. I also apply AI to biology.

01Field note with data

Rules written
after failures

Operating multi-agent coding agents at a small company. Version 0.1, October 2026.

Summary

Four months of one operator, the core developer on the software team of a small agriscience company, running coding agents (Claude Code, Codex, OpenCode and an in-house orchestrator that plans a goal into tasks and runs builder and reviewer agents), together with the 49 rules the operator wrote after observed failures. The note compiles 30 recurring failure classes into a taxonomy and records the layer that enforced each rule. Everything in it is descriptive.

Code and data Analysis scripts, aggregate data, the taxonomy and re-implemented controls are being prepared for public release.

43 active days of retained transcripts, mostly mid-September to October 17

  • 1,542sessions
  • 2,370subagent transcripts
  • 166,638tool calls, 68% inside subagents
  • 1,684typed prompts, about 99 tool calls each
  • 140peak concurrent agents in a 10-minute window

The taxonomy

30 failure classes, compiled from 161 of my own corrections, in five groups. Recurrence figures are floors taken from dated notes: at least 10 instances each of completion claims not backed by the check, and of gates that passed without running. Seven classes are failures of the environment the agents worked in, not of the agents.

  • Verification7
  • Operator environment7
  • Coordination and memory6
  • Authority and consent5
  • Integration5

13 of 23

classes rated catchable by a deterministic check still had no hook, deny rule or code gate.

24 of 49

rules lived only as memory notes, and 7 more as prompt rules. Only 15 became hooks, deny rules or code gates.

81 of 86

“failed” entries from a ticket-fixing bot were the harness exiting before any verdict. Read as agent outcomes, the count overstates agent failure by more than an order of magnitude.

The recurring verification failure: a green build, an exit code 0 or a self-written test reported as done, while the behavior was never checked where users are served.

Before and after one policy change

On one day the operator rewrote the global instruction file and the harness deny rules: test suites only on request, no worktrees in interactive sessions, commits with explicit paths, never stash. The comparison is not causal; workload and projects changed too, and the “after” window is about 11 days.

MeasureBeforeAfter
Shell calls56,81355,382
Test-suite runs per 1,000 shell calls44.00.8
Worktree creation commands99<5
git stash runs, main sessions / subagents19 / 230 / 0
Whole-tree git add, main sessions / subagents7 / 187 / <5

67 of the 99 worktree commands did not begin with the git command, so a deny rule matched on a command prefix would not have seen them. More than half of the stash runs before the change came from subagents, while a memory note in the main repository already forbade stashing.

Controls the rules turned into

  • Policy hook

    Allow or deny each tool call with a rule id: force-push, hard reset, stash in a shared checkout, credential-shaped writes into memory or handoff files, deploys without a fresh operator approval.

  • Ancestry check

    An “already fixed in <sha>” claim is checked with git merge-base --is-ancestor before anyone believes it.

  • Confirm-gated writes

    The agent can only relay a status rendered from stored state.

  • Rule-based merge verdict

    Replaced a model judge that flipped between pass and block on identical input at low temperature.

  • Run caps and diff guards

    Caps on unattended runs and guards on the size and shape of their diffs.

Known gaps of these patterns are part of the release: prefix deny rules versus compound commands, prompt-only rules that may not reach subagents, drift between layers that express the same rule, and the limits of lexical matching.

Limitations

One operator at one company. Transcripts mostly from the last five weeks, because the harness deletes older ones, against a four-month prompt history. Heuristic definitions inferred from harness files that change between versions. Noisy lexical measures for shell commands. No ground truth yet: the taxonomy has not been applied by independent labelers.

02Research agenda

What I want
to measure next

  1. i

    Is done done?

    Extract every “done”, “verified”, “passing” or “deployed” claim. Check it against the agent's own trajectory (did the matching check run after the last edit, pass, and execute a nonzero number of tests?) and against later outcomes (operator contradiction, revert, a fix on top). Trace subagent claims through the orchestrator to the human, and release the extractor as a local tool.

  2. ii

    Monitors on real traffic

    Compare deployed rule-based hooks with model-based monitors run offline on the same traffic, at an alert budget one operator can absorb: true and false positive rates, lead time over the operator's own interrupt, whether the same action is reached another way after a block, and test-retest stability.

  3. iii

    Rule persistence

    Which rules survive a compaction, reach a subagent, or are weakened by a later memory note. Replay real incidents in a sandbox with stand-in deploy and push commands.

  4. iv

    Honest status for non-experts

    In an offline replay harness with frozen fixtures, measure calibration, omissions, answer flips under pushback and provenance accuracy when a bot answers status questions from people who cannot check the work themselves.

03AI in biotech

Lineage, chemotype,
chromatogram

In progress

Lineage recovery

A decade of genetics, reconstructed

Legacy genetics records from 2013 to 2022 used identifiers that disagreed across stores. A pattern-detection pass rebuilt the lineage with confidence scores and gave researchers about 300 parent-child pairs to confirm instead of about 30,000 raw records. The result renders as interactive phylogeny trees.

Genetics

Chemotype from lineage

Predicting how terpene chemotypes are inherited, using the reconstructed lineage as the backbone. Working toward a bioRxiv preprint.

Analytical

Terpene ID for GC-FID

ML-assisted peak identification for gas chromatography, anchored to an in-house library of terpene standards.

Earlier

Computer vision for a toxicology assay

At Corteva, a TensorFlow and OpenCV model that estimates plant weight from camera images, which started a new toxicology assay.

Illustrative Synthetic trace, not instrument data. Peak positions are schematic.