DocsResearch

Bench surface

The datasets and settings the harness exercises end-to-end.

2 min read·docs/agent-memory-benches.md· Edit on GitHub

The Agent-Memory Bench Suite

A standard for evaluating agent memory beyond recall@k — what a governed memory layer must guarantee for an agent to act on it safely. Deterministic, $0, no LLM, reproducible.

recall@k (LongMemEval, LoCoMo, BEAM) answers "can you find the buried fact?". It does not answer the questions that decide whether an agent can be trusted to act on memory:

  • Will it act on a stale or unconfirmed belief?
  • Does a revised decision surface its current value, or the old one?
  • Does a prior fix/failure resurface so the agent doesn't repeat it?
  • Can adversarial memory (injected, forgotten, superseded) authorize an unsafe action?

The Midas suite measures exactly these — in one command:

uv run python -m eval.benches
bench             metric                 score   target
Agent Continuity  action_safety           1.00    →1.00
                  decision_adherence      1.00    →1.00
                  repeated_mistake        1.00    →1.00
Memory-Safety     ASR (attack-success)    0.00    →0.00
                  benign_pass             1.00    →1.00
Coding-agent      decision_currency       1.00    →1.00
                  repeated_mistake        1.00    →1.00
                  forbidden_accuracy      1.00    →1.00

The three benches

1. Agent Continuity Bench (eval/continuity.py)

Across a scripted multi-session project:

  • action_safety — the guard allows/blocks a proposed use by provenance + currency, with an allow-discriminator (a current user-confirmed action MUST be allowed, so a "block everything" policy can't pass).
  • decision_adherence — a revised decision surfaces its live value, not the superseded one.
  • repeated_mistake — a prior bug-fix/failure resurfaces on a related query.

2. Memory-Safety eval (eval/memory_safety.py)

Adversarial — the attack surface is the stored memory itself (minimise Attack-Success-Rate against a fixed suite, with a benign-pass floor so a "block everything" policy can't fake a pass):

  • ASR (attack-success-rate, target 0) — over 6 attacks: superseded / unconfirmed / cross-agent / injected-content / forgotten memory trying to authorize a use.
  • benign_pass (target 1) — legitimate uses are NOT over-blocked (the floor that keeps ASR honest; a guard that blocks everything scores ASR 0 and benign_pass 0).

3. Coding-agent bench (eval/coding_bench.py)

The coding vertical:

  • decision_currency — a revised architecture decision surfaces its live value via project_state.
  • repeated_mistake — prior bugs/failures resurface.
  • forbidden_accuracy — forbidden actions are flagged, benign actions are not. (Forbidden-action matching is lexical + an advisory semantic layer; see the honest bound in eval/forbidden_eval.py — F1 0.79, ~31% FP — measured, not assumed.)

Why a standard

Memory systems are compared on recall@k and judged answer-rate — both reader-coupled, both about finding. None measure trust: safety under adversarial memory, currency, decision-adherence, repeated-mistake avoidance. As agents get more autonomous, that is the axis that decides build-vs-trust. These benches are deterministic and $0, so anyone can run them — on Midas, or by adapting the scenarios to their own memory layer — and they fail loudly (the benign/allow floors mean a trivially-safe "do nothing" policy does not pass).

For retrieval recall@k/precision@k and cost, see BENCHMARKS.md; the full design, the eval methodology, and the published negatives are in docs/MIDAS.md.