skills/retro/SKILL.md
Weekly engineering retrospective. Analyzes commit history, work patterns, and code quality metrics with persistent trend tracking. Team-aware: per-person contributions with praise and growth areas. Use when asked to 'weekly retro', 'what did we ship', 'engineering retrospective', 'how was this week', or 'show me the commit stats'. Proactively suggest at the end of a work week or sprint.
npx skillsauth add vltansky/skills retroInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates a comprehensive engineering retrospective from commit history. Team-aware: identifies you, then analyzes every contributor with per-person praise and growth opportunities.
/retro — last 7 days (default)/retro 24h — last 24 hours/retro 14d — last 14 days/retro 30d — last 30 days/retro compare — compare current window vs prior same-length window/retro compare 14d — compare with explicit windowParse the argument to determine the time window. Default to 7 days.
Midnight-aligned windows: For d/w units, compute an absolute start date at local midnight. Example: if today is 2026-03-18 and window is 7 days, start = 2026-03-11. Use --since="2026-03-11T00:00:00" — without T00:00:00, git uses the current wall-clock time.
Invalid argument: Show usage and stop:
Usage: /retro [window | compare]
/retro — last 7 days (default)
/retro 24h — last 24 hours
/retro 14d — last 14 days
/retro 30d — last 30 days
/retro compare — compare this period vs prior period
/retro compare 14d — compare with explicit window
Identify the current user and default branch, then fetch:
git config user.name
git config user.email
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || echo "main"
git fetch origin --quiet 2>/dev/null || true
The name from git config user.name is "you". All others are teammates.
Run ALL of these in parallel (independent):
# 1. All commits with stats
git log origin/<default> --since="<window>" --format="%H|%aN|%ae|%ai|%s" --shortstat
# 2. Per-commit test vs total LOC breakdown
git log origin/<default> --since="<window>" --format="COMMIT:%H|%aN" --numstat
# 3. Commit timestamps for session detection
git log origin/<default> --since="<window>" --format="%at|%aN|%ai|%s" | sort -n
# 4. Files most frequently changed
git log origin/<default> --since="<window>" --format="" --name-only | grep -v '^$' | sort | uniq -c | sort -rn | head -20
# 5. PR numbers from commit messages
git log origin/<default> --since="<window>" --format="%s" | grep -oE '[#!][0-9]+' | sort -u
# 6. Per-author file hotspots
git log origin/<default> --since="<window>" --format="AUTHOR:%aN" --name-only
# 7. Per-author commit counts
git shortlog origin/<default> --since="<window>" -sn --no-merges
# 8. TODOS.md backlog (if exists)
cat TODOS.md 2>/dev/null || true
# 9. Total test file count
find . -name '*.test.*' -o -name '*.spec.*' -o -name '*_test.*' -o -name '*_spec.*' 2>/dev/null | grep -v node_modules | wc -l
# 10. Regression test commits in window
git log origin/<default> --since="<window>" --oneline --grep="test(qa):" --grep="test(design):" --grep="test: coverage"
# 11. Test files changed in window
git log origin/<default> --since="<window>" --format="" --name-only | grep -E '\.(test|spec)\.' | sort -u | wc -l
# 12. Skill usage analytics (if exists)
cat ~/.context/analytics/skill-usage.jsonl 2>/dev/null | tail -200 || true
| Metric | Value | |--------|-------| | Commits to main | N | | Contributors | N | | PRs merged | N | | Total insertions | N | | Total deletions | N | | Net LOC added | N | | Test LOC (insertions) | N | | Test LOC ratio | N% | | Active days | N | | Detected sessions | N | | Avg LOC/session-hour | N | | Test Health | N total tests · M added · K regression commits |
Then show per-author leaderboard immediately below:
Contributor Commits +/- Top area
You (vlad) 32 +2400/-300 src/
alice 12 +800/-150 lib/
bob 3 +120/-40 tests/
Sort by commits descending. Current user always first, labeled "You (name)".
Backlog Health (if TODOS.md exists):
## Completed section)Include in metrics table:
| Backlog Health | N open (X P0/P1, Y P2) · Z completed this period |
Skill Usage (if ~/.context/analytics/skill-usage.jsonl exists):
Filter entries by ts within window. Aggregate by skill name. Present as:
| Skill Usage | /qa(8) /design-review(3) /retro(2) |
Show hourly histogram in local time:
Hour Commits
00: 4 ████
07: 5 █████
10: 8 ████████
22: 12 ████████████
Identify: peak hours, dead zones, bimodal vs continuous, late-night clusters (after 10pm).
Detect sessions using 45-minute gap threshold between consecutive commits.
Classify:
Calculate: total active coding time, average session length, LOC per hour of active time.
Categorize by conventional commit prefix (feat/fix/refactor/test/chore/docs). Show as percentage bar:
feat: 20 (40%) ████████████████████
fix: 27 (54%) ███████████████████████████
refactor: 2 ( 4%) ██
Flag if fix ratio exceeds 50% — signals "ship fast, fix fast" that may indicate review gaps.
Top 10 most-changed files. Flag:
Bucket by LOC:
Focus score: % of commits touching the single most-changed top-level directory. Higher = deeper focused work. Report: "Focus score: 62% (src/auth/)"
Ship of the week: Highest-LOC PR in the window. PR number, title, LOC changed, why it matters.
For each contributor compute: commits/LOC, areas of focus (top 3 directories), commit type mix, session patterns, test discipline, biggest ship.
For you: Deepest treatment — session analysis, time patterns, focus score. First person framing.
For each teammate: 2-3 sentences on what they worked on, then:
If only one contributor: Skip team breakdown. Retro is personal.
Co-Authored-By trailers: Parse them. Credit co-authors. Track AI co-authors ([email protected], etc.) as "AI-assisted commits" — separate metric, not a team member.
Split into weekly buckets: commits/week, LOC/week, test ratio/week, fix ratio/week, session count/week.
# Team streak
git log origin/<default> --format="%ad" --date=format:"%Y-%m-%d" | sort -u
# Personal streak (filter by user name)
git log origin/<default> --author="<user_name>" --format="%ad" --date=format:"%Y-%m-%d" | sort -u
Count backward from today — consecutive days with ≥1 commit. Display:
ls -t .context/retros/*.json 2>/dev/null | head -5
If prior retros exist: load most recent. Show Trends vs Last Retro:
Last Now Delta
Test ratio: 22% → 41% ↑19pp
Sessions: 10 → 14 ↑4
LOC/hour: 200 → 350 ↑75%
Fix ratio: 54% → 30% ↓24pp (improving)
If no prior retros: skip comparison, append "First retro recorded — run again next week to see trends."
mkdir -p .context/retros
today=$(date +%Y-%m-%d)
existing=$(ls .context/retros/${today}-*.json 2>/dev/null | wc -l | tr -d ' ')
next=$((existing + 1))
# Save to .context/retros/${today}-${next}.json
Write JSON with Write tool:
{
"date": "YYYY-MM-DD",
"window": "7d",
"metrics": {
"commits": 47,
"contributors": 3,
"prs_merged": 12,
"insertions": 3200,
"deletions": 800,
"net_loc": 2400,
"test_loc": 1300,
"test_ratio": 0.41,
"active_days": 6,
"sessions": 14,
"deep_sessions": 5,
"avg_session_minutes": 42,
"loc_per_session_hour": 350,
"feat_pct": 0.40,
"fix_pct": 0.30,
"peak_hour": 22,
"ai_assisted_commits": 32
},
"authors": {
"Vlad": { "commits": 32, "insertions": 2400, "deletions": 300, "test_ratio": 0.41, "top_area": "src/" }
},
"streak_days": 47,
"tweetable": "Week of Mar 22: 47 commits (2 contributors), 3.2k LOC, 41% tests, 12 PRs, peak: 10pm | Streak: 47d"
}
Include test_health only if test files exist. Include backlog only if TODOS.md exists.
Tweetable summary (first line, before everything else):
Week of Mar 22: 47 commits (2 contributors), 3.2k LOC, 41% tests, 12 PRs, peak: 10pm | Streak: 47d
Then structure:
(from Step 2)
(from Step 12 — skip if first retro)
(from Steps 3-4) Narrative: when most productive hours are, whether sessions are getting longer/shorter, notable patterns.
(from Steps 5-7) Commit type mix, PR size distribution, fix-chain detection, version bump discipline.
Test LOC ratio trend, hotspot analysis (same files churning?).
(from Step 8) Focus score with interpretation, Ship of the Week callout.
(from Step 9, personal deep-dive)
(from Step 9, for each teammate — skip if solo repo) Per-person: what they shipped, Praise, Opportunity for growth.
Highest-impact things shipped. For each: what, who, why it matters.
Specific, actionable, anchored in actual commits. Mix personal and team-level.
Small, practical, realistic. Each must take <5 minutes to adopt.
When the user runs /retro compare [window]:
--since + --until with midnight-aligned dates to avoid overlap).context/retros/ JSON snapshot.origin/<default> for all git queries (not local main which may be stale)TZ)tools
Prepare a Hetzner Cloud VPS for secure Codex remote SSH access. Use when the user wants to create or configure a Hetzner server for Codex remote control, fix "No codex found in PATH" on a remote machine, install agent development tooling on a VPS, harden SSH access to a Hetzner server, or connect the server through Codex Settings, Connections, Add SSH.
data-ai
Summarize your GitHub activity from the last 24 hours across all repos. Use when user says "what did I do", "my activity", "standup", "recap", "summarize my day", "what-i-did", "git activity", "daily summary".
development
Test-driven development loop. Write failing test first, then implement to make it pass. Use when the user says 'tdd', 'test first', 'write the test first', 'failing test', 'red green refactor', or for any bug fix where the fix should be proven by a test. Also use when autopilot or other skills need test-first execution.
development
Review changed code for reuse, quality, and efficiency, then fix any issues found. Use when the user says "simplify", "simplify this", "review changes", "clean up my code", "check for duplicates", "code reuse review", or wants a post-change quality sweep.