Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Deterministically compact final H3 bodies to the active delivery profile's paragraph budget without deleting prose or changing citation-block order. **Trigger**: paragraph compaction, paragraph budget, compact H3, 段落压缩, 段落预算. **Use when**: H3 section files have passed logic polish and must converge before the final argument snapshot and merge.
.claude/skills/willoscar-paragraph-curator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-16 | ✗→✓ | ▲ Improved | -24% | 0% |
Compact paragraph boundaries without performing a new semantic rewrite.
This is a deterministic convergence step. It prevents a long drafting loop from leaving sections outside the delivery profile, while keeping the original prose and evidence recoverable. It does not rank paragraphs, generate alternatives, replace evidence, or decide which claims are important.
sections/S<subsection-id>.mdqueries.md for draft_profileOnly H3 files are modified. Front matter (S1.md, S2.md), H2 lead files, and global sections are not touched.
| Profile | Paragraphs per H3 | |---|---:| | course_paper | 5-7 | | survey | 10-12 | | deep | 11-13 |
The script first joins short adjacent body paragraphs while respecting the profile floor. If a section remains over budget, it repeatedly joins the shortest eligible adjacent pair. It never truncates a paragraph or drops a middle block.
sections/output/PARAGRAPH_CURATION_REPORT.mdsections/paragraphs_curated.refined.ok on PASSThe report records the active profile and before/after paragraph counts for each H3. PASS requires every H3 to be within budget and the sequence of citation blocks to be unchanged. On FAIL, the marker is removed.
subsection-writer or the relevantevidence unit. Compaction must not invent padding.
writer-selfloop orsection-logic-polisher. This Skill changes paragraph boundaries, not ideas.
argument-selfloop after this Skill so the argument ledger and sectionmanifest describe the final section content.
bashuv run python .codex/skills/paragraph-curator/scripts/run.py \ --workspace workspaces/<name>
Optional runner fields are --unit-id, --inputs, --outputs, and --checkpoint.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,465 | 5,324 | -29% | 1 | 1 | 0% | 1,101 | 748 | -32% | 0 | 0 | — |
case-02 | fail→fail | 11,107 | 4,905 | -56% | 1 | 1 | 0% | 1,966 | 738 | -62% | 0 | 0 | — |
case-03 | fail→fail | 6,126 | 6,153 | +0% | 1 | 1 | 0% | 412 | 926 | +125% | 0 | 0 | — |
case-04 | fail→fail | 8,198 | 5,321 | -35% | 1 | 1 | 0% | 1,235 | 1,386 | +12% | 0 | 0 | — |
case-05 | fail→fail | 7,246 | 3,717 | -49% | 1 | 1 | 0% | 1,088 | 1,038 | -5% | 0 | 0 | — |
case-06 | fail→pass | 8,701 | 7,327 | -16% | 1 | 1 | 0% | 1,282 | 1,704 | +33% | 0 | 0 | — |
case-07 | pass→pass | 12,480 | 3,490 | -72% | 1 | 1 | 0% | 1,810 | 1,070 | -41% | 0 | 0 | — |
case-08 | pass→pass | 10,664 | 1,988 | -81% | 1 | 1 | 0% | 1,582 | 763 | -52% | 0 | 0 | — |
case-09 | fail→pass | 9,040 | 3,928 | -57% | 1 | 1 | 0% | 1,389 | 1,125 | -19% | 0 | 0 | — |
case-10 | pass→pass | 7,752 | 4,828 | -38% | 1 | 1 | 0% | 1,052 | 1,138 | +8% | 0 | 0 | — |
case-11 | pass→pass | 6,012 | 4,837 | -20% | 1 | 1 | 0% | 786 | 1,170 | +49% | 0 | 0 | — |
case-12 | fail→pass | 9,479 | 6,929 | -27% | 1 | 1 | 0% | 1,348 | 1,451 | +8% | 0 | 0 | — |
case-13 | pass→pass | 3,608 | 4,379 | +21% | 1 | 1 | 0% | 501 | 1,036 | +107% | 0 | 0 | — |
case-14 | fail→pass | 9,675 | 5,885 | -39% | 1 | 1 | 0% | 1,496 | 1,371 | -8% | 0 | 0 | — |
case-15 | pass→pass | 3,199 | 3,599 | +13% | 1 | 1 | 0% | 430 | 951 | +121% | 0 | 0 | — |
case-16 | fail→pass | 14,379 | 7,740 | -46% | 1 | 1 | 0% | 2,259 | 1,724 | -24% | 0 | 0 | — |
case-17 | pass→pass | 7,170 | 2,418 | -66% | 1 | 1 | 0% | 1,006 | 798 | -21% | 0 | 0 | — |
case-18 | fail→pass | 10,911 | 4,976 | -54% | 1 | 1 | 0% | 1,708 | 1,285 | -25% | 0 | 0 | — |
case-19 | pass→pass | 12,227 | 3,190 | -74% | 1 | 1 | 0% | 1,782 | 1,012 | -43% | 0 | 0 | — |
case-20 | fail→fail | 1,753 | 5,987 | +242% | 1 | 1 | 0% | 244 | 1,333 | +446% | 0 | 0 | — |
case-21 | fail→fail | 4,413 | 6,691 | +52% | 1 | 1 | 0% | 608 | 1,496 | +146% | 0 | 0 | — |
case-22 | fail→fail | 8,580 | 6,734 | -22% | 1 | 1 | 0% | 863 | 1,584 | +84% | 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 19 counted toward the lift figure. The other 3 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 19 comparable cases.
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.