# Analyze Patterns

> Analyze Claude Code session transcripts for repeating behavioral patterns and create GitHub Issues with suggestions

- Skill: `denenis-lab/analyze-patterns` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add denenis-lab/analyze-patterns`
- Raw SKILL.md: https://api.skillmd.com/api/skills/denenis-lab/analyze-patterns/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: denenis-lab (https://skillmd.com/u/denenis-lab)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/denenis-lab/analyze-patterns

---


# 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:

```bash
# 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:
```json
{
  "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:

```bash
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:
```bash
gh issue list --repo <OWNER>/<REPO> --label pattern --state all --json title -q ".[].title"
```


## Step 5: Update state

After a successful analysis:
```bash
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

