Skip to content
Back to skills

Retro

ASecurity

Engineering 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\".

  • 86 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 11, 2026
businessgobashreactdebuggingrefactoringgitapisecurityperformance

Works with

  • api

Security analysis

A100/100

Scanned September 11, 2026

npx -y skills add Rune-kit/rune --skill retro --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Retro?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Retro
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rune-kit-retro/badge)](https://www.skillsdirectory.com/skills/rune-kit-retro)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: retro
description: "Engineering 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\"."
metadata:
  author: runedev
  version: "0.3.0"
  layer: L2
  model: sonnet
  group: knowledge
  tools: "Read, Bash, Glob, Grep"
---

# retro

## 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.

<HARD-GATE>
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.
</HARD-GATE>

## 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 structure
- `plan` (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 patterns
- `neural-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 dimension
- `cook` (L1): optional — after completing a multi-phase feature, suggest retro
- `rescue` (L1): post-rescue retrospective
- `launch` (L1): post-launch retrospective
- User: `/rune retro` direct 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 patterns
- `neural-memory` (external): retro insights → persistent cross-session memory

### Fed By ←

- `git` history: commits, authors, timestamps, file changes
- `.rune/retros/` history: previous retro JSON for trend comparison
- `neural-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:

```bash
# 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`:

```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):

1. **Tweetable summary** (1 sentence, <280 chars)
2. **Summary table** (Step 2 metrics)
3. **Time & session patterns** (Steps 3-4)
4. **Shipping velocity** (Step 5 commit types)
5. **Code quality signals** (Step 6 hotspots, test ratio)
6. **Focus & highlights** (Step 7)
7. **Your week** (current user deep dive from Step 8)
8. **Team breakdown** (Step 8 teammates)
9. **Top 3 wins** (specific, anchored in commits)
10. **3 things to improve** (specific, actionable)
11. **3 habits for next week** (concrete daily practices)
12. **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):

1. **Announce**: `"🏁 Milestone: [name] ([count] retros). Generating deep analysis..."`
2. **Load history**: Read ALL `.rune/retros/*.json` snapshots (not just the most recent)
3. **Compute evolution metrics**: Plot key metrics over time (commits/week, test ratio, fix ratio, session depth)
4. **Focal analysis**: Generate the milestone-specific analysis based on the focal point column above
5. **Trend narrative**: Write a 300-500 word narrative on how the project has evolved, anchored in actual data
6. **Save**: Write milestone report to `.rune/retros/{YYYY-MM-DD}-milestone-{name}.md`

### Milestone Report Structure

```markdown
## 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}.md` already 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`:

1. Compute current period metrics (same as above)
2. Compute previous same-length period (e.g., if current = 7d, previous = 7d before that)
3. Side-by-side delta table
4. Highlight biggest improvements and regressions
5. 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

1. **Gather**: Run standard retro Steps 1-10 for engineering data
2. **Org Context**: Read `.rune/org/org.md` for team structure and governance level
3. **Cross-Domain KPIs**: Aggregate metrics from domain signal history (`.rune/signals/`)
4. **Team Health**: Score each team from org config on velocity, quality, morale
5. **Compliance**: Check compliance frameworks from org security policies
6. **HTML Render**: Load `report-templates/retro-business.html` from Business pack and populate all `{{placeholder}}` fields with computed data
7. **Save**: Write HTML to `.rune/retros/{YYYY-MM-DD}-business.html`
8. **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.md` missing: use generic team structure, WARN in report

## Constraints

1. MUST NOT modify any code — retro is read-only analysis
2. MUST anchor all observations in specific commits — no vague impressions
3. MUST include per-person breakdown for teams with 2+ contributors
4. MUST save JSON snapshot for trend tracking across retros
5. MUST flag churn hotspots (5+ changes to same file)
6. MUST flag high fix ratio (>50%) as reactive mode signal
7. 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/`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.