A personal developer-efficiency report from git history, 11 dimensions (DORA / SPACE / CodeScene) plus pre-aggregated year/quarter/window overviews. Details, dependencies and options live in README.md — read it.
A two-phase tool, read-only over git (git archive/git show, never touches the working tree):
gitmetry.pyscans local repos and emits raw data (markdown tables / JSON).- You (the LLM) compose an interpreted report with 🟢/🟡/🔴 verdicts from it — the model is
examples/sample-report.md(a generic, anonymized example).
- Generate the raw data:
Always write outputs to this project's gitignored
./gitmetry.py --since <YYYY-MM> [--until <YYYY-MM>] [--health-trend] \ --format both --out ./reports/gitmetry-<window>.md
./reports/dir (not~/reports/). Derive the window from the request (5y/3y/24m/YYYY-MM..YYYY-MM, empty = default 24 months). Add--health-trendonly when code-health is also wanted (scc snapshots, runs for minutes). Personal defaults (author/root/main_repo/main_ext/paths) come from the user's gitignored.gitmetry.jsonif present, so usually only the window needs passing; otherwise the tool defaults to the repo in the current directory and the author fromgit config user.name. Set--root/--main-repo/--author/--main-extexplicitly when the target differs. The user may also keep a gitignoredCLAUDE.local.mdwith their own standing instructions. - Load the generated
.md(and.jsonfor exact numbers) and interpret it per the "How the raw data becomes a report" section inREADME.md(header → summary with flags → yearly overview → 11 dimensions with legend + assessment → footer). The yearly/quarter/window overview is pre-computed in therollupblock — distil it rather than re-deriving figures from the monthly rows. - Save the report to
./reports/gitmetry-<window>-report.mdand summarize the 3–4 most important findings (including every 🔴/🟡).
- Don't copy the raw tables wholesale — distill a story. Be concrete (file names, numbers, "X → Y" trends). Trend > absolute number.
- Metrics are proxies, not truth. Most trustworthy: throughput, rework %, function CCN, ownership. Indicative only (skewed by generated code / commit discipline): line sums, corr %.
- If
scc/lizardis missing, the script just skips that layer — continue with what you have. - Don't edit the script for a one-off run; parameterize via the options.