Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Runs after every track completion to extract learnings. Analyzes what worked, what failed, and what patterns emerged. Updates conductor/knowledge/patterns.md with new solutions and errors.json with new error patterns. Proposes skill updates if workflow improvements are identified. Triggered automatically by orchestrator after COMPLETE step.
.claude/skills/ibrahim-3d-retrospective-agent/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 1574% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 152% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 51% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 78% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 78% | 0% |
Extracts learnings from completed tracks and updates the knowledge base, making every future track smarter.
Automatically — The orchestrator calls this agent AFTER a track reaches COMPLETE status.
Review the track's execution data:
markdown## Track Analysis: [track-id] ### Execution Summary - **Total Tasks**: 12 - **Fix Cycles**: 1 - **Lead Consultations**: 3 - **Duration**: Plan to Complete ### What Worked Well - [Extracted from smooth tasks with no fix cycles] ### What Caused Problems - [Extracted from fix cycles and blocked tasks] ### Patterns Discovered - [New solutions that could be reused] ### Errors Encountered - [New error patterns and their fixes]
Look for reusable solutions in the completed work:
Pattern Candidates:
Pattern Template:
markdown### [Pattern Name] **Category**: [UI | State | API | Auth | Integration | Testing | Performance] **Discovered**: [track-id] on [date] **Problem**: What problem does this solve? **Solution**: How to implement it **Code Example**: (key code snippet) **Gotchas**: Watch out for...
Look for errors that were fixed during the track:
Error Candidates:
Error Template:
json{ "id": "err-XXX", "pattern": "Regex pattern matching the error", "category": "typescript|react|nextjs|supabase|stripe|etc", "context": "When this error typically occurs", "problem": "What causes this error", "solution": "How to fix it", "code_fix": "Code snippet if applicable", "occurrences": 1, "last_seen": "2026-01-31", "discovered_in": "track-id" }
Check if the track revealed workflow issues:
Questions to Ask:
Improvement Candidates:
Append new patterns to the appropriate category section:
markdown## [Category] Patterns ### [New Pattern Name] **Category**: [Category] **Discovered**: [track-id] on [YYYY-MM-DD] **Problem**: [Problem statement] **Solution**: [Solution description] **Code Example**:
code]
**Gotchas**: [Warnings]Add new error patterns:
typescript// read_file current errors.json const errors = JSON.parse(await readFile('conductor/knowledge/errors.json')); // Add new error errors.errors.push({ id: `err-${String(errors.errors.length + 1).padStart(3, '0')}`, pattern: "New error pattern regex", category: "category", context: "When this occurs", problem: "What causes it", solution: "How to fix", code_fix: "Code if applicable", occurrences: 1, last_seen: new Date().toISOString().split('T')[0], discovered_in: trackId }); // write_file back await writeFile('conductor/knowledge/errors.json', JSON.stringify(errors, null, 2));
write_file a retrospective file for the track:
Location: conductor/tracks/[track-id]/retrospective.md
markdown# Retrospective: [Track ID] **Completed**: [YYYY-MM-DD] **Duration**: [X days/hours] **Fix Cycles**: [N] ## Summary [1-2 sentence summary of what the track accomplished] ## What Worked Well - [Thing 1] - [Thing 2] ## What Caused Problems - [Problem 1]: [How it was resolved] - [Problem 2]: [How it was resolved] ## Patterns Extracted - **[Pattern Name]** → Added to patterns.md under [Category] ## Errors Logged - **[Error Pattern]** → Added to errors.json as err-XXX ## Skill Improvements Proposed - [ ] [Improvement 1] — [Which skill to update] - [ ] [Improvement 2] — [Which skill to update] ## Recommendations for Similar Tracks - [Advice for future tracks doing similar work]
The Retrospective Agent returns:
json{ "track_id": "feature-name_20260131", "completed_at": "2026-01-31T15:00:00Z", "patterns_added": [ { "name": "Pattern Name", "category": "Category", "added_to": "conductor/knowledge/patterns.md" } ], "errors_added": [ { "id": "err-011", "pattern": "Error pattern", "added_to": "conductor/knowledge/errors.json" } ], "skill_improvements": [ { "skill": "loop-executor", "improvement": "Add checkpoint after each task for better resumption", "priority": "medium" } ], "retrospective_file": "conductor/tracks/feature-name_20260131/retrospective.md" }
The orchestrator triggers retrospective after completion:
typescript// In conductor-orchestrator, after track reaches COMPLETE async function runRetrospective(trackId: string) { const result = await Task({ subagent_type: "general-purpose", description: "Run track retrospective", prompt: `You are the retrospective-agent. Track: ${trackId} 1. read_file conductor/tracks/${trackId}/plan.md 2. read_file conductor/tracks/${trackId}/metadata.json 3. Analyze what worked and what failed 4. Extract patterns → Update conductor/knowledge/patterns.md 5. Extract errors → Update conductor/knowledge/errors.json 6. write_file retrospective to conductor/tracks/${trackId}/retrospective.md Return summary of learnings added.` }); console.log(`Retrospective complete. ${result.patterns_added.length} patterns, ${result.errors_added.length} errors added.`); }
Skip retrospective if:
Prioritize extracting learnings about:
Over time, the knowledge base grows:
The goal: Every track makes the next track easier.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-20 | pass→pass | 12,125 | 14,481 | +19% | 1 | 1 | 0% | 2,173 | 4,447 | +105% | 0 | 0 | — |
case-21 | fail→fail | 15,220 | 10,375 | -32% | 1 | 1 | 0% | 1,547 | 3,491 | +126% | 0 | 0 | — |
case-01 | fail→pass | 5,423 | 25,078 | +362% | 1 | 1 | 0% | 356 | 5,960 | +1574% | 0 | 0 | — |
case-02 | fail→fail | 5,326 | 5,886 | +11% | 1 | 1 | 0% | 213 | 2,384 | +1019% | 0 | 0 | — |
case-03 | fail→fail | 5,367 | 5,537 | +3% | 1 | 1 | 0% | 257 | 2,358 | +818% | 0 | 0 | — |
case-04 | pass→pass | 7,049 | 18,222 | +159% | 1 | 1 | 0% | 939 | 2,678 | +185% | 0 | 0 | — |
case-05 | fail→pass | 7,451 | 2,765 | -63% | 1 | 1 | 0% | 916 | 2,310 | +152% | 0 | 0 | — |
case-06 | pass→pass | 6,315 | 2,769 | -56% | 1 | 1 | 0% | 720 | 2,287 | +218% | 0 | 0 | — |
case-07 | pass→pass | 5,496 | 3,010 | -45% | 1 | 1 | 0% | 916 | 2,371 | +159% | 0 | 0 | — |
case-08 | fail→pass | 11,154 | 3,209 | -71% | 1 | 1 | 0% | 1,574 | 2,382 | +51% | 0 | 0 | — |
case-09 | pass→pass | 7,826 | 2,592 | -67% | 1 | 1 | 0% | 1,053 | 2,289 | +117% | 0 | 0 | — |
case-10 | pass→pass | 6,555 | 3,282 | -50% | 1 | 1 | 0% | 1,177 | 2,462 | +109% | 0 | 0 | — |
case-11 | fail→pass | 8,121 | 1,525 | -81% | 1 | 1 | 0% | 1,237 | 2,203 | +78% | 0 | 0 | — |
case-12 | pass→pass | 5,470 | 1,746 | -68% | 1 | 1 | 0% | 791 | 2,184 | +176% | 0 | 0 | — |
case-13 | pass→pass | 8,418 | 2,844 | -66% | 1 | 1 | 0% | 1,185 | 2,346 | +98% | 0 | 0 | — |
case-14 | pass→pass | 7,544 | 3,924 | -48% | 1 | 1 | 0% | 1,036 | 2,627 | +154% | 0 | 0 | — |
case-15 | pass→pass | 8,205 | 4,970 | -39% | 1 | 1 | 0% | 1,117 | 2,677 | +140% | 0 | 0 | — |
case-16 | pass→pass | 16,328 | 11,820 | -28% | 1 | 1 | 0% | 2,295 | 3,555 | +55% | 0 | 0 | — |
case-17 | fail→pass | 8,490 | 2,122 | -75% | 1 | 1 | 0% | 1,242 | 2,207 | +78% | 0 | 0 | — |
case-18 | pass→pass | 2,540 | 2,476 | -3% | 1 | 1 | 0% | 361 | 2,367 | +556% | 0 | 0 | — |
case-19 | fail→pass | 5,487 | 6,429 | +17% | 1 | 1 | 0% | 205 | 3,037 | +1381% | 0 | 0 | — |
case-22 | pass→pass | 12,375 | 9,990 | -19% | 1 | 1 | 0% | 2,316 | 3,628 | +57% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 18 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.