Engineering Retrospective
SkillMonitoring & opsWeekly engineering retrospective with persistent metrics — commit patterns, work sessions, code-quality trends. Triggers "retro", "retrospective", "weekly review", "how was my week", "engineering metrics", "velocity", "what did I ship", "show me my stats".
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 Engineering Retrospective skill
What this skill tells your AI
The instructions your AI receives, as published by darkroomengineering/cc-settings in skills/retro/SKILL.md and read by ahel’s review.
Product-aware helper
# Claude Code
ESCALATE_STATS_RUNNER="$HOME/.claude/src/scripts/escalate-stats.ts"
CC_STATE_ROOT="$HOME/.claude"
# Standalone Codex would resolve the helper as:
# ESCALATE_STATS_RUNNER="${CODEX_HOME:-$HOME/.codex}/darkroom/source/src/scripts/escalate-stats.ts"
Codex must skip this Claude escalation telemetry entirely because the plugin does not expose a reliable manual state path. Do not infer or report an act-rate in Codex.
This skill is self-contained. Do not read CLAUDE.md or agent definitions.
Arguments
/retro— last 7 days (default)/retro 24hor/retro 14dor/retro 30d— custom window/retro compare— current 7d vs prior 7d/retro compare 14d— current 14d vs prior 14d
Validation: Only accept arguments matching \d+[dhw], compare, or compare \d+[dhw]. Reject anything else with usage instructions.
Step 1: Gather Raw Data
Fetch latest from remote, then run 5 parallel git commands:
# Fetch latest
git fetch origin main 2>/dev/null
# 1. Commits with timestamps, subject, hash, and stats
git log origin/main --since="WINDOW_START" --format="%H|%aI|%s" --shortstat
# 2. Per-commit numstat for test vs production LOC breakdown
# Test files: paths matching test/|spec/|__tests__|*.test.|*.spec.
git log origin/main --since="WINDOW_START" --format="%H" --numstat
# 3. Sorted commit timestamps for session detection (local timezone)
git log origin/main --since="WINDOW_START" --format="%aI" | sort
# 4. Hotspot analysis (most frequently changed files)
git log origin/main --since="WINDOW_START" --format="" --name-only | sort | uniq -c | sort -rn | head -20
# 5. PR number extraction from commit messages (#NNN patterns)
git log origin/main --since="WINDOW_START" --format="%s" | grep -oE '#[0-9]+' | sort -u
Replace WINDOW_START with the appropriate --since value for the requested window.
In Claude only, also run the escalate-advisory telemetry if present:
CC_SETTINGS_HOME="$CC_STATE_ROOT" bun "$ESCALATE_STATS_RUNNER" --days 7
If this prints stats (not "no telemetry yet"), include the act-rate in the report — see Step 13. Standalone Codex omits the telemetry and act-rate section.
Step 2: Compute Metrics
Build a summary table:
| Metric | Value |
|-----------------------|----------------|
| Commits to main | N |
| PRs merged | N |
| Total insertions | +N lines |
| Total deletions | -N lines |
| Net LOC | +/-N |
| Test LOC | N lines |
| Test ratio | N% |
| Active days | N/7 |
| Detected sessions | N |
| Avg LOC/session-hour | ~N |
Step 3: Commit Time Distribution
Build an hourly histogram using local timezone. Identify:
- Peak hours — when most commits land
- Dead zones — hours with zero activity
- Late-night clusters — commits after 10pm (flag for sustainability)
- Bimodal patterns — morning + evening sessions
Hour | Commits
------|---------
8:00 | ###
9:00 | ######
10:00 | ########
...
Step 4: Work Session Detection
Use a 45-minute gap threshold to detect session boundaries. Classify sessions:
| Type | Duration | Description |
|---|---|---|
| Deep | 50+ min | Sustained focused work |
| Medium | 20-50 min | Moderate task work |
| Micro | <20 min | Quick fixes, reviews |
Calculate:
- Total active coding time
- Average session length
- LOC per hour (round to nearest 50)
- Ratio of deep sessions to total
Step 5: Commit Type Breakdown
Categorize by conventional commit prefix:
feat: N% (N commits)
fix: N% (N commits)
refactor: N% (N commits)
test: N% (N commits)
chore: N% (N commits)
docs: N% (N commits)
other: N% (N commits)
Flag: Fix ratio > 50% may indicate a review gap or instability.
Step 6: Hotspot Analysis
Top 10 most-changed files. For each:
- Change count
- Whether it's a test or production file
- Churn flag at 5+ changes — may indicate the file needs refactoring or splitting
Step 7: PR Size Distribution
Bucket PRs by total LOC changed:
| Size | LOC Range | Count | Notes |
|---|---|---|---|
| Small | <100 | N | Ideal for review |
| Medium | 100-500 | N | Acceptable |
| Large | 500-1500 | N | Consider splitting |
| XL | 1500+ | N | Flag with file count |
Step 8: Focus Score + Ship of the Week
Focus Score: Percentage of commits touching the single most-changed top-level directory. Higher = more focused work.
Ship of the Week: The highest-LOC PR with:
- PR number and title (from commit message)
- Total LOC changed
- Inferred significance
Step 9: Week-over-Week Trends (if window >= 14d)
Split the window into weekly buckets. Track:
- Commits per week
- LOC per week
- Test ratio per week
- Fix ratio per week
- Session count per week
Show as a compact table with trend arrows.
Step 10: Streak Tracking
Count consecutive days with at least 1 commit to origin/main, going back from today. Use full git history — no cutoff.
git log origin/main --format="%ad" --date=short | sort -u
Walk backward from today counting consecutive days.
Step 11: Load History & Compare
Check for prior retro snapshots:
ls .context/retros/*.json 2>/dev/null | sort | tail -1
If found, load the most recent and calculate deltas:
- Test ratio change
- Session count change
- LOC/hour change
- Fix ratio change
- Commit count change
- Deep session count change
If none exist, note "First retro recorded."
Step 12: Save Retro Snapshot
Save JSON to .context/retros/YYYY-MM-DD.json:
mkdir -p .context/retros
Schema:
{
"date": "YYYY-MM-DD",
"window": "7d",
"metrics": {
"commits": 0,
"prs": 0,
"insertions": 0,
"deletions": 0,
"net_loc": 0,
"test_loc": 0,
"test_ratio": 0.0,
"active_days": 0,
"sessions": 0,
"deep_sessions": 0,
"avg_session_minutes": 0,
"loc_per_session_hour": 0,
"feat_pct": 0.0,
"fix_pct": 0.0,
"peak_hour": 0,
"streak_days": 0
},
"summary": "Tweetable summary here"
}
Step 13: Write the Narrative
Structure:
- Tweetable summary (first line — one sentence capturing the week)
- Summary Table (from Step 2)
- Trends vs Last Retro (deltas from Step 11, or "First retro")
- Time & Session Patterns — narrative prose about when and how you work
- Shipping Velocity — commit type mix, PR size discipline, fix-chain detection
- Code Quality Signals — test ratio, hotspots, XL PRs
- Focus & Highlights — focus score, ship of the week
- Top 3 Wins — best things that shipped
- 3 Things to Improve — concrete, specific, actionable
- 3 Habits for Next Week — small behavioral changes
- Week-over-Week Trends (if applicable, from Step 9)
- Escalate Advisory Act-Rate (if
bun run escalate:statsprinted stats in Step 1 — otherwise omit this section)
Compare Mode
When /retro compare is used:
- Compute metrics for the CURRENT window (e.g., last 7 days)
- Compute metrics for the PRIOR window of same length (e.g., 7 days before that)
- Use
--sinceand--untilto avoid overlap - Present side-by-side comparison table with deltas
- Only save the CURRENT window snapshot to history
Tone
- Encouraging but candid — no coddling, no generic praise
- Say exactly what was good and why
- Frame improvements as leveling up, not criticism
- Anchor everything in actual commits — no speculation
- ~2500-3500 words total
- Use markdown tables + prose
Rules
- Always use
origin/main— local-only commits are not shipped - Use local timezone for display (detect from system)
- Handle zero-commit windows gracefully ("No commits in this window")
- Round LOC/hour to nearest 50
- Treat merge commits as PR boundaries
- This skill is self-contained — do not read CLAUDE.md or other docs
Signals
- GitHub stars
- 44
- Forks
- 3
- Last commit
- Sep 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
retro-darkroomengineering- Source
- github.com/darkroomengineering/cc-settings