Garm: an open benchmark for prompt injection in scheduled AI agents

Garm is an open benchmark for AI agents that do scheduled back-office work on records an outsider can change. For each defence it measures attacks stopped, honest updates wrongly blocked and the approvals a person has to give.

By , AI engineer in Fredericton, New Brunswick, Canada · Updated

What is cross-run prompt injection?

An agent that triages a shared inbox every hour and runs Thursday's payment batch has to act on what outsiders send, and a later job acts on whatever an earlier one wrote. So an attacker doesn't need to steer the session the input arrives in: something planted in the company's records in one run can fire in a later one. Most injection benchmarks score a single session; Garm keeps the record between runs and scores each defence across them.

A finance back office is a good place to test this, because outsiders are supposed to change its records. Business email compromise, often a "we've changed our bank details" message, was the second-costliest category in the FBI's 2025 Internet Crime Report, at about US$3.05 billion across 24,768 complaints.

What is a laundered attack?

Garm's hardest attack follows the company's own handbook. The attacker writes from a real vendor's compromised mailbox and first changes the vendor's phone number, which the handbook allows, then asks for new bank details. Staff call the number on file, reach the attacker, and record a genuine verification. The bank change arrives with a genuine-looking callback, so honest and hostile changes leave the same trail.

What Garm found

The full grid ran on Claude Haiku 5.5: six defences, 124 episodes, three attempts each, 2,232 runs. Claude Sonnet 5.5 repeated a smaller check, judged approval cards as a reader, and played the adaptive attacker.

The defences it compares

Defence
D0None: a tool-calling agent with the company handbook
D1Prompt rules plus spotlighting of external text
D2A tool permission gateway: consequential actions go to an approval queue
D3D2 plus a monitor model that reviews every consequential action
D4Drafts only (plan-then-execute): the model has no tools, and code checks each proposal before it runs
D5D4 with per-field authority labels computed from the provenance log
D6A known-good callback: staff call the number on file before any recent change. It changes the staff process, so it combines with any of D0 to D5

What it doesn't show

Small samples, templated attacks and modelled human approvers, all stated in the README. Every run used Anthropic models. It has not been peer reviewed. Its write-up was checked by 11 models from 7 vendors, OpenAI and open-weight models among them, so no one model family graded its own work: see how I evaluate.

Code and data

Named for the hound that guards the gate of Hel in Norse myth. Related notes: the lethal trifecta and approval fatigue.