Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Evaluate execution with three-stage verification pipeline
.claude/skills/q00-evaluate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 148% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 14% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 131% | 0% |
Evaluate an execution session using the three-stage verification pipeline.
/ouroboros:evaluate <session_id> [artifact]Trigger keywords: "evaluate this", "3-stage check"
The evaluation pipeline runs three progressive stages:
When the user invokes this skill:
The Ouroboros MCP tools are often registered as deferred tools that must be explicitly loaded before use. You MUST perform this step before proceeding.
tool discovery query: "+ouroboros evaluate"
mcp__plugin_ouroboros_ouroboros__ouroboros_start_evaluate (with a plugin prefix). After runtime tool discovery returns, the tool becomes callable.IMPORTANT: Do NOT skip this step. Do NOT assume MCP tools are unavailable just because they don't appear in your immediate tool list. They are almost always available as deferred tools that need to be loaded first.
CRITICAL — deferred-schema guard (prevents "Invalid tool parameters"): This skill can call ouroboros_start_evaluate after a fresh turn. A deferred tool's schema loaded on one turn is NOT guaranteed to still be loaded on the next. If you call it while its schema is not loaded in the current turn, the runtime rejects the call with "Invalid tool parameters" before it reaches the server. Therefore: immediately before EVERY ouroboros_start_evaluate call in this skill, re-run tool discovery query: "+ouroboros evaluate" (idempotent — a no-op when already loaded). If the load returns no matching tool (and the tool is not already callable — an empty load for an already-exposed tool is an expected no-op, not absence), switch to the documented fallback instead of retrying the failing call.
session_id provided: Use it directly2.5. Acting verification — reproduce and OBSERVE (do not skip for behaviour-bearing work): Stage 1 already runs mechanical checks (build/test). Go further when the runtime exposes acting tools — computer-use / browser, Bash/shell, file reads: don't just reason over the diff, run the result and observe the real effect (the command's output, the endpoint's response, the rendered UI via a screenshot). Do it via a dedicated verification sub-agent to keep the main session lean — or inline in the main session where the runtime restricts sub-agent spawning (the observation is what matters; the delegation is only an optimization). Probe the acceptance criteria against the ACTUAL observable behaviour and the adversarial classes (misleading_output, hung_command, stale_state, dirty_worktree, …). Feed the captured evidence (commands, outputs, artifact paths) into the evaluate call as part of the artifact. If acting tools are unavailable, note that behaviour was not observed and evaluate on the text alone.
ouroboros_start_evaluate MCP tool so rejected verdictscan continue through the configured Ralph convergence chain: Tool: ouroboros_start_evaluate Arguments: session_id: <session ID> artifact: <the code/output to evaluate, plus observed-behaviour evidence from 2.5> seed_content: <original seed YAML, if available> acceptance_criterion: <specific AC to check, optional> artifact_type: "code" (or "docs", "config") working_dir: <absolute project root, recommended> trigger_consensus: false (true if user requests Stage 3) auto_evolve: <optional override; omit to use execution.auto_evolve>
working_dir controls both Stage 1 command execution and Stage 2 source-file visibility. Pass the absolute project root whenever available; if omitted, the MCP handler falls back to the registered brownfield default, seed project metadata, then the MCP server cwd.
chained_ralph_job_id, follow that Ralph job to terminal before presenting the convergence outcome. A missing Seed produces chained_ralph_skipped: seed_unavailable; preserve the rejected verdict and explain that automatic continuation was safely skipped. In OpenCode plugin mode, auto_evolve=true intentionally returns this pollable parent-owned job; with automatic evolution disabled, the plugin child remains the terminal surface and job_id is None.
◆ Evaluation approved → next: accept, or ooo evolve to iteratively refinecode_changes_detected: true): ◆ Current state → next: Fix the build/test failures above, then ooo evaluate — or ooo ralph for automated fix loopcode_changes_detected: false): ◆ Current state → next: Run ooo run first to produce code, then ooo evaluate◆ Current state → next: ooo run to re-execute with fixes — or ooo evolve for iterative refinement◆ Current state → next: ooo interview to re-examine requirements — or ooo unstuck to challenge assumptionsIf the MCP server is not available, use the ouroboros:evaluator agent to perform a prompt-based evaluation:
ouroboros:evaluator agentUser: /ouroboros:evaluate sess-abc-123
Evaluation Results
============================================================
Final Approval: APPROVED
Highest Stage Completed: 2
Stage 1: Mechanical Verification
[PASS] lint: No issues found
[PASS] build: Build successful
[PASS] test: 12/12 tests passing
Stage 2: Semantic Evaluation
Score: 0.85
AC Compliance: YES
Goal Alignment: 0.90
Drift Score: 0.08
◆ Evaluation approved → next: accept, or `ooo evolve` to iteratively refineYour final response MUST end with exactly one breadcrumb footer line:
◆ <current state> → next: <recommended action>Derive <current state> from live session state via ouroboros_session_status when that MCP projection is available; otherwise derive it from this skill's actual outcome. Never use a linear Step N of M footer because Ouroboros is an evolutionary loop. When the next action is genuinely a choice, list 2-3 honest options in the next: clause. The breadcrumb line must be the last line of the response.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 10,378 | 12,496 | +20% | 1 | 1 | 0% | 1,704 | 2,300 | +35% | 0 | 0 | — |
case-02 | fail→fail | 6,417 | 6,299 | -2% | 1 | 1 | 0% | 344 | 2,289 | +565% | 0 | 0 | — |
case-03 | fail→fail | 24,048 | 13,114 | -45% | 1 | 1 | 0% | 4,292 | 3,015 | -30% | 0 | 0 | — |
case-04 | fail→fail | 3,861 | 10,534 | +173% | 1 | 1 | 0% | 602 | 3,573 | +494% | 0 | 0 | — |
case-05 | fail→fail | 5,434 | 3,610 | -34% | 1 | 1 | 0% | 744 | 2,697 | +263% | 0 | 0 | — |
case-06 | fail→fail | 10,207 | 9,149 | -10% | 1 | 1 | 0% | 1,491 | 3,653 | +145% | 0 | 0 | — |
case-07 | fail→pass | 25,787 | 4,433 | -83% | 1 | 1 | 0% | 2,363 | 2,768 | +17% | 0 | 0 | — |
case-08 | fail→fail | 9,629 | 10,568 | +10% | 1 | 1 | 0% | 1,292 | 2,977 | +130% | 0 | 0 | — |
case-14 | fail→pass | 7,947 | 4,836 | -39% | 1 | 1 | 0% | 1,165 | 2,892 | +148% | 0 | 0 | — |
case-09 | fail→fail | 12,110 | 7,714 | -36% | 1 | 1 | 0% | 1,759 | 3,064 | +74% | 0 | 0 | — |
case-10 | pass→fail | 4,554 | 5,030 | +10% | 1 | 1 | 0% | 567 | 2,666 | +370% | 0 | 0 | — |
case-11 | fail→pass | 14,516 | 3,939 | -73% | 1 | 1 | 0% | 1,928 | 2,662 | +38% | 0 | 0 | — |
case-12 | fail→pass | 13,093 | 3,148 | -76% | 1 | 1 | 0% | 2,282 | 2,592 | +14% | 0 | 0 | — |
case-13 | fail→pass | 7,356 | 3,138 | -57% | 1 | 1 | 0% | 1,120 | 2,583 | +131% | 0 | 0 | — |
case-15 | fail→pass | 10,196 | 4,635 | -55% | 1 | 1 | 0% | 1,471 | 2,816 | +91% | 0 | 0 | — |
case-16 | fail→pass | 9,804 | 2,950 | -70% | 1 | 1 | 0% | 1,566 | 2,509 | +60% | 0 | 0 | — |
case-17 | fail→pass | 8,275 | 3,812 | -54% | 1 | 1 | 0% | 1,148 | 2,602 | +127% | 0 | 0 | — |
case-18 | pass→pass | 17,487 | 4,840 | -72% | 1 | 1 | 0% | 2,155 | 2,726 | +26% | 0 | 0 | — |
case-19 | fail→fail | 12,890 | 3,806 | -70% | 1 | 1 | 0% | 2,187 | 2,697 | +23% | 0 | 0 | — |
case-20 | fail→fail | 4,921 | 7,508 | +53% | 1 | 1 | 0% | 132 | 2,338 | +1671% | 0 | 0 | — |
case-21 | pass→fail | 8,394 | 16,362 | +95% | 1 | 1 | 0% | 1,328 | 4,875 | +267% | 0 | 0 | — |
case-22 | fail→fail | 5,729 | 5,476 | -4% | 1 | 1 | 0% | 272 | 2,260 | +731% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 17 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.