Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Evidence self-loop for surveys: read evidence bindings + evidence packs, then write an actionable upstream TODO plan (which stage/skill to fix) before writing more prose. **Trigger**: evidence self-loop, evidence loop, evidence gaps, binding gaps, blocking_missing, 证据自循环, 证据缺口回路.
.claude/skills/willoscar-evidence-selfloop/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 179% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 188% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 68% | 0% |
Purpose: make the evidence-first pipeline converge without writing filler prose.
This skill reads the intermediate evidence artifacts (briefs/bindings/packs) and produces an actionable TODO list that answers:
outline/subsection_briefs.jsonloutline/evidence_bindings.jsonl (expects binding_gaps / binding_rationale if available)outline/evidence_drafts.jsonl (expects blocking_missing, comparisons, eval protocol, limitations)outline/evidence_binding_report.mdoutline/anchor_sheet.jsonlpapers/paper_notes.jsonlpapers/fulltext_index.jsonlqueries.mdoutput/EVIDENCE_SELFLOOP_TODO.md (report-class; always written)blocking_missing, treat it as a STOP signal: strengthen notes/fulltext/mapping, then regenerate packs.binding_gaps, treat it as a ROUTING signal: either enrich the evidence bank for the mapped papers, expand mapping coverage, or adjust required_evidence_fields if unrealistic.Recommended rerun chain (minimal):
pdf-text-extractor → paper-notes → evidence-binder → evidence-draft → anchor-sheet → writer-context-packsection-mapper → outline-refiner → (then rerun C3/C4 evidence skills)1) Read queries.md (if present)
2) Read outline/subsection_briefs.jsonl
sub_id, capture axes + required_evidence_fields (what evidence types this subsection expects).3) Read outline/evidence_bindings.jsonl
sub_id, surface binding_rationale and binding_gaps (what the binder could/could not cover from the evidence bank).4) (Optional) Read outline/evidence_binding_report.md
outline/evidence_bindings.jsonl, not a separate truth source.5) Read outline/evidence_drafts.jsonl
blocking_missing (STOP signals), and check for missing comparisons / eval protocol / limitations that would force hollow writing.6) (Optional) Read outline/anchor_sheet.jsonl
7) (Optional) Read papers/paper_notes.jsonl and papers/fulltext_index.jsonl
blocking_missing, with binding_gaps, and common failure reasons.This skill is the prewrite router for evidence quality. Treat its Status: line as the unblock contract:
PASS: no blocking_missing and no binding_gaps -> proceed to C5 writing (but still scan non-blocking writability smells: low comparisons/eval/anchors often predict hollow prose).OK: no blocking_missing, but some binding_gaps -> you may draft, but expect weaker specificity; prefer fixing gaps first.FAIL: missing inputs OR any blocking_missing -> do not write filler prose; fix upstream and rerun C3/C4.Use this as a semantic routing table (not a script checklist). The goal is to fix the earliest broken intermediate artifact.
| Symptom (where you see it) | Likely root cause | Inspect first | Smallest upstream fix chain | |---|---|---|---| | evidence_drafts.blocking_missing: no usable citation keys | mapped papers lack bibkey / bibkeys not in citations/ref.bib | papers/paper_notes.jsonl (bibkey fields), citations/ref.bib | C3 paper-notes (ensure bibkeys) -> C4 citation-verifier -> rerun evidence-binder -> rerun evidence-draft | | blocking_missing: title-only evidence | retrieval/metadata lacks abstracts (or aggressive filtering) | papers/papers_raw.jsonl abstracts, papers/paper_notes.jsonl evidence_level | C1 literature-engineer (enrich metadata) OR C3 pdf-text-extractor (fulltext) -> rerun paper-notes | | blocking_missing: no evidence snippets extractable | notes are too thin / evidence bank empty for mapped papers | papers/evidence_bank.jsonl (counts), papers/paper_notes.jsonl | C3 paper-notes (richer extraction; prefer fulltext when possible) -> rerun C4 packs | | blocking_missing: no concrete evaluation tokens | notes/bank did not extract benchmarks/metrics/budgets | papers/paper_notes.jsonl (metrics/benchmarks fields), outline/anchor_sheet.jsonl | C3 paper-notes (extract eval anchors) -> rerun anchor-sheet + evidence-draft | | evidence pack comparisons are sparse (signals: comparisons low) | clusters are not contrastable OR mapping coverage too weak | outline/subsection_briefs.jsonl (clusters), outline/mapping.tsv | C2 section-mapper (coverage) OR C3 subsection-briefs (better clusters) -> rerun evidence-draft | | bindings.binding_gaps mentions benchmarks/metrics/protocol | binder cannot find evaluation-tagged evidence for this subsection | outline/evidence_binding_report.md (tag mix), papers/evidence_bank.jsonl tags | C3 paper-notes (tag/evidence extraction) OR C2 expand mapping for that subsection -> rerun evidence-binder | | binding_gaps mentions security/threat model/attacks | mapped set lacks security-focused works or notes lack threat-model detail | outline/mapping.tsv, papers/paper_notes.jsonl | C2 expand mapping (+ C1 queries if needed) OR C3 enrich notes -> rerun binder/packs | | binding report looks mechanically uniform across H3 (same mix, low tag variance) | binder selection too recipe-like OR evidence bank tags too coarse | outline/evidence_binding_report.md (tag mix), evidence bank tags | tighten required_evidence_fields + improve evidence bank tags, then rerun binder; avoid writing around non-specific bindings |
writer-selfloop is FAIL due to missing anchors/comparisons and the corresponding writer pack has pack_warnings, stop and run this evidence self-loop: the section is telling you the pack is not writeable.papers/*, outline/*, or sections/*.uv run python .codex/skills/evidence-selfloop/scripts/run.py --workspace <workspace>--workspace <dir>--unit-id <U###> (optional)--inputs <semicolon-separated> (optional override)--outputs <semicolon-separated> (optional override; default writes output/EVIDENCE_SELFLOOP_TODO.md)--checkpoint <C#> (optional)uv run python .codex/skills/evidence-selfloop/scripts/run.py --workspace <workspace>| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | fail→pass | 12,451 | 4,835 | -61% | 1 | 1 | 0% | 2,316 | 2,862 | +24% | 0 | 0 | — |
case-01 | fail→fail | 6,305 | 68,453 | +986% | 1 | 1 | 0% | 270 | 2,360 | +774% | 0 | 0 | — |
case-02 | fail→fail | 6,444 | 6,761 | +5% | 1 | 1 | 0% | 251 | 2,317 | +823% | 0 | 0 | — |
case-03 | fail→fail | 5,672 | 7,249 | +28% | 1 | 1 | 0% | 249 | 2,349 | +843% | 0 | 0 | — |
case-04 | fail→pass | 6,895 | 8,223 | +19% | 1 | 1 | 0% | 1,096 | 3,057 | +179% | 0 | 0 | — |
case-05 | fail→pass | 10,444 | 4,303 | -59% | 1 | 1 | 0% | 1,585 | 2,804 | +77% | 0 | 0 | — |
case-06 | fail→pass | 5,329 | 3,543 | -34% | 1 | 1 | 0% | 865 | 2,490 | +188% | 0 | 0 | — |
case-07 | fail→pass | 11,449 | 5,552 | -52% | 1 | 1 | 0% | 1,820 | 3,058 | +68% | 0 | 0 | — |
case-08 | fail→pass | 15,016 | 7,148 | -52% | 1 | 1 | 0% | 2,150 | 3,304 | +54% | 0 | 0 | — |
case-09 | fail→pass | 12,419 | 5,950 | -52% | 1 | 1 | 0% | 1,919 | 2,933 | +53% | 0 | 0 | — |
case-10 | fail→pass | 8,340 | 6,275 | -25% | 1 | 1 | 0% | 1,476 | 3,164 | +114% | 0 | 0 | — |
case-11 | fail→pass | 13,722 | 4,795 | -65% | 1 | 1 | 0% | 2,022 | 2,894 | +43% | 0 | 0 | — |
case-13 | fail→pass | 7,165 | 4,733 | -34% | 1 | 1 | 0% | 1,163 | 2,861 | +146% | 0 | 0 | — |
case-14 | fail→pass | 7,288 | 4,230 | -42% | 1 | 1 | 0% | 1,129 | 2,699 | +139% | 0 | 0 | — |
case-15 | fail→pass | 26,761 | 1,917 | -93% | 1 | 1 | 0% | 1,942 | 2,369 | +22% | 0 | 0 | — |
case-16 | fail→pass | 11,277 | 6,606 | -41% | 1 | 1 | 0% | 1,863 | 3,122 | +68% | 0 | 0 | — |
case-17 | fail→pass | 7,028 | 5,567 | -21% | 1 | 1 | 0% | 1,135 | 2,937 | +159% | 0 | 0 | — |
case-18 | pass→pass | 8,623 | 5,743 | -33% | 1 | 1 | 0% | 1,224 | 3,019 | +147% | 0 | 0 | — |
case-19 | pass→pass | 3,662 | 3,018 | -18% | 1 | 1 | 0% | 517 | 2,469 | +378% | 0 | 0 | — |
case-20 | pass→pass | 7,558 | 3,271 | -57% | 1 | 1 | 0% | 1,235 | 2,490 | +102% | 0 | 0 | — |
case-21 | fail→pass | 12,086 | 2,639 | -78% | 1 | 1 | 0% | 1,315 | 2,439 | +85% | 0 | 0 | — |
case-22 | fail→fail | 2,957 | 5,685 | +92% | 1 | 1 | 0% | 433 | 2,812 | +549% | 0 | 0 | — |
case-23 | fail→fail | 8,941 | 22,473 | +151% | 1 | 1 | 0% | 1,421 | 4,983 | +251% | 0 | 0 | — |
case-24 | fail→pass | 3,668 | 9,577 | +161% | 1 | 1 | 0% | 480 | 3,635 | +657% | 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. 24 cases were attempted, and 20 counted toward the lift figure. The other 4 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 +67 percentage points is the difference between those two pass rates over the 20 comparable cases.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
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.