retro
SkillMonitoring & opsEngineering retrospective. Analyzes commit history, work patterns, and code quality metrics with trend tracking. Per-person breakdowns, shipping streaks, and actionable improvements. Use when asked for \"retro\", \"weekly review\", \"what did we ship\", or \"engineering retrospective\".
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the retro skill
What this skill tells your AI
The instructions your AI receives, as published by rune-kit/rune in skills/retro/SKILL.md and read by ahel’s review.
Purpose
Engineering retrospective engine. Analyzes git history, work patterns, and code quality signals to produce actionable retrospectives with per-person breakdowns, shipping streaks, and concrete improvement habits. Fills a gap in the Rune ecosystem — cook builds, review checks, but nothing reflects on HOW the team works.
Triggers
/rune retro— default 7-day retrospective/rune retro 24h— daily standup review/rune retro 14d— sprint retro (2 weeks)/rune retro 30d— monthly review/rune retro compare— current vs previous period side-by-side/rune retro --business— cross-domain executive retrospective with HTML report (Business tier)- Called by
audit(L2) for engineering health dimension - Auto-suggest: end of work week (Friday sessions)
Calls (outbound)
scout(L2): scan codebase for test file counts, project structureplan(L2): when retro identifies systemic bottlenecks — hand findings to plan for next sprint (e.g., "fix ratio >50% → allocate debugging time in next phase")journal(L3): retro findings → ADR entries for recurring team patternsneural-memory(L3): recall past retro insights for trend comparison; save this retro's key insights for future sessions
Called By (inbound)
audit(L2): engineering velocity and health dimensioncook(L1): optional — after completing a multi-phase feature, suggest retrorescue(L1): post-rescue retrospectivelaunch(L1): post-launch retrospective- User:
/rune retrodirect invocation
Data Flow
Feeds Into →
plan(L2): retro insights inform future sprint planning (e.g., "fix ratio too high → allocate debugging time")journal(L3): retro findings → ADR entries for team patternsneural-memory(external): retro insights → persistent cross-session memory
Fed By ←
githistory: commits, authors, timestamps, file changes.rune/retros/history: previous retro JSON for trend comparisonneural-memory(external): past retro insights for pattern recognition
Feedback Loops ↻
retro↔plan: retro identifies bottlenecks → plan adjusts estimation and phase sizing → next retro measures improvement
Execution
Step 1 — Gather Raw Data
Run these git commands to collect metrics for the specified time window:
# Core metrics (run in parallel)
git log --since="<window-start>" --format="%H|%an|%ae|%aI|%s" --shortstat
git log --since="<window-start>" --format="%H" --numstat
git log --since="<window-start>" --format="%aI" # timestamps for session detection
git log --since="<window-start>" --format="%an" | sort | uniq -c | sort -rn # per-author
git shortlog --since="<window-start>" -sn # author leaderboard
Time window alignment: For day/week units, align to midnight: --since="YYYY-MM-DDT00:00:00". This prevents partial-day skew.
Identify "You": git config user.name = current user. All others are teammates.
Also gather:
- Test file count:
find . -name "*.test.*" -o -name "*.spec.*" -o -name "*_test.*" | wc -l .rune/retros/for prior retro history (if exists)- TODOS.md for backlog health
Step 2 — Compute Summary Metrics
| Metric | How to compute |
|---|---|
| Commits | Count from git log |
| Contributors | Unique authors |
| LOC added/removed | Sum from numstat |
| Test LOC ratio | test files LOC / total LOC changed |
| Active days | Unique dates with commits |
| Sessions | Detected via 45-min gap threshold (Step 4) |
| LOC/session-hour | Total LOC / total session hours |
| Fix ratio | fix: commits / total commits |
Step 3 — Hourly Activity Histogram
Build an ASCII bar chart showing commit distribution by hour (local timezone):
Hour Commits
06 ██ 3
07 ████ 7
08 ██████ 12
...
Identify: peak hours, dead zones, bimodal patterns (morning + evening coder).
Step 4 — Session Detection
Group commits into sessions using a 45-minute gap threshold:
- Commits within 45 min of each other = same session
- Gap > 45 min = new session
Classify sessions:
- Deep (50+ min): focused work blocks
- Medium (20-50 min): moderate focus
- Micro (<20 min): quick fixes, drive-bys
Step 5 — Commit Type Breakdown
Parse conventional commit prefixes and show percentage bar:
feat ████████████████ 45%
fix ████████ 22%
ref ████ 11%
test ████ 11%
docs ██ 5%
chore██ 6%
Flag: if fix ratio > 50% → "High fix ratio suggests reactive mode. Consider investing in test coverage."
Step 6 — Hotspot Analysis
Top 10 most-changed files in the window:
| File | Changes | Test Coverage |
|---|---|---|
| src/auth/login.ts | 8 | ✅ |
| src/api/users.ts | 6 | ❌ |
Flag: files with 5+ changes = churn hotspot — candidate for refactoring. Flag: hotspot files without test coverage = risk.
Step 7 — Focus Score & Ship of the Week
- Focus Score = % of commits in top-changed directory. High focus (>60%) = deep work. Low focus (<30%) = context switching.
- Ship of the Week = highest-LOC commit/PR with feat: prefix. Celebrate it.
Step 8 — Per-Person Breakdown
For each contributor:
Current user (deepest treatment):
- Commits, LOC, areas of focus
- Commit type mix (builder vs fixer vs maintainer)
- Session patterns (deep vs micro ratio)
- Test discipline (% of feat commits with corresponding test commits)
- Biggest ship
Teammates (2-3 sentences each):
- Summary of work areas and volume
- Specific praise — anchored in actual commits (e.g., "Your auth refactor in 3 commits was surgically clean")
- One growth opportunity — constructive, based on patterns (e.g., "8 of 12 commits were fixes — consider adding tests alongside features")
Step 9 — Trend Tracking (if prior retros exist)
Read most recent .rune/retros/*.json. Compute deltas:
| Metric | Previous | Current | Delta |
|---|---|---|---|
| Commits | 45 | 52 | +15% ↑ |
| Test ratio | 0.18 | 0.24 | +33% ↑ |
| Fix ratio | 0.55 | 0.38 | -31% ↓ (improving) |
| Deep sessions | 8 | 12 | +50% ↑ |
Step 10 — Shipping Streak
Query full history for consecutive days with at least 1 commit:
- Team streak: any contributor committed
- Personal streak: current user committed
Step 11 — Save Retro History
Write JSON snapshot to .rune/retros/{YYYY-MM-DD}.json:
{
"date": "2026-03-20",
"window": "7d",
"metrics": {
"commits": 52, "contributors": 3, "loc_added": 1850,
"loc_removed": 620, "test_ratio": 0.24, "fix_ratio": 0.38,
"active_days": 5, "sessions": 14, "deep_sessions": 8
},
"authors": ["user1", "user2"],
"streak": { "team": 12, "personal": 5 },
"summary": "Shipped auth overhaul + 3 bug fixes. Test ratio improving."
}
Step 12 — Write Narrative Report
Structure (~800-1500 words — concise, not a novel):
- Tweetable summary (1 sentence, <280 chars)
- Summary table (Step 2 metrics)
- Time & session patterns (Steps 3-4)
- Shipping velocity (Step 5 commit types)
- Code quality signals (Step 6 hotspots, test ratio)
- Focus & highlights (Step 7)
- Your week (current user deep dive from Step 8)
- Team breakdown (Step 8 teammates)
- Top 3 wins (specific, anchored in commits)
- 3 things to improve (specific, actionable)
- 3 habits for next week (concrete daily practices)
- Trends (Step 9, if available)
Tone: Encouraging but candid. Specific and concrete. Anchored in actual commits, not vague impressions. Every critique paired with a specific suggestion.
Milestone Progressive Analysis
At specific project milestones, retro automatically generates a deeper analysis with a different focal point per milestone. This goes beyond the standard weekly retro — it's a reflective checkpoint on the project's evolution.
Milestone Detection
Count total retro snapshots in .rune/retros/ (each represents ~1 retro session). Trigger milestone analysis when count reaches:
| Milestone | Retro Count | Focal Point | Depth |
|---|---|---|---|
| First Month | 4 | Foundations — Are conventions solid? Is the architecture scaling? Are early decisions holding? | Standard + foundation review |
| Quarter | 12 | Patterns — What recurring themes emerged? Which areas churn most? Is technical debt growing or shrinking? | Standard + theme extraction |
| Half Year | 24 | Growth — How has the codebase evolved? Are the original architectural bets paying off? What would you do differently? | Standard + architecture review |
| One Year | 50 | Maturity — Full project health assessment. Velocity trends over time. Team growth patterns. Knowledge distribution. | Standard + full evolution timeline |
Milestone Execution
When a milestone is detected (retro count matches a threshold for the first time):
- Announce:
"🏁 Milestone: [name] ([count] retros). Generating deep analysis..." - Load history: Read ALL
.rune/retros/*.jsonsnapshots (not just the most recent) - Compute evolution metrics: Plot key metrics over time (commits/week, test ratio, fix ratio, session depth)
- Focal analysis: Generate the milestone-specific analysis based on the focal point column above
- Trend narrative: Write a 300-500 word narrative on how the project has evolved, anchored in actual data
- Save: Write milestone report to
.rune/retros/{YYYY-MM-DD}-milestone-{name}.md
Milestone Report Structure
## Milestone: [name] — [date]
### Evolution Timeline
[ASCII chart or table showing key metrics across all retro snapshots]
### [Focal Point] Analysis
[300-500 words anchored in data — specific commits, files, metrics]
### What's Working
- [pattern that's improving, with evidence]
### What Needs Attention
- [pattern that's degrading, with evidence]
### Recommendations
- [1-3 concrete actions based on the focal analysis]
Rules
- Milestone analysis is additive — it runs ON TOP of the standard retro, not instead of it
- Each milestone triggers ONCE — check if
.rune/retros/*-milestone-{name}.mdalready exists before generating - If retro history is sparse (gaps >30 days), note this in the report — trends may be unreliable
- Milestone analysis does NOT count toward the retro's normal output — it's a separate artifact
Compare Mode
When invoked as /rune retro compare:
- Compute current period metrics (same as above)
- Compute previous same-length period (e.g., if current = 7d, previous = 7d before that)
- Side-by-side delta table
- Highlight biggest improvements and regressions
- Save only current-period snapshot
Self-Validation
SELF-VALIDATION (run before emitting report):
- [ ] All metrics computed from actual git data — no assumptions or estimates
- [ ] Per-person praise is anchored in specific commits (not generic "great work")
- [ ] Improvement suggestions are actionable (not "write more tests" but "add tests for the 3 hotspot files without coverage")
- [ ] Retro JSON saved to .rune/retros/ for trend tracking
- [ ] No code was modified — retro is read-only
Business Mode (--business)
When invoked as /rune retro --business, generate a cross-domain executive retrospective with HTML output. Requires Business tier (.rune/org/org.md should exist).
Business Data Sources
Pull from all installed domain packs:
- Engineering: git history (commits, velocity, test ratio, fix ratio, hotspots)
- Revenue (@rune-pro/sales): pipeline metrics, deal velocity, churn risk
- Support (@rune-pro/support): ticket volume, SLA compliance, CSAT
- Finance (@rune-pro/finance): burn rate, runway, budget variance
- Compliance (@rune-pro/legal): framework status, audit dates, open items
Business Execution Steps
- Gather: Run standard retro Steps 1-10 for engineering data
- Org Context: Read
.rune/org/org.mdfor team structure and governance level - Cross-Domain KPIs: Aggregate metrics from domain signal history (
.rune/signals/) - Team Health: Score each team from org config on velocity, quality, morale
- Compliance: Check compliance frameworks from org security policies
- HTML Render: Load
report-templates/retro-business.htmlfrom Business pack and populate all{{placeholder}}fields with computed data - Save: Write HTML to
.rune/retros/{YYYY-MM-DD}-business.html - Also save JSON snapshot (same as standard retro) for trend tracking
Business Output
.rune/retros/2026-03-30-business.html — Self-contained HTML report
.rune/retros/2026-03-30.json — Machine-readable metrics
The HTML report includes: KPI cards with trend deltas, domain performance bars (engineering, revenue, support, finance), team health table, compliance status, key insights (wins + risks), and is printable to PDF via Ctrl+P.
Graceful Degradation
- If no Business pack installed: skip business mode, fall back to standard retro
- If domain data unavailable: show "No data" for that domain, don't fail
- If
.rune/org/org.mdmissing: use generic team structure, WARN in report
Constraints
- MUST NOT modify any code — retro is read-only analysis
- MUST anchor all observations in specific commits — no vague impressions
- MUST include per-person breakdown for teams with 2+ contributors
- MUST save JSON snapshot for trend tracking across retros
- MUST flag churn hotspots (5+ changes to same file)
- MUST flag high fix ratio (>50%) as reactive mode signal
- MUST include actionable habits — "test the hotspots" not "write more tests"
Sharp Edges
| Failure Mode | Severity | Mitigation |
|---|---|---|
| Generic praise not anchored in commits | HIGH | Every praise MUST reference a specific commit or PR — "great auth refactor in 3 commits" not "good job this week" |
| Vague improvement suggestions | HIGH | "Add tests for src/api/users.ts (6 changes, 0 tests)" not "consider writing more tests" |
| Counting merge commits as real work | MEDIUM | Use --no-merges flag to exclude merge commits from metrics |
| Timezone skew in hourly histogram | MEDIUM | Convert all timestamps to local timezone before bucketing |
| Retro on empty window (no commits) | LOW | Detect early and report: "No commits in the last {window}. Nothing to retro." |
| Discouraging tone for struggling weeks | HIGH | Even bad weeks have wins. Find the smallest positive signal and lead with it |
Output Format
## Engineering Retro: [date range]
> [tweetable summary]
### Summary
| Metric | Value |
|--------|-------|
| Commits | N |
| ... | ... |
### [remaining sections per Step 12]
### Top 3 Wins
1. [specific win anchored in commit]
2. [specific win]
3. [specific win]
### 3 Things to Improve
1. [specific, actionable]
2. [specific, actionable]
3. [specific, actionable]
### 3 Habits for Next Week
1. [concrete daily practice]
2. [concrete daily practice]
3. [concrete daily practice]
Done When
- All git metrics gathered for specified time window
- Summary metrics computed (commits, LOC, test ratio, fix ratio, sessions)
- Per-person breakdown with specific praise and growth areas
- Top 3 wins and 3 improvements identified (commit-anchored)
- Retro JSON saved to
.rune/retros/for trend tracking - Narrative report emitted
- No code was modified
Returns
| Artifact | Format | Location |
|---|---|---|
| Retrospective narrative report | Markdown (~800-1500 words) | inline |
| Retro JSON snapshot | JSON | .rune/retros/{YYYY-MM-DD}.json |
| Per-person breakdown | Markdown sections | inline |
| Action items + habits | Ordered lists | inline |
Cost Profile
~3000-5000 tokens input (git history parsing), ~2000-4000 tokens output (narrative). Sonnet for analysis quality. Runs infrequently (weekly/sprint cadence).
Scope guardrail: retro is read-only — it analyzes and reports. It does NOT modify code, create PRs, or change any files except its own output artifacts in .rune/retros/.
Signals
- GitHub stars
- 86
- Forks
- 26
- Last commit
- Aug 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
retro-rune-kit- Source
- github.com/rune-kit/rune