Help us improve
Share bugs, ideas, or general feedback.
From retro
Runs a structured end-of-sprint retrospective that reads stored agent interviews, mines JSONL transcripts for metrics, interviews the user, and generates a report with actionable improvement cards. Invoke when the user says "run retrospective", "session review", "what worked and what didn't", "capture learnings", or "end of sprint review". Also invoke after all agents have shut down and sprint work is complete. Do not invoke mid-sprint while agents are still active, for individual issue reviews, or for status checks — those are not retrospectives.
npx claudepluginhub cosmicdreams/claude-plugins --plugin retroHow this skill is triggered — by the user, by Claude, or both
Slash command
/retro:sessionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Comprehensive interactive retrospective capturing agent feedback, session metrics, and generating actionable recommendations.
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.
Comprehensive interactive retrospective capturing agent feedback, session metrics, and generating actionable recommendations.
Use at: End of session (agent interviews are collected during sprint shutdown, not here)
Use by: team lead (main agent)
Duration: 25-35 minutes
Note: Agent interviews are captured by the SubagentStop hook during sprint shutdown and stored in analysis-reports/retro-session/<YYYY-MM-DD>+<sprint-name>/interviews/. This skill reads those files — no timing dependency on agent availability.
analysis-reports/retro-session/<YYYY-MM-DD>+<sprint-name>/interviews/Agent interviews are collected by the retro plugin's SubagentStop hook during each agent's graceful shutdown (interview → capture → store). They are stored as individual files per agent.
analysis-reports/retro-session/<YYYY-MM-DD>+<sprint-name>/interviews/.beads/retro.db (backlog lane)retro:interviews (interview-templates.md)If no interview files exist: Note the gap in the report. This means the Graceful Shutdown Sequence was not followed during the sprint — flag as a process issue.
3A: Kanban Board Analysis
bd list -l board-sprint --json
bd list -l board-sprint --json | jq 'group_by(.status)'bd blocked.beads/sprint.db does not exist, skip this section — retro runs on interviews + JSONL alonebd list -l board-retro -l lane-backlog --json3B: JSONL Transcript Mining (grep-level analysis)
Locate session JSONL file at: ~/.claude/projects/<sanitized-project-path>/<session-id>.jsonl (e.g. -Users-Chris-Weber-OpenSource-SAME_PAGE_PREVIEW or -Users-Chris-Weber-OpenSource-DRUPAL)
# Extract key metrics from JSONL timestamps
grep '"timestamp"' session-id.jsonl | head -1 # session start
grep '"timestamp"' session-id.jsonl | tail -1 # session end
# Count work activity (tool calls = active work)
grep -c '"tool":\|"_progress"' session-id.jsonl
# Count idle/wait periods (keywords indicate blocking)
grep -i 'wait\|queue\|block\|unavailable' session-id.jsonl | wc -l
# Test results (count pass/fail patterns)
grep -c 'pass\|fail' session-id.jsonl
# Agent interactions (message frequency = collaboration signals)
grep -c '"type".*"message"\|"recipient"' session-id.jsonl
3C: Metrics Calculation (see references/metrics-baseline.md for details)
3D: Cross-Session Comparison
This phase is mandatory. The user holds strategic context that agents and data analysis cannot provide.
Use AskUserQuestion to interview the user with three questions grounded in the KEEP/IMPROVE/LEARN pillars. Populate suggested options from session data gathered in Phases 2-3.
AskUserQuestion with 3 questions, all with multiSelect: true:
Q1 (KEEP): "What went well this session that we should keep doing?"
multiSelect: true
Options: [2-4 options drawn from session data, e.g., agent findings, metrics wins]
Q2 (IMPROVE): "What can be improved for next session?"
multiSelect: true
Options: [2-4 options drawn from blockers, friction points, metric misses]
Q3 (LEARN): "What did you observe that needs further discussion before acting on?"
multiSelect: true
Options: [2-4 options drawn from open questions, new patterns, unresolved findings]
Guidelines:
multiSelect: true — user may identify multiple things worth keeping, improving, or discussingWhat technical insights did the team discover?
Generate comprehensive retrospective report (40-60 lines, see references/report-structure.md for template):
Report Sections:
Synthesis rules:
Deliverable: Markdown report saved to analysis-reports/retro-session/<YYYY-MM-DD>+<sprint-name>/SESSION-RETROSPECTIVE.md
Convert findings from the report into action cards. Read retro:kanban for the full mechanics.
6A: Categorize findings (KEEP/IMPROVE/LEARN)
6B: Assign targets — see references/feedback-targets.md
6C: Calculate source weight — Critical (4+ sources) | High (2–3) | Medium (1)
6D: Create cards in .beads/retro.db
bd create "Card title" \
--prefix retro \
-p 1 -t task \
--labels "board-retro,lane-backlog,target-skill,cat-improve,effort-m,session-YYYY-MM-DD" \
--description "$(cat <<'EOF'
## Finding
[1-2 sentences]
## Sources
- [agent]: [observation]
## Recommendation
[What to do]
## Effort
[S/M/L]
## Priority
[Critical/High/Medium/Low]
EOF
)"
retro:kanban for priority mapping, label conventions, and card format6E: Run scrum (dedup pass) — see retro:kanban for the dedup procedure using bd search and bd list
This phase is mandatory. Do not skip it.
Read retro:kanban for the full user review flow. Summary:
AskUserQuestion with markdown preview (max 4 per call)bd update --remove-label lane-backlog --add-label lane-approved | Reject → bd close --reason (log rationale) | Modify → bd update then approvelane-approved labelWhy this phase exists: The retro generates cards from automated analysis. Only the user holds strategic context (e.g., "we're removing jQuery — don't invest in it"). Without this review, action cards can work against the team's direction.
For agent interview templates, see: retro:interviews (interview-templates.md)
After saving the session retrospective to analysis-reports/, archive it to the Neurons vault. Obsidian is assumed to be running — if the write fails, run obsidian help to diagnose the connection.
Resolve the project slug in this order:
$OFFICE_PROJECT_NAME is set, slugify and use itbd list --json | jq -r '.[0].metadata.project // empty'; use the first value foundSlugify rule: lowercase, spaces → hyphens, remove all special characters except hyphens.
Example: "Same Page Preview" → same-page-preview
Derive the sprint slug from the sprint name already established for this session (e.g., the <sprint-name> segment of analysis-reports/retro-session/<YYYY-MM-DD>+<sprint-name>/). Slugify the same way.
# Resolve project slug
if [ -n "$OFFICE_PROJECT_NAME" ]; then
PROJECT_SLUG=$(echo "$OFFICE_PROJECT_NAME" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')
else
# Try Beads sprint board metadata
PROJECT_SLUG=$(bd list -l board-sprint --json 2>/dev/null | jq -r '.[0].metadata.project // empty' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')
fi
# If still unset, ask the user (done interactively — not in this script block)
# USER_INPUT captured via AskUserQuestion: "What project is this retrospective for?"
# PROJECT_SLUG=$(echo "$USER_INPUT" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')
SPRINT_SLUG="<sprint-slug-from-session>" # e.g. sprint-1, jquery-fixes
DATE=$(date +%Y-%m-%d)
VAULT_PATH="Retrospectives/${DATE}+${PROJECT_SLUG}+${SPRINT_SLUG}/SESSION-RETROSPECTIVE.md"
VAULT_ROOT="$HOME/Vaults/${OBSIDIAN_VAULT_NAME:-Neurons}"
mkdir -p "$VAULT_ROOT/$(dirname "$VAULT_PATH")"
cat > "$VAULT_ROOT/$VAULT_PATH" << 'EOF'
<session-retrospective-content>
EOF
The document stored at Retrospectives/<YYYY-MM-DD>+<project-slug>+<sprint-slug>/SESSION-RETROSPECTIVE.md must begin with this YAML frontmatter block:
---
project: <project-slug>
sprint: <sprint-slug>
date: <YYYY-MM-DD>
tags: [retro, sprint]
---
The frontmatter project: field enables cross-project Obsidian queries:
tag:retro — see all retros across all projectsproject: same-page-preview — see one project's full historyProject isolation guarantee: Because project-slug is embedded in both the vault path and the project: frontmatter field, a retro for Project A will never surface as context for Project B in a filtered query.
A good retrospective:
Before Invoking:
After Report:
For Next Session:
Related Skills:
Reference Files (in this skill's references/ directory):
retro:interviews interview-templates.md)Related Documentation:
Kanban Locations:
.beads/sprint.db — Drupal core issue work pipeline (Beads database).beads/retro.db — Process improvement action cards (retro:kanban)