Apply to my task
arXiv:2610.13632 ★ 92 Oct 9, 2026

Worker–Reviewer Loop (HOA): Independent Review of the Result by a Second Agent Session That Can't See the First One's Reasoning

Key result

Discovered: an agent in a single long session hits a ceiling after about 30 hours. From then on it keeps cycling the same methods and repeating the same mistakes, while an agent with an independent reviewer kept finding solutions. The method lets you get a result from an agent that has passed an outside check, not just "I did everything". The second session (the checker, or reviewer) gets only the task, the finished result, and the acceptance criteria — not the first session's reasoning. The worker must resolve every issue and resubmit. It can't accept its own work — round and round until "ACCEPTED" comes back or the budget runs out.

01

TL;DR

HOA (Humanize Olympiads Agent) is a way of working with an agent where the task is solved across several separate sessions. The first session (the "worker") produces the result. The second (the "reviewer") gets only the original task, the finished result, and the acceptance criteria — not the worker's reasoning history. It returns a list of concrete issues. The worker must resolve every one and resubmit. It can't sign off on its own work. This goes around in a loop until the reviewer says "done" or the budget runs out.

The headline finding: a single long agent session hits a ceiling. An early mistake drags through the entire solution. The agent may quietly swap the task: prove a neighboring claim or check only the convenient cases. Then it confidently reports success. Extra time doesn't help: without an outside check, the agent repeats the same method and the same mistakes. In the experiment, the plain agent stalled after about 30 hours, while the agent with an independent reviewer kept finding solutions.

The method consists of three feedback channels. Review catches missed cases, wrong conclusions, and solving the wrong problem. A wiki (a small base of verified knowledge with sources) supplies what the model doesn't know. A verifier (a program that checks the result objectively: a proof compiler, tests) gives a yes/no signal that doesn't depend on the model's opinion. Review and verification stay separate gates: the result is accepted only when every applicable one has passed.

Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.

02

Method Blueprint

STEP 1: The worker gets the task + acceptance plan + (in later rounds) review issues
       → candidate result (version N)
STEP 2: [if needed] The worker states a specific knowledge gap
       → queries the wiki → takes an entry with its source → revises the result
STEP 3: [if needed] Objective check (tests, compiler, calculation)
       → status + error log
STEP 4: The reviewer (new session, no worker history) checks the "frozen" result
       against the original task and acceptance plan
       → list of issues OR "accepted"
STEP 5: Issues found → back to step 1 (the worker resolves EACH one)
       Accepted AND all objective checks passed → stop
       Budget exhausted → stop

The steps run in separate sessions. A single prompt won't do here: the reviewer's independence is the whole point of the method.

03

Example in Practice

Task: An Amazon seller asks an agent in Cursor to write a unit-economics script. The risk is that the agent will make the numbers look "pretty" on two convenient products, quietly simplify the formula (forgetting returns or sales tax), and report "done."

Prompt (for the reviewer, new session, no chat history with the worker):

<Role>
You are an independent reviewer. You didn't write this code and didn't see how it was made.
Your job is to decide whether the ORIGINAL task was completed in full, not a simplified version of it.
You don't edit the code. You only return issues.
</Role>

<OriginalTask>
A Python script reads an Amazon seller's product export (CSV) and calculates
the unit economics of each item: profit per unit and margin in percent.
Account for: purchase cost, the category referral fee, shipping to the customer,
the return rate (a return means shipping both ways), a 6% sales tax on revenue,
and advertising spend (ACoS). Output: a CSV table with totals and a flag
for products with negative profit.
</OriginalTask>

<AcceptancePlan>
1. Every cost item from the task is included in the formula.
2. Returns are calculated correctly, not subtracted as a fixed amount.
3. The script handles empty values, a zero price, and products with no advertising.
4. There is a test with a hand calculation for at least one product, and it passes.
5. The script solves exactly the task given, not a neighboring one (for example,
   it doesn't calculate gross margin instead of after-tax profit).
</AcceptancePlan>

<Candidate>
The files unit_economics.py and tests/test_unit.py (version 3, read-only).
</Candidate>

<RoundSummary>
The worker reports: "Added ACoS accounting, tests are green."
</RoundSummary>

<Instructions>
- Check the candidate against OriginalTask and AcceptancePlan item by item.
- Run the tests on the unmodified code.
- Look for: missed cases, wrong formulas, testing only convenient data,
  swapping the task for an easier one.
- Return a list of issues: "plan item → what's wrong → how to verify."
- If all items are met, write exactly: ACCEPTED.
</Instructions>

Result: The reviewer returns either a numbered list of issues mapped to the acceptance plan items (for example, where returns are calculated wrong or which case the tests don't cover) or "ACCEPTED." The worker in the main session gets that list, must resolve every item, run the tests, and submit a new version. Review repeats until "ACCEPTED" comes back.

04

Why It Works

The weakness. A model is bad at checking its own work. Within one session it sees its own reasoning and gets used to it (the "anchoring" effect). If an early step was wrong, it builds everything else on top of it. A simple "check yourself" request without an outside signal often fails. Another risk: the agent swaps the task for a convenient version and considers the goal achieved.

The strength. A model is good at finding mistakes in someone else's finished text, as long as it has the original assignment and clear criteria. It doesn't need to remember how it got there. It just compares "what was asked" with "what came out."

How the method uses this. The reviewer gets only the task, the result, and the criteria. It doesn't see the worker's hidden reasoning, and the result is frozen for it (read-only). So it doesn't repeat someone else's mistakes and doesn't "quietly fix" things. The worker has no right to accept its own work, which closes the "I said it's done" loophole. Control knobs:

  • Acceptance plan → the more concrete the items, the sharper the review. Without it, the reviewer checks things "in general."
  • Round or budget limit → lower it for simple tasks, raise it for complex ones. The authors showed that for hard problems the benefit grows with the length of the loop.
  • Objective gates (tests, calculation, compilation) → add them wherever there's something to run. Review checks meaning; running checks fact.
  • What the reviewer sees → don't give it the worker's history or excuses. Only the task, the result, the plan, and a brief round summary.
  • The "knowledge gap" role → let the worker look things up only with a specific question, not "find something."
05

Prompt Template

Two prompts in two different sessions.

Session 1 — worker:

<Role>
You are the worker. You build the result and revise it based on review issues.
You cannot accept your own work: only an independent reviewer can do that.
</Role>

<Task>{original_task}</Task>

<AcceptancePlan>
{acceptance_criteria: a numbered list of checkable items}
</AcceptancePlan>

<Tools>{available_tools: code execution, tests, knowledge-base search}</Tools>

<Budget>{limit: number of rounds or time}</Budget>

<PriorFeedback>
{reviewer_issues_and_check_log; in the first round: "none"}
</PriorFeedback>

<Rules>
- Resolve EVERY issue from PriorFeedback and, for each one, state what was changed.
- Don't simplify or replace the task. If you think it needs to be narrowed,
  say so explicitly; don't do it silently.
- If you lack knowledge, formulate a specific question
  {to_knowledge_base_or_source} and cite the source of the answer.
- Run the objective checks ({tests_or_calculation}) before submitting.
- At the end, output the result version and the list of resolved issues.
</Rules>

Session 2 — reviewer (new, no worker history):

<Role>
You are an independent reviewer. You didn't create this result and didn't see
how it was made. You don't edit the result; you only check it.
</Role>

<OriginalTask>{original_task}</OriginalTask>

<AcceptancePlan>{acceptance_criteria}</AcceptancePlan>

<Candidate>{frozen_result — read-only}</Candidate>

<RoundSummary>{brief_round_summary_from_worker}</RoundSummary>

<Instructions>
- Check the result against OriginalTask and AcceptancePlan item by item.
- Run {objective_checks} on the unmodified result.
- Look separately for:
  1. missed cases;
  2. wrong conclusions and calculations;
  3. solving the wrong problem (swapping, simplifying, checking only convenient cases).
- Return a list of issues: "item → what's wrong → how to verify."
- If everything is met and the checks pass, write exactly: ACCEPTED.
</Instructions>

What to fill in: {original_task} — the assignment verbatim, not paraphrased. {acceptance_criteria} — 3–7 checkable items. Each should allow a "met or not" answer. {objective_checks} — anything you can run: tests, recalculating an example, a linter, checking against a spreadsheet. If there's nothing to run, keep only the meaning-level review.

🚀 Quick start — paste into a chat:

Here's a worker–reviewer loop template (worker + independent reviewer).
Adapt it to my task: [your task].
Ask me questions to fill in the fields.

[paste the template above]

The LLM will ask what exactly counts as a completed task and which checks can be run: from that it builds the acceptance plan, and the plan is what determines how sharp the review will be. It will also ask which tools the worker has and how many rounds are allowed. It will carry the template's pattern over to your task.

06

Limitations

⚠️ The base model sets the ceiling: the reviewer doesn't add knowledge. For weaker models the gain from the loop was modest: on some olympiads the result barely improved. The strong effect showed up on stronger models.

⚠️ The contribution of each part isn't fully separated: in the experiments, the loop, the wiki, and the verifier worked together. The paper can't say exactly how much the reviewer alone contributes without objective checks.

⚠️ Works best where there's a verifiable result: olympiad problems, proofs, code. The authors didn't test the method on subjective tasks (writing, strategy, creative work).

⚠️ Expensive in time and tokens: the best results came from runs lasting tens and hundreds of hours. For a simple task, such a loop is overkill.

⚠️ The paper's full pipeline is engineering: the Lean formal verifier, a sandbox, a wiki with sources, an automated "runner." Without code you can only reproduce the pattern itself: two sessions, an acceptance plan, running tests.

⚠️ A preprint from the method's authors: the authors themselves call some results (for example, on PutnamBench) preliminary. Some scores were assigned by an LLM judge with human verification.

07

How They Tested It

The team took the most recent 2026 olympiads (math, physics, chemistry, programming) to rule out the problems having leaked into model training. For math they added PutnamBench (672 problems) and Lean-Eval (302 research problems). Math results were accepted only after a proof compiler checked them; the model's word wasn't trusted. Then they compared four levels of scaffolding: a plain API call, a CLI agent (tools + files), agent + wiki + verifier, and the full loop with an independent reviewer. This was repeated on four models: one closed and three open.

On a 50-problem subset of PutnamBench, the closed model went from 3 solved (API) to 46 (agent) and 50 (full loop). The open Kimi K3 rose from 1 to 4 and then to 47. The gap between the open and closed models narrowed from 42 problems to 3. On 100 Lean-Eval problems, the plain agent stalled at 34 after about 30 hours, while the reviewer loop reached 63 in 150 hours: it kept finding solutions where the agent without an outside check kept repeating the same mistakes. The result on weaker models was surprising: DeepSeek V4 Pro and GLM-5.3 improved noticeably less, and on IMO or IPhO in places didn't improve at all. The practical takeaway: independent review turns working time into results, but it doesn't replace the model's knowledge and strength. One interesting choice by the authors: they didn't build a wiki for physics and code, because the model already knows those areas. A wiki is needed where knowledge falls short.

08

Adaptations and Extrapolations

🔧 Technique: add objective gates → the reviewer catches facts, not just opinions

In the paper, for code, the worker and the reviewer write and run tests themselves. Add this to the reviewer prompt:

Before writing any issues, run the code on 3 edge cases
(empty input, zero, a very large value) and include the output.

The reviewer relies on an actual run, not on "looks right."

🔧 Technique: separate meaning-level review from format checks → two sets of issues

Give the reviewer's answer two sections: "Task swapping / logic" and "Technical errors." That way the worker won't lose the most important points among the nitpicks.

Extrapolation: a project wiki in the agent's instructions file

In the paper, the wiki grows from accepted results: after acceptance, a curator extracts reusable pieces from them along with the source and verification status. When working with an agent (Claude Code, Cursor), you can do this as a WIKI.md file next to CLAUDE.md:

After the reviewer writes ACCEPTED, add an entry to WIKI.md:
- what was solved (one line);
- where the result lives (file/function);
- how it was verified (test, calculation);
- date and version.
Before starting a new task, search WIKI.md for similar solutions and reference them
instead of writing from scratch.

This is my extrapolation; the authors tested it only on formal math and chemistry.

09

Resources

  • Humanize OlympiadAgents: A Multi-Session Workflow for Olympiad Problem Solving with Solve, Review, Wiki, Verify (preprint)
  • Code: https://github.com/humanfia/hoa
  • Authors: Zhengyang Zhang, Jing Xiong, Hongzhou Lin, Juihui Chung, Zijian Zhang, Song Han, Sihao Liu, Ligeng Zhu
  • Institutions: Tsinghua University, NVIDIA, The University of Hong Kong, MIT, Princeton University, Amazon
  • Foundations mentioned: Humanize (Liu et al., 2026), Comparator (Lean FRO), Science Mango, Lean-Eval, PutnamBench

Research digest

Key result

Discovered: an agent in a single long session hits a ceiling after about 30 hours. From then on it keeps cycling the same methods and repeating the same mistakes, while an agent with an independent reviewer kept finding solutions. The method lets you get a result from an agent that has passed an outside check, not just "I did everything". The second session (the checker, or reviewer) gets only the task, the finished result, and the acceptance criteria — not the first session's reasoning. The worker must resolve every issue and resubmit. It can't accept its own work — round and round until "ACCEPTED" comes back or the budget runs out.

Principle

The setup is simple, like in any decent team: one person does the work, another signs off. The worker builds the result. If it lacks knowledge, it asks a specific question in the wiki (a small base of verified facts with sources). If there's something to run, it runs tests or a compiler. Then the work is frozen and handed to the reviewer in a new session. Only someone who didn't see how the work was done can accept it. Checking meaning and running checks are two separate gates. You have to pass both. Three feedback channels: - Review catches missed cases, sloppy conclusions, and solving the wrong problem. - The wiki supplies what the model doesn't know. - Automated checks (tests, a proof compiler) return a yes/no that doesn't depend on the model's opinion.

Why it works

A model is bad at checking itself. It sees its own reasoning and gets attached to it, like an anchor. An early mistake drags through the whole solution. Worse, the agent can quietly swap the task: prove a neighboring claim or check only the convenient cases. Then it cheerfully reports success. A "check yourself" request without an outside signal often fails. On the other hand, a model is good at finding mistakes in someone else's finished text. It doesn't need to remember the path. It just compares "what was asked" with "what came out." A reviewer without someone else's reasoning doesn't inherit someone else's delusions, and the worker can't declare itself right. Levers: the more concrete the acceptance plan items, the sharper the review. Don't give the reviewer the worker's history or excuses. For hard problems, the benefit grows with the length of the loop.

When to apply

Tasks with a verifiable result: code, proofs, calculations, olympiad problems → especially when the agent works on its own for a long time and there's a risk it will quietly simplify the assignment. Also a fit for scripts with formulas, where it's easy to "forget" one cost item. Limitations the paper is upfront about. The reviewer doesn't add knowledge: on weaker models the gain was modest. The authors didn't separate the contribution of review from tests and the wiki. The method wasn't tested on writing, strategy, or creative work. The best results came from runs lasting tens and hundreds of hours, which is expensive. It's a preprint, and the authors themselves call some results preliminary. NOT a fit for simple one-off tasks: two sessions and rounds of review are overkill there.

Mini recipe

1. Set up two sessions: one is the worker, the other the reviewer. One prompt won't cut it — independence is the whole point of the method. 2. Write an acceptance plan: 3–7 items, each answerable with "met or not." The more concrete, the tougher the review. 3. Give the worker rules: resolve every issue, don't silently simplify the task, don't accept its own work. 4. Hook up runs where possible: tests, recalculating an example, a linter. The worker runs them before submitting; the reviewer reruns them on the unmodified result. 5. Hand the work to the reviewer in a new session: the task verbatim, the result read-only, the acceptance plan, and a brief round summary. No chat history. 6. Return the issues to the worker: format "item → what's wrong → how to verify." 7. Set a round limit: fewer for simple tasks, more for complex ones. Stop on "ACCEPTED" or when the budget runs out. Quick start: paste the template into a chat and write `Adapt it to my task: [task]. Ask me questions to fill in the fields.`

Examples

[BAD]: `Write a unit-economics script for my Amazon store and check yourself that everything is calculated correctly` The agent will make the numbers look "pretty" on two convenient products. It will quietly forget returns or sales tax and report "done." [GOOD]: In a new session, with no chat history: `You are an independent reviewer. You didn't write this code and didn't see how it was made. You don't edit the code; you only return issues. Original task: the script reads an Amazon seller's CSV and calculates profit per unit and margin, accounting for purchase cost, referral fee, shipping, returns (shipping both ways), a 6% sales tax, and advertising. Acceptance criteria: 1) every cost item is included; 2) returns are calculated as a percentage, not a fixed amount; 3) the script doesn't crash on empty values or a zero price; 4) there is a test with a hand calculation, and it passes; 5) it calculates after-tax profit, not gross margin. Code: unit_economics.py and tests/test_unit.py, version 3, read-only. Run the tests on the unmodified code. Return issues in the format "item → what's wrong → how to verify." If everything is met, write exactly: ACCEPTED` The reviewer returns either a list of issues by item or "ACCEPTED." The worker must resolve each one and submit a new version.

In plain words

A model is pathologically bad at checking itself because of the anchoring effect. If it takes a wrong turn at step two of its reasoning, it will fiercely defend that mistake to the bitter end, because its context is already poisoned by its own reasoning. A plain "double-check yourself" request in the same chat is a total flop: the model just skims its own hallucination and cheerfully confirms that everything is perfect.

It's like asking a builder to check whether the foundation he just poured is level. "Looks straight to me!" he'll declare confidently, because he genuinely can't see the flaws in his own work. To find defects you need an independent outside inspector who couldn't care less how many sleepless nights went into the build: he just grabs a level and silently writes down every tilt.

The HOA (Humanize OlympiadAgents) method solves the problem by splitting sessions into isolated roles. The first agent produces a finished solution, and the second one starts in a completely clean context and acts as a strict inspector. The reviewer doesn't see the worker's drafts; it gets only the original requirements and the final result, then rolls out a list of specific issues. Until the worker fixes every item, the work won't be accepted.

The setup was tested on brutal olympiad problems, but the principle is universal for any practical development work. Writing a unit-economics script for your Amazon store? A solo agent will cut corners, toss out the taxes, and proudly report it's done. But an isolated reviewer in the HOA setup will reject the code until all the hidden fees and returns add up to the last cent.

Bottom line: quit asking the same model to "check its own code" — it's a waste of tokens. Isolate checking from doing, take the chat history away from the reviewer, and cycle the fixes in a loop. Only when an agent can't sign off on its own work do you get a rock-solid product instead of convincing junk.

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on Worker–Reviewer Loop (HOA): Independent Review of the Result by a Second Agent Session That Can't See the First One's Reasoning arXiv:2610.13632

Sign in to apply this study New accounts get 50 free credits.