groove-utilities-stats
Use $ARGUMENTS to specify the period: week (default), month, or all.
Bash fast-path
This skill has a bash script at scripts/stats.sh. Run it directly for faster, model-free execution:
bash .agents/skills/groove-utilities-stats/scripts/stats.sh week
(Pass week, month, or all to match $ARGUMENTS.) If the script exits 0, report its stdout and stop — do not continue with the steps below. If it exits non-zero, continue with the markdown steps (exit 3 means it printed the local metrics but the linear/github task counts still need to be computed below; exit 1 means no .groove/).
Outcome
A read-only dashboard is printed to the conversation quantifying compound-loop health for the period: the compound funnel (lessons captured vs graduated), adherence (daily-log coverage, streak, rollup freshness, ratings), and velocity (task open/closed, commits). No files are written. This answers "is the workflow compounding / am I keeping the rhythm" — for qualitative patterns, it points to /groove-utilities-memory-retrospective.
Acceptance Criteria
- Compound funnel shown: lessons captured (total + in period), graduated (total + in period), graduation rate
- Adherence shown: daily-log coverage over the last
memory.review_daysbusiness days, current streak, weekly/monthly rollup freshness, ratings count + average - Velocity shown: task open/closed counts (if a task backend is configured) and commit count in the period
- Output goes to the conversation only; nothing is written
- Absent data sources are skipped with sensible "n/a"/"NA" placeholders rather than errors
Steps
(Model fallback — the bash fast-path above does this deterministically. Reproduce the same output format.)
Memory path is always
.groove/memory/. If.groove/is absent, stop with an install hint.Read
.groove/index.mdfrontmatter:tasks.storage(backend; legacy keytasks.backend) andmemory.review_days(default 5).Determine date range from $ARGUMENTS:
week= last 7 days,month= last 30 days,all= everything. Call the start<since>.Compound funnel:
- Captured: count
## YYYY-MM-DDdated entries across.groove/memory/learned/*.md(excludesignals.md) — total, and those with date ≥<since>. - Graduated: count
[graduated YYYY-MM-DD]markers across the same files — total, and those ≥<since>. - Graduation rate = graduated_total / captured_total as a percentage (
n/aif none captured).
- Captured: count
Adherence:
- Daily-log coverage: of the last
review_daysbusiness days (Mon–Fri, ending today), how many have.groove/memory/daily/YYYY-MM-DD.md. - Streak: consecutive most-recent business days (back from today) that have a daily log; stop at the first gap.
- Rollup freshness:
weeklyisfreshif a.groove/memory/weekly/<ISO-year>-W<ISO-week>.mdexists for the current or previous week, elsestale;monthlylikewise for.groove/memory/monthly/YYYY-MM.md. - Ratings: parse
.groove/memory/learned/signals.mdtable rows (| YYYY-MM-DD | N/5 | note |) with date ≥<since>; report count and average (and a▁▂▄▆█sparkline if ≥ 3).
- Daily-log coverage: of the last
Velocity:
- Commits:
git log --oneline --since=<since>count. - Tasks, by
tasks.storage:beans: open =beans list --json --no-status completed --no-status scrapped | jq length; closed =--status completed+--status scrapped; best-effort open mistakes/promises = count of non-terminal children under the "Mistakes"/"Promises" epics.linear: via the linear CLI/MCP — assigned issues grouped into open vs done.github:gh issue list --assignee @me --state allgrouped into open vs closed.none: omit task counts (show commits only).
- Commits:
Print the dashboard in the Output format below.
Output format
## Groove Stats — <period> (<start> to <today>)
### 🔁 Compound funnel
Lessons captured: <N> (<n> this <period>) Graduated: <G> (<g> this <period>)
Graduation rate: <pct>
### 📿 Adherence
Daily logs: <x>/<review_days> business days Streak: <s> days
Rollups: weekly <fresh|stale>, monthly <fresh|stale>
Ratings: <c> in period | avg <a>/5 <sparkline>
### 🚀 Velocity
Tasks: <open> open / <closed> closed Commits: <k> in period
Open: <m> mistakes, <p> promises
_For qualitative patterns and learnings, run `/groove-utilities-memory-retrospective`._
Constraints
- Read only — never write to any file (no memory, no AGENTS.md, no config).
- Skip any absent data source with a one-line
n/a/NArather than erroring; parse tables and dates defensively. - Paths are hardcoded under
.groove/memory/(not configurable), consistent with the rest of groove. - This skill complements
/groove-utilities-memory-retrospective(qualitative reflection) — do not duplicate its narrative; cross-link it.