Skill Distiller
Transform skills authored for high-capability models (Opus) into deterministic workflows
that execute reliably on lower-cost models (Sonnet, Haiku). The core insight from
EvoSkills: skills encode reusable task structure, not model-specific artifacts. A skill
evolved on Opus transfers with +35-45pp gains to other models — but only when the
instructions are sufficiently deterministic that lower-capability models can follow them
without improvising.
Reference Files
| File |
Contents |
Load When |
references/distillation-patterns.md |
Pattern catalog for converting reasoning to rules |
Always |
Prerequisites
- The source skill must exist and pass
package-evaluator at >= 70%
- Access to both the source model (Opus) and target model (Haiku/Sonnet) for validation
- The
surrogate-verifier skill for cross-model assertion checking
Workflow
Phase 1: Complexity Analysis
Score each section of the source SKILL.md for reasoning difficulty:
| Complexity Signal |
Score |
Distillation Action |
| Decision tree with 3+ branches |
HIGH |
Convert to explicit if/then lookup table |
| "Use judgment" or "consider context" |
HIGH |
Replace with concrete heuristic rules |
| Multi-step inference chain |
HIGH |
Break into numbered atomic steps |
| Reference to domain expertise |
MED |
Add explicit reference file with knowledge |
| Clear enumerated steps |
LOW |
Keep as-is |
| Concrete examples with expected output |
LOW |
Keep as-is |
Produce a complexity map: section name -> complexity score -> planned action.
Phase 2: Trace Collection
Execute the source skill with Opus on 5 representative tasks:
- Select tasks from
evals/cases.yaml (positive cases) or generate new ones
- For each task, capture the full execution trace:
- Tool calls made (which tools, in what order)
- Intermediate reasoning visible in output
- Final output structure and content
- Time taken and token usage
- Store traces as structured data for pattern extraction
Phase 3: Pattern Extraction
From the collected traces, extract deterministic patterns:
- Decision paths — For each HIGH-complexity section, find the actual decisions Opus made across
the 5 tasks. If Opus chose the same path in 4/5 cases, that path becomes the default rule
- Lookup tables — Where Opus applied domain knowledge, build explicit lookup tables
(e.g., "if input contains SQL, use these patterns; if input contains Python, use those")
- Concrete examples — Extract representative input/output pairs from traces to serve as
few-shot examples in the distilled skill
- Tool sequences — Identify the common tool invocation pattern and make it explicit
("Step 1: Read the file. Step 2: Grep for pattern X. Step 3: Write output.")
Phase 4: Distilled Rewrite
Rewrite the SKILL.md applying all distillation actions from Phase 1:
| Source Pattern |
Distilled Replacement |
| "Analyze the code and determine..." |
"Check for these 5 specific patterns: [list]" |
| "Use appropriate formatting" |
"Output as a markdown table with columns: [A, B, C]" |
| "Consider the context to decide..." |
"If [condition A]: do X. If [condition B]: do Y. Default: Z" |
| "Apply best practices for..." |
Reference file with explicit best practices enumerated |
| Multi-paragraph reasoning instruction |
Numbered step list with single-sentence steps |
Rules for the rewrite:
- Every instruction must be actionable by a model with no domain expertise
- No step should require inference — each step's input and output must be explicit
- Replace all "consider", "analyze", "determine" verbs with "check", "count", "list", "output"
- Add concrete examples for any step that could be ambiguous
- Keep the SKILL.md under 500 lines (distillation should reduce, not expand)
Phase 5: Target Model Validation
Run the distilled skill on the target model (Haiku or Sonnet):
- Execute the same 5 tasks from Phase 2 with the distilled skill loaded
- Use the
surrogate-verifier to generate assertions for each task output
- Compare pass rates:
| Metric |
Source (Opus + original) |
Target (Haiku + distilled) |
Delta |
| Assertions passed |
N/M |
N/M |
± |
| Weighted score |
X.XX |
X.XX |
± |
| Output completeness |
% |
% |
± |
| Format compliance |
% |
% |
± |
- If target model score < 80% of source model score, iterate:
- Identify which assertions the target model fails
- Add more explicit instructions for those specific failure points
- Re-run validation (max 3 iterations)
Phase 6: Cross-Model Report
Produce the final comparison:
# Skill Distillation Report: <skill-name>
## Complexity Reduction
- Sections distilled: N/M (HIGH → LOW)
- Instruction word count: original X → distilled Y (Z% reduction)
- Decision points replaced with lookup tables: N
## Cross-Model Performance
| Model | Assertions Passed | Weighted Score | Format Compliance |
|---------|-------------------|----------------|-------------------|
| Opus | 7/7 | 1.00 | 100% |
| Sonnet | 6/7 | 0.92 | 100% |
| Haiku | 5/7 | 0.85 | 85% |
## Changes Made
1. [Section] "Analyze complexity" → explicit 5-item checklist
2. [Section] "Apply formatting" → fixed markdown table template
...
## Recommendation
[SHIP | ITERATE | MANUAL_REVIEW_NEEDED]
Error Handling
| Error |
Resolution |
| Source skill scores below 70% |
Refuse distillation; recommend evolution via test-engineer |
| No execution traces available |
Generate synthetic tasks and collect traces before proceeding |
| Target model fails all assertions |
Skill may be too complex for target model; report with detail |
| Distilled skill longer than source |
Review distillation; patterns may need consolidation |
Limitations
- Cannot distill skills that rely on open-ended adaptive reasoning at many decision points or multi-turn reasoning
- Visual/interactive skills (HTML generation, browser automation) may not distill well
- Distillation optimizes for determinism, not creativity — skills requiring open-ended generation
(writing, brainstorming) are poor candidates
- Trace collection requires actual model execution, incurring API costs
1---2name: skill-distiller3description: Converts Opus-quality skills into deterministic Haiku-executable workflows via trace-driven distillation and cross-model validation. Triggers on: "distill this skill", "make this skill work on Haiku", "cross-model optimization", "optimize skill for cost". NOT for code simplification, use code-refiner.4---56# Skill Distiller78Transform skills authored for high-capability models (Opus) into deterministic workflows9that execute reliably on lower-cost models (Sonnet, Haiku). The core insight from10EvoSkills: skills encode reusable task structure, not model-specific artifacts. A skill11evolved on Opus transfers with +35-45pp gains to other models — but only when the12instructions are sufficiently deterministic that lower-capability models can follow them13without improvising.1415## Reference Files1617| File | Contents | Load When |18| -------------------------------------- | -------------------------------------------------- | ------------------------------------ |19| `references/distillation-patterns.md` | Pattern catalog for converting reasoning to rules | Always |2021## Prerequisites2223- The source skill must exist and pass `package-evaluator` at >= 70%24- Access to both the source model (Opus) and target model (Haiku/Sonnet) for validation25- The `surrogate-verifier` skill for cross-model assertion checking2627## Workflow2829### Phase 1: Complexity Analysis3031Score each section of the source SKILL.md for reasoning difficulty:3233| Complexity Signal | Score | Distillation Action |34| ------------------------------------- | ----- | -------------------------------------------- |35| Decision tree with 3+ branches | HIGH | Convert to explicit if/then lookup table |36| "Use judgment" or "consider context" | HIGH | Replace with concrete heuristic rules |37| Multi-step inference chain | HIGH | Break into numbered atomic steps |38| Reference to domain expertise | MED | Add explicit reference file with knowledge |39| Clear enumerated steps | LOW | Keep as-is |40| Concrete examples with expected output| LOW | Keep as-is |4142Produce a complexity map: section name -> complexity score -> planned action.4344### Phase 2: Trace Collection4546Execute the source skill with Opus on 5 representative tasks:47481. Select tasks from `evals/cases.yaml` (positive cases) or generate new ones492. For each task, capture the full execution trace:50 - Tool calls made (which tools, in what order)51 - Intermediate reasoning visible in output52 - Final output structure and content53 - Time taken and token usage543. Store traces as structured data for pattern extraction5556### Phase 3: Pattern Extraction5758From the collected traces, extract deterministic patterns:59601. **Decision paths** — For each HIGH-complexity section, find the actual decisions Opus made across61 the 5 tasks. If Opus chose the same path in 4/5 cases, that path becomes the default rule622. **Lookup tables** — Where Opus applied domain knowledge, build explicit lookup tables63 (e.g., "if input contains SQL, use these patterns; if input contains Python, use those")643. **Concrete examples** — Extract representative input/output pairs from traces to serve as65 few-shot examples in the distilled skill664. **Tool sequences** — Identify the common tool invocation pattern and make it explicit67 ("Step 1: Read the file. Step 2: Grep for pattern X. Step 3: Write output.")6869### Phase 4: Distilled Rewrite7071Rewrite the SKILL.md applying all distillation actions from Phase 1:7273| Source Pattern | Distilled Replacement |74| -------------------------------------- | ------------------------------------------------------------ |75| "Analyze the code and determine..." | "Check for these 5 specific patterns: [list]" |76| "Use appropriate formatting" | "Output as a markdown table with columns: [A, B, C]" |77| "Consider the context to decide..." | "If [condition A]: do X. If [condition B]: do Y. Default: Z" |78| "Apply best practices for..." | Reference file with explicit best practices enumerated |79| Multi-paragraph reasoning instruction | Numbered step list with single-sentence steps |8081Rules for the rewrite:82- Every instruction must be actionable by a model with no domain expertise83- No step should require inference — each step's input and output must be explicit84- Replace all "consider", "analyze", "determine" verbs with "check", "count", "list", "output"85- Add concrete examples for any step that could be ambiguous86- Keep the SKILL.md under 500 lines (distillation should reduce, not expand)8788### Phase 5: Target Model Validation8990Run the distilled skill on the target model (Haiku or Sonnet):91921. Execute the same 5 tasks from Phase 2 with the distilled skill loaded932. Use the `surrogate-verifier` to generate assertions for each task output943. Compare pass rates:9596| Metric | Source (Opus + original) | Target (Haiku + distilled) | Delta |97| ------------------------------- | ------------------------ | -------------------------- | ----- |98| Assertions passed | N/M | N/M | ± |99| Weighted score | X.XX | X.XX | ± |100| Output completeness | % | % | ± |101| Format compliance | % | % | ± |1021034. If target model score < 80% of source model score, iterate:104 - Identify which assertions the target model fails105 - Add more explicit instructions for those specific failure points106 - Re-run validation (max 3 iterations)107108### Phase 6: Cross-Model Report109110Produce the final comparison:111112```markdown113# Skill Distillation Report: <skill-name>114115## Complexity Reduction116- Sections distilled: N/M (HIGH → LOW)117- Instruction word count: original X → distilled Y (Z% reduction)118- Decision points replaced with lookup tables: N119120## Cross-Model Performance121| Model | Assertions Passed | Weighted Score | Format Compliance |122|---------|-------------------|----------------|-------------------|123| Opus | 7/7 | 1.00 | 100% |124| Sonnet | 6/7 | 0.92 | 100% |125| Haiku | 5/7 | 0.85 | 85% |126127## Changes Made1281. [Section] "Analyze complexity" → explicit 5-item checklist1292. [Section] "Apply formatting" → fixed markdown table template130...131132## Recommendation133[SHIP | ITERATE | MANUAL_REVIEW_NEEDED]134```135136## Error Handling137138| Error | Resolution |139| ----------------------------------- | ------------------------------------------------------------- |140| Source skill scores below 70% | Refuse distillation; recommend evolution via test-engineer |141| No execution traces available | Generate synthetic tasks and collect traces before proceeding |142| Target model fails all assertions | Skill may be too complex for target model; report with detail |143| Distilled skill longer than source | Review distillation; patterns may need consolidation |144145## Limitations146147- Cannot distill skills that rely on open-ended adaptive reasoning at many decision points or multi-turn reasoning148- Visual/interactive skills (HTML generation, browser automation) may not distill well149- Distillation optimizes for determinism, not creativity — skills requiring open-ended generation150 (writing, brainstorming) are poor candidates151- Trace collection requires actual model execution, incurring API costs