Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Raise citation diversity/density (NO NEW FACTS): generate an in-scope “citation budget” plan per H3 so drafts stop failing the global unique-citation gate and stop looking under-cited. **Trigger**: cite boost, citation budget, unique citations too low, add more citations, improve reference density, 引用太少, 增加引用, 引用密度.
.claude/skills/willoscar-citation-diversifier/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 144% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 27% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -17% | 0% |
Purpose: fix a common survey failure mode:
This skill does not change prose by itself. It produces a constraint sheet: output/CITATION_BUDGET_REPORT.md.
output/DRAFT.mdoutline/outline.yml (H3 ids/titles; used to allocate budgets per subsection)outline/writer_context_packs.jsonl (source of allowed_bibkeys_{selected,mapped,chapter,global} per H3)citations/ref.biboutput/CITATION_BUDGET_REPORT.mdcitations/ref.bib.The report should feel like a constraint sheet, not a random list:
recommended).course_paper: cap suggestions at 3-6 keys / H3 and target the profile's 24/32 global budgetCanonical (parseable) lines required (downstream validators depend on these):
queries.md:citation_target (recommended by default for A150++).- Global target (policy; blocking): >= <N> ...- Gap: <K> (gap-to-target; if 0, injection can be a no-op PASS)Optional (always reported; may be blocking depending on citation_target):
- Global recommended target: >= <N> ...- Gap to recommended: <K>Recommended prioritization (scope-safe):
allowed_bibkeys_selected → allowed_bibkeys_mapped → allowed_bibkeys_chapterallowed_bibkeys_global only for:After you generate the budget report:
citation-injector (LLM edits to output/DRAFT.md, NO NEW FACTS).draft-polisher to remove any “budget dump voice” while keeping citation keys unchanged.Important: citation-injector is LLM-first. Its script is validation-only.
1) Diagnose the global situation
output/DRAFT.md and estimate the “unique-key gap” (or use pipeline-auditor’s FAIL reason).2) Allocate budgets per H3 (scope-first)
outline/outline.yml to enumerate H3s in paper order.outline/writer_context_packs.jsonl.3) Write output/CITATION_BUDGET_REPORT.md Required structure:
- Status: PASS|FAIL- Global target (policy; blocking): >= <N> ...- Gap: <K>## Summary (gap + strategy)## Per-subsection budgets (H3 id/title → suggested keys → placement hint)If you want a deterministic first-pass budget report, run the helper script. Treat it as a baseline and refine the plan as needed.
uv run python .codex/skills/citation-diversifier/scripts/run.py --helpuv run python .codex/skills/citation-diversifier/scripts/run.py --workspace <workspace>--workspace <dir>--unit-id <U###> (optional)--inputs <semicolon-separated> (rare override; prefer defaults)--outputs <semicolon-separated> (rare override; default writes output/CITATION_BUDGET_REPORT.md)--checkpoint <C#> (optional)uv run python .codex/skills/citation-diversifier/scripts/run.py --workspace <workspace>output/CITATION_BUDGET_REPORT.md exists and has actionable, in-scope budgets.citation-injector, pipeline-auditor no longer FAILs on global unique citations.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 5,785 | 4,593 | -21% | 1 | 1 | 0% | 309 | 1,500 | +385% | 0 | 0 | — |
case-01 | fail→fail | 17,284 | 5,058 | -71% | 1 | 1 | 0% | 3,127 | 1,446 | -54% | 0 | 0 | — |
case-03 | fail→fail | 49,442 | 4,001 | -92% | 1 | 1 | 0% | 6,073 | 1,586 | -74% | 0 | 0 | — |
case-04 | fail→fail | 2,862 | 5,350 | +87% | 1 | 1 | 0% | 356 | 1,513 | +325% | 0 | 0 | — |
case-05 | fail→fail | 2,648 | 16,507 | +523% | 1 | 1 | 0% | 422 | 3,660 | +767% | 0 | 0 | — |
case-06 | fail→pass | 6,806 | 15,465 | +127% | 1 | 1 | 0% | 1,251 | 3,058 | +144% | 0 | 0 | — |
case-07 | fail→pass | 21,235 | 5,560 | -74% | 1 | 1 | 0% | 1,132 | 2,141 | +89% | 0 | 0 | — |
case-08 | pass→pass | 7,027 | 6,496 | -8% | 1 | 1 | 0% | 1,242 | 2,231 | +80% | 0 | 0 | — |
case-09 | pass→pass | 3,954 | 3,522 | -11% | 1 | 1 | 0% | 670 | 1,882 | +181% | 0 | 0 | — |
case-10 | pass→pass | 9,478 | 3,543 | -63% | 1 | 1 | 0% | 1,723 | 1,881 | +9% | 0 | 0 | — |
case-11 | pass→pass | 8,198 | 5,602 | -32% | 1 | 1 | 0% | 650 | 2,273 | +250% | 0 | 0 | — |
case-12 | fail→pass | 9,379 | 4,069 | -57% | 1 | 1 | 0% | 1,444 | 1,975 | +37% | 0 | 0 | — |
case-13 | fail→pass | 7,397 | 2,190 | -70% | 1 | 1 | 0% | 1,234 | 1,570 | +27% | 0 | 0 | — |
case-14 | fail→pass | 11,527 | 2,394 | -79% | 1 | 1 | 0% | 1,982 | 1,652 | -17% | 0 | 0 | — |
case-15 | fail→pass | 19,478 | 2,563 | -87% | 1 | 1 | 0% | 1,512 | 1,585 | +5% | 0 | 0 | — |
case-16 | pass→fail | 8,129 | 2,829 | -65% | 1 | 1 | 0% | 1,188 | 1,692 | +42% | 0 | 0 | — |
case-17 | fail→pass | 9,381 | 1,762 | -81% | 1 | 1 | 0% | 1,434 | 1,520 | +6% | 0 | 0 | — |
case-18 | fail→pass | 9,379 | 2,759 | -71% | 1 | 1 | 0% | 1,474 | 1,640 | +11% | 0 | 0 | — |
case-19 | pass→pass | 5,974 | 2,266 | -62% | 1 | 1 | 0% | 997 | 1,507 | +51% | 0 | 0 | — |
case-20 | pass→pass | 5,441 | 1,449 | -73% | 1 | 1 | 0% | 822 | 1,439 | +75% | 0 | 0 | — |
case-21 | fail→pass | 13,657 | 5,238 | -62% | 1 | 1 | 0% | 2,320 | 2,067 | -11% | 0 | 0 | — |
case-22 | pass→pass | 11,155 | 4,982 | -55% | 1 | 1 | 0% | 2,055 | 2,028 | -1% | 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 18 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 +36 percentage points is the difference between those two pass rates over the 18 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
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.