Generate a standup, weekly report, or daily summary from your GitHub commits. Works on a fresh machine - no local clones, no filesystem scanning. Pulls via gh search commits across every repo you have access to (public + private), then clusters commits into initiatives (not repos) and renders a narrative. Supports day/week/custom ranges and multiple output formats. Triggered by /standup, or prompts like "what did I ship this week", "summarize my work since Monday", "weekly update".
Turn your GitHub commit history into a human-readable summary organized by what you were working on, not by which repo the commits landed in.
Works out of the box on any machine where gh auth login has been run. No repos need to be cloned.
/standup (with or without args)Determine:
| Dimension | Options | Default |
|---|---|---|
| Range | day, yesterday, week, 7d, 2w, month, since DATE [until DATE] | (Monday → today) |
week| Format | standup, report, slack, raw | standup |
| Scope | --owner ORG or --repo OWNER/NAME (repeatable) | all repos the user has access to |
| User | --user USERNAME | @me |
Arg syntax is flexible — accept /standup, /standup day, /standup week format=slack, /standup since 2026-04-06 until 2026-04-13, /standup 2w owner=vlt-ai.
Invoke:
bash ~/.claude/skills/standup/collect.sh <RANGE_ARGS> [--owner ORG] [--repo OWNER/NAME] [--user USERNAME]
The collector:
gh search commits with the author and date range.+additions / -deletions in parallel via gh api repos/OWNER/REPO/commits/SHA.owner/repo, sums stats, prints structured output.Default concurrency is 10. For very large ranges (hundreds of commits), pass --no-stats to skip the per-commit API calls, or --parallel 20 to speed up.
Capture the full stdout; that's your data for clustering.
Group the per-repo commits into initiatives — coordinated multi-repo work streams.
If a Brain vault is available (check $BRAIN_VAULT, then ~/vlt-workspace/brain/, then ~/brain/):
brain/notes/repo-dependency-graph.md (or any file matching *dependency* / *repo-map* / *service*repo*)feat(scaling) in both thor + hrym)Without a Brain vault, infer clusters from signals in the data itself:
feat(scaling), fix(metrics))chore: update <other-repo> submodule)Name each cluster with a short initiative title, not a repo name.
standup (default)## Standup — <date range>
**Shipped**
- <Initiative name>: <one-line what-changed, span the relevant repos>
- ...
**Critical fixes**
- <short list of crashes, regressions, hotfixes>
**Tooling**
- <devex / CLI / infra helpers>
**By the numbers**
<N commits across M repos, +X / -Y lines. Call out the 1-2 dominant multi-repo initiatives.>
**In flight**
- <WIP branches, incomplete POCs, pinned/paused items>
**Watch-outs for the team**
- <renames, removed paths, config changes others will hit>
Keep it tight — a standup is skimmed in under a minute. Lean on the lines-changed data to call out the dominant efforts.
reportProse paragraphs, one per initiative. Include context ("why we did this"), outcomes, and who/what it affects. Suitable for a written weekly update or manager 1:1 prep. Cite commit counts and line deltas as evidence.
slackCompact blocks with emoji markers. Short bullets. Include a :chart_with_upwards_trend: line with the commit + line counts. Good for pasting into a team channel.
rawPrint the collector output verbatim. No analysis. Useful for scripting or debugging.
End with a single short line offering relevant follow-ups: narrower/wider range, different format, drill into one initiative, export to file.
/standup # week, standup format
/standup day # just today
/standup yesterday
/standup week # explicit
/standup 2w # last 14 days
/standup month # last 30 days
/standup since 2026-04-06
/standup since 2026-04-06 until 2026-04-13
/standup week format=slack
/standup day format=report
/standup week owner=vlt-ai # restrict to one org
/standup week repo=vlt-ai/thor # restrict to one repo
/standup week user=someuser # someone else's commits
/standup raw # skip clustering, show data only
Flags for collect.sh (pass through when the user's ask requires them):
| Flag | Purpose |
|---|---|
--include-merges | Include merge commits (default: excluded) |
--user USERNAME | Override the author (default: @me) |
--owner ORG | Restrict to one GitHub org/user |
--repo OWNER/NAME | Restrict to one repo (repeatable) |
--no-stats | Skip per-commit line-count fetch (faster) |
--parallel N | Stats-fetch concurrency (default: 10) |
--limit N | Max commits to fetch (default: 1000, GitHub cap) |
gh is not authenticated, stop and tell the user to run gh auth login — don't try to work around it.--user changes, or different date).--owner or a shorter range.repo-dependency-graph") so the user knows where the grouping came from.