Help us improve
Share bugs, ideas, or general feedback.
From retro
Retrieves and summarizes a sprint agent's JSONL session transcript, showing tool calls, errors, messages, and retry patterns. Invoke when asked to "read the transcript for implementer-1", "what did agent X do", "show me the agent log", "analyze what happened during task 25", or "retrieve agent session". Also invoke when a process-observer or team-lead needs to review agent behavior after task completion. Accepts --teammate, --task, --focus, and --session arguments. Do not use for reading kanban cards, analysis reports, or non-JSONL files — use Read tool directly for those.
npx claudepluginhub cosmicdreams/claude-plugins --plugin retroHow this skill is triggered — by the user, by Claude, or both
Slash command
/retro:transcriptThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Retrieve and summarize a sprint agent's JSONL session transcript to support process observation and retrospective analysis.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
Retrieve and summarize a sprint agent's JSONL session transcript to support process observation and retrospective analysis.
Each agent spawned by team-lead gets its own JSONL file:
~/.claude/projects/<project-slug>/
<session-id>.jsonl ← team-lead's session
<session-id>/
subagents/
agent-<agentId>.jsonl ← one file per spawned agent
Agent JSONL files do NOT store the agent's name directly. Identity is inferred from:
SendMessage tool calls (recipient and summary reveal role)| Argument | Required | Description |
|---|---|---|
--teammate | yes | Agent name to find (e.g. implementer-1, reviewer) |
--task | no | Task ID to scope the time window (e.g. 25) |
--focus | no | errors, tools, messages, all (default: all) |
--session | no | Session ID prefix if known; otherwise auto-discover |
Find the correct project directory under ~/.claude/projects/:
ls ~/.claude/projects/ | grep -i "SAME-PAGE-PREVIEW"
The slug is the directory name with path separators replaced by hyphens. For this project it is -Users-Chris-Weber-OpenSource-SAME-PAGE-PREVIEW.
List JSONL files in the project directory, sorted by modification time to find the most recent sprint session:
ls -lt ~/.claude/projects/<project-slug>/*.jsonl | head -5
If --session was provided, match on the session ID prefix. Otherwise use the most recently modified file that has a corresponding subagents directory:
ls ~/.claude/projects/<project-slug>/
# Look for entries that are BOTH a .jsonl file AND a directory (directory = has subagents)
Each agent's transcript is in <session-id>/subagents/agent-<agentId>.jsonl. Use the bundled script to identify which file belongs to --teammate:
python3 scripts/find_agent_file.py \
--teammate implementer-1 \
--session-dir ~/.claude/projects/<project-slug>/<session-id>/subagents/
The script scans SendMessage call summaries across all subagent files and prints the best-matching file path to stdout. Exit code 1 means no match was found.
If --teammate is team-lead, read the top-level session JSONL directly instead of the subagents directory.
Read the bead notes to get the task timeframe:
bd show <bead_id> --json | jq '.notes'
Narrow the JSONL scan to entries whose timestamp falls within the task window. If timestamps are ambiguous (same-day, no time in narrative), use the full file.
Run the bundled summarize script against the identified agent file:
python3 scripts/summarize_transcript.py \
--file <path-to-agent-file> \
--focus all
Optional time-window scoping (ISO8601 timestamps from Step 4):
python3 scripts/summarize_transcript.py \
--file <path-to-agent-file> \
--focus errors \
--after 2026-02-20T14:00:00Z \
--before 2026-02-20T15:30:00Z
Present the output as a structured markdown summary:
## Transcript Summary — <teammate> / Task #<task>
Session file: agent-<agentId>.jsonl
Time window: <start> → <end> (<duration>)
### Tool Calls (<total> total)
- <Tool>: <count> (<errors> errors)
...
### Errors (<count>)
- <description>
...
### Messages Sent
- → <recipient>: <summary>
...
### Retry Patterns
- <count>x: <command> (possible friction point)
### Process Notes
<Any observations worth flagging — stale flags, scope drift, missing handoff>
If --focus errors is specified, omit tool counts and messages. If --focus messages, show only the messages section. If --focus tools, show tool counts and retries only.
Example 1: Team-lead pings after task completion
{task_id: 25, owner: "implementer-1", bead_id: "sprint-a1b2"}/retro:transcript --teammate implementer-1 --task 25 --focus errorsExample 2: Full review after reviewer completes
/retro:transcript --teammate reviewer --focus allExample 3: Targeted message review after communication confusion
/retro:transcript --teammate issue-analyzer-2 --focus messagesNo subagents directory found
ls ~/.claude/projects/<slug>/Cannot identify which file belongs to --teammate
JSONL parse errors
json.loads() in try/except — skip malformed lines silentlyTimestamps don't narrow the window