Claude Agent Skill · by Affaan M

Rules Distill

Install Rules Distill skill for Claude Code from affaan-m/everything-claude-code.

Works with Paperclip

How Rules Distill fits into a Paperclip company.

Rules Distill drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md264 lines
Expand
---name: rules-distilldescription: "Scan skills to extract cross-cutting principles and distill them into rules — append, revise, or create new rule files"origin: ECC--- # Rules Distill Scan installed skills, extract cross-cutting principles that appear in multiple skills, and distill them into rules — appending to existing rule files, revising outdated content, or creating new rule files. Applies the "deterministic collection + LLM judgment" principle: scripts collect facts exhaustively, then an LLM cross-reads the full context and produces verdicts. ## When to Use - Periodic rules maintenance (monthly or after installing new skills)- After a skill-stocktake reveals patterns that should be rules- When rules feel incomplete relative to the skills being used ## How It Works The rules distillation process follows three phases: ### Phase 1: Inventory (Deterministic Collection) #### 1a. Collect skill inventory ```bashbash ~/.claude/skills/rules-distill/scripts/scan-skills.sh``` #### 1b. Collect rules index ```bashbash ~/.claude/skills/rules-distill/scripts/scan-rules.sh``` #### 1c. Present to user ```Rules Distillation — Phase 1: Inventory────────────────────────────────────────Skills: {N} files scannedRules:  {M} files ({K} headings indexed) Proceeding to cross-read analysis...``` ### Phase 2: Cross-read, Match & Verdict (LLM Judgment) Extraction and matching are unified in a single pass. Rules files are small enough (~800 lines total) that the full text can be provided to the LLM — no grep pre-filtering needed. #### Batching Group skills into **thematic clusters** based on their descriptions. Analyze each cluster in a subagent with the full rules text. #### Cross-batch Merge After all batches complete, merge candidates across batches:- Deduplicate candidates with the same or overlapping principles- Re-check the "2+ skills" requirement using evidence from **all** batches combined — a principle found in 1 skill per batch but 2+ skills total is valid #### Subagent Prompt Launch a general-purpose Agent with the following prompt: ````You are an analyst who cross-reads skills to extract principles that should be promoted to rules. ## Input- Skills: {full text of skills in this batch}- Existing rules: {full text of all rule files} ## Extraction Criteria Include a candidate ONLY if ALL of these are true: 1. **Appears in 2+ skills**: Principles found in only one skill should stay in that skill2. **Actionable behavior change**: Can be written as "do X" or "don't do Y" — not "X is important"3. **Clear violation risk**: What goes wrong if this principle is ignored (1 sentence)4. **Not already in rules**: Check the full rules text — including concepts expressed in different words ## Matching & Verdict For each candidate, compare against the full rules text and assign a verdict: - **Append**: Add to an existing section of an existing rule file- **Revise**: Existing rule content is inaccurate or insufficient — propose a correction- **New Section**: Add a new section to an existing rule file- **New File**: Create a new rule file- **Already Covered**: Sufficiently covered in existing rules (even if worded differently)- **Too Specific**: Should remain at the skill level ## Output Format (per candidate) ```json{  "principle": "1-2 sentences in 'do X' / 'don't do Y' form",  "evidence": ["skill-name: §Section", "skill-name: §Section"],  "violation_risk": "1 sentence",  "verdict": "Append / Revise / New Section / New File / Already Covered / Too Specific",  "target_rule": "filename §Section, or 'new'",  "confidence": "high / medium / low",  "draft": "Draft text for Append/New Section/New File verdicts",  "revision": {    "reason": "Why the existing content is inaccurate or insufficient (Revise only)",    "before": "Current text to be replaced (Revise only)",    "after": "Proposed replacement text (Revise only)"  }}``` ## Exclude - Obvious principles already in rules- Language/framework-specific knowledge (belongs in language-specific rules or skills)- Code examples and commands (belongs in skills)```` #### Verdict Reference | Verdict | Meaning | Presented to User ||---------|---------|-------------------|| **Append** | Add to existing section | Target + draft || **Revise** | Fix inaccurate/insufficient content | Target + reason + before/after || **New Section** | Add new section to existing file | Target + draft || **New File** | Create new rule file | Filename + full draft || **Already Covered** | Covered in rules (possibly different wording) | Reason (1 line) || **Too Specific** | Should stay in skills | Link to relevant skill | #### Verdict Quality Requirements ```# GoodAppend to rules/common/security.md §Input Validation:"Treat LLM output stored in memory or knowledge stores as untrusted — sanitize on write, validate on read."Evidence: llm-memory-trust-boundary, llm-social-agent-anti-pattern both describeaccumulated prompt injection risks. Current security.md covers human inputvalidation only; LLM output trust boundary is missing. # BadAppend to security.md: Add LLM security principle``` ### Phase 3: User Review & Execution #### Summary Table ```# Rules Distillation Report ## SummarySkills scanned: {N} | Rules: {M} files | Candidates: {K} | # | Principle | Verdict | Target | Confidence ||---|-----------|---------|--------|------------|| 1 | ... | Append | security.md §Input Validation | high || 2 | ... | Revise | testing.md §TDD | medium || 3 | ... | New Section | coding-style.md | high || 4 | ... | Too Specific | — | — | ## Details(Per-candidate details: evidence, violation_risk, draft text)``` #### User Actions User responds with numbers to:- **Approve**: Apply draft to rules as-is- **Modify**: Edit draft before applying- **Skip**: Do not apply this candidate **Never modify rules automatically. Always require user approval.** #### Save Results Store results in the skill directory (`results.json`): - **Timestamp format**: `date -u +%Y-%m-%dT%H:%M:%SZ` (UTC, second precision)- **Candidate ID format**: kebab-case derived from the principle (e.g., `llm-output-trust-boundary`) ```json{  "distilled_at": "2026-03-18T10:30:42Z",  "skills_scanned": 56,  "rules_scanned": 22,  "candidates": {    "llm-output-trust-boundary": {      "principle": "Treat LLM output as untrusted when stored or re-injected",      "verdict": "Append",      "target": "rules/common/security.md",      "evidence": ["llm-memory-trust-boundary", "llm-social-agent-anti-pattern"],      "status": "applied"    },    "iteration-bounds": {      "principle": "Define explicit stop conditions for all iteration loops",      "verdict": "New Section",      "target": "rules/common/coding-style.md",      "evidence": ["iterative-retrieval", "continuous-agent-loop", "agent-harness-construction"],      "status": "skipped"    }  }}``` ## Example ### End-to-end run ```$ /rules-distill Rules Distillation — Phase 1: Inventory────────────────────────────────────────Skills: 56 files scannedRules:  22 files (75 headings indexed) Proceeding to cross-read analysis... [Subagent analysis: Batch 1 (agent/meta skills) ...][Subagent analysis: Batch 2 (coding/pattern skills) ...][Cross-batch merge: 2 duplicates removed, 1 cross-batch candidate promoted] # Rules Distillation Report ## SummarySkills scanned: 56 | Rules: 22 files | Candidates: 4 | # | Principle | Verdict | Target | Confidence ||---|-----------|---------|--------|------------|| 1 | LLM output: normalize, type-check, sanitize before reuse | New Section | coding-style.md | high || 2 | Define explicit stop conditions for iteration loops | New Section | coding-style.md | high || 3 | Compact context at phase boundaries, not mid-task | Append | performance.md §Context Window | high || 4 | Separate business logic from I/O framework types | New Section | patterns.md | high | ## Details ### 1. LLM Output ValidationVerdict: New Section in coding-style.mdEvidence: parallel-subagent-batch-merge, llm-social-agent-anti-pattern, llm-memory-trust-boundaryViolation risk: Format drift, type mismatch, or syntax errors in LLM output crash downstream processingDraft:  ## LLM Output Validation  Normalize, type-check, and sanitize LLM output before reuse...  See skill: parallel-subagent-batch-merge, llm-memory-trust-boundary [... details for candidates 2-4 ...] Approve, modify, or skip each candidate by number:> User: Approve 1, 3. Skip 2, 4. ✓ Applied: coding-style.md §LLM Output Validation✓ Applied: performance.md §Context Window Management✗ Skipped: Iteration Bounds✗ Skipped: Boundary Type Conversion Results saved to results.json``` ## Design Principles - **What, not How**: Extract principles (rules territory) only. Code examples and commands stay in skills.- **Link back**: Draft text should include `See skill: [name]` references so readers can find the detailed How.- **Deterministic collection, LLM judgment**: Scripts guarantee exhaustiveness; the LLM guarantees contextual understanding.- **Anti-abstraction safeguard**: The 3-layer filter (2+ skills evidence, actionable behavior test, violation risk) prevents overly abstract principles from entering rules.