$npx -y skills add WrathZA/skillforge --skill skill-forge-recapRead a skill's body and report what it actually does vs. what the description claims: drift, undeclared behaviors, verdict. After the recap, offers context-sensitive actions: fix frontmatter via HITL, hand off to skill-forge-update, or run skill-forge-judge. Use before updating a
| 1 | # Skill Forge Recap |
| 2 | <!-- Pattern: Tool (structured audit output) --> |
| 3 | |
| 4 | Audit a skill by reading its actual implementation and reporting what it *really* does — independent of what the description claims. The description is a claim; the body is the ground truth. |
| 5 | |
| 6 | --- |
| 7 | |
| 8 | ## What to Read |
| 9 | |
| 10 | Use the path provided or resolved by the environment. Environment-level path overrides (e.g. CLAUDE.md remapping) take precedence over any default path. |
| 11 | |
| 12 | If the file doesn't exist, report: "Skill not found — check name spelling" and stop. Do not search for alternatives. |
| 13 | |
| 14 | Also read any `references/` files marked **MANDATORY READ** — behaviors that live outside the main body still count. |
| 15 | |
| 16 | If a `references/` directory exists but no files are marked MANDATORY READ, include this note in **Undeclared behaviors**: "references/ directory present but no MANDATORY READ triggers — possible Pattern 3 (Orphan References)." |
| 17 | |
| 18 | --- |
| 19 | |
| 20 | ## What to Compare |
| 21 | |
| 22 | The description makes four implicit claims. Check each against the body: |
| 23 | |
| 24 | 1. **WHAT it does** — does the body do this, or something adjacent? |
| 25 | 2. **WHEN to use it** — do trigger phrases match actual entry conditions? |
| 26 | 3. **Keywords** — do searchable terms reflect what the body covers? |
| 27 | 4. **Scope** — does the description under- or over-state coverage? |
| 28 | |
| 29 | Also scan for **undeclared behaviors**: things the body does that the description never mentions. Focus on the locations where iterative edits silently accumulate new behavior: NEVER rules, phases/steps, skip/exit conditions, reference-loading triggers, and confirmation loops. |
| 30 | |
| 31 | **Before writing your verdict, ask:** *Would an agent picking skills from descriptions alone make the right call?* If the description would misroute the skill, that's Significant drift regardless of how small the wording gap appears. |
| 32 | |
| 33 | --- |
| 34 | |
| 35 | ## Output Format |
| 36 | |
| 37 | ``` |
| 38 | ## Recap: <skill-name> |
| 39 | |
| 40 | **Description claims:** [one-line summary of what description promises] |
| 41 | |
| 42 | **Body actually does:** [one-line summary derived independently from reading the body] |
| 43 | |
| 44 | **Drift found:** |
| 45 | - [specific discrepancy] |
| 46 | (or "None found") |
| 47 | |
| 48 | **Undeclared behaviors:** |
| 49 | - [behavior in body not mentioned in description] |
| 50 | (or "None found") |
| 51 | |
| 52 | **Verdict:** Aligned / Minor drift / Significant drift |
| 53 | ``` |
| 54 | |
| 55 | --- |
| 56 | |
| 57 | ## Post-Recap Actions |
| 58 | |
| 59 | After writing the recap block, classify the findings into two buckets: |
| 60 | |
| 61 | - **Frontmatter drift**: discrepancies in the `name` or `description` fields |
| 62 | - **Body drift**: behavioral discrepancies or undeclared behaviors |
| 63 | |
| 64 | If neither bucket has findings, output "No drift found." and stop — do not show the action menu. |
| 65 | |
| 66 | Otherwise, show only the options relevant to what was found: |
| 67 | |
| 68 | ``` |
| 69 | (f)ix frontmatter — HITL through corrected name/description fields [only if frontmatter drift] |
| 70 | (u)pdate body — hand off to skill-forge-update with drift loaded [only if body drift] |
| 71 | (j)udge — run skill-forge-judge for quality scoring [always] |
| 72 | ``` |
| 73 | |
| 74 | If both frontmatter and body drift are detected, show all applicable options together. |
| 75 | |
| 76 | ### (f) Fix frontmatter |
| 77 | |
| 78 | Produce a numbered findings list covering only the drifted fields, formatted for skill-forge-hitl. Each item must include the current value and the corrected value: |
| 79 | |
| 80 | ``` |
| 81 | 1. name: "<current>" → "<corrected>" |
| 82 | 2. description: "<current>" → "<corrected>" |
| 83 | ``` |
| 84 | |
| 85 | Include only fields where drift was found. Then invoke `/skill-forge-hitl` on that list. |
| 86 | |
| 87 | ### (u) Update body |
| 88 | |
| 89 | Invoke `/skill-forge-update` and pass the recap output as pre-loaded context. State explicitly that Phase 0 is already complete so skill-forge-update skips directly to Phase 1 change elicitation. |
| 90 | |
| 91 | ### (j) Judge |
| 92 | |
| 93 | Invoke `/skill-forge-judge` on the recapped skill. This is always available — continuous refinement applies even when no drift was detected. |
| 94 | |
| 95 | --- |
| 96 | |
| 97 | ## Verdict Criteria |
| 98 | |
| 99 | **Minor drift**: Description is imprecise but not misleading. The skill would still be selected for the right task. |
| 100 | |
| 101 | **Significant drift**: Description would cause the skill to be selected for the wrong task, OR the agent would miss a key behavior because the description omits it. |
| 102 | |
| 103 | An *incomplete* description (missing behaviors) differs from a *wrong* description (claiming behaviors that don't exist). Flag both, label them separately. |
| 104 | |
| 105 | --- |
| 106 | |
| 107 | ## NEVER |
| 108 | |
| 109 | - **NEVER start your "body actually does" summary by paraphrasing the description** |
| 110 | **Instead:** Read the body first, form an independent summary, then compare to the description. |
| 111 | **Why:** Starting from the description anchors you to its framing — you'll miss drift because your summary will match it by construction. |
| 112 | |
| 113 | - **NEVER skip MANDATORY READ ref |