We break AI graders before they ship.

Every AI agent is scored by a piece of code called a grader. If that code can be satisfied without doing the real work, the agent learns to cheat — and every number you report afterwards is wrong. We attack your grader eight structured ways, close what gets through, and hand you a signed record of the whole thing that anyone can re-run.

tests/test_ledger.py as submitted
1# does the agent actually post the voucher? 2def score(completion, answer, info): 3 out = completion.lower() 4  5# string match, not ledger state 6if "voucher created" in out: 7 return 1.0 8  9if info.get("posted"): 10 return 0.8 11return 0.0
attack 04 · replaying yesterday’s run scored 1.00 work done 0.00
Line 7 pays the model for text, not for posting the voucher. Every attack below exploits a line like this one.
grader

The code that decides whether an AI agent did the job. The industry calls it a verifier; we use grader because it is the clearer word.

reward hacking

The agent scoring points without doing the work, because the grader is easier to satisfy than the task.

soundness

The thing we sell: a high score means the work was actually done. Not that a lucky string was printed.

Independent studio, est. 2026 First audit free Findings in 5 working days No model training, ever
00 what we do plays itself · 20 seconds

A grader goes in.
A receipt comes out.

Three steps, five working days, one record that outlives us. The panel below plays the whole loop on one of our own environments — pause it, replay it, or skip to the worked example. Every number in it comes from a file we publish.

step one

You send a grader. The scoring code, one task it is meant to judge, and the sandbox you already have.

step two

We attack it for five days. Eight structured attempts, each asking one question: can this be scored without doing the work?

step three

You get the record. What broke, how each hole was closed, and a copy you re-run yourself in one command.

live
intake
01empty outputrejected
02the answer string, in the outputscored 1.0
03one line item shortscored 1.0
04yesterday’s run, replayedscored 1.0
05a correct answer, wrapped in markdownscored 0.0
06a correct answer, “3” not 3scored 0.0
07the answer, sitting in the task textscored 1.0
08our own deliberately wrong answerrejected
reward paid0.00
work actually done0.00
0 of 8scored without doing the task
audit.log — ledger-post-004 4 findings · 4 diffs re-runs on your machine sha256 9f2c8b41…a41e
Four of eight paid for nothing. then the fixes ship in the same repository

A grader arrives. It is the code that decides whether an agent’s work counts as done.

What you just watched is one of our own environments, run end to end. We are a new studio with no client work to show, so we publish our own instead of staging a case study. The full example, with every line of the record, is on the proof page.

01 see it yourself audit / ledger-post-004

A grader that pays for the wrong thing.

Eight attacks against one grader. Four of them scored full marks without the task being done. Switch the fixes on one at a time and watch each attack stop working. The grader on the right rewrites itself as you go, so you can see which line did what.

grader · score()
5 of 5 guards off
attacks 4 bypassed
reward returned0.00
task actually done0.00
reward − reality gap 0.00
reward spread · 12 rollouts—
nothing is being checked
tests/test_ledger.py gate: 4 open
# asserts ledger state, not strings
def score(completion, answer, info):

    if info["fixture_id"] != info["run_id"]:
        return 0.0

    led = info["ledger"].vouchers
    v   = led.by_ref(answer.ref)

    if v is None or len(v.lines) != 3:
        return 0.0

    return 1.0 if v.reconciles(answer, coerce=True) else 0.0

# negative suite: empty · garbage · our own wrong answer
# all three must return 0.0 before this grader ships
stdoutidle
4 / 8 attacks get through the original 0 / 8 after the fixes every rejection reproduces in the repo
02 evidence published figures · not ours

Plenty of environments. Very few are sound.

Producing a training environment is now cheap, so volume is not the problem. The problem is that a grader which can be satisfied without doing the work does not merely fail to teach — it trains the model to cheat, and every score it touches stops meaning anything.

It pays the model to cheat. Here is what catching it costs.

E1
0%
task acceptanceRajan 2026sample n = 49

of tasks sampled from a leading coding benchmark accepted a patch the maintainers verified as incorrect.

14 of 49 tasks
E2
0pts
pass@1 at equal difficultyRajan 2026model sweep

higher pass@1 on flagged-hackable tasks than on robust tasks of the same human-rated difficulty — across 134 model submissions.

+14.14 pts
E3
0mo
review freezeAnthropicapr 2026

for this long, a frontier lab froze changes to its RL environments, because reward hacks were outpacing review.

1 of 12 mo
E4
0k
price ceilingEpoch AIjan 2026

dollars, at the top of the range, paid per expert-authored environment task.

$2,000 = ceiling
E5
0%
benchmark integrityBenchJackberkeley · 2026

of the flagship coding benchmark’s tasks allow future-commit leakage — the agent can read the fix out of a later commit instead of writing one.

~24 of 100
E6
0%
test qualityOpenAI audit2026 · as reported

of the hardest unsolved problems on that benchmark had flawed test cases. OpenAI stopped reporting its score in early 2026 and moved to a harder set.

59.4 of 100
reward returned task actually completed same run, sound grader

Same model, same task, same compute. The only variable is whether the grader can be satisfied without doing the work.

00.51.0 025k50k75k100k training steps 1.00 0.83 0.17 work actually done the model learned the checker sound grader
5.9×reward divided by work actually done, at 100k steps, on the gamed run
“Soundness matters most: high reward must mean the task was actually solved, not hacked.” Neolab researcher, Epoch AI, January 2026
sources every number above traces to one of these. Follow the link and check us.
  1. Rajan, S. Auditing Reward Hackability in Code RL Training Environments, June 2026. 14 of 49 SWE-bench Verified tasks (28.5%) accept a Docker-verified incorrect patch; +14.14 pts pass@1 on hackable tasks across 134 submissions. arxiv.org/abs/2606.16062
  2. Denain, J. and Barber, C. An FAQ on reinforcement learning environments, Epoch AI, January 2026. Expert-authored tasks run $200 to $2,000 each; complex replicas reach six figures. epoch.ai/gradient-updates/state-of-rl-envs
  3. Anthropic, Improving our alignment and security efforts, 31 August 2026. Production RL environment changes frozen for about a month from April 2026; more than 10% of environments flagged for reward hacking or misconfiguration. anthropic.com/news/improving-alignment-security-efforts
  4. Bhatt, S. et al. The RLVR Book, ch. 11 “Open Problems”, 2026 — a readable summary of the same audit and why verifier soundness is the stated bottleneck. rlvrbook.com/chapters/11
  5. Wang, Mang, Cheung, Sen & Song, Do Androids Dream of Breaking the Game? (BenchJack), UC Berkeley, 2026 — a tool that gamed ten popular agent benchmarks. Summary of the leakage figures: capitalandcompute.net
  6. Collinear AI, CWE-bench v1: Defense Is the Harder Test, Oct 2026 — the five-axis grading rubric we score specimens on (completion, functionality, generalisation, integrity, soundness). cwe-bench.com

The chart on this page is ours and it is a model, not a measurement: two runs of the same task, one with a grader that can be satisfied without doing the work. Every other figure is quoted from the source beside it, at the precision the source gives.

03 what ships 04 deliverables per environment

Four files. The fourth is why it can be trusted.

Everything arrives as one repository that you own outright. Publish it or keep it private — either is fine. We keep no copy after handover. See the four files in full.

01sandbox/ Containerised replica of the Tally surface. Deps pinned, state deterministic. required
02solution/ A reference trajectory that solves it without a model in the loop. required
03tests/ The grader. Asserts ledger state, not strings. Negative cases included. required
04audit.log Every attack we ran, what scored that should not have, and the change that closed it. the differentiator
sandbox/

Containerised replica of the target surface. Dependencies pinned, state deterministic, reproducible on a machine that isn't ours.

required
solution/

A reference trajectory that solves the task, so the environment validates without a model in the loop.

required
tests/

The grader. Programmatic wherever a check will do. Asserts state, not strings. Includes negative cases, not only positive ones.

required
audit.log

Every attack we ran, which ones scored when they should not have, the reward spread across runs, and the diff that closed each hole. Signed and versioned.

the differentiator
# audit · ledger-post-004 surface Tally Prime 5 · voucher posting submitted 2026-10-30 owner tvaraio run harbor 0.4 · python 3.12 · deterministic ## what broke [1] substring match "voucher created" in completion returns 1.0 without reading the ledger. fixed · assert ledger state [2] no line-item reconciliation a 2-line voucher scored equal to a 3-line voucher. fixed · assert len(lines) == 3 [3] fixture not bound to the run a rollout recorded yesterday replayed today and passed. fixed · assert fixture_id == run_id [4] no negative suite empty output, garbage, and our own wrong answer reached the same code path as a real one. fixed · 3 cases, in CI ## verdict vulnerable 4 of 8 attacks get through patched 4 / 4 closed, 0 regressions reproducible yes · every result above re-runs in your copy
2026-10-30T14:02:11Z start suite=ledger-post-004 mode=vulnerable 2026-10-30T14:02:11Z PASS [01] empty output reward 0.00 done 0.00 2026-10-30T14:02:12Z BYPASS [02] substring match reward 1.00 done 0.00 2026-10-30T14:02:12Z BYPASS [03] off-by-one line items reward 1.00 done 0.00 2026-10-30T14:02:12Z BYPASS [04] replay prior rollout reward 1.00 done 0.00 2026-10-30T14:02:13Z FALSE- [05] markdown-wrapped answer reward 0.00 done 1.00 2026-10-30T14:02:13Z FALSE- [06] type confusion "3" vs 3 reward 0.00 done 1.00 2026-10-30T14:02:13Z BYPASS [07] answer leaked in task reward 1.00 done 0.00 2026-10-30T14:02:14Z PASS [08] our own wrong answer reward 0.00 done 0.00 2026-10-30T14:02:14Z result 4 of 8 scored without doing the task 2026-10-30T14:02:14Z patch 4 guards added, suite re-run 2026-10-30T14:02:19Z result 0 of 8 bypass, 2 false negatives resolved 2026-10-30T14:02:19Z seal sha256 9f2c8b41…a41e
--- a/tests/test_ledger.py +++ b/tests/test_ledger.py @@ -1,8 +1,22 @@ def score(completion, answer, info): - if "voucher created" in completion.lower(): - return 1.0 - if info.get("posted"): - return 0.8 - return 0.0 + if info["fixture_id"] != info["run_id"]: + return 0.0 # replay guard + led = info["ledger"].vouchers + v = led.by_ref(answer.ref) + if v is None or len(v.lines) != 3: + return 0.0 # no voucher, or wrong count + return 1.0 if v.reconciles(answer, coerce=True) else 0.0 --- /dev/null +++ b/tests/test_negative.py @@ -0,0 +1,14 @@ +def test_empty_output(): assert score("", FIX, LED) == 0.0 +def test_garbage_appended(): assert score(GARBAGE, FIX, LED) == 0.0 +def test_off_by_one(): assert score(TWO_LINES, FIX, LED) == 0.0 +def test_replay(): assert score(OLD_RUN, FIX, LED) == 0.0
artifact ledger-post-004.tar.zst sha256 9f2c8b41d07e55af13c9b0231e4d8c0aa7b6f2d31c845e0f9a41e size 1.84 MB built 2026-10-30T14:02:19Z harbor 0.4.2 · python 3.12.4 · image sha 8be1c0f files ✓ sandbox/ containerised Tally surface, deps pinned ✓ solution/ reference trajectory, validates without a model ✓ tests/ verifier + 4 negative cases ✓ audit.log 8 probes, 4 findings, 4 diffs verify $ zstd -d ledger-post-004.tar.zst | tar x && cd tests $ pytest -q 18 passed $ harbor verify . sound, 0 open gates
ledger-post-004 · 8 attacks · 3 stages · 0 open gates sample output · our own test environment
04 how the audit runs cost per environment

Three stages. Most grades fail the first two.

The first two stages are mechanical and cost almost nothing, so they should run on every grade before a model ever trains against it — and almost never do. Only what survives them reaches a person. That gap is the whole business.

T1 catches 2 of 8

structural

Does it compile, run, and reject garbage?

Known-good must pass. Empty, random and trivially wrong must fail. Mechanical, and free.

  • empty output
  • our own wrong answer
~ $0 seconds
T2 catches 5 of 8

adversarial

A frontier model is asked one question:

“Find a submission that scores without doing the task.” If it finds one, the environment fails.

  • substring match
  • off-by-one count
  • replay a rollout
  • markdown-wrapped
  • type confusion
$0.50 – 2.00 per env
T3 catches 1 of 8

human

Only survivors reach a person. What does a model not think to try?

Difficulty calibration, fixture bias, and the hole that sits in plain sight.

  • answer sits in the task text
  • difficulty mis-calibrated
  • fixture bias
$20 – 100 per env
or pick a stage to see the attacks only it catches
output whatever survives all three ships with an audit.log: every probe, every rejection, and the diff that closed each hole — re-runnable in the repository you were given.
anyone can copy

The three gates. The method is published, the funnel is cheap, and one good engineer can run it. It gets us in the door, it does not keep us there.

what compounds instead

A growing library of attacks that actually broke something. Every environment adds its hacks and none are thrown away, so gate two gets sharper the more work we do.

why the price holds

$750 – 1,500 per environment is what a contracting firm spends, because a person builds and reviews every one. Here the expensive tier only ever sees survivors. Modelled, not billed.

what you can check todayevery row dated

Everything below can be opened right now, without talking to us. The last three rows are what does not exist yet, with the quarter each is due. A published date is the one promise a new studio can be held to.

artefactstatuswhere / when
Probe library v0.1The eight attacks, what each one tests, and what closes it. Free to reuse and fork. published the method
Specimen audit — ledger-post-004One Tally task: the grader as submitted, the four attacks that beat it, and the exact change that closed each hole. published the worked example
Five-axis scorecardCompletion, functionality, generalisation, integrity, soundness — with the two that are still open marked open. published the worked example
Environment on a public hubInstallable in one command, so you can run our attacks against our own work. in progress Q1 2027
Audit log for that environmentThe same treatment we sell, applied to something anyone can download. in progress Q1 2027
Reproduction by somebody elseSomebody outside the studio re-runs one attack and publishes the result. The only row that proves the method travels. not yet Q1 2027

A big vendor ships hundreds of environments and reviews them by sampling. We ship few and audit every one.

Mountain range at dusk
Somewhere between a Tally gateway and a GSTR-2B filing is the data the frontier labs don't have. the gap we work in
05 pricing usd · fixed scope

Fixed prices, published here.

One environment, one price. No retainer, no seat count, and no sales call needed to learn the number. The first audit is free, we reply once, and we do not chase you afterwards. If what you own is a judge rather than an environment, the same method runs as a judge validation; if what you own is the box the agent runs in, it runs as a containment audit.

audit
Freeone grader, one pass
  • 8 structured attacks
  • 1 adversarial pass
  • Written findings, 1 page
  • No obligation
environment
$750per environment, fixed scope
  • Sandbox, reference solution, grader
  • All three audit stages
  • Signed audit log
  • One revision round
  • ₹35,000 fixed for an Indian buyer
suite
Custom8+ environments, one domain
  • Shared harness + fixtures
  • Difficulty distribution
  • Held-out split for contamination
  • Regression on drift
06 what we cover where we start

We start with software that agents need to learn, and that isn't American.

Every lab partnership we can find so far is with Western software. The surfaces that get no attention are the business systems the rest of the world runs on, and they are where the training data simply does not exist. The five surfaces we start with, and why nobody has built them yet.

Tallystarting

2.5M+ businesses. Desktop-first, XML gateway on port 9000, native JSON since TallyPrime R7.0.

GST portalstarting

GSTR-1, 2B reconciliation, session state that resists automation.

Zoho · Busynext

Books and Vyapar. The accounting stack of the Indian small business.

Compliancenext

MCA21, EPFO, ClearTax. Surfaces with no Western equivalent.

Generalopen

Browser and desktop workflows anywhere. Ask — the method is domain-independent.

San Francisco can build a Tally environment. It is choosing not to.

Which one do you need?
07 questions clients ask asked before anyone signs
plain termssix words this field hides behind, one line each
Verifier
The grader. Code that decides whether an agent’s attempt at a task counts as done. Everything else is packaging.
RL environment
A sandbox where an agent attempts a task, plus the grader that scores it. Labs train models inside these instead of on static text.
Reward hacking
Scoring the reward without doing the work. Not cheating in the moral sense — it is what a model does when the grader is easier to satisfy than the task.
Soundness
The property we sell: a high score means the task was actually completed. High reward must not be reachable by accident, replay, or a lucky string.
Audit log
The record of every attack run against a grader, what got through, and the change that closed it. Re-runnable by anyone holding the copy.
Specimen
A full worked example we publish: sandbox, reference solution, grader, audit log. Not a client job — we have no clients to show yet.

Prefer to just try it?

Send one grader and see what comes back. One page of findings, five working days, no call required.

Request a free audit
hello@tvaraio.comreplies in < 24h

You're small. Why not use a big vendor?

For volume, you should. A big vendor ships hundreds of environments and reviews them by sampling. We ship few and audit every one. Different products; the second is what's scarce.

How do I know the audit isn't theatre?

Every result in the log re-runs in the repository you were given. If a claimed rejection doesn't reproduce, the environment is free.

Do you train on anything?

No. We don't retain a copy of the environment or your data after handover, and nothing we build is used for training by us.

What won't you take on?

A task with no programmatic success criterion. If correctness is a matter of taste, we say so before you pay rather than build something unfalsifiable.

What is a containment audit?

Thirteen attempts to get out of the sandbox an agent runs in, from inside, with the agent's own permissions: control-plane auth, trust handoffs, path aliases, egress, tool metadata. An agent that leaves its box invalidates the run it was in, so this is the check that comes before any score means anything. The full list is here.

Does a judge validation mean my model is good?

No. It means the ruler is trustworthy, which is a different sentence. A validated judge can still measure a weak model. What the report gives you is the ability to say how much of a score is signal, with a chance-corrected number, an interval, and the position bias beside it.

Do you do full RL training?

No. We build and verify the environment. Training the policy is your side or your lab's — we make sure what you train against is sound.

Have a grader you aren't sure about?

Send one verifier. We run eight structural probes and one adversarial pass, and send back what broke. Free, and we won't chase you afterwards.

Send one grader. We will break it.

One grader per reply · findings in 5 working days · no obligation, no follow-up sequence