Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build per-H3 writer context packs (NO PROSE): merge briefs + evidence packs + anchor facts + allowed citations into a single deterministic JSONL, so drafting is less hollow and less brittle. **Trigger**: writer context pack, context pack, drafting pack, paragraph plan pack, 写作上下文包.
.claude/skills/willoscar-writer-context-pack/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 96% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 204% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 390% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 164% | 0% |
Purpose: reduce C5 “hollow writing” by giving the writer a single, per-subsection context pack:
subsection_briefs)evidence_drafts)anchor_sheet)evidence_bindingsoutline/outline.ymloutline/subsection_briefs.jsonloutline/chapter_briefs.jsonloutline/evidence_drafts.jsonloutline/anchor_sheet.jsonloutline/evidence_bindings.jsonlcitations/ref.bibreferences/source_text_hygiene.md when bad source sentences or paper self-narration leak into writer packsassets/paper_voice_palette.jsonassets/source_text_hygiene.jsonassets/context_pack_policy.jsonassets/limitation-signals.json — shared polarity rules used beforea sentence can become a limitation hook
outline/writer_context_packs.jsonloutline/writer_context_packs.jsonl)JSONL, one object per H3 subsection.
Required keys:
sub_id, title, section_id, section_titlerq, thesis, axes, paragraph_planclusters (copied from subsection briefs so writer-side evidence can still be assigned per route when comparison cards are sparse)tension_statement, evaluation_anchor_minimal (copied from subsection briefs; concrete tension + minimal eval context slots)opener_mode, opener_hint (paper-voice hint to vary subsection openers without template labels)bridge_terms, contrast_hook, required_evidence_fields (copied from subsection briefs; transition/evidence handles; NO NEW FACTS)chapter_synthesis_mode (copied from chapter briefs; helps avoid template-y “Taken together…” repeats)allowed_bibkeys_{selected,mapped,chapter,global}anchor_facts (trimmed)comparison_cards (trimmed)must_use (writer contract; minima derived from pack richness + draft_profile)do_not_repeat_phrases (rewrite triggers; high-signal generator stems to avoid repeating verbatim)pack_warnings (list; why this pack may still draft hollow if not fixed upstream)paper_voice_palette (positive paper-voice phrase palette + rewrite stems; avoids "generator voice" without brittle hard blocks)outline/paper_voice_palette.json (if present), else repo default .codex/skills/writer-context-pack/assets/paper_voice_palette.json.role_cards (section author / evidence steward / style harmonizer). Treat them as role cues and rewrite intentions, not sentence templates.pack_stats (object; raw/kept/dropped counts + trim policy so truncation/drop is not silent)Trim policy:
pack_stats.trim_policy).Treat each pack as an executable checklist, not optional context:
A150++ minima (defaults; used by gates and self-loops):
course_paper minima use a smaller context pack: paragraph_plan 6, anchor_facts >=6, comparison_cards >=3, limitation_hooks >=2, and allowed_bibkeys_mapped >=8. The writer-facing must_use subset is 3 anchors, 2 comparisons, and 1 limitation.
paragraph_plan (don’t skip planned paragraphs; merge only if you keep the same contrasts/anchors).paragraph_plan[].connector_phrase as semantic guidance, not copy-paste; paraphrase and vary; avoid Next, we ... narration.anchor_facts item that matches your paragraph’s claim type (eval / numeric / limitation), when present.comparison_cards to write explicit A-vs-B contrast sentences (avoid “A then B” separate summaries).thesis statement (or a faithful paraphrase with the same commitment level).This subsection ...) and avoid repeating literal opener labels (e.g., Key takeaway:) across many H3s.opener_mode / opener_hint to vary how paragraph 1 frames the subsection (tension-first vs decision-first vs lens-first).do_not_repeat_phrases as rewrite triggers (paper voice hygiene):grad-paragraph repeatedly (tension → contrast → evaluation anchor → limitation).allowed_bibkeys_selected (then allowed_bibkeys_mapped, then allowed_bibkeys_chapter). allowed_bibkeys_global is reserved for cross-cutting works mapped across many subsections (foundations/benchmarks/surveys): use it sparingly and still keep >=3 subsection-specific citations per H3.Treat the pack as a set of writing constraints + affordances.
tension_statement, opener_mode, opener_hint, thesiscomparison_cards, axesevaluation_anchor_minimal, evaluation_protocolevaluation_protocol as metadata only; do not replay raw benchmark-name lists as body prose.limitation_hooks, required_evidence_fieldspack_warnings (as a signal), not as copyallowed_bibkeys_selected (then mapped, then chapter, rarely global)Bad (narration opener):
This subsection surveys tool interfaces for agents ...Better (content-first opener):
A central tension in tool interfaces is balancing expressive action spaces with verifiable execution; we argue that interface contracts largely determine what evaluation claims can be trusted.Bad (meta guidance):
Therefore, survey comparisons should focus on ...Better (literature-facing observation):
Across reported protocols, comparisons often hinge on whether tools are treated as deterministic APIs or as stochastic resources, which changes both cost and failure modes.uv run python .codex/skills/writer-context-pack/scripts/run.py --helpuv run python .codex/skills/writer-context-pack/scripts/run.py --workspace <workspace>--workspace <dir>--unit-id <U###>--inputs <semicolon-separated>--outputs <semicolon-separated>--checkpoint <C#>uv run python .codex/skills/writer-context-pack/scripts/run.py --workspace <workspace>uv run python .codex/skills/writer-context-pack/scripts/run.py --workspace <workspace> --inputs "outline/outline.yml;outline/subsection_briefs.jsonl;outline/chapter_briefs.jsonl;outline/evidence_drafts.jsonl;outline/anchor_sheet.jsonl;outline/evidence_bindings.jsonl;citations/ref.bib" --outputs "outline/writer_context_packs.jsonl"When you are satisfied with writer packs (and they are consistent with briefs/bindings), create:
outline/writer_context_packs.refined.okThis is an explicit "I reviewed/refined this" signal:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 13,477 | 4,989 | -63% | 1 | 1 | 0% | 2,400 | 2,653 | +11% | 0 | 0 | — |
case-02 | fail→fail | 5,487 | 5,459 | -1% | 1 | 1 | 0% | 343 | 2,639 | +669% | 0 | 0 | — |
case-03 | fail→fail | 32,749 | 5,501 | -83% | 1 | 1 | 0% | 5,502 | 2,611 | -53% | 0 | 0 | — |
case-04 | pass→pass | 6,585 | 9,976 | +51% | 1 | 1 | 0% | 907 | 3,712 | +309% | 0 | 0 | — |
case-05 | fail→pass | 10,555 | 4,310 | -59% | 1 | 1 | 0% | 1,589 | 3,116 | +96% | 0 | 0 | — |
case-06 | fail→fail | 3,070 | 5,119 | +67% | 1 | 1 | 0% | 394 | 2,720 | +590% | 0 | 0 | — |
case-07 | fail→pass | 6,920 | 2,613 | -62% | 1 | 1 | 0% | 921 | 2,801 | +204% | 0 | 0 | — |
case-08 | fail→pass | 4,835 | 3,151 | -35% | 1 | 1 | 0% | 603 | 2,953 | +390% | 0 | 0 | — |
case-09 | fail→pass | 21,505 | 1,545 | -93% | 1 | 1 | 0% | 1,436 | 2,637 | +84% | 0 | 0 | — |
case-18 | fail→pass | 7,025 | 1,859 | -74% | 1 | 1 | 0% | 1,012 | 2,673 | +164% | 0 | 0 | — |
case-10 | pass→pass | 15,527 | 1,964 | -87% | 1 | 1 | 0% | 2,137 | 2,663 | +25% | 0 | 0 | — |
case-11 | fail→pass | 13,060 | 2,801 | -79% | 1 | 1 | 0% | 1,683 | 2,854 | +70% | 0 | 0 | — |
case-12 | fail→pass | 10,688 | 3,472 | -68% | 1 | 1 | 0% | 1,759 | 3,003 | +71% | 0 | 0 | — |
case-13 | fail→pass | 9,776 | 3,555 | -64% | 1 | 1 | 0% | 1,422 | 2,960 | +108% | 0 | 0 | — |
case-19 | fail→pass | 14,257 | 6,924 | -51% | 1 | 1 | 0% | 2,198 | 3,359 | +53% | 0 | 0 | — |
case-14 | fail→pass | 10,043 | 3,175 | -68% | 1 | 1 | 0% | 1,375 | 2,905 | +111% | 0 | 0 | — |
case-15 | fail→pass | 8,191 | 1,448 | -82% | 1 | 1 | 0% | 1,061 | 2,585 | +144% | 0 | 0 | — |
case-16 | fail→pass | 6,955 | 2,023 | -71% | 1 | 1 | 0% | 984 | 2,663 | +171% | 0 | 0 | — |
case-17 | fail→pass | 10,564 | 2,255 | -79% | 1 | 1 | 0% | 1,488 | 2,707 | +82% | 0 | 0 | — |
case-20 | fail→pass | 11,432 | 2,445 | -79% | 1 | 1 | 0% | 1,576 | 2,731 | +73% | 0 | 0 | — |
case-21 | fail→pass | 13,364 | 6,586 | -51% | 1 | 1 | 0% | 1,908 | 3,339 | +75% | 0 | 0 | — |
case-22 | pass→pass | 19,063 | 8,061 | -58% | 1 | 1 | 0% | 2,782 | 3,604 | +30% | 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 +68 percentage points is the difference between those two pass rates over the 18 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.