Mmcp.market

auto-review-loop skill

by wanshuiyin·wanshuiyin/Auto-claude-code-research-in-sleep·17k stars·MIT

Autonomous multi-round research review loop. Repeatedly reviews using Claude Code via claude-review MCP, implements fixes, and re-reviews until positive assessment or max rounds reached. Use when user says \"auto review loop\", \"review until it passes\", or wants autonomous iterative improvement.

A100/100content scan

Is the auto-review-loop skill safe?

Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-09-28.

No findings.

Install the auto-review-loop skill

A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.

git clone --depth 1 https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep.git /tmp/Auto-claude-code-research-in-sleep
mkdir -p ~/.claude/skills
cp -r /tmp/Auto-claude-code-research-in-sleep/skills/skills-codex-claude-review/auto-review-loop ~/.claude/skills/auto-review-loop
available in every project

In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub

The instructions your agent would load

SKILL.md as published, without the frontmatter. Read it on GitHub

Override for Codex users who want Claude Code, not a second Codex agent, to act as the reviewer. Install this package after skills/skills-codex/*.

This reviewer is a different model family from the Codex executor. Every overlay trace/audit records:

yaml

review_independence: cross-family

acceptance_status: accepted

Auto Review Loop: Autonomous Research Improvement

Claude overlay assurance: this route is a different model family from the Codex executor and records reviewindependence: cross-family plus acceptancestatus: accepted.

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.)
  • REVIEWDOC: review-stage/AUTOREVIEW.md (cumulative log) (fall back to ./AUTOREVIEW.md for legacy projects)*
  • OUTPUTDIR = review-stage/** — All review-stage outputs go here. Create the directory if it doesn't exist.
  • REVIEWERMODEL = claude-review — Claude reviewer invoked through the local claude-review MCP bridge. Set CLAUDEREVIEW_MODEL if you need a specific Claude model override.
  • REVIEWERBACKEND = claude-review** — reviews route through the claude-review MCP (Claude family; cross-family for a Codex executor).
  • HUMANCHECKPOINT = 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. When false (default), the loop runs fully autonomously.
  • COMPACT = false — When true, (1) read EXPERIMENT_LOG.md and findings.md instead of parsing full logs on session recovery, (2) append key findings to findings.md after each round.
  • REVIEWERDIFFICULTY = medium — Controls adversarial depth: medium uses a normal high-rigor Claude review through mcpclaude-reviewreviewstart / mcpclaude-reviewreviewreplystart; hard adds Reviewer Memory and Debate Protocol; nightmare adds direct repository-reading adversarial verification by an independent reviewer.
  • RENDERHTML = true — When true (default), auto-render review-stage/AUTOREVIEW.md to HTML on loop termination via /render-html. Uses --no-review because the loop already performed a traced cross-family accepted Claude review. Set false to skip.

💡 Override: /auto-review-loop "topic" — compact: true, human checkpoint: true, difficulty: hard

Claude-Aligned Reviewer Memory and Debate

Maintain review-stage/REVIEWERMEMORY.md in all difficulty modes. Phase B.5 appends the reviewer's raw response and memory update regardless of REVIEWERDIFFICULTY.

  • Before each reviewer call, prepend the full REVIEWER_MEMORY.md contents under ## Your Reviewer Memory (persistent across rounds).
  • Tell the reviewer to check whether prior suspicions were genuinely addressed or merely sidestepped.
  • Require a Memory update section in the reviewer response.
  • After Phase B, copy the Memory update into REVIEWERMEMORY.md before writing REVIEWSTATE.json.
  • For difficulty: hard and difficulty: nightmare, additionally use the Debate Protocol after a critical review.
  • In nightmare, launch an additional fresh adversarial reviewer with direct repository/file-reading instructions. It should read NARRATIVEREPORT.md or review-stage/AUTOREVIEW.md for 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:

  1. Codex writes a concise rebuttal with evidence, not spin.
  2. Send the rebuttal to the same reviewer via mcpclaude-reviewreviewreplystart.
  3. The reviewer rules which objections are resolved, unresolved, or newly discovered.
  4. 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:

{
  "run_id": "run_20260713_a1b2c3d4",
  "round": 2,
  "threadId": "019cd392-...",
  "status": "in_progress",
  "last_score": 5.0,
  "last_verdict": "not ready",
  "pending_experiments": ["screen_name_1"],
  "timestamp": "2026-03-13T21:00:00"
}
  • runid — Globally unique per invocation. Generated on fresh start as run<8-char-hex> (e.g., run20260713a1b2c3d4). Preserved across round writes. On resume, read from state file unchanged. This binds all round state and acquittal receipts to one run.

Write this file at the end of every Phase E (after documenting the round). Overwrite each time — only the latest round's state matters. The run_id field MUST persist unchanged across overwrites within the same run.

On completion (positive assessment or max rounds), set "status": "completed" so future invocations don't accidentally resume a finished loop.

Append-Only Acquittal Receipt

In addition to the overwritable state file, maintain an append-only acquittal log at review-stage/ACQUITTAL_LOG.jsonl. Each line is a standalone JSON object recording an acquitting positive verdict:

{"run_id":"run_20260713_a1b2c3d4","round":3,"backend":"claude-review","effort":"high-rigor","verdict":"ready","score":7.5,"trace_id":"trace_20260713_run03","timestamp":"2026-07-13T14:22:00Z"}

Rules (non-negotiable):

Workflow

Initialization

  1. Check for review-stage/REVIEWSTATE.json (fall back to ./REVIEWSTATE.json if not found — legacy path):
  • If neither path exists: fresh start (normal case, identical to behavior before this feature existed)
  • Generate runid: run<8-char-hex> (e.g., run20260713a1b2c3d4). This run_id persists across all round writes and binds acquittal receipts to this invocation.
  • If it exists AND status is "completed": fresh start (previous loop finished normally — but its ACQUITTALLOG.jsonl entries are retained as an audit trail with their own runid, and are NOT valid for the current run's stop gate)
  • Generate a new runid** for this invocation.
  • If it exists AND status is "inprogress" AND timestamp is older than 24 hours: fresh start** (stale state from a killed/abandoned run — delete the file and start over)
  • Generate a new runid** for this invocation.
  • If it exists AND status is "inprogress" AND timestamp is within 24 hours: resume**
  • Read the state file to recover runid, round, threadId, lastscore, pending_experiments
  • Legacy backward compat: if runid is absent from the state file (pre-runid era), generate a new runid and log: "No runid in legacy state file; assigned run_<...> for this resume."
  • Read review-stage/AUTOREVIEW.md to restore full context of prior rounds (fall back to ./AUTOREVIEW.md)
  • If pending_experiments is non-empty, check if they have completed (e.g., check screen sessions)
  • Resume from the next round (round = saved round + 1)
  1. Read project narrative documents, memory files, and any prior review documents. When COMPACT = true and compact files exist, prefer findings.md + EXPERIMENT_LOG.md over full raw logs.
  2. Read recent experiment results (check output directories, logs)
  3. Identify current weaknesses and open TODOs from prior reviews
  4. Initialize round counter = 1 (unless recovered from state file)
  5. Create/update review-stage/AUTO_REVIEW.md with header and timestamp

Loop (repeat up to MAX_ROUNDS)

Phase A: Review

Route by REVIEWERDIFFICULTY:**

Medium (default) — Claude Review

Send comprehensive context to the external reviewer:

mcp__claude-review__review_start:
  # the bridge grants the reviewer no tools by default; this prompt passes
  # artifact paths, so it has to ask for read-only access explicitly
  tools: "Read,Grep,Glob"
  prompt: |
    [Round N/MAX_ROUNDS of autonomous review loop]

    Review the work directly from its artifacts — executor notes are not
    evidence, so read the files yourself rather than trusting my framing:
    - Claims / paper draft: <path>
    - Methods / code under review: <path(s)>
    - Raw results (verbatim files, not a summary): <path(s)>
    - Changed since last round: <changed-file paths>, plus the saved diff (`git diff > changes.patch`): <path> — read the diff, not my description

    Please act as a senior ML reviewer (NeurIPS/ICML level). Start from the
    assumption that the work is broken somewhere — your job is to find where.
    Be adversarial. Trust nothing the author tells you — verify everything
    yourself.

    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

After this start call, immediately save the returned jobId and poll mcpclaude-reviewreview_status with a bounded waitSeconds until done=true. Treat the completed status payload's response as the reviewer output, and save the completed threadId for any follow-up round.

If this is round 2+, use mcpclaude-reviewreviewreplystart with the saved completed threadId, then poll mcpclaude-reviewreview_status with the returned jobId until done=true to maintain continuity.

Hard — Claude Review + Reviewer Memory

Use the same mcpclaude-reviewreviewstart / mcpclaude-reviewreviewreplystart route as medium, but prepend the full review-stage/REVIEWERMEMORY.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. That reviewer is fresh, so it does not inherit the scope limits from the medium/hard prompt — repeat the block from review-scope-limits.md in its prompt. This is the mode with the widest repository access and the one most likely to propose defensive scaffolding.

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)

Phase B.5: Reviewer Memory Update

After parsing the assessment, update review-stage/REVIEWERMEMORY.md. Copilot backend depends on this file for round-to-round continuity (every round is a fresh process), so the update runs regardless of REVIEWERDIFFICULTY:

Your Reviewer Memory (persistent across rounds)

Pass this file back to the reviewer in the next round so it can track its own suspicions.

# Reviewer Memory

## Round 1 — Score: X/10
- **Suspicion**: [what the reviewer flagged]
- **Unresolved**: [concerns not yet addressed]
- **Patterns**: [recurring issues the reviewer noticed]

## Round 2 — Score: X/10
- **Previous suspicions addressed?**: [yes/no for each, with reviewer judgment]
- **New suspicions**: [...]
- **Unresolved**: [carried forward + new]

Rules:

diff the two rounds' raw .response.md files in .aris/traces/ first and find the exact criterion that flipped (see shared-references/review-tracing.md § Debugging With Traces). The memory file is a summary; the trace is evidence.

  • Append each round; never delete prior rounds.
  • If the reviewer response includes a Memory update section, copy it verbatim.
  • If the score REGRESSES round-to-round, don't just write a new memory line:
  • This file is passed back to the reviewer in the next round's Phase A.

Phase B.5.1: Stop-Evaluation Gate

More skills from wanshuiyin/Auto-claude-code-research-in-sleep

  • Aablation-plannerUse when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission.
  • Aablation-plannerUse when main results pass result-to-claim (`claim_supported = yes` or `partial`) and ablation studies are needed for paper submission. A secondary Codex agent designs ablations from a reviewer's perspective; the local executor reviews feasibility and implements.
  • AalphaxivQuick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this paper", "summarize paper", pastes an arXiv/AlphaXiv URL, or provides a bare arXiv ID for quick understanding - not for broad literature search.
  • AalphaxivQuick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this paper", "summarize paper", pastes an arXiv/AlphaXiv URL, or provides a bare arXiv ID for quick understanding - not for broad literature search.
  • Aanalyze-resultsAnalyze ML experiment results, compute statistics, generate comparison tables and insights. Use when user says "analyze results", "compare", or needs to interpret experimental data.
  • Aanalyze-resultsAnalyze ML experiment results, compute statistics, generate comparison tables and insights. Use when user says \"analyze results\", \"compare\", or needs to interpret experimental data.
  • AarxivSearch, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv", "arxiv search", "get paper pdf", or wants to find and save papers from arXiv to the local paper library.
  • AarxivSearch, download, and summarize academic papers from arXiv. Use when user says \"search arxiv\", \"download paper\", \"fetch arxiv\", \"arxiv search\", \"get paper pdf\", or wants to find and save papers from arXiv to the local paper library.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via GPT-6-Astra xhigh review → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via Claude review through claude-review MCP → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via Gemini review through gemini-review MCP → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.
  • Aauto-paper-improvement-loopAutonomously improve a generated paper via GPT-6-Astra xhigh review → implement fixes → recompile, for 2 rounds. Use when user says \"改论文\", \"improve paper\", \"论文润色循环\", \"auto improve\", or wants to iteratively polish a generated paper.

All agent skills → · MCP servers