From armory
Generates structured git-based engineering retrospectives analyzing commits, PRs, and velocity over configurable time windows with monorepo path scoping.
How this skill is triggered — by the user, by Claude, or both
Slash command
/armory:engineering-retroThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate a structured, git-based engineering retrospective for a configurable time window. This is a **read-only analysis** — no files are modified except the optional JSON snapshot.
Generate a structured, git-based engineering retrospective for a configurable time window. This is a read-only analysis — no files are modified except the optional JSON snapshot.
/engineering-retro [TIME_WINDOW] [PATH_SCOPE]
24h, 7d (default), 14d, 30dservices/apiExamples:
/engineering-retro — last 7 days, full repo/engineering-retro 30d — last 30 days, full repo/engineering-retro 14d services/api — last 14 days, scoped to services/api/Detect runtime context before any analysis:
# Default branch
DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
if [ -z "$DEFAULT_BRANCH" ]; then
DEFAULT_BRANCH=$(git remote show origin 2>/dev/null | grep 'HEAD branch' | awk '{print $NF}')
fi
# System timezone
TZ_NAME=$(date +%Z)
# Time window — convert argument to --since format
# 24h → "24 hours ago", 7d → "7 days ago", 14d → "14 days ago", 30d → "30 days ago"
If DEFAULT_BRANCH detection fails, abort with an error — do not guess.
Collect commits within the time window on the detected default branch:
# All commits in window (with optional path scope)
git log origin/$DEFAULT_BRANCH --since="$SINCE" --format="%H|%aI|%aN|%s" -- $PATH_SCOPE
# Diff stats for the window
git log origin/$DEFAULT_BRANCH --since="$SINCE" --numstat --format="%H" -- $PATH_SCOPE
Capture: commit hash, author date (ISO), author name, subject line, files changed, insertions, deletions.
From the raw data, compute:
Analyze commit timestamps (converted to system timezone $TZ_NAME):
Present as a compact text histogram.
Group commits into work sessions using a >2 hour gap as a session boundary:
Sessions with a single commit get a default duration of 0 (point-in-time).
Classify each commit using conventional commit prefixes from the subject line:
| Prefix pattern | Category |
|---|---|
feat:, feat( | feature |
fix:, fix(, bugfix | fix |
refactor:, refactor( | refactor |
chore:, chore(, build:, ci: | chore |
docs:, doc: | docs |
test:, tests: | test |
perf: | perf |
style: | style |
For commits without conventional prefixes, apply diff heuristics:
Report counts and percentages per category.
Identify the top 10 most-modified files by number of commits touching them:
git log origin/$DEFAULT_BRANCH --since="$SINCE" --name-only --format="" -- $PATH_SCOPE | sort | uniq -c | sort -rn | head -20
Flag any file modified in >50% of total commits as a hotspot. Hotspots indicate:
If the remote is GitHub (check git remote get-url origin for github.com):
# Merged PRs in window
gh pr list --state merged --base $DEFAULT_BRANCH --search "merged:>=$SINCE_DATE" --json number,title,author,mergedAt,additions,deletions,changedFiles,reviews
Compute:
If not a GitHub remote or gh is unavailable, skip this step and note it in the output.
Compute the ratio of focused commits (touching 3 or fewer files) to total commits:
focus_score = commits_touching_le_3_files / total_commits
Interpretation:
For each contributor, report:
Frame this as contributor highlights — recognition of work done, not a ranking or performance metric. Order alphabetically by author name.
Check for a prior snapshot in .engineering-retros/:
*.json fileIf no prior snapshot exists, note this is the first retrospective and skip comparison.
Save a JSON snapshot for future comparisons:
.engineering-retros/<YYYY-MM-DD>.json
Schema:
{
"date": "YYYY-MM-DD",
"window": "7d",
"path_scope": null,
"branch": "main",
"timezone": "PST",
"metrics": {
"commits": 0,
"contributors": 0,
"files_changed": 0,
"lines_added": 0,
"lines_removed": 0,
"net_delta": 0,
"focus_score": 0.0
},
"categories": {},
"hotspots": [],
"sessions": {
"total": 0,
"avg_length_minutes": 0
},
"authors": {},
"pr_stats": null
}
Create the .engineering-retros/ directory if it does not exist. Ensure .engineering-retros/ is in .gitignore (add it if missing — this is the one permitted file modification).
Produce the final output in this structure:
Engineering Retrospective — [DATE_RANGE] ([TIMEZONE]) Branch: [DEFAULT_BRANCH] | Scope: [PATH_SCOPE or "full repo"]
path/to/file — N commits [HOTSPOT if >50%]date +%Zgit symbolic-ref or git remote show-- $PATH_SCOPE when a scope is provided.engineering-retros/ only, never .context/retros/npx claudepluginhub mathews-tom/armory --plugin armoryRuns weekly engineering retrospectives analyzing git commit patterns, velocity, code quality, and work sessions with persistent trend tracking.
Analyzes git commit history for engineering retrospectives, tracking work patterns, code quality metrics, trends, per-person breakdowns, shipping streaks, and actionable improvements. Use for 'retro', weekly reviews, or 'what did we ship'.
Analyzes git history for sprint retrospectives: velocity, commit patterns, test health, shipping cadence. Use after sprints, weekly, or progress reflection.