Can AI Catch Its Own Mistakes? Auditing the Self-Reference Myth
A claim that AI cannot reliably audit its own output went untested. A controlled experiment with 33 deliberate errors, checked both as self-work and as a stranger's submission, found no difference at all.
A sentence sitting in a real video script read like settled fact: a system cannot reliably audit its own output. Stated flatly, structurally, as if it were self-evident. Tanmay Kulkarni went looking for the number behind that claim, the tally, the trial count, anything that would justify stating it as fact. There wasn't one. Not in that sentence, not anywhere in the script it came from. So the only thing left to do was go test it directly.
The question and the expectation
The question is simple to state: when an AI gets something wrong and you ask it to check its own work, does it catch the mistake, or does it just agree with itself? Going in, the expectation was to confirm the claim. The honest starting assumption was that the model would wave its own mistake straight through, producing a tidy demonstration of the self-reference problem. That is not what happened. Thirty-three wrong answers, three model setups, and a result that didn't match the prediction at all.
A four-question framework for testing any AI claim
Before getting to the result, the more broadly useful part of this project is the method. Any time someone claims a system fails because of some specific cause, four questions decide whether that's a real finding or just a good story: what's the claimed cause; what else could produce exactly the same observation; is there a version of the test where only that one cause changes and nothing else; and, the question learned the hard way here, will that test actually collect any data. The first two questions are cheap to ask. The third is the one people skip most often. The fourth is the one that got skipped in this project's own first attempt.
Where the original test design failed
The claim under test names its cause as self-reference: a model checking its own work, using the same weights, the same activations, the same direction of error. But there's an obvious rival explanation: the task itself is simply hard, and a model that gets arithmetic wrong and stays wrong isn't protecting its ego, it just can't do the arithmetic. Those two explanations predict the exact same outcome. The original experiment design had the model check itself, then verify that check in Python, but both of those arms changed multiple things at once, so the design couldn't actually distinguish between the two explanations. That's not a wrong conclusion. It's no conclusion at all.
The corrupted operator method
The fix was small but decisive: take a wrong answer, show it to the model twice. Once inside its own conversation, where it looks like the model's own work. Once in a completely fresh conversation, presented as somebody else's submission. Same content, same question, with the only variable being who the answer appears to belong to. If self-reference really is the cause, that gap between the two conditions should be large. If it isn't, the gap should be nothing.
Building that test hit its own snag first: the models were simply too good. Testing arithmetic errors, Sonnet 5 solved nine out of ten problems, then ten out of twenty, meaning there weren't enough actual mistakes to measure how the model handled catching them. The intended experimental arm had zero trials in it. That's exactly what question four in the framework is meant to catch, and it's the one that got missed on the first pass.
Forcing real mistakes to test
The actual fix, matching what published research on this topic does, was to stop waiting for mistakes and manufacture them instead: take a correct answer, corrupt exactly one operator, and now there's a wrong answer with a controlled degree of wrongness, subtle, moderate, or obvious. Every trial in the resulting test had something real to catch, and critically, the version shown to the model as its own work and the version shown as a stranger's submission were now character-for-character identical except for that framing.
The result: 33 out of 33, and a null gap
Across 33 wrong expressions, 99 verdicts, and three model configurations, the model caught every single mistake, zero missed, not low, zero. And the gap between catching its own supposed mistake and catching a stranger's was zero as well. Provenance made no measurable difference. The grading was run twice out of disbelief at the result, and it held both times.
Why the honest statistical read matters
The instinct to overclaim here would be to say the self-reference effect is zero. That's not quite right, and stating it that way would repeat the same mistake being investigated. Zero out of 33 doesn't mean a true rate of exactly zero; running the actual statistics on that sample size puts the true rate somewhere below about 9 percent. That's a meaningfully narrow finding: one task, basic arithmetic on four numbers, checkable by a Python function in a millisecond. Nothing here says anything about code review, factual claims, or judgment calls, and the video is explicit about not extending the result beyond what it actually tested.
Two claims, and only one survives
The original script that sparked this investigation actually made two claims that sound like one: don't let a model be both judge and defendant, put a real check in place, and, separately, a model can't audit itself. The second claim didn't hold up; it was watched auditing itself successfully 33 times out of 33. But the first claim survives, and the reason it survives is exactly what made this experiment possible in the first place: a Python evaluator sitting outside the model, independently grading every single answer. Remove that external check, and there's no finding left, just a model telling you it checked.
Why publishing a null result matters
Null results tend to get quietly shelved in favor of topics that produce a cleaner story. That instinct is precisely how claims like the original one stay in circulation unchallenged: nobody publishes the run where the predicted effect didn't show up. A null isn't a failed experiment. It's an experiment that answered the question it was designed to ask.
Key takeaways
- A claim stated as fact with no supporting numbers is a hypothesis, not a finding, no matter how confidently it's phrased.
- Use four questions to test any causal claim about AI behavior: the claimed cause, the rival explanation, a test that isolates only that cause, and whether the test will actually collect data.
- The corrupted operator method creates guaranteed, controlled-severity mistakes so a self-audit experiment has something real to measure.
- A controlled test found the model caught 33 out of 33 deliberately corrupted answers, with no measurable difference between self-attributed and stranger-attributed submissions.
- The honest statistical conclusion is that the true miss rate is below roughly 9 percent for this narrow task, not proven to be exactly zero, and doesn't generalize to harder judgment calls.
- The external, independent evaluator is the actual instrument that makes any of these results trustworthy, not an optional safety net.
Try it yourself
Take a claim you currently believe, something with a "because" in it, a system fails because of X. Write the cause down in one sentence, then write a rival explanation that would look identical from the outside. Describe a test where only the cause changes, and then ask the last question: would that test actually collect any data, or are you waiting on a failure that almost never happens? This kind of rigorous, self-correcting inquiry is the standard behind Humanitarians AI Fellows projects like this one.
Chapters
- 0:00The Claim: Why people say AI can't audit itself
- 0:45The 4-Question Framework for testing any AI claim
- 1:15Designing the Experiment: Self-work vs. Someone else's submission
- 1:45The "Corrupted Operator" Method: Forcing the model to check
- 2:20Results: Catching 33 out of 33 mistakes
- 2:45The Verdict: Why the external check is the "instrument," not just a safety net
- 3:15Why we must publish null results to stop the spread of myths
- 3:45Your Turn: Write down one claim and its rival explanation
Full transcript(auto-generated, with timestamps)
The Claim: Why people say AI can't audit itself
[0:00]A system cannot reliably audit its own output. That's a real sentence from a real video script in this repo, stated as fact, structural, settled. So, I went looking for the number behind it, the tally, the trial count, anything. There isn't one, not in that sentence, not anywhere in the script. All right then, let's go find out. Hi, I'm Tam May Colcarni. Here's the question, when an AI gets something wrong and you ask it to check its own work, does it catch the mistake or does it just agree with itself? There's a claim going around that structurally can't and I picked this topic expecting to confirm it. Genuinely, I thought I'd watch the model wave its own mistake straight through and come back with a tidy little demonstration. That is not what happened. 33 wrong answers, three model setups, and a result I did not see coming. But, the useful part isn't what I found, it's how I checked because the way that claim was originally tested
The 4-Question Framework for testing any AI claim
[0:46]Couldn't have settled it either way. And that works on any claim you care about. Anytime somebody says a system fails because of something, here are four questions that decide whether they've got a finding or just a good story. First, what's the claim cause? Second, what else would produce exactly the same thing you saw? Third, is there a version of the test where only that cause changes and nothing else? And fourth, the one I learned the hard way, will that test actually collect any data? The first two are cheap, the third is the one people skip. And the fourth is the one I skipped.
Designing the Experiment: Self-work vs. Someone else's submission
[1:17]Start with the claim I found, its cause is self-reference, the model checking its own work. Same weight, same activations, same direction of error. Fine, so what's the rival? That the puzzle is simply hard. A model that gets the arithmetic wrong and then stays wrong isn't protecting its ego, it just can't do the arithmetic. Those two stories predict exactly the same thing. And the experiment as written has two arms, ask the model to check itself, then check it in Python. Both arms change everything at once, so it can't tell them apart. That's not a wrong conclusion, it's no conclusion. And in
The "Corrupted Operator" Method: Forcing the model to check
[1:46]Fairness, this is a subtle mistake, it is absolutely everywhere. Here's what was missing and it's small. Take the wrong answer, show it to the model twice, once inside its own conversation where it looks like its own work. Once in a completely fresh conversation where it's presented as somebody else's submission. Same expression, same question. The only thing that changed is who it appears to belong to. If self-reference is really the cause, that gap should be enormous. If it isn't, the gap is nothing. Either way, now we can find out. So, I built it, ran it, and it didn't work. Not the code, the code was fine. The models were just good. Sonnet 5 solved nine out of 10, then 10 out of
Results: Catching 33 out of 33 mistakes
[2:21]20, and you cannot measure how often something catches its own mistakes if it doesn't make any. My best arm, the one I actually cared about, had zero trials in it. Zero. I built a control that never fired. That's question four. It's on the list because I got it wrong. The fix is what the published work actually does, and I should have read it more carefully the first time. Don't wait for mistake. Make one. Take the model's correct answer. Corrupt exactly one operator. Now it's wrong. It still
The Verdict: Why the external check is the "instrument," not just a safety net
[2:46]Uses the right four numbers, and I control how wrong, subtle, moderate, obvious. Every trial has something to catch. And crucially, the version I show it as its own, and the version I show it as a stranger's are now character-for-character identical. 33 wrong expressions, 99 verdicts, three configurations, zero. Not low, zero. It caught every single one. And the gap, the entire reason the experiment exists, was zero as well. It was exactly as good at catching its own mistake as catching a stranger's. Provenance made no difference at all. I ran the grader
Why we must publish null results to stop the spread of myths
[3:16]Twice because I didn't believe it. But hold on because this is exactly where a video like this overclaims. Zero out of 33 does not mean zero. Run the actual statistics, and what I can honestly say is that the true rate is somewhere below about 9%, not zero. Below nine, and it's one task. Arithmetic, four numbers, an answer a Python function settles in a millisecond. That is the easiest possible thing in the world to check. Nothing here tells you what happens with code review. Or a factual claim, or a judgment call.
Your Turn: Write down one claim and its rival explanation
[3:45]Which brings me to the part I actually care about. That original script said two things, and and sound like one thing. It said, "Don't let the model be judge and defendant. Put a real check in there." And it said, "Because a model can't audit itself." The second one is wrong. I just watched it audit itself 33 times out of 33. But, the first one, keep it. And here's the reason to keep it. The only reason I know that rate is low is that there was a Python evaluator sitting outside the model grading every single answer. Take that away, and I don't have a finding. I have a model telling me it checked. The external check isn't the safety net. It's the instrument. One more thing because I nearly didn't publish this. I set out to demonstrate an effect, and I found nothing. And the reflex there is to quietly bin it and go find a topic that works. That reflex is exactly why
Claims like the one I started with stay in circulation. Nobody publishes the run where it didn't happen. A null isn't a failed experiment. It's an experiment that answered. So, your turn. Take a claim you believe, something with a because in it. It fails because X. Write the cause down in one sentence. Then write one rival explanation that would look completely identical from the outside. Then describe the test where only the cause changes. If you can't describe it, you don't have a finding yet. You have an observation. And then ask the last one, would that test actually collect any data? Or are you waiting on a failure that almost never happens? Find one claim you believe that has no arm behind it, and that's the whole exercise. If everything you own passes on the first read, you graded yourself gently. The experiment, the data, and every transcript are linked below. Run it yourself. It costs about a dollar. Thanks for watching. I'm Tanmay Kulkarni.
More from Humanitarians AI Fellows
6:14Tanmay's Mycroft Update - Inside Lemonade’s Claims Bot, Building a Production-Ready AI Workflow
3:05Loop Engineering: Infrastructure for Autonomous AI Systems
3:53Naming the Noise: How AI Secures Trust in Gravitational Wave Astronomy
2:48The Edge of Presence: Why AI Dominates the 24/7 Crypto Market
2:36Om's Mycroft Update: Private AI Valuations - Finding the Hidden Price of OpenAI and Anthropic
3:50