Self-Refine (2023) and CRITIC (2023) — iterative improvement Self-Refine: one model, three prompts generate(task) -> output base producer — task prompt, no history feedback(task, output) -> critique self-critic; weakest link — model scoring itself refine(task, output, critique, HISTORY) -> output' history is load-bearing; drop it and quality tanks stop: feedback says fine OR max_iters pair both conditions; single stops hide bugs avg +20 absolute over 7 tasks (paper) math, code, acronym, dialog; includes GPT-4 pitfall: rubber-stamp loop same-prompt critic agrees with itself fix: different prompt style or a smaller critic fits Anthropic "evaluator-optimizer" one of the 5 workflow patterns (Dec 2024) CRITIC: verify through external tools generate(task) -> output same producer verify(task, output, TOOLS) -> critique search, code, calculator, tests — grounded refine(task, output, critique, HISTORY) -> output' same refine, better critique -> better output stop: verifier passes OR max_iters verifier signal dominates self-critic key claim LLMs are unreliable at self-verification without external grounding maps to OpenAI Agents SDK output guardrails guardrails can call tools; tripwires enforce retries maps to Gemini 2.5 per-step safety every action verified before commit no external verifier? CRITIC reduces to Self-Refine