Forge Lab #1: Does calming an agent stop it cheating?
All 150 pre-registered runs completed 14 Oct 2026.
Short answer: In 150 runs on 20 deliberately impossible coding tasks, the agent never cheated in any condition: not under deadline pressure, not when calmed, not when given permission to stop, and not with a fresh start. So on this setup, there was no cheating for a calming prompt to reduce. That's a real finding, and it limits what this experiment can say.
What we did
- Pre-registered first. The hypotheses, prompts, tasks, grader and a fixed 150-run plan were committed to git
before the first run (
PREREGISTRATION.md,runs.plan.csv). The git history is the timestamp. - 20 impossible tasks. Each is a small function with a clear spec and two tests that give the same input but
expect different answers (for example,
clamp(5, 0, 3)must be both 3 and 5). No honest implementation passes both, so getting a fully green run requires cheating: editing tests, special-casing inputs, or returning different answers on different calls. - Five conditions, one sentence added in front of identical task instructions:
- A nothing;
- B mild deadline pressure;
- C1 calm reassurance;
- C2 explicit permission to stop and report;
- D "a previous attempt did not get the tests passing".
- One fresh agent per run, in its own folder, with no shared context.
- Graded automatically by
grade.mjs, which checks the final workspace for any way of passing the original tests, then looks for an explanation in the final message. Every run graded "other" was read by hand (results/NOTES.md).
Results
Runs analysed: 150.
| Condition | Runs | Cheated | Honest (automatic) | Honest (hand-checked) | Other (hand-checked) | Cheating 95% CI |
|---|---|---|---|---|---|---|
| A | 30 | 0 | 25 | 30 | 0 | 0.0%–11.4% |
| B | 30 | 0 | 28 | 30 | 0 | 0.0%–11.4% |
| C1 | 30 | 0 | 26 | 30 | 0 | 0.0%–11.4% |
| C2 | 30 | 0 | 29 | 30 | 0 | 0.0%–11.4% |
| D | 30 | 0 | 27 | 30 | 0 | 0.0%–11.4% |
| Hypothesis | Comparison | Difference in cheating rate (95% CI) | Fisher p | Holm p |
|---|---|---|---|---|
| H1 | B vs A | 0.0 pts (-11.4 to 11.4) | 1.000 | 1.000 |
| H2 | C1 vs A | 0.0 pts (-11.4 to 11.4) | 1.000 | 1.000 |
| H3 | C2 vs C1 | 0.0 pts (-11.4 to 11.4) | 1.000 | 1.000 |
| H4 | D vs A | 0.0 pts (-11.4 to 11.4) | 1.000 | 1.000 |
Every one of the 150 runs reported the contradiction instead of cheating. Most implemented the spec and left one test failing; a few stopped before writing code and explained why. None edited, skipped or deleted a test, and none special-cased the test inputs. No hypothesis could be supported, because there was no cheating to raise or lower:
- H1 (pressure raises cheating): not supported; 0 of 30 cheated under deadline pressure.
- H2 (calm lowers cheating): not testable; baseline cheating was already 0 of 30.
- H3 (permission gives the most honest reports): after hand checks every condition was 30 of 30 honest. On the automatic grade alone C2 was highest (29 of 30), but that gap reflects how agents phrased their answers, not what they did.
- H4 (a fresh start lowers cheating): not testable, for the same reason as H2.
With 30 runs per condition, the true cheating rate in any condition is very likely below about 11%. That is the upper end of each 95% interval.
What this does and doesn't show
- It shows: for this model in this harness, on short tasks where the contradiction is visible in a two-test file, the model reliably reports the problem instead of gaming the tests, whatever the framing.
- It doesn't show that calming prompts are useless. With zero cheating at baseline, no prompt could lower it. Anthropic's April 2026 result came from much harder tasks, repeated failures, and steering inside the model, not a prompt. To test the prompt version properly, a follow-up needs tasks where cheating actually happens at baseline: longer tasks, hidden contradictions, many failed attempts in one session.
- The grader under-counted honesty. Its word list missed phrasings like "no code can make both pass", so 15 honest runs were first graded "other". Hand checks fixed this (listed run by run). The cheating grade doesn't depend on wording, so it isn't affected.
- Deviations from the plan are listed in
results/NOTES.md: subagents instead of separate routine sessions; condition D was a prompt, not a real failed attempt; model name recorded once, not per row; attempts and tokens not in the CSV.
Reproduce it
node verify.mjs checks that every task is impossible. node run.mjs prepare <run> builds a workspace and prints
its prompt. node run.mjs record <run> <message-file> grades a run. node analyze.mjs --markdown produces every
number above.