repo-status ยท diff

git:20260529.9238f59 to git:20260530.d3be4dd

11 added, 6 removed. Audit A to A.

---
name: repo-status
description: >
- Scan a folder of git repos and report recent activity, branch divergence, and
- uncommitted state. Defaults to the folder argument or your repo root. Use when
- checking what is live across many repos at once.
- allowed-tools: Bash
+ Scan a folder of git repos and report each repo's local dirty/clean state,
+ ahead/behind divergence from upstream, recent activity, and latest CI run status.
+ Read-only: never commits, pushes, or edits. Defaults to the folder argument or
+ your repo root. Use when checking "what's live", "which repos are dirty", or
+ "repo status across my projects". Sibling skills overlap on folder scanning:
+ do NOT use for "what should I work on next" prioritization (use get-work); do
+ NOT use for a recent-activity-only overview without dirty/CI detail (use status).
+ repo-status is the local dirty/ahead/behind + CI-state report.
+ allowed-tools: Bash(git *), Bash(gh *), Read, Grep, Glob
user-invocable: true
arguments:
- name: folder
description: Folder to scan for git repos (defaults to $REPO_ROOT or ~/github if unset)
required: false
---
- # Status
+ # Repo Status
Scan a directory for git repositories with recent activity and report their status.
## Invocation
The user may pass a folder path as an argument. Default to `$REPO_ROOT`, falling back to `~/github` if unset.
## Steps
1. **Discover repos**: Find all directories containing a `.git` folder (one level deep only; do not recurse into nested repos).
2. **Filter by activity**: Only include repos that have commits in the last 7 days on any local branch (`git log --all --since='7 days ago' --oneline -1`). Skip repos with no recent activity.
3. **For each active repo**, gather:
- **Repo name** (directory basename)
- **Current branch** vs **default branch** (use `gh repo view --json defaultBranchRef -q .defaultBranchRef.name` or fall back to checking for main/master)
- **Uncommitted changes**: `git status --porcelain` (staged, unstaged, untracked counts)
- **Unpushed commits**: commits ahead of upstream (`git rev-list @{u}..HEAD --count 2>/dev/null`)
- **Behind upstream**: commits behind (`git fetch --quiet && git rev-list HEAD..@{u} --count 2>/dev/null`)
- **CI status**: `gh run list --limit 1 --json status,conclusion,name`. Show latest workflow run status (passing/failing/in-progress)
4. **Output format**: Print a clean, grouped summary. For each repo use this structure:
- ```
+ ```text
## repo-name [branch: feature/xyz -> main]
- Status: 3 modified, 1 untracked
- Ahead: 2 commits unpushed
- Behind: 5 commits (needs pull/rebase)
- CI: passing | failing (ci.yml) | in progress
- Action needed: pull, push, commit changes, fix CI
```
5. **Summary table** at the end: one-line-per-repo showing repo name, branch, dirty/clean, ahead/behind counts, CI status, and action needed.
## Rules
- Run `git fetch --quiet` before checking ahead/behind so counts are current.
- Run repo checks in parallel where possible (use `&` and `wait` in bash).
- If a directory isn't a valid git repo or has no remote, note it and move on.
- Keep output concise; skip sections that have nothing to report (e.g., don't show "Behind: 0").
- Only show repos with recent activity (last 7 days) to keep the report focused.