session-transcript-analyzer

v2026.09.24

Parses and merges Claude .jsonl transcripts with debug logs to generate a timeline heuristics report of API limits, context overflows, hook blocks, and tool failures.

GitHub
Install command
npx skhub add oimiragieo/session-transcript-analyzer
Markdown
SKILL.md

Session Transcript Analyzer

<identity> Session Transcript Analyzer Skill - Parses and merges Claude .jsonl transcripts with debug logs to generate a timeline heuristics report of API limits, context overflows, hook blocks, and tool failures. </identity> <capabilities> - Locate Claude Code session transcripts (`.jsonl`) in `~/.claude/projects/` by session ID or by recency - Pair each transcript with its corresponding debug log (`.txt`) in `~/.claude/debug/` - Parse JSONL transcript events: count user turns, tool invocations, and tool errors - Parse debug log lines: detect router lockdown violations, context-length overflows, and JSON parse failures - Generate a structured Markdown report with overview metrics, tool usage summary, and heuristic findings - Write report to `.tmp/transcript-analysis-<session-prefix>.md` or a caller-specified path </capabilities> <instructions> <execution_process>

Step 1: Locate the transcript

Determine the target session. Two modes:

  • Explicit session ID: pass --session <uuid> to scan ~/.claude/projects/<project-dir>/ for a .jsonl file whose name contains the UUID.
  • Auto-detect (no --session): scan the project directory (derived from process.cwd()) for the most recently modified .jsonl file. Fall back to a global scan of ~/.claude/projects/ if the project directory does not exist.

Project folder name derivation: replace the drive colon+backslash with --, then replace remaining path separators with -. Example: C:\dev\projects\agent-studio → C--dev-projects-agent-studio.

Step 2: Pair with a debug log

Once the session ID is extracted from the transcript filename (<uuid>.jsonl), look for a matching debug log at ~/.claude/debug/<uuid>.txt. If not found, do a prefix/contains scan of the debug directory. Warn but continue if no debug log is found.

Step 3: Parse the JSONL transcript

Read the file line by line. Skip blank or malformed lines. For each valid JSON object:

  • Count user messages: event.type === 'user' where event.message.content[0].type === 'text'
  • Count tool invocations: content blocks with type === 'tool_use'; accumulate per-tool counts in a frequency map
  • Collect tool failures: content blocks with type === 'tool_result' and is_error === true

Step 4: Parse the debug log

Read line by line. Collect lines that match any of:

  • [ERROR] or error: — general errors
  • BLOCKED — hook blocks (router lockdown, creator guard)
  • prompt is too long — context-length API errors
  • SyntaxError: Unterminated string in JSON — hook JSON parse failures

Step 5: Run heuristics and generate report

Build a Markdown report with these sections:

  1. Overview Metrics: user turns, tool invocations, tool errors, debug log error count
  2. Tool Usage Summary: sorted frequency table of tool names
  3. Heuristic Findings (flag each category if count > 0):
    • Router Protocol Violations (ROUTER-LOCKDOWN, TASK-CREATE VIOLATION)
    • Context Length Exceeded (prompt is too long)
    • Hook JSON Parse Failures (Unterminated string in JSON)
    • If none triggered: print a clean-system message
  4. Top Tool Failures: first 5 tool_result errors with truncated content (150 chars)

Step 6: Write report

Default output path: .tmp/transcript-analysis-<first-8-chars-of-uuid>.md (create .tmp/ if needed). If --out <path> was supplied, write there instead.

</execution_process>

<best_practices>

  1. Tolerate malformed lines: wrap JSON.parse() in try/catch per line; never abort on a single bad line.
  2. Warn, don't fail, on missing debug log: the transcript alone provides useful metrics; missing debug log loses only heuristic signal.
  3. Truncate tool failure content to 150 chars to keep the report readable; collapse newlines to spaces.
  4. Derive project dir from process.cwd() not from a hardcoded path — supports running from any agent-studio checkout location.
  5. Show only the first 5 tool failures in the report; full data is in the transcript for deeper inspection.

</best_practices> </instructions>

<examples> <usage_example> **Analyze the most recent session (auto-detect):**
node scripts/analyze-session-transcript.mjs
# or
pnpm debug:analyze

Analyze a specific session by UUID:

node scripts/analyze-session-transcript.mjs --session f1326443-490f-486b-bb67-01c72bf42408

Write report to a custom path:

node scripts/analyze-session-transcript.mjs --out .claude/context/reports/backend/session-analysis-2026-03-10.md

Typical report output structure:

# Session Analysis Report: f1326443-490f-486b-bb67-01c72bf42408

Generated: 2026-03-10T12:00:00.000Z

## Overview Metrics

- **User Turns:** 14
- **Tool Invocations:** 87
- **Tool Errors:** 3
- **Debug Log Errors:** 2

## Tool Usage Summary

- `Read`: 34 times
- `Edit`: 18 times
- `Bash`: 15 times
- `Write`: 12 times
- `TaskUpdate`: 8 times

## Heuristic Findings

### Context Length Exceeded (API Error)

The orchestrator accumulated too many tokens and crashed the API request.
Occurred **1** times.

## Top Tool Failures (from Transcript UI)

- `toolu_01ABC`: File not found: .claude/context/runtime/stale-tasks.json...

</usage_example> </examples>

Search Protocol

For code discovery and search tasks, follow this priority order:

  1. `pnpm search:code "<query>"` (Primary intent-based search).
  2. `ripgrep` (for exact keyword/regex matches).
  3. semantic/structural search via code tools if available.

Memory Protocol (MANDATORY)

Before starting: ```bash cat .claude/context/memory/learnings.md cat .claude/context/memory/decisions.md ```

After completing:

  • New pattern -> `.claude/context/memory/learnings.md`
  • Issue found -> `.claude/context/memory/issues.md`
  • Decision made -> `.claude/context/memory/decisions.md`

ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.

Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Not specified

Source path

.claude/skills/session-transcript-analyzer

Default branch

main

Latest commit

64b580e

Tree SHA

42a1df4