Auto Review Loop: Autonomous Research Improvement
Autonomously iterate: review → implement fixes → re-review, until the external reviewer gives a positive assessment or MAX_ROUNDS is reached.
Context: $ARGUMENTS
Constants
- MAX_ROUNDS = 4
- POSITIVE_THRESHOLD: score >= 6/10 AND verdict ∈ {"ready", "almost"} — both must hold, matching the operative STOP CONDITION below. Verdict vocabulary is {"ready", "almost", "not ready"}. (Earlier wording used "or" + a stale verdict set; the AND form is authoritative.)
- REVIEW_DOC:
review-stage/AUTO_REVIEW.md(cumulative log) (fall back to./AUTO_REVIEW.mdfor legacy projects) - OUTPUT_DIR =
review-stage/— All review-stage outputs go here. Create the directory if it doesn't exist. - REVIEWER_MODEL =
gpt-5.5— Model used via a secondary Codex agent. Must be an OpenAI model (e.g.,gpt-5.5,o3,gpt-4o) - REVIEWER_BACKEND =
codex— Default: Codex reviewer agent at xhigh reasoning. Override with--reviewer: oracle-proonly when the user explicitly requests Oracle; if Oracle is unavailable, warn and fall back to Codex xhigh. - HUMAN_CHECKPOINT = false — When
true, pause after each round's review (Phase B) and present the score + weaknesses to the user. Wait for user input before proceeding to Phase C. The user can: approve the suggested fixes, provide custom modification instructions, skip specific fixes, or stop the loop early. Whenfalse(default), the loop runs fully autonomously. - COMPACT = false — When
true, (1) readEXPERIMENT_LOG.mdandfindings.mdinstead of parsing full logs on session recovery, (2) append key findings tofindings.mdafter each round. - REVIEWER_DIFFICULTY = medium — Controls adversarial depth:
mediumuses normal Codex xhigh review throughspawn_agent/send_input;hardadds Reviewer Memory and Debate Protocol;nightmareadds direct repository-reading adversarial verification by an independent reviewer. - RENDER_HTML = true — When
true(default), auto-renderreview-stage/AUTO_REVIEW.mdto HTML on loop termination via/render-html. Uses--no-review(the loop itself IS the cross-model review; the HTML render is a structural conversion). Setfalseto skip, or pass— render html: false.
💡 Override:
/auto-review-loop "topic" — compact: true, human checkpoint: true, difficulty: hard
Claude-Aligned Reviewer Memory and Debate
For difficulty: hard and difficulty: nightmare, maintain review-stage/REVIEWER_MEMORY.md.
- Before each reviewer call, prepend the full
REVIEWER_MEMORY.mdcontents under## Your Reviewer Memory (persistent across rounds). - Tell the reviewer to check whether prior suspicions were genuinely addressed or merely sidestepped.
- Require a
Memory updatesection in the reviewer response. - After Phase B, copy the
Memory updateintoREVIEWER_MEMORY.mdbefore writingREVIEW_STATE.json. - In
nightmare, launch an additional fresh adversarial reviewer with direct repository/file-reading instructions. It should readNARRATIVE_REPORT.mdorreview-stage/AUTO_REVIEW.mdfor the author's claims, then verify those claims against code, logs, result files, and paper drafts instead of trusting executor summaries.
Instructions
In hard and nightmare modes, the reviewer must actively look for omissions, unsupported claims, cherry-picked evidence, metric mistakes, and weaknesses the executor may have downplayed.
For difficulty: hard and nightmare, use the Debate Protocol after a critical review:
- Codex writes a concise rebuttal with evidence, not spin.
- Send the rebuttal to the same reviewer via
send_input. - The reviewer rules which objections are resolved, unresolved, or newly discovered.
- Only mark a concern resolved when the reviewer accepts the rebuttal.
State Persistence (Compact Recovery)
Long-running loops may hit the context window limit, triggering automatic compaction. To survive this, persist state to review-stage/REVIEW_STATE.json after each round:
{
"round": 2,
"agent_id": "019cd392-...",
"status": "in_progress",
"last_score": 5.0,
"last_verdict": "not ready",
"pending_experiments": ["screen_name_1"],
"timestamp": "2026-03-13T21:00:00"
}
Write this file at the end of every Phase E (after documenting the round). Overwrite each time — only the latest state matters.
On completion (positive assessment or max rounds), set "status": "completed" so future invocations don't accidentally resume a finished loop.
Workflow
Initialization
- Check for
review-stage/REVIEW_STATE.json(fall back to./REVIEW_STATE.jsonif not found — legacy path):- If neither path exists: fresh start (normal case, identical to behavior before this feature existed)
- If it exists AND
statusis"completed": fresh start (previous loop finished normally) - If it exists AND
statusis"in_progress"ANDtimestampis older than 24 hours: fresh start (stale state from a killed/abandoned run — delete the file and start over) - If it exists AND
statusis"in_progress"ANDtimestampis within 24 hours: resume- Read the state file to recover
round,agent_id,last_score,pending_experiments - Read
review-stage/AUTO_REVIEW.mdto restore full context of prior rounds (fall back to./AUTO_REVIEW.md) - If
pending_experimentsis non-empty, check if they have completed (e.g., check screen sessions) - Resume from the next round (round = saved round + 1)
- Log: "Recovered from context compaction. Resuming at Round N."
- Read the state file to recover
- Read project narrative documents, memory files, and any prior review documents. When
COMPACT = trueand compact files exist, preferfindings.md+EXPERIMENT_LOG.mdover full raw logs. - Read recent experiment results (check output directories, logs)
- Identify current weaknesses and open TODOs from prior reviews
- Initialize round counter = 1 (unless recovered from state file)
- Create/update
review-stage/AUTO_REVIEW.mdwith header and timestamp
Loop (repeat up to MAX_ROUNDS)
Phase A: Review
Route by REVIEWER_DIFFICULTY:
Medium (default) — Codex Review
Send comprehensive context to the external reviewer:
spawn_agent:
reasoning_effort: xhigh
message: |
[Round N/MAX_ROUNDS of autonomous review loop]
[Full research context: claims, methods, results, known weaknesses]
[Changes since last round, if any]
Please act as a senior ML reviewer (NeurIPS/ICML level).
1. Score this work 1-10 for a top venue
2. List remaining critical weaknesses (ranked by severity)
3. For each weakness, specify the MINIMUM fix (experiment, analysis, or reframing)
4. State clearly: is this READY for submission? Yes/No/Almost
Be brutally honest. If the work is ready, say so clearly.
If this is round 2+, use send_input with the saved agent id to maintain continuity.
Hard — Codex Review + Reviewer Memory
Use the same spawn_agent / send_input route as medium, but prepend the full review-stage/REVIEWER_MEMORY.md contents under ## Your Reviewer Memory (persistent across rounds) and require a Memory update section in the reviewer response.
Nightmare — Independent Repository Review
Use everything in hard mode, then ask an additional fresh adversarial reviewer to verify claims against repository files, logs, result files, and paper drafts instead of trusting executor summaries. Preserve the fresh review as a separate raw response and trace.
Phase B: Parse Assessment
CRITICAL: Save the FULL raw response from the external reviewer verbatim (store in a variable for Phase E). Do NOT discard or summarize — the raw text is the primary record.
Then extract structured fields:
- Score (numeric 1-10)
- Verdict ("ready" / "almost" / "not ready")
- Action items (ranked list of fixes)
STOP CONDITION: If score >= 6 AND verdict ∈ {"ready", "