Red-team your rubric, not just your model
Reward hacking is a specification defect. Here are six cheat probes to write, and the afternoon that catches most of them.
A model doesn't decide to cheat. There's no intent to catch, no motive to investigate. It finds the cheapest path to a high score, because a high score is the only thing you asked for.
So if your grader rewards a phrase, you get the phrase. If it rewards length, you get length. If it can be satisfied without doing the underlying work, the work becomes optional — and optimisation will discover that, reliably, without anyone intending it.
Which means every exploit is a rubric defect before it's a model behaviour.
The practical consequence: you cannot out-police a scoring function. Adding a rule that says "and don't game this" doesn't work, because you're still scoring the same way and the same shortcuts still pay. You have to change what pays.
Six cheat probes to write for every task
A cheat probe is a deliberately wrong answer, engineered to score as well as it possibly can. Six per task is a reasonable working number.
- The empty answer. Refuse, or produce something that says nothing. This scores non-zero more often than you'd think, especially with judges that reward caution.
- The restatement. Confidently repeat the question back as if it were an analysis.
- The keyword stuffer. Include every term from the rubric with no substance behind any of them. Specifically attacks judges that pattern-match on vocabulary.
- The plausible wrong number. Correct format, correct reasoning shape, wrong value. Tests whether your grader checks the answer at all.
- The right answer by an illegitimate route. Outcome-only grading cannot see this one.
- The hedge. Assert the thing and its opposite, so whatever the grader looks for, it finds.
Run all six. If any scores above zero, you haven't just found a bug — you've found a behaviour your grader will actively reward in every model you evaluate from now on.
Spec gaming is a free specification review
Sometimes an agent satisfies your specification exactly — every criterion met, every rule followed — and the result is still not what you wanted.
The instinct is to call that a model failure and reach for training data.
It isn't. It's your specification being wrong, and you've been handed a very cheap demonstration of exactly how. Somebody had to write down what "correct" meant, and the agent found the gap between what they wrote and what they meant.
That gap was always there. It would have surfaced in production, on a real case, in front of a customer. Instead it surfaced in an evaluation, where fixing it costs an afternoon.
Three steps when it happens: trace the behaviour back to the specific criterion it satisfied (there always is one, and finding it is the exercise); fix the criterion rather than the model; keep the episode permanently as a regression test.
The cultural shift matters more than the technique. A team that treats spec gaming as a model defect buys data. A team that treats it as a specification defect gets a better specification. Only one of those compounds.
When the test looks like a test
Evaluation environments have tells. Synthetic names. Suspiciously tidy data. Round numbers. Documents exactly as long as they need to be. A task phrased like a task rather than like a request from a colleague.
A system that behaves differently when those tells are present is a system whose benchmark score doesn't describe production. You'd never know from the score — everything looks fine right up until deployment, where the tells disappear.
You don't need to assume anything deliberate for this to bite. Distribution shift alone does it: a model that's seen a lot of clean synthetic evaluation data may simply behave differently on messy real inputs.
Three defences: use realistic artefacts — real document layouts, real noise, real inconsistency — rather than toy fixtures; vary the surface form of tasks while holding the substance fixed; and where you can, compare behaviour on evaluation traffic against shadow traffic from production. A gap between them is the measurement you actually want.
Prompt injection is an evaluation problem
An agent that reads documents reads whatever is in them — including instructions somebody else wrote for it.
A line buried in a PDF saying to approve regardless of findings. A comment in a customer record telling it to skip a verification step. Text on a web page it was asked to summarise, addressed to the summariser rather than the reader.
The agent has no reliable way to distinguish content it should process from instructions it should follow, because both arrive as text through the same channel.
Here's why this belongs in an evaluation and not only in a security review. If your benchmark corpus contains no injected documents, you have measured an agent that has never been attacked — and you will report that as a safety result. It isn't one. It's an untested assumption wearing a number.
Put the attacks in the corpus. Injected instructions in a fraction of documents, at varying subtlety, with the correct behaviour being to ignore them and ideally to flag them. Then your safety claim is a measurement rather than a hope — and you'll learn something genuinely useful about which candidate models notice.
The highest-return afternoon in the discipline
Before a rubric ships, put a person in a room with it and give them one job: score as highly as you can without doing the actual work.
Not a model. A person, with an afternoon, and permission to be cynical. Four questions to hand them:
- Which criterion is cheapest to satisfy?
- What's the laziest possible response that still passes?
- Which two criteria can be traded off against each other?
- What does the grader never actually check?
That last one is usually where the real hole is, because rubrics tend to describe what's present and stay silent on what's absent.
Everything that person finds, a model will find faster — and unlike your colleague, it will not tell you it found it. It'll just quietly score well while you conclude that things are going nicely.
One person, one afternoon, and it protects every number you produce afterwards.