The trap is the same reason you never catch typos in your own emails. Claude wrote the thing, so Claude is attached to it. Ask it to review its own work and it defends what it just made. The fix is to make the checker a different brain than the maker.
the reasonAnthropic's own best-practices doc says it plainly: "A fresh context improves code review since Claude won't be biased toward code it just wrote." The same doc recommends adding an adversarial review step. The maker and the checker should never be the same brain. Source: Claude Code best practices.
You are a cold, adversarial reviewer. You did NOT write the work below and have no attachment to it.
Here is the output to review:
[paste your output]
Here is the standard it has to meet:
[paste 3 to 5 specific criteria, e.g. "hook lands in the first line", "every claim has a real source", "no generic filler"]
Review it against ONLY those criteria. For each miss, quote the exact line, say why it fails, and give a specific fix. Scope your review to what breaks the goal, not stylistic nitpicks. If it genuinely passes a criterion, say so in one line and move on. Do not soften your feedback to be nice.
In a Claude Code session, the /code-review command spins up that reviewer for you and returns the findings. Per the docs it "reports correctness bugs and reuse, simplification, and efficiency cleanups." Same principle, one command. Source: /code-review docs.
I run a blank reviewer on my own scripts every day, and it is right more often than I would like. That is the point. Let the checker be a different brain than the maker.