From armory
Generates git-based engineering retrospectives analyzing commits, contributors, code churn, velocity, time distribution, and sessions over configurable time windows with monorepo path scoping.
npx claudepluginhub mathews-tom/armory --plugin armoryThis skill uses the workspace's default tool permissions.
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.
Implements Playwright E2E testing patterns: Page Object Model, test organization, configuration, reporters, artifacts, and CI/CD integration for stable suites.
Guides Next.js 16+ Turbopack for faster dev via incremental bundling, FS caching, and HMR; covers webpack comparison, bundle analysis, and production builds.
Discovers and evaluates Laravel packages via LaraPlugins.io MCP. Searches by keyword/feature, filters by health score, Laravel/PHP compatibility; fetches details, metrics, and version history.
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/