moodmosaic

Agents as Fuzzers

This article is part of the Oracles, Traces, Triage series.

The short version

A fuzzer is a search tool whose results must be triaged. An AI agent is a search tool whose results must be triaged. The parallel is not metaphorical. I think it’s structural.

Two search tools

A fuzzer explores the input space of a program, looking for inputs that violate some oracle—a crash, a hang, a property violation. When it finds something, you triage: real bug? Duplicate? Exploitable?

An AI agent explores the solution space of a problem, looking for code, fixes, or tests that satisfy some goal. When it produces something, you triage: correct? Complete? Does it address the problem?

Both search. Both produce results that need judgment. Both waste enormous time if pointed in the wrong direction.

The anatomy, side by side

Every fuzzer does four things:

  1. Generates inputs (random, mutational, grammar-based, coverage-guided)
  2. Executes the target with those inputs
  3. Checks an oracle (crash? new coverage? property violation?)
  4. Saves interesting results for triage

Every AI agent does the same four things:

  1. Generates candidates (from prompt, codebase, agent skills)
  2. Executes or applies them (writes code, runs tests, modifies files)
  3. Checks an oracle (tests pass? linter clean? invariants hold?)
  4. Saves results for triage (commits, PRs, logs)

Replace “inputs” with “candidates” and “crash” with “test failure.” The structure is identical.

What changes when the searcher understands context

Traditional fuzzers are context-blind. AFL doesn’t know what a function does. libFuzzer doesn’t understand the specification. They compensate with volume—millions of executions per second.

Context-blindness has costs:

An AI agent, by contrast:

The search becomes intentional without becoming rigid.

The convergence

Combine the pieces from this series:

Piece Fuzzer equivalent What it adds
Agent skills Oracle Richer than “did it crash?”—norms that agents translate into testable properties
Agent swarms Multiple seeds Parallel search where each instance can specialize, sharing findings via git
Stateful testing Execution loop For traces instead of single inputs

Together: context-aware search, parallel exploration, rich oracles.

Fuzzers still win at

Agents win at

The spectrum

  Traditional Fuzzer AI Agent
Input generation Random / mutational / grammar Context-aware / intentional
Oracle Crash / coverage / property Natural-language norm → property
Speed Millions of executions/sec Seconds to minutes per session
Context understanding None Deep
Triage Manual Agent-assisted
Parallelism Independent seeds Coordinated via git

The gap is narrowing. What matters is understanding which tool fits which problem—and being willing to combine them.

In practice

Fuzzing was barely known outside security research fifteen years ago. Standard practice after AFL and OSS-Fuzz. Table stakes today.

AI-assisted testing is on the same trajectory.