| name | skill-distill |
| description | Analyzes AI agent session history across Claude Code, Codex CLI, pi-mono, and Cursor to discover recurring workflows and auto-generate Agent Skills. Use this skill whenever you want to mine your coding history for patterns worth turning into skills, even if you just say something like "what do I keep doing over and over" or "find patterns in my history". Invoke manually with /skill-distill. |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep, WebFetch |
| disable-model-invocation | true |
| user-invocable | true |
Skill Distill
Analyze session history across AI coding tools, find recurring patterns, and generate new skills from them.
Safety
- Never paste raw log content into a skill. Paraphrase and sanitize all examples.
- Before reading any history file, list the exact files for the user and get explicit approval.
- Mask secrets (tokens, passwords, keys) found in commands. Never copy stdout/stderr into skills.
- Use
[ and ] instead of angle brackets in generated YAML frontmatter and skill bodies.
Workflow
Run these 6 phases in order. Confirm with the user before starting Phase 5.
Progress checklist:
Phase 1: Data Collection
Consent Gate
Before reading anything, present these choices and get approval:
- Which tools: Claude Code, Codex CLI, pi-mono, Cursor (any combination, default: all)
- Scope: current project or all projects
- Time range: last N days
- Files to read: list them explicitly per tool
Running the Extractors
All scripts live in this skill's directory and output normalized JSONL:
{"source", "display", "timestamp", "project", "sessionId"}
For single-source runs:
| Tool | Command |
|---|
| Claude Code | python3 {skill-dir}/filter-history.py --days {N} --project "{path}" --noise-filter |
| Codex CLI | python3 {skill-dir}/extract-codex-history.py --days {N} --project "{path}" |
| pi-mono | python3 {skill-dir}/extract-pi-history.py --days {N} --project "{path}" |
| Cursor | python3 {skill-dir}/extract-cursor-history.py --days {N} --project "{path}" |
For multi-source runs (preferred):
python3 {skill-dir}/merge-histories.py --days {N} --sources claude,codex,pi,cursor --project "{path}" --noise-filter --stats
The merge script calls the individual extractors and deduplicates the output. Use --stats to show per-source counts.
If Claude Code's history.jsonl is too large for the Read tool (>256KB), the filter script handles it. For Cursor, ensure sqlite3 is available and Cursor is not running (locked DB).
Phase 2: Pattern Extraction
Analyze the normalized prompts for concrete, recurring task patterns. Focus on what the user actually repeats, not broad categories.
Three-Axis Extraction
WHAT - The goal the user wants to achieve.
Examples: "commit with appropriate granularity", "fix lint errors", "review PR feedback"
HOW - The method or workflow repeatedly specified.
Examples: "spin up agent team for parallel work", "create git worktree for isolation"
HOW patterns cross-cut multiple WHATs. This cross-cutting nature is strong evidence of skillification value.
FLOW - Session-level prompt chains forming a cohesive workflow.
Examples: "identify issues -> address each -> commit" repeated across 4 sessions.
Extraction Steps
- Exclude noise: /clear, /resume, /status, /usage, /plugin, /init, /mcp, empty prompts, bare
[Pasted text].
- For each prompt, identify the WHAT (goal). If it also specifies a HOW (means), count it under both.
- Group by sessionId, sort chronologically, summarize prompt chains. Record flows appearing 3+ times as FLOW patterns.
- Name each pattern as verb + object.
- For HOW patterns, record which WHATs they combined with.
- For each pattern, record which tools it appeared in.
Counting Rules
- WHAT/HOW contained within a FLOW: count on the FLOW side only.
- Only independently-appearing WHAT/HOW count as standalone WHAT/HOW.
- Still record the cross-cutting nature of HOW even when it appears inside a FLOW.
Cross-Tool Bonus
Patterns appearing in 2+ tools are tool-agnostic and especially valuable. Note the tools for every pattern.
Output Per Pattern
- Pattern name (verb + object), axis (WHAT/HOW/FLOW), occurrence count
- Sources (which tools), 2-3 representative prompts, common steps
- FLOW only: flow steps as arrows, contained WHAT/HOW patterns
- HOW only: which WHATs it combined with
- Variations across occurrences
Phase 3: Suitability Evaluation
Cross-Reference Existing Skills
- Glob for
~/.claude/skills/*/SKILL.md and .claude/skills/*/SKILL.md.
- Read name + description from each.
- Classify patterns: Fully covered (exclude), Partially covered (keep the gap), Not covered (keep).
Scoring (Internal)
Evaluate each pattern on:
- Frequency: occurrence count
- Consistency: HIGH (nearly identical each time), MEDIUM (shared core, varying details), LOW (different each time)
- Automatable steps: fraction that is routine/templatable
- Cross-tool reach: patterns in more tools score higher
Ranking (Internal - Do Not Show)
- Recommend: FLOW with freq >= 3 and consistency MEDIUM+, or WHAT with high freq and HIGH consistency, or any pattern in 3+ tools
- Worth skillifying: medium freq or MEDIUM consistency, or HOW across 3+ WHATs, or pattern in 2 tools
- Not suitable: LOW consistency with low automation rate
Present to User
Show a simple list without scores:
Recommended for skillification:
1. [Pattern name] (Nx, tools: X + Y) - [description]
Worth skillifying:
2. [Pattern name] (Nx, tools: X) - [description]
Include 1-2 representative prompts per candidate. Note when a FLOW contains a WHAT/HOW.
Phase 4: User Selection
- Ask which patterns to skillify (multiple OK).
- Show matching prompts from the relevant sources.
- Confirm for each selection:
- Scope: which part of the workflow to cover
- Variation handling: options within one skill vs. separate skills
- Placement: global (
~/.claude/skills/) or project-specific (.claude/skills/)
- Trigger phrases for the description
- If more context is needed, read 2-3 individual session files.
Phase 5: Skill Generation
Rules
- Never paste raw session content into a skill.
- Never include angle brackets in YAML frontmatter or body. Use
[ and ].
- Never include secrets, tokens, or private identifiers.
- Paraphrase all examples.
Structure
{skill-name}/
SKILL.md # Main procedure (required)
scripts/ # Helper scripts (if needed)
references/ # Supplementary docs (if needed)
SKILL.md Requirements
Frontmatter must include at minimum:
---
name: my-skill
description: >-
What this skill does and when to use it. Include trigger phrases.
allowed-tools: Read, Bash, Grep
disable-model-invocation: true
user-invocable: true
---
Body must include:
- Clear numbered workflow steps
- Error handling for common failures
- At least 2 usage examples
- Under 500 lines total
Note in the skill which tools the pattern was observed in, for context.
Placement
- Global:
~/.claude/skills/{skill-name}/
- Project-specific:
.claude/skills/{skill-name}/
Phase 6: Quality Validation
- Fetch best practices from
https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices using WebFetch.
- Check the generated skill against those guidelines.
- Fix any issues and re-validate.
- Report the result. If everything passes, say "All checks passed."
Troubleshooting
| Problem | Fix |
|---|
| Cursor SQLite fails | Check that sqlite3 exists and Cursor is not running |
| pi-mono sessions missing | Verify ~/.pi/agent/sessions/ exists; expand time range |
| history.jsonl too large | Use filter-history.py (handles files >256KB) |
| JSON parse error | Narrow scope or change time range |
| No sessions found | Expand time range or switch to all-projects scope |