Automated summary
Produces a weekly engineering retrospective from Git history, covering commit volume, work sessions, hourly distribution, commit types, most-changed files, and PR sizing.
Strengths
- Automated Git data gathering (commits, numstat, hotspots, PR numbers) run in parallel so a full report comes out in one pass
- Work-session detection with a 45-minute gap threshold and deep/medium/micro classification, plus net LOC per active hour
- Hotspot analysis that flags churn (5+ changes) and checks whether hot files have active matching test files
- A `compare` mode that pits the current window against a prior window of equal length to surface trends
Limitations
- Timezone is hardcoded to America/Los_Angeles for hourly histograms and session detection, which skews results for teams elsewhere
- Only reads commits already pushed to the origin default branch, so local unpushed work is invisible
- PR counts and test ratio rely on fragile heuristics (`#123` patterns in messages, test filename patterns)
Reach for it at the end of a week or ahead of a team meeting when you need quick, objective numbers on shipping velocity and repository friction points.
Avoid it for individual developer evaluation or repos with no usable Git history, since volume metrics say nothing about work quality.
Security analysis
SafeThe skill is a read-only git analytics routine: it shells out only to `git log`/`git remote show`, filters with grep/awk/sort/uniq, and writes a local JSON snapshot under `.context/retros`. There is no curl|sh, no credential access, no deletion, no obfuscated payload, and no attempt to disable safety controls. The only meaningful execution surface is routine bash usage against a local repo, which is proportionate to the stated purpose.
- •Bash blocks are limited to read-only `git log` / `git remote show` queries plus `mkdir -p .context/retros` — no destructive or network-exfiltrating commands
- •Writes JSON snapshots to `.context/retros/` inside the repo, which is low-risk but does persist commit metadata (author timestamps, commit subjects) to disk — worth noting for repos with strict data-handling rules
- •No allowed-tools declaration, yet the instructions assume `bash`, `glob`, `view`, and `create`; the mismatch could cause an agent to reach for tools the manifest does not advertise
Examples
/retro/retro compare 14dRun /retro 30d and tell me which files have the most churn and whether their test files are being updated too.name: retro description: | Weekly engineering retrospective. Analyzes commit history, work patterns, and code quality metrics with persistent history and trend tracking. Use when asked for a retro, retrospective, weekly review, shipping velocity, or engineering metrics. Trigger with /retro.
Generates a comprehensive engineering retrospective analyzing commit history, work patterns, and code quality metrics.
Arguments
/retro— default: last 7 days/retro 24h— last 24 hours/retro 14d— last 14 days/retro 30d— last 30 days/retro compare— compare current vs prior same-length window/retro compare 14d— compare with explicit window
Instructions
Parse the argument for time window. Default to 7 days. Validate format: a number followed by d, h, or w, or the keyword compare with an optional window. If the format is invalid, show usage and stop.
Auto-detect default branch:
DEFAULT_BRANCH=$(git remote show origin 2>/dev/null | grep 'HEAD branch' | awk '{print $NF}')
DEFAULT_BRANCH=${DEFAULT_BRANCH:-main}
Use origin/$DEFAULT_BRANCH for all git queries.
Step 1: Gather Raw Data
Run all of the following via bash, in parallel:
# Commits with timestamps
git log origin/$DEFAULT_BRANCH --since="<window>" --format="%H|%ai|%s" --shortstat
# Per-commit test vs production LOC
git log origin/$DEFAULT_BRANCH --since="<window>" --format="COMMIT:%H" --numstat
# Timestamps for session detection (Pacific time)
TZ=America/Los_Angeles git log origin/$DEFAULT_BRANCH --since="<window>" --format="%at|%ai|%s" | sort -n
# Hotspot files
git log origin/$DEFAULT_BRANCH --since="<window>" --format="" --name-only | grep -v '^$' | sort | uniq -c | sort -rn
# PR numbers from commit messages
git log origin/$DEFAULT_BRANCH --since="<window>" --format="%s" | grep -oE '#[0-9]+' | sort -un
Step 2: Compute Metrics
Build a summary table with the following columns:
| Metric | Value | |---|---| | Commits | — | | PRs merged | — | | Insertions | — | | Deletions | — | | Net LOC | — | | Test LOC | — | | Test ratio | — | | Version range | — | | Active days | — | | Detected sessions | — | | Avg LOC/session-hour | — |
Compute each metric from the raw data gathered in Step 1. Test LOC is determined by counting insertions in files matching common test patterns (*_test.*, *.test.*, *_spec.*, *.spec.*, test_*, tests/, __tests__/, etc.). Test ratio = test LOC / total insertions.
Step 3: Commit Time Distribution
Build an hourly histogram of commit times in Pacific time. Render as a bar chart using Unicode block characters. Call out:
- Peak hours — the 2-3 hours with the most commits
- Dead zones — any 4+ hour gap with zero commits
- Bimodal patterns — two distinct activity peaks (e.g., morning + evening)
- Late-night clusters — commits between midnight and 4am
Step 4: Work Session Detection
Group commits into sessions using a 45-minute gap threshold — any gap of 45+ minutes between consecutive commits starts a new session.
Classify each session:
- Deep — 50+ minutes
- Medium — 20–50 minutes
- Micro — under 20 minutes
Calculate and report:
- Total active time (sum of session durations)
- Average session length
- LOC per hour (net LOC / total active hours)
Step 5: Commit Type Breakdown
Categorize commits by conventional commit prefix: feat, fix, refactor, test, chore, docs, and other for anything that doesn't match.
Render a percentage bar chart. Flag a warning if fix ratio exceeds 50%.
Step 6: Hotspot Analysis
List the top 10 most-changed files by number of commits touching them.
Flag:
- Churn — files with 5+ changes in the window
- Test vs production ratio — whether hot files have corresponding test files that are also active
Step 7: PR Size Distribution
Classify PRs by total LOC changed (insertions + deletions):
| Size | LOC Range | |---|---| | Small | < 100 | | Medium | 100–500 | | Large | 500–1500 | | XL | 1500+ |
Flag any XL PRs with their file counts and summaries.
Step 8: Focus Score + Ship of the Week
Focus Score = percentage of commits in the single most-changed top-level directory. Higher is more focused.
Ship of the Week = the PR (or largest single commit) with the highest net LOC. Include its title and a one-line summary.
Step 9: Week-over-Week Trends
Only include this section if the time window is 14 days or longer.
Break the window into weekly buckets and show trends for:
- Commits per week
- LOC per week
- Test ratio per week
- Fix ratio per week
- Sessions per week
Step 10: Streak Tracking
TZ=America/Los_Angeles git log origin/$DEFAULT_BRANCH --format="%ad" --date=format:"%Y-%m-%d" | sort -u
Count consecutive days with commits, walking backward from today. Report the current streak length.
Step 11: Load History & Compare
Use glob to search for: .context/retros/*.json
- If found: use
viewto read the most recent file. Calculate deltas between current and previous metrics for the trends section. - If first run: skip comparison and note: "First retro — run again next week for trends."
Step 12: Save Retro History
mkdir -p .context/retros
Use the create tool to save a JSON snapshot to .context/retros/${today}-${seq}.json where ${today} is the current date in YYYY-MM-DD format and ${seq} is an incrementing number if multiple retros run on the same day.
Schema:
{
"date": "2026-03-12",
"window": "7d",
"metrics": {
"commits": 47,
"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
},
"version_range": ["1.0.0", "1.1.0"],
"streak_days": 47,
"tweetable": "Week of Mar 8: 47 commits, 3.2k LOC, 41% tests, 12 PRs, peak: 10pm"
}
Step 13: Narrative Output
Structure the final output as follows:
- Tweetable summary — one-line headline as the very first line
- Summary Table — the metrics table from Step 2
- Trends vs Last Retro — deltas from Step 11 (if history exists)
- Time & Session Patterns — narrative interpretation of Steps 3–4
- Shipping Velocity — commit type mix, PR size discipline, fix chains
- Code Quality Signals — test ratio assessment, hotspot warnings, XL PR flags
- Focus & Highlights — focus score, ship of the week
- Top 3 Wins — best accomplishments from the window, anchored in specific commits/PRs
- 3 Things to Improve — specific, actionable, anchored in the data
- 3 Habits for Next Week — small, practical, each takes less than 5 minutes to adopt
- Week-over-Week — trend tables (if window ≥ 14d)
Compare Mode
When the user invokes /retro compare (with or without an explicit window):
- Compute metrics for the current window (e.g., last 7 days)
- Compute metrics for the prior window of the same length (e.g., 7–14 days ago)
- Render a side-by-side table with deltas and directional arrows (↑/↓/→)
- Write a narrative on improvements and regressions
- Only save the current-window snapshot to
.context/retros/
Tone
Encouraging but candid. Be specific and concrete — skip generic praise. Reference actual commits, PRs, and files. Target 2500–3500 words. Use markdown tables and code blocks for data, prose for narrative sections.
Rules
- ALL output goes to the conversation, not to files — the only file written is the
.context/retros/JSON snapshot - Use
origin/$DEFAULT_BRANCHfor all git queries - Display all times in Pacific time
- If zero commits are found in the window, say so clearly and suggest trying a different window
- Round LOC/hour to the nearest 50
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/engineering-retrospective-ms1aw4uz/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/engineering-retrospective-ms1aw4uz' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/engineering-retrospective-ms1aw4uz/download' --output '.skill-downloads/engineering-retrospective-ms1aw4uz/SKILL.md.part' && mv '.skill-downloads/engineering-retrospective-ms1aw4uz/SKILL.md.part' '.skill-downloads/engineering-retrospective-ms1aw4uz/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/engineering-retrospective-ms1aw4uz/SKILL.md' && test -s '.skill-downloads/engineering-retrospective-ms1aw4uz/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/retro' && cp -R '.skill-downloads/engineering-retrospective-ms1aw4uz' '.claude/skills/retro'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/engineering-retrospective-ms1aw4uz'openskills read 'engineering-retrospective-ms1aw4uz'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/engineering-retrospective-ms1aw4uz/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
PDF Reader
Productivity
Read and extract text from PDF files, including documents, reports, contracts, and spreadsheets. Works with local files, URLs, and WhatsApp attachments. Use whenever PDF content is needed, even if not explicitly requested.
Discord Messaging Workflows
Productivity
Use the message tool to send, edit, and moderate Discord messages with interactive components.
Interactive Verdict Preview
Productivity
Generate an interactive HTML preview of keep/drop verdicts for maintainer review, then process the pasted feedback JSON.