z

Quick status dashboard — what's happening, what needs attention, ready to close?

SKILL.md

GitHub

Z — Quick Status Dashboard

Fast pulse check. Run everything in parallel, report concisely. Target: under 30 seconds.

Context to Gather

Run ALL of these in parallel:

Branch:              !`git branch --show-current`
Recent commits:      !`git log --oneline -5`
Git status:          !`git status --short`
Unpushed:            !`git log @{upstream}..HEAD --oneline 2>/dev/null || echo "no upstream"`
Dev server:          !`lsof -ti:3000 > /dev/null 2>&1 && echo "running on :3000" || echo "not running"`
Build dir:           !`test -d .next && echo "exists" || echo "missing"`
Research count:      !`ls research/ | wc -l`
Open PRs:            !`gh pr list --head $(git branch --show-current) --json number,state,title,url --jq '.[] | "#\(.number) \(.state) — \(.title)"' 2>/dev/null || echo "gh not available"`
Merged PRs:          !`gh pr list --head $(git branch --show-current) --state merged --json number,mergedAt --jq '.[] | "#\(.number) merged \(.mergedAt)"' 2>/dev/null || echo ""`
Branch merged:       !`git branch --merged origin/main 2>/dev/null | grep -q "$(git branch --show-current)" && echo "merged into main" || echo "not merged"`
Vercel status:       !`gh api repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)/deployments --jq '.[0] | "\(.environment) \(.state) \(.created_at)"' 2>/dev/null || echo "unavailable"`

Then scan for TODOs — ONLY in files listed by git status (modified/staged files):

TODOs in changed files: !`git diff --name-only | xargs grep -n 'TODO\|FIXME\|HACK' 2>/dev/null || echo "none"`

Output Format

Respond with EXACTLY this structure. Total output MUST be under 300 words.

## ZAO OS Status

**Branch:** {branch} | **Files changed:** {count from git status} | **Research docs:** {count}

### Recent (last 5 commits)
- {commit 1}
- {commit 2}
- ...

### Needs Attention
- {uncommitted files, if any — list file paths}
- {TODOs found in changed files, with file:line and comment text}
- Dev server: {running on :3000 / not running}
- {".next/ missing — run `npm run build`" if build dir missing, otherwise omit}

### Ready to Close?
- Uncommitted changes: {✓ clean / ✗ N files modified}
- Unpushed commits: {✓ synced / ✗ N commits ahead}
- Open PRs (this branch): {✓ #N merged / ✗ #N open — waiting for review / ✓ none}
- Vercel deploy: {✓ ready / ✗ building / ✗ failed / — unavailable}
- **Verdict: {✅ GOOD TO CLOSE / ⚠️ NOT YET — [list reasons]}**

### Quick Actions
- `/handoff` to save or restore session context
- `/socials` for a build-in-public note
- `npm run build` to check for errors

Verdict Logic

✅ GOOD TO CLOSE when ALL of these are true:

  • No uncommitted changes (git status clean)
  • No unpushed commits (synced with upstream)
  • No open (unmerged) PRs from this branch, OR no PR was created
  • Vercel deploy is "ready" or status unavailable (don't block on deploy check failures)

⚠️ NOT YET when ANY of these are true:

  • Uncommitted changes exist → "uncommitted changes"
  • Unpushed commits exist → "unpushed commits"
  • Open PR from this branch → "PR #N still open"
  • Vercel deploy failed → "deploy failed"

List all failing reasons after the verdict.

If nothing needs attention (clean tree, no TODOs, server running), replace the Needs Attention bullet list with: "All clear."

NOT YET → Offer to Fix

When the verdict is ⚠️ NOT YET, use AskUserQuestion to offer to resolve the blockers. Present lettered options based on what's actually blocking:

  • Uncommitted changes → offer: "Commit changes and push" / "Stash changes for later" / "Discard unneeded files"
  • Unpushed commits → offer: "Push now"
  • Open PR → offer: "Merge PR #N" / "Leave it open — I'll review later"
  • Deploy failed → offer: "Check Vercel logs"

Combine into a single AskUserQuestion with the relevant options. Example:

You have uncommitted changes and an open PR. Want me to clean up before you close?

A) Commit the skill updates + push (Recommended) B) Stash everything — I'll deal with it next session C) Just the PR — leave local changes alone D) I'll handle it manually

After the user picks, execute the chosen action. Then re-run the Ready to Close checks to confirm the verdict flips to ✅ GOOD TO CLOSE.

If the verdict is already ✅ GOOD TO CLOSE, skip this step entirely.

Rules

  • The status report is read-only — NEVER modify files during the scan phase
  • After the user chooses a fix action, you MAY execute git commands (commit, push, stash)
  • MUST complete the scan in under 30 seconds — no deep file reading
  • MUST be under 300 words for the status report (fix actions are separate)
  • NO reading full file contents — only git commands, port checks, gh CLI, and quick scans
  • Run git commands, port check, gh commands in parallel for speed
  • Omit the build dir line from Needs Attention if .next/ exists
  • Quick Actions section is always the same 3 bullets — do not change them