Analyze Patterns
When the user invokes /analyze-patterns or says "analyze sessions" / "find patterns":
Step 1: Extract messages from sessions
Run the extractor script, save to a temp file:
# Incremental (only new sessions since last run):
python3 ~/.claude/skills/analyze-patterns/scripts/pattern-detector.py --user-only --stats > /tmp/pattern-extract.json
# Or full rescan (all sessions):
python3 ~/.claude/skills/analyze-patterns/scripts/pattern-detector.py --full --user-only --stats > /tmp/pattern-extract.json
Use --full if the user says "all sessions" / "full" / "--full".
Default is incremental. The --user-only flag extracts only user messages (smaller output).
Read /tmp/pattern-extract.json — it contains JSON with this structure:
{
"session_count": 124,
"projects": {
"ProjectName": {
"message_count": 25,
"user_count": 25,
"messages": [{"role": "user", "text": "..."}]
}
}
}
IMPORTANT: The file can be large (~400-500 KB). Read project by project, analyzing the largest ones first.
Step 2: Analyze patterns
Read the script output and find 4 types of patterns:
1. REPEATED_CORRECTION
User corrects Claude the same way in 2+ different sessions. Examples: "write shorter", "don't ask for confirmation", "use bun". → Suggestion: add to CLAUDE.md or create a rule file
2. FREQUENT_TOOL
The same workflow/skill/tool is used frequently. Examples: constantly calls /browser, always runs the same test command. → Suggestion: create an auto-trigger or shortcut
3. ABANDONED_TASK
Work started but not finished, errors left unfixed. Examples: config change started — session ended, bug found — not fixed. → Suggestion: create an issue to complete the work
4. CLAUDE_RESISTANCE
Claude didn't understand or the user had to explain again. Examples: Claude asks permission when told not to, writes in the wrong language. → Suggestion: improve the prompt/rule
Step 3: Show results to the user
For each pattern found, show:
- Type (REPEATED_CORRECTION / FREQUENT_TOOL / ABANDONED_TASK / CLAUDE_RESISTANCE)
- Short title
- Evidence quotes from user messages
- Specific action suggestion
- Priority (high / medium / low)
Ask the user: "Create GitHub Issues for these patterns?"
Step 4: Create GitHub Issues (after confirmation)
For each confirmed pattern:
gh issue create \
--repo <OWNER>/<REPO> \
--title "Pattern: <title>" \
--label "pattern" \
--body "$(cat <<'EOF'
## Type: <TYPE>
**Priority:** <priority>
**Projects:** <projects, comma-separated>
## Evidence
- "quote 1"
- "quote 2"
## Suggested Action
<specific suggestion>
---
_Generated by /analyze-patterns on <date>_
EOF
)"
Before creating, check for duplicates:
gh issue list --repo <OWNER>/<REPO> --label pattern --state all --json title -q ".[].title"
Step 5: Update state
After a successful analysis:
python3 ~/.claude/skills/analyze-patterns/scripts/pattern-detector.py --full --update-state --stats > /dev/null
This marks all sessions as analyzed. The next incremental run will only pick up new ones.
Error handling
- No new sessions → "No new sessions since last analysis. Use --full for a full rescan."
- Empty script output → check that
~/.claude/projects/exists and contains .jsonl files