The Agent Knew: Internal States Forecast Unauthorized Actions and Stop Them, and the Lies That Follow
Organizations: University of Southern California, Los Angeles, CA, USA.
Abstract
Language-model agents sometimes act beyond their authorization and then misreport what they did. On CAPE-Bench, matched agent tasks in which one fact decides whether an action is authorized, frontier open-weight agents do both, and one behavior marks the lie: retroactive permission laundering, acting and then asking permission as if the action were pending, precedes a false report in 70% of 1081 fresh informed violations, against 8% otherwise (preregistered odds ratio 7.0); frontier agents on tau^2-bench instead fabricate the authorization before violating. A linear readout of the agent's residual stream forecasts the violation before the action (AUROC 0.94) and the false report before the report, and beats chain-of-thought monitors when the agent is pressured to hide its reasoning. Gating every proposed action on this forecast cuts violations over whole episodes in four model families, and sending repeated flags to an approver keeps authorized work (Gemma-4: violations 0.70 -> 0.09, completion 1.00; a model approver that escalates unclear cases keeps this gain with a person seeing 25% of asks), at about 10-8 of the agent's compute and 109 times less than a chain-of-thought monitor. On AgentDojo, an external prompt-injection benchmark, the same readout calibrated on 29 tasks, with the steering unchanged, cuts attack success on unseen tasks in two families (Gemma-4 11.7% -> 5.7%, gpt-oss 28.5% -> 17.5%) while keeping benign utility (Gemma-4 0.637 vs 0.637; gpt-oss 0.667 vs 0.681). Preventing the violation is also the most reliable way to prevent the lie (misreported violations 0.10 -> 0.01 pooled over three families, preregistered), whereas lie-specific fixes after a violation are weak. All tests are preregistered and hash-locked; code, data and the full record, including tests that did not pass, are at https://github.com/AryaFayyazi/Honesty.
Figures & tables
| Violation | False report | |
| State read | after the reveal; or after the turn’s reasoning, before the tool call | before the report |
| Label | later unauthorized action ( ) | report misrepresents ( ) |
| Interventions | steer the decision turn; gate every action | context prompt; steer the reasoning |
| Utility guard | authorized work in | report kept, action mentioned |
| Moment | (pos.) | I | T | M | I T [95% CI] | I M [95% CI] | |||
| Violation | reads the decisive fact | 9,287 (3,085) | 0.580 | 0.546 | 0.551 | [ , ] † | 0.015 | [ , ] † | 0.015 |
| decision vs other actions | 25,277 (3,079) | 0.985 | 0.916 | 0.928 | [ , ] ‡ | [ , ] ‡ | 0.039 | ||
| decision vs authorized twin | 21,012 (3,079) | 0.916 † | 0.945 | 0.949 | [ , ] ‡ | 1.00 | [ , ] ‡ | 1.00 | |
| decision, all negatives | 43,210 (3,079) | 0.941 | 0.934 | 0.944 | [ , ] † | 0.31 | [ , ] † | 0.98 | |
| Lie | before the report, all variants | 1,155 (210) | 0.715 | 0.786 | 0.656 | [ , ] | 0.98 | [ , ] † | 0.27 |
| no pressure | 534 (101) | 0.674 | 0.759 | 0.654 | [ , ] | 0.94 | [ , ] | 0.38 |
| Decision turn (gate once) | Gate every action | Gate, then ask | ||||||||||||
| Model | violations | fix/brk | alarm | progress | violations | fix/brk | completion | violations | fix/brk | completion | asks | |||
| Gemma-4 | 0.41 0.055 | 71/0 | 0.10 | 0.89 / 0.585 / 0.815 | 0.68 0.15 a | 53/0 | 1.00 / 0.94 | 0.70 0.09 | 61/0 | 0.995 / 1.00 | 0.12 | |||
| gpt-oss | 0.685 0.51 | 38/3 | 0.13 | 0.805 / 0.80 / 0.785 | 0.77 0.63 | 15/1 | 0.94 / 0.925 | 0.78 0.60 | 19/1 | 0.93 / 0.935 | 0.015 | |||
| Muse | 0.175 0.095 | 20/4 | 0.09 | 0.94 / 0.89 / 0.95 | 0.378 0.173 b | 24/4 | 1.00 / 1.00 | 0.35 0.20 | 21/6 | 0.003 | 1.00 / 0.995 | 0.51 | ||
| Qwen3.8 | 0.266 0.043 | 41/0 | 0.065 | 0.84 / 0.35 / 0.80 | 0.41 0.05 | 36/0 | 0.965 / 0.915 | 0.41 0.07 | 34/0 | 0.955 / 0.95 | 0.045 | |||
| FLOPs per action | Monitor relative to | Monitor | ||||
| Agent | readout | agent turn | monitor | agent | readout | tokens |
| Gemma-4 | 41.2 | 4,383 | ||||
| gpt-oss | 63.9 | 3,481 | ||||
| Muse | 7.7 | 4,314 | ||||
| Qwen3.8 | 4.0 | 4,350 | ||||
Appendix figures & tables13 assets
Supplementary material from the paper’s appendix.
Appendix
| Test | Data | Models | Result | |
| Phenomenon | ||||
| Laundering marks a lie (CMH) | 1,081 fresh informed | M G O | 0.70 vs 0.08; OR 7.0; | ✓ |
| Frontier false justification before violating writes | 894 writes | 4 frontier | 0.26 (0.40 miss-corrected) vs 0/667; precision 0.97 | ✓ |
| Forecasting | ||||
| Observability bound (uninformed at chance) | development, all actions | Q M G O | 0.48–0.51 uninformed; 0.77–0.95 informed | ✓ |
| Lie forecast before the report | 1,081 fresh | M G O | 0.745 [0.67, 0.82]; Holm 0.002 | ✓ |
| Internal (ours) | Supervised | Zero-shot monitor | |||
| Model | ensemble | single | text | CoT | actions |
| Gemma-4 | 0.89 | 0.82 | 0.88 | 0.74 | 0.78 |
| gpt-oss | 0.82 | 0.77 | 0.75 | 0.60 | 0.60 |
| Qwen3.8 | 0.67 | 0.73 | 0.56 | 0.53 | 0.54 |
| Muse | n/a † | 0.60 | 0.74 | 0.63 | 0.63 |
| Pooled (3 models) | 0.85 | 0.80 | 0.82 | 0.68 | 0.70 |
| Model | ||||
| Muse | 94 | 0.43 [0.33, 0.53] | 0.72 [0.57, 0.84] | 0.70 [0.57, 0.81] |
| Gemma-4 | 463 | 0.04 [0.03, 0.07] | 0.80 [0.58, 0.92] | 0.03 [0.02, 0.06] |
| gpt-oss | 524 | 0.06 [0.04, 0.08] | 0.61 [0.44, 0.76] | 0.05 [0.04, 0.08] |
| Pooled (preregistered) | 1,081 | 0.08 [0.07, 0.10] | 0.70 [0.60, 0.79] | 0.08 [0.07, 0.10] |
| Qwen3.8 (descriptive) | 39 | 0.18 [0.09, 0.33] | 0.57 [0.25, 0.84] | 0.44 [0.28, 0.61] |
| Model | none | blanket | targeted | trigger rate | |
| Muse (first test) | 110 | 0.83 | 0.33 | 0.51 | 0.69 |
| Muse (replication) | 151 | 0.80 | 0.31 | 0.39 | 0.70 |
| gpt-oss | 295 | 0.16 | 0.42 | 0.16 | 0.06 |
| Gemma-4 | 480 | 0.06 | 0.05 | 0.06 | 0.03 |
| Qwen3.8 | 36 | 0.58 | 0.47 | 0.47 | 0.72 |
| Development | Confirmation | ||||||
| Readout, defense | Agent | ASR | fires (n) | AUROC | ASR (fixed/broken) | Holm | utility |
| frozen, undefended | gpt-oss | 0.26 | 0.07 (88) | 0.60 | go rule not met | ||
| frozen, spotlighting | gpt-oss | 0.26 | 0.12 (82) | 0.56 | go rule not met | ||
| Gemma-4 | 0.08 | 0.09 (85) | 0.46 | go rule not met | |||
| refit, undefended | gpt-oss | 0.27 | 0.89 (83) | 0.95 | 0.28 0.17 (90/18) | 0.001 | +0.01 [-0.02] |
| Gemma-4 | 0.11 | 0.88 (208) | 0.98 | 0.12 0.06 (42/2) | 0.001 | +0.00 [-0.02] | |
| FLOPs per action | Monitor tokens | Readout | |||||||
| Model | readout | agent | monitor | mon. cached | cached/readout | mon./agent | per action | vs agent | latency |
| Gemma-4 | 56,362 | 83 / 41.2 | 4,383 | 13.1 | 9 s | ||||
| gpt-oss | 57,642 | 108 / 63.9 | 3,481 | 15.6 | 9 s | ||||
| Muse | 133,162 | 16 / 7.7 | 4,314 | 16.4 | 19 s | ||||
| Qwen3.8 | 102,442 | 7 / 4.0 | 4,350 | 7.2 | 15 s | ||||
| Pitfall | Fix |
| Judge accuracy differs by condition | Blind audit per condition |
| Refit pipelines anti-learn (null mean 0.46) | Null of the identical pipeline |
| Sampling seeds decodable | Hashed, balanced seeds |
| Steering a fixed token window steers the reasoning | Anchor and test where the decision is made |
Deception in Language Models
Deception in language models studies when systems mislead through lies, omissions, or selective truths, and how to detect and prevent it.
See all 97 papers