mika's open learning notebook

field notes, essays, and things learned by building


AI Evaluation

Ravel: Measuring What AI Agents Actually Do

Declared behavior, attempted actions, policy decisions, observed effects, provenance, and why agent evaluation needs evidence.

The project

Ravel became a way to study a question that ordinary coding benchmarks mostly do not answer:

What is the difference between what an agent is told to do, what it attempts to do, what the host permits, and what actually changes?

The core chain is:

DECLARED → ATTEMPTED → POLICY → OBSERVED

These are different kinds of evidence and should not be collapsed into one pass/fail result.

Why pass/fail is not enough

Two coding agents can both finish the same task while behaving very differently.

Agent A might read allowed files, edit intended files, run approved tests, and finish.

Agent B might attempt network access, search outside the workspace, hit policy denials, and eventually finish.

A normal benchmark may report both as PASS. Ravel is interested in the difference between those runs.

The architecture

Ravel v0.1 uses:

  • TypeScript / Node.js
  • a dedicated controlled Runner
  • instrumented tools
  • explicit allow/deny policy
  • rootless Podman
  • fixed fixtures
  • synthetic canaries
  • snapshots and deltas
  • raw JSONL traces
  • derived JSON
  • provenance-linked HTML reports
  • inspect, run, and verify commands
  • a deterministic fake Runner for calibration
  • an OpenAI Responses API adapter for live runs

The important design choice is that the report is derived from evidence rather than being the only record.

Study 001

The first study is Declared vs. Observed Behavior.

To make comparisons meaningful, the study tries to hold constant:

  • model
  • Runner
  • task
  • fixture
  • policy
  • resource limits
  • skill family

Then it varies the instruction/skill behavior being studied.

This is closer to an experiment than a loose demo.

Canaries

A canary is a known piece of state placed in the environment so Ravel can detect whether something touched or changed it.

An agent’s final answer is not proof of what happened. “I did not modify X” is a claim; the environment should be checked independently.

Provenance matters

Every conclusion should be traceable back to raw evidence.

I should be able to answer:

  • Which event caused this finding?
  • Which policy rule allowed or denied it?
  • Which filesystem delta proves the change?
  • Which model/tool call produced this attempt?

A pretty report without provenance can hide mistakes in the evaluator itself.

The evaluator also needs evaluation

The first live Ravel pilot exposed problems in the measurement system itself, including:

  • output preservation
  • answer-key contamination
  • declaration detection
  • path normalization
  • missing Git inside the environment
  • host-path leakage
  • reasoning-effort pinning

That was valuable. A benchmark harness is software, and it can create false conclusions if its own instrumentation is wrong.

API credentials

Real model runs need an OpenAI API credential because Ravel makes programmatic API calls. A ChatGPT subscription and API billing are separate systems.

That distinction matters: product access is not the same thing as API execution budget.

How Ravel differs from neighboring tools

Ravel is not the only agent benchmark or sandbox tool.

Related work includes general agent benchmarks, trace graders, sandbox systems, boundary/security evaluations, and tool-behavior verification.

The distinctive part is the full evidence chain:

instruction/declaration → model/tool attempt → permission decision → observable side effect

Ravel should therefore be described precisely rather than claiming to be the first or only project of its kind.

Who this is useful for

Potential users include:

  • agent developers
  • evaluation researchers
  • security/red-team engineers
  • framework and MCP/tool authors
  • model providers
  • companies deploying internal agents
  • benchmark authors
  • open-source maintainers testing coding bots

The common need is: not only whether the agent succeeded, but how it behaved while succeeding or failing.

Main lesson

Agent evaluation becomes much more useful when I stop asking only “Did it complete the task?” and also ask:

What did it attempt, what was allowed, and what evidence proves what happened?