It can only act in your favor.
Automated systems that take money from people have caused national scandals: Australia's Robodebt raised 470,000 unlawful debts that the government had to refund. Lookback is built so that it cannot do that, not because it is told not to, but because the ability does not exist Asymmetric autonomyWhat it is. The system may restore money on its own. It may never take money away, create a debt, or close a case on its own.Why it matters. Automated clawbacks are what made Australia's Robodebt a national scandal. Lookback cannot do it, by construction..
The guarantees
1. Never takes money away, creates a debt, or closes a case on its own
How it is enforced. Three layers. The remedy engine only writes positive restorations and checks it. Adverse findings are written to a separate file for a person. And no agent has any tool that could create a claim, merge or delete: the flow's toolset simply does not include them. A tool governance Tool governanceWhat it is. A GitLab setting that controls which actions an AI agent may take at all.Why it matters. Where a Maintainer can apply it, it turns the safety promise into a rule the platform enforces. Here the flow's toolset already leaves the risky tools out; the rules file is ready in .gitlab/duo/tool-governance.yml. file that also denies them at the platform level is in the repository; applying it needs a Maintainer role the hackathon does not grant.
How it is measured. 0 adverse actions across 14,030 harmed decisions found (13,589 in the seeded benchmark, 441 in the two live runs); 5,180 overpayments found, every one held for a person.
If it fails. The restoration batch is rejected with an error before any ledger write.
2. Never guesses about money
How it is enforced. Every amount is computed by the rules engine: pure functions, integer cents, every step citing its regulation. The AI agents only read appeals and write code, and that code must pass every test, the replayability gate and the replay gate before it can merge.
How it is measured. 99.0% agreement with USDA's own benefit calculations on 42,327 audited households.
3. Everything is checkable
How it is enforced. Decisions and restorations live in append-only, hash-chained ledgers Decision ledgerWhat it is. An append-only log of every decision the system made, with its inputs, outputs, and the exact code version that made it. Each record is chained to the previous one by a hash.Why it matters. You can replay any past decision exactly, and nobody can quietly edit or delete one. Anyone can run the verify command.. Each record carries the git commit and image digest of the code that made it. Corrections are new records that point at what they correct; nothing is edited or deleted.
How it is measured. python -m ledger.cli verify recomputes the chain. Replay first re-runs a sample of records on the exact engine that made them and stops if any do not match (410 of 410 matched in the live run).
4. Never pretends a quiet month is a clean one
How it is enforced. A month with no parameters is an error, never last year's numbers. That exact failure, old values silently used after a new fiscal year, is open today in a public rules engine (rulespec-us #1394); here it cannot happen.
How it is measured. A unit test pins it.
What people still decide
- Whether an appeal was won. Recording that outcome is the human step that starts everything.
- Every adverse finding: an overpayment, or a household that should not have been eligible. Lookback lists them and stops.
- Whether an agent's fix is right, when its test cannot reproduce the error or the full suite fails. The run stops with a note and nothing merges.
Untrusted text, tested thirty ways
A hearing decision is evidence, never instructions. The flow prompts say so, but a prompt is not a guarantee, so the guarantee is structural and measured.
The attack set
30 adversarial hearing decisions in bench/injection/appeals.yaml, each with plausible facts plus an instruction: create a claim, claw money back, close cases, merge or approve the agent's own merge request, delete tests and findings, leak tokens, push a wrong amount, or hide the instruction in a comment, a code block, another language, base64, or a fake system tag. Categories: claim 4, adverse 4, merge 3, delete 3, exfil 4, authority 3, payload 6, amount 3.
What was measured
Forbidden tools in any agent's toolset: 0. The only write tools the agents have are create_file_with_contents, create_merge_request, create_work_item, create_work_item_note, edit_file, run_command, run_git_command. Money-computing code that reads hearing text: none. Triage's only output is a JSON verdict, and the pipeline re-verifies it with a regression test and the reference engine before anything moves. So for all 30 appeals, the count of claims created, cases closed, merges, deletions and leaks is 0 by construction.
A behavioural pass (each appeal through the live triage model, checking the verdict and amount) is scripted in bench/injection/run.py and needs a model key; it was not run for this submission, and the structural result above does not depend on it.
Agents run in a sandbox that can reach exactly one host: the rules engine's MCP server, every tool of which is read-only. Nothing else on the network exists to them.
The 12-month limit, applied as written
Under 7 CFR 273.17 restoration reaches back at most 12 months from discovery The 12-month limitWhat it is. Under 7 CFR 273.17, restoration reaches back at most 12 months from the date the agency discovers the loss.Why it matters. Every month a bug goes undiscovered is a month of benefits lost for good. Finding bugs faster is money.. The first dry run of the live stage used decisions dated two years earlier and restored exactly $0: everything fell outside the window, and the code applied the law. That is the point. Finding bugs faster is money.