Critical transcript review - reads recent sessions with a framework-dev lens, identifies problems, and files issues via /learn.
From aops-coworknpx claudepluginhub nicsuzor/aopsopus/retroGenerates git-based engineering retrospectives with summary metrics, contributor breakdowns, commit types, hotspots, and trends over a time window (default 7d).
/retroFacilitates agile retrospective for a sprint or period with optional focus, invoking agile-coach agent to generate improvement insights and action items.
/retroConducts an agent-led collaborative retrospective after work or PR submission to capture learnings and identify systems improvements.
/retroRetro Vern - We solved this with cron jobs and a CSV in 2004. Grizzled veteran, historical perspective.
/retroSession retrospective — analyze completed work, map manual fixes to skill/checkpoint gaps, and create PRs to improve skills at their source repos.
Purpose: Read a recent transcript in detail through a framework-development lens. Provide a brutal, concise, critical review identifying problems and potential problems. Log every finding via /learn. We are aiming for EXCELLENCE, not "running code".
Privacy rule: Anonymise all findings before filing. No real names, emails, student details, or session dumps in GitHub issues.
Find the most recent unreviewed transcript(s):
# List recent transcripts, newest first
ls -lt ~/.aops/sessions/transcripts/*.md | head -20
Skip already-reviewed transcripts — check for reviewed_by in frontmatter:
# Show transcripts missing reviewed_by (i.e., unreviewed)
for f in $(ls -t ~/.aops/sessions/transcripts/*.md | head -20); do
grep -q "^reviewed_by:" "$f" || echo "$f"
done | head -10
If the user specified a session ID or path, use that instead.
If no unreviewed transcripts exist, report that and stop.
Read the selected transcript in its entirety. Do not skim. Do not sample. Read every line.
For large transcripts, read in chunks but cover the whole file:
Read(file_path="<path>", offset=1, limit=500)
Read(file_path="<path>", offset=500, limit=500)
# ... continue until EOF
Evaluate the session against these lenses. Be brutal and specific — quote the transcript when citing problems. Do not soften findings.
This is the most important lens. Ask:
Output a structured review:
## Transcript Review: <transcript filename>
**Session**: <session_id>
**Date**: <date>
**Project**: <project>
**Verdict**: [EXCELLENT | GOOD | ADEQUATE | POOR | FAILING]
### Critical Issues (must fix)
1. **[Issue title]**: [Specific quote or reference] — [Why this matters]
### Warnings (should fix)
1. **[Issue title]**: [Specific quote or reference] — [Why this matters]
### Observations (worth noting)
1. **[Observation]**: [Context]
### What Went Well
1. [Genuine strengths — don't manufacture praise]
### Excellence Gap
[The single most impactful thing that would elevate this session from where it landed to EXCELLENT]
For every Critical Issue and Warning: invoke /learn to file or update a GitHub issue.
Skill(skill="learn")
Pass the specific finding with enough context for root cause analysis. Do NOT batch findings — each distinct issue gets its own /learn invocation so it can be tracked independently.
For Observations: only invoke /learn if the observation reveals a systemic pattern (not a one-off).
After completing the review, add reviewed_by metadata to the transcript's YAML frontmatter:
reviewed_by:
- agent: "<model-name>"
date: "<ISO 8601 datetime>"
machine: "<hostname>"
session_id: "<reviewer's session ID>"
verdict: "<EXCELLENT|GOOD|ADEQUATE|POOR|FAILING>"
issues_filed: <count>
Use Edit to insert the reviewed_by block into the existing frontmatter (before the closing ---).
If the transcript has already been reviewed (frontmatter contains reviewed_by), append to the list rather than replacing — multiple reviews are valid.
How to get the values:
agent: Use your model name (e.g., "claude-opus-4-6")date: Current ISO 8601 datetimemachine: Run hostname via Bashsession_id: Read from ~/.claude/sessions/ matching the current PID, or use "unknown"verdict: From your review in Step 4issues_filed: Count of /learn invocations from Step 5## Framework Reflection
**Prompts**: /retro [transcript path]
**Outcome**: [success/partial/failure]
**Accomplishments**: Reviewed <transcript>, filed <N> issues, stamped as reviewed.
**Issues filed**: [GitHub Issue URLs from /learn invocations]
When processing multiple sessions (e.g., via /loop), follow these additional guidelines:
Don't retro every session. Have a fast pass (read first/last 50 lines) and prioritise:
Skip automated sessions (cron, task notifications) and trivially short sessions with no meaningful interaction.
Cap at 3 filed issues per session: 1 critical, 1 warning, 1 observation. More findings dilute signal. If a pattern is already filed as a GitHub issue, comment on the existing issue with the new occurrence rather than filing a duplicate. Volume bumps on existing issues are more valuable than 10 new issues saying the same thing.
Before filing, check the repo's open issues for existing coverage. The orchestrator should pass a list of already-known issues to each retro agent so they can comment rather than duplicate. Common recurring themes that are likely already filed:
When running batch retros, the orchestrator should:
CUSTODIET_GATE_MODE=off to avoid ~200K tokens of compliance overhead on a user-directed looptranscript.py for that. This command reads existing transcripts.| Anti-pattern | Why it's wrong | What to do instead |
|---|---|---|
| Skimming the transcript | Misses subtle issues | Read every line |
| "Overall good with minor issues" | Lazy review, not useful | Be specific, quote the transcript |
| Filing one mega-issue | Can't track or prioritize | One /learn per distinct finding |
| Inventing praise | Dishonest, wastes attention | Only note genuine strengths |
| Reviewing your own session | Conflict of interest | Review a DIFFERENT session |
| Batch-reviewing 20+ sessions | Diminishing returns after ~8 | Triage first, review selectively |
| Filing 10 issues from one session | Noise, can't prioritise | Cap at 3: 1 critical, 1 warn, 1 obs |
| Filing new issue for known pattern | Duplicates clutter the tracker | Comment on existing issue instead |