From rune
Analyzes git commit history, work patterns, and code quality metrics to generate engineering retrospectives with per-person breakdowns, shipping streaks, trends, and actionable improvements.
npx claudepluginhub rune-kit/rune --plugin @rune/analyticsThis skill uses the workspace's default tool permissions.
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.
Generates git-based engineering retrospectives analyzing commits, contributors, code churn, velocity, time distribution, and sessions over configurable time windows with monorepo path scoping.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Share bugs, ideas, or general feedback.
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.
Retro is READ-ONLY. It analyzes and reports — it does NOT modify code, create PRs, or change any files except its own output artifacts (.rune/retros/). Retro is ENCOURAGING but CANDID. Every critique is anchored in specific commits, not vague impressions./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)audit (L2) for engineering health dimensionscout (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 sessionsaudit (L2): engineering velocity and health dimensioncook (L1): optional — after completing a multi-phase feature, suggest retrorescue (L1): post-rescue retrospectivelaunch (L1): post-launch retrospective/rune retro direct invocationplan (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 memorygit history: commits, authors, timestamps, file changes.rune/retros/ history: previous retro JSON for trend comparisonneural-memory (external): past retro insights for pattern recognitionretro ↔ plan: retro identifies bottlenecks → plan adjusts estimation and phase sizing → next retro measures improvementRun 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:
find . -name "*.test.*" -o -name "*.spec.*" -o -name "*_test.*" | wc -l.rune/retros/ for prior retro history (if exists)| 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 |
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).
Group commits into sessions using a 45-minute gap threshold:
Classify sessions:
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."
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.
For each contributor:
Current user (deepest treatment):
Teammates (2-3 sentences each):
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% ↑ |
Query full history for consecutive days with at least 1 commit:
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."
}
Structure (~800-1500 words — concise, not a novel):
Tone: Encouraging but candid. Specific and concrete. Anchored in actual commits, not vague impressions. Every critique paired with a specific suggestion.
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.
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 |
When a milestone is detected (retro count matches a threshold for the first time):
"🏁 Milestone: [name] ([count] retros). Generating deep analysis...".rune/retros/*.json snapshots (not just the most recent).rune/retros/{YYYY-MM-DD}-milestone-{name}.md## 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]
.rune/retros/*-milestone-{name}.md already exists before generatingWhen invoked as /rune retro compare:
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
When invoked as /rune retro --business, generate a cross-domain executive retrospective with HTML output. Requires Business tier (.rune/org/org.md should exist).
Pull from all installed domain packs:
.rune/org/org.md for team structure and governance level.rune/signals/)report-templates/retro-business.html from Business pack and populate all {{placeholder}} fields with computed data.rune/retros/{YYYY-MM-DD}-business.html.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.
.rune/org/org.md missing: use generic team structure, WARN in report| 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 |
## 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]
.rune/retros/ for trend tracking| 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 |
~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/.