The simplest agent produces an answer and stops, with no stage at which it examines what it made.
Reflection inserts that stage: generate, critique, then revise in light of the critique.
The critique can come from the same model, a different model, or a tool that checks the work.
The reason it helps is an asymmetry that shows up repeatedly in evaluation.
Recognising that an argument has a gap is easier than producing an argument with no gaps.
So a second pass with a critical framing often finds defects the first pass could not avoid.
The quality of the critique depends almost entirely on what it can check against.
A failing unit test, a schema validation error or a stack trace makes the criticism concrete.
A retrieved passage lets the agent verify a claim rather than merely reconsider it.
With no such evidence, self-critique degrades into restating the answer more confidently.
Models are poor at detecting their own hallucinations, since the same weights produced them.
That is why separating the critic from the generator, by model or by prompt, helps.
Reflexion is the named variant that stores critiques as memory across attempts at a task.
Each retry therefore starts knowing what went wrong last time rather than repeating it.
Two rounds capture most of the benefit; beyond that the cost usually outruns the improvement.