Put the critic outside, set stopping rules, keep lessons.
Why the model's own critique is shaky
The toy critic has two numbers: how often it finds a real problem, and how often it invents one in a part that was fine. Varying both:
How good must the critic be
Invents a problem
Finds 30%
Finds 60%
Finds 90%
0% of the time
57%
76%
95%
10%
48%
66%
85%
20%
36%
56%
66%
(Compare with 47% for not looking again.) Read it like this:
A critic that finds few problems and invents some does worse than not looking at all (the red cell).
Even a very good critic loses ground as false alarms rise: at 90% detection, going from 0% to 20% inventions costs 29 points.
A critic that only finds, never invents, is a gain at any detection rate. So reduce false alarms by asking for specific, checkable claims ("quote the sentence that breaks the rule"), not an overall impression.
Why this happens with real models, in plain words: the critic and the writer share the same blind spots; a model that does not know the refund rule will not notice a refund that breaks it. A model asked "what is wrong with this?" feels pushed to find something. And a model asked "is this OK?" tends to agree with itself. The producer and critic split helps with some of this (a different instruction, sometimes a different model), but it is still text judging text.
Put the critic outside whenever you can
Where could the second look come from?
Task
An outside check
Code
run the tests, the type checker, the linter
Structured output
schema validation
Arithmetic or dates
a calculator or date library
A fact about an order
look up the order
A citation
open the source and compare the quote
A rule list (like the six above)
write each as a small function
Subjective quality (tone, clarity)
a model critic with a rubric, scored on a sample of known cases (Level 9)
Rule of thumb: if you can write a check, write it; use a model critic for what you cannot check, and measure that critic like any other component. The messages from checks should say what is wrong and what is expected (the example's refund message), so the revision has something to act on.
Stopping rules
A reflection loop needs three ways to end:
Success: all checks pass (outside check) or the critic reports nothing (model critic: weaker, since it may simply be missing problems).
A round cap (three in the example, five at most): beyond it the gain is small and the cost keeps growing.
No progress: the same problems appear twice in a row, or the number of problems stopped dropping. Then return the best draft with its open problems, or hand over to a person.
Also keep the best draft so far, not only the last. A revision can fix one problem and cause another; in the example 8% of fixes did.
Lessons that last: the Reflexion idea
Reflection inside one job fixes that job. Reflection across jobs keeps what a failure taught. The pattern (named Reflexion in research papers) is to write a short lesson from each failure ("dates must be written year-month-day") and put the lessons in the next prompt.
In the example, each failed check adds a lesson, and a lesson cuts that slip's rate to 30% of its normal value. Over 60 jobs in a row, looking only at first drafts:
First 15 jobs
Last 15 jobs
no memory
42% valid
47% valid
with lessons
60%
80%
(The "with lessons" curve is already ahead in the first 15 jobs because the lessons start working from the second job on.) Lessons turn the checks into training signal for a prompt, not for model weights. Three cautions: lessons that are too many or too general bloat the prompt (Level 7, on memory and context, covers this); a wrong lesson persists, so keep each lesson tied to evidence and drop it if it stops helping; and lessons do not replace the checks, because a slip that returns still has to be caught.
A checklist
Can I write a check? If yes, use it as the critic. If no, add a rubric and test the critic on known good and bad examples.
Name the problem and the expected value in each message.
Cap the rounds; stop when nothing changes; keep the best draft.
Only change what was flagged. A broad "improve this" invites damage.
Count the cost: a model critic doubles the calls per round.
Log each round (draft, critique, revision) so you can see which step helps (module 7).
Measure spoiled drafts, not only rescued ones.
Interview angle
"Does self-reflection actually improve an agent's answers?" Say: it depends on where the critique comes from. With an outside signal (tests, a validator, a lookup) it is strong and cheap, so use it. With only the model re-reading its own text, gains are modest and uncertain: the critic shares the writer's blind spots, can invent problems, can stop early, and costs a call per round, so you must measure both the drafts it fixes and the drafts it spoils. Mention the producer and critic split, round caps, keeping the best draft, and cross-job lessons. Then say how you would test it: a labelled set where some drafts are right, and a comparison of final quality and cost against no reflection.
Check yourself
Self-critique spoils 15 percent of drafts that were already valid. Why can a critique make a good answer worse, and what avoids it? (A model that must find something wrong will sometimes invent a problem and "fix" it. Check with code that reports real failures, and revise only when a check fails.)
For the curious Checks that matched inside longer numbers
The refund check looked for $8 anywhere in the text, so $80 would have passed, and the same was true of an order id followed by extra digits. The checks now require that no digit follows. The published tables did not change, because the writer in the example never produced those cases, but a real writer can.
What you will use daily at work
Practice
What it looks like
Code checks before model critique
Schema validation, tests and linters run first, and their messages go back to the model.
A round limit
Revision stops after two or three rounds and returns the best valid result or an error.
Lessons stored outside the prompt
A short list of recurring failures, reviewed by a person, not appended forever.
Draft: confirm which validators your pipeline already has.