Phase 3 of building a Claude Managed Agent
Phase 3 — Grade → Iterate (the bounded loop)

Phase 3 of building a Claude Managed Agent — the bounded grade→iterate loop. Define a CMA outcome (a required markdown rubric graded by an isolated grader), read each verdict, decide the next move (sharpen / re-run / promote to…
--- name: grade-iterate description: Phase 3 of building a Claude Managed Agent — the bounded grade→iterate loop. Define a CMA outcome (a required markdown rubric graded by an isolated grader), read each verdict, decide the next move (sharpen / re-run / promote to schedule), and once a version passes, run held-back eval cases in parallel. Use when the user says "grade my agent", "make it pass the rubric", "iterate until it's good", "is it good enough", or when the orchestrator routes phase=grade-iterate. outcome_builder.py builds the user.define_outcome payload (rubric required, max_iterations clamped 1..20 — never unbounded); verdict_reader.py reads the grader result and recommends the next move; eval_scaffold.py generates held-back cases + a parallel run plan (capped at the 25-thread CMA ceiling). Distinct from stage-launch (first launch) and run-without-you (scheduling). version: 2.11.2 author: Alireza Rezvani license: MIT tags: [cma, outcome, rubric, grader, grade-iterate, loop, max-iterations, eval, held-back] compatible_tools: [claude-code, codex-cli, cursor, antigravity, opencode, gemini-cli] --- # Phase 3 — Grade → Iterate (the bounded loop) This is the plugin's **loop**: CMA's `outcome` primitive self-grades the agent's work in an isolated context and feeds failing verdicts back for the next attempt. It is **always bounded** by `max_iterations` (1..20) — never "improve forever". See [`../../references/loops-and-workflows.md`](../../references/loops-and-workflows.md) and the outcome section of
Overview
This is the plugin's loop: CMA's outcome primitive self-grades the agent's work in an isolated context and feeds failing verdicts back for the next attempt. It is always bounded by max_iterations (1..20) — never "improve forever".
Manual install (npx, ZIP)
npx skills add alirezarezvani/claude-skills --skill grade-iterate -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/alirezarezvani/claude-skills/tar.gz/19392f7a0826 \
| tar -xz -C ~/.claude/skills --strip-components=3 claude-skills-19392f7a0826/agent-launcher/skills/grade-iterateNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/1a5e48b92de68c5750d0/grade-iterate.zip" -OutFile "$env:TEMP\grade-iterate.zip"; Expand-Archive "$env:TEMP\grade-iterate.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md4.1 KBREADME.md997 Bscripts/3 files · 11.6 KB
Read the files here
alirezarezvani/
Shared references2SKILL.md reads these from elsewhere in the repo. Not in the ZIP.
- cma-primitives.mdagent-launcher/references/6.9 KB
- loops-and-workflows.mdagent-launcher/references/3.5 KB
Show the full text74 lines
Phase 3 — Grade → Iterate (the bounded loop)
This is the plugin's loop: CMA's outcome primitive self-grades the agent's
work in an isolated context and feeds failing verdicts back for the next attempt.
It is always bounded by max_iterations (1..20) — never "improve forever".
See ../../references/loops-and-workflows.md
and the outcome section of
../../references/cma-primitives.md.
Workflow
- Define the outcome.
The rubric is required;python3 scripts/outcome_builder.py \ --sheet ./my-agent/build-sheet.json --max-iterations 5 \ --out ./my-agent/payloads/outcome.jsonmax_iterationsis clamped to 1..20. Send the payload as auser.define_outcomeevent (append to the running session). - Read every verdict first.
Tables the rubric outcome and recommends: SHIP (python3 scripts/verdict_reader.py --result ./my-agent/last-verdict.jsonsatisfied), SHARPEN then re-run (needs_revision), ESCALATE (max_iterations_reached/failed), RESUME (interrupted). With ≤1 iteration left it flips to "make the single highest-value fix or escalate now". - Loop invariant. Each iteration must move ≥1 rubric line fail→pass, or the run halts at the cap and escalates. Don't burn the budget on cosmetic edits.
- Once a version passes, run held-back eval.
Held-back cases (never seen during iteration) run in parallel, capped at the 25-thread CMA ceiling, each graded against the same rubric.python3 scripts/eval_scaffold.py \ --sheet ./my-agent/build-sheet.json --out ./my-agent/eval.json --concurrency 5 - Decide. SHIP as v0, or promote to a scheduled deployment (Phase 4). Record
the verdict on the goal:
goal_state.py set --phase run-without-you.
Hard rules
- Bounded, always. No outcome without a
max_iterationscap. - Read the verdict before acting. The grader's explanation drives the next move.
- Held-back cases are held back. Never grade generalization on cases the agent already iterated against.
Forcing-question library (recommend + cite)
- "What are the 3–5 rubric lines?" Recommend: grounded, checkable criteria. Cite: cma-primitives.md (rubric required).
- "How many iterations before you'd rather look yourself?" Recommend: 3–5. Cite: loops-and-workflows.md (bounded loop).
- "On a fail, sharpen the prompt or the tools?" Recommend: whichever rubric line failed points to. Cite: verdict_reader next-move table.
- "Which cases did the agent NOT see?" Recommend: hold back ≥3 for generalization. Cite: this SKILL (held-back eval).
Tools
scripts/outcome_builder.py— user.define_outcome payload (rubric required, cap 1..20).scripts/verdict_reader.py— grader result → next move.scripts/eval_scaffold.py— held-back cases + parallel run plan (≤25 threads).
| 1 | |
| 2 | name grade-iterate |
| 3 | description Phase 3 of building a Claude Managed Agent — the bounded grade→iterate loop. Define a CMA outcome (a required markdown rubric graded by an isolated grader), read each verdict, decide the next move (sharpen / re-run / promote to schedule), and once a version passes, run held-back eval cases in parallel. Use when the user says "grade my agent", "make it pass the rubric", "iterate until it's good", "is it good enough", or when the orchestrator routes phase=grade-iterate. outcome_builder.py builds the user.define_outcome payload (rubric required, max_iterations clamped 1..20 — never unbounded); verdict_reader.py reads the grader result and recommends the next move; eval_scaffold.py generates held-back cases + a parallel run plan (capped at the 25-thread CMA ceiling). Distinct from stage-launch (first launch) and run-without-you (scheduling). |
| 4 | version 2.11.2 |
| 5 | author Alireza Rezvani |
| 6 | license MIT |
| 7 | tags [cma, outcome, rubric, grader, grade-iterate, loop, max-iterations, eval, held-back] |
| 8 | compatible_tools [claude-code, codex-cli, cursor, antigravity, opencode, gemini-cli] |
| 9 | |
| 10 | |
| 11 | # Phase 3 — Grade → Iterate (the bounded loop) |
| 12 | |
| 13 | This is the plugin's **loop**: CMA's `outcome` primitive self-grades the agent's |
| 14 | work in an isolated context and feeds failing verdicts back for the next attempt. |
| 15 | It is **always bounded** by `max_iterations` (1..20) — never "improve forever". |
| 16 | |
| 17 | See [`../../references/loops-and-workflows.md`] |
| 18 | and the outcome section of |
| 19 | [`../../references/cma-primitives.md`]. |
| 20 | |
| 21 | ## Workflow |
| 22 | |
| 23 | **Define the outcome.** |
| 24 | |
| 25 | python3 scripts/outcome_builder.py \ |
| 26 | --sheet ./my-agent/build-sheet.json --max-iterations 5 \ |
| 27 | --out ./my-agent/payloads/outcome.json |
| 28 | |
| 29 | The **rubric is required**; `max_iterations` is clamped to 1..20. Send the |
| 30 | payload as a `user.define_outcome` event (append to the running session). |
| 31 | **Read every verdict first.** |
| 32 | |
| 33 | python3 scripts/verdict_reader.py --result ./my-agent/last-verdict.json |
| 34 | |
| 35 | Tables the rubric outcome and recommends: **SHIP** (`satisfied`), **SHARPEN** |
| 36 | then re-run (`needs_revision`), **ESCALATE** (`max_iterations_reached` / |
| 37 | `failed`), **RESUME** (`interrupted`). With ≤1 iteration left it flips to |
| 38 | "make the single highest-value fix or escalate now". |
| 39 | **Loop invariant.** Each iteration must move ≥1 rubric line fail→pass, or the |
| 40 | run halts at the cap and escalates. Don't burn the budget on cosmetic edits. |
| 41 | **Once a version passes, run held-back eval.** |
| 42 | |
| 43 | python3 scripts/eval_scaffold.py \ |
| 44 | --sheet ./my-agent/build-sheet.json --out ./my-agent/eval.json --concurrency 5 |
| 45 | |
| 46 | Held-back cases (never seen during iteration) run in parallel, capped at the |
| 47 | 25-thread CMA ceiling, each graded against the same rubric. |
| 48 | **Decide.** SHIP as v0, or promote to a scheduled deployment (Phase 4). Record |
| 49 | the verdict on the goal: `goal_state.py set --phase run-without-you`. |
| 50 | |
| 51 | ## Hard rules |
| 52 | |
| 53 | **Bounded, always.** No outcome without a `max_iterations` cap. |
| 54 | **Read the verdict before acting.** The grader's explanation drives the next move. |
| 55 | **Held-back cases are held back.** Never grade generalization on cases the agent |
| 56 | already iterated against. |
| 57 | |
| 58 | ## Forcing-question library (recommend + cite) |
| 59 | |
| 60 | "What are the 3–5 rubric lines?" *Recommend:* grounded, checkable criteria. |
| 61 | *Cite:* cma-primitives.md (rubric required). |
| 62 | "How many iterations before you'd rather look yourself?" *Recommend:* 3–5. |
| 63 | *Cite:* loops-and-workflows.md (bounded loop). |
| 64 | "On a fail, sharpen the prompt or the tools?" *Recommend:* whichever rubric line |
| 65 | failed points to. *Cite:* verdict_reader next-move table. |
| 66 | "Which cases did the agent NOT see?" *Recommend:* hold back ≥3 for generalization. |
| 67 | *Cite:* this SKILL (held-back eval). |
| 68 | |
| 69 | ## Tools |
| 70 | |
| 71 | `scripts/outcome_builder.py` — user.define_outcome payload (rubric required, cap 1..20). |
| 72 | `scripts/verdict_reader.py` — grader result → next move. |
| 73 | `scripts/eval_scaffold.py` — held-back cases + parallel run plan (≤25 threads). |
| 74 |
Details
- Version
- 2.11.2
- Updated
- Aug 30, 2026
- License
- MIT
- Stars on the repo
- ★ 26,349
- Checked
- Source
- alirezarezvani/claude-skills ↗
- Creator
- alirezarezvani · 363 listings
Similar skills
See all →
PromptAct as an expert AI engineer specializing in practical
SkillQuery the 1000 Genomes Project datasetOneKGPd: Individual-Level Queries over the 1000 Genomes Project
SkillBayesian modeling with PyMCPyMC Bayesian Modeling
SkillStatistical models library for PythonStatsmodels: Statistical Modeling and Econometrics
SkillHugging Face Transformers for loading Hub models
SkillWorking with Outpost Bio's open microbiome foundation modelsWaypoint: Outpost Bio's Open Microbiome Foundation ModelsMore from alirezarezvani
SkillResume a paused experiment/ar:ar-resume — Resume Experiment
SkillShow experiment dashboard with results, active loops/ar:ar-status — Experiment Dashboard
SkillStart an autonomous experiment loop with user-selected/ar:loop — Autonomous Experiment Loop
SkillRun a single experiment iteration/ar:run — Single Experiment Iteration
SkillSet up a new autoresearch experiment interactively/ar:setup — Create New Experiment
Skill/cs:boardroom <brief/cs:boardroom — Multi-Role Boardroom Deliberation