standup
SkillProductivityGenerate an async standup update (Did / Next / Blockers) from recent Git and GitHub activity, and optionally issue-tracker tickets. Use when the user asks for a "standup", "daily update", "async update", "what did I do", "update for the meeting", or wants to summarize their recent work for a team thread.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the standup skill
What this skill tells your AI
The instructions your AI receives, as published by rlajous/claude-code-commands in skills/standup/SKILL.md and read by ahel’s review.
Cross-runtime: follow runtime compatibility for invocation, delegation, configuration precedence, state paths, and permissions.
You are generating a concise, paste-ready async standup update. Your task is to gather the user's recent work from Git, GitHub (via the gh CLI), and — if configured — the issue tracker, then organize it into Did / Next / Blockers. Follow each step in order.
Step 1: Parse Arguments
Extract options from $ARGUMENTS:
--since <when>→ time window for "Did" (e.g.yesterday,2 days ago,2024-01-15,last friday). Default:1 day ago(use3 days agoif today is Monday).--author <user>→ GitHub username / git author to filter by. Default: the current user.
Defaults:
SINCE="1 day ago" # widen to "3 days ago" on Mondays
AUTHOR="$(gh api user --jq .login 2>/dev/null || git config user.name)"
Step 2: Load Configuration
Resolve .git-workflow/config.yaml first, then .claude/config.yaml as a legacy read-only fallback, to determine the repository and issue tracker:
issueTracker.type→auto|linear|jira|github|noneissueTracker.github.repositoryor the current repo (viagh repo view)pullRequests.*for context
If no config exists, use auto-detection and sensible defaults. The standup must work with zero configuration.
Step 3: Gather Git Activity (local)
Collect the user's recent commits across the current repository:
git log --since="$SINCE" --author="$AUTHOR" --pretty=format:'%h %s' --no-merges
Group commits by their type/ticket prefix when the repo uses a commit convention (e.g. [Feature], fix:, PROJ-123). Summarize — do not paste raw commit lists.
Step 4: Gather GitHub Activity
Use the gh CLI (requires authentication). Handle each call defensively — if gh is unavailable or a call fails, skip that section and note it, never abort the whole standup.
Recently merged PRs (part of "Did"):
gh search prs --author "$AUTHOR" --merged --sort updated \
--json number,title,repository,url,closedAt --limit 20
Open PRs by the user (part of "Next", and "Blockers" if review is stalled):
gh search prs --author "$AUTHOR" --state open --sort updated \
--json number,title,repository,url,reviewDecision,isDraft,statusCheckRollup --limit 20
PRs awaiting the user's review (part of "Next"):
gh search prs --review-requested "$AUTHOR" --state open \
--json number,title,repository,url --limit 20
Filter to the window where a timestamp is available. Interpret signals:
reviewDecision: CHANGES_REQUESTEDor failingstatusCheckRollup→ candidate Blocker.reviewDecision: REVIEW_REQUIREDon an open PR → Next (waiting on review).isDraft: true→ Next (in progress), not "Did".
Step 5: Gather Issue Tracker Tickets (optional)
If issueTracker.type is not none and the relevant MCP server is available, fetch tickets assigned to the user that changed in the window.
Linear
# Use the Linear MCP server if available
mcp__linear__list_issues(assignee: me, updatedAfter: <window>)
Jira
# Use the Jira MCP server if available
mcp__jira__search_issues(jql: "assignee = currentUser() AND updated >= -1d")
GitHub Issues
gh search issues --assignee "$AUTHOR" --state all --sort updated \
--json number,title,repository,url,state --limit 20
Map ticket status to sections: recently completed → Did; in-progress / todo picked up next → Next; blocked/needs-info → Blockers. If no tracker is configured or reachable, skip this step silently.
Step 6: Compose the Standup
Organize everything into three sections. Keep each bullet short and outcome-focused (what shipped / what's happening), not a commit dump. Link PRs/issues as #<number> or full URLs when cross-repo. If a section is empty, write a brief honest line rather than padding.
Output in this paste-ready format:
*Standup — {date}*
*Did*
- {shipped work, merged PRs, completed tickets}
*Next*
- {open PRs awaiting review, in-progress tickets, planned work}
*Blockers*
- {failing CI, changes requested, waiting-on items — or "None"}
Step 7: Present
Print the standup as a single copy-pasteable block. After it, add a one-line note listing any sources that were unavailable (e.g. "Note: issue tracker not configured; based on Git + GitHub only.") so the user knows the coverage.
Configuration Reference
| Setting | Default | Description |
|---|---|---|
issueTracker.type | auto | linear, jira, github, or none |
issueTracker.github.repository | current repo | owner/repo for GitHub queries |
Error Handling
| Scenario | Action |
|---|---|
gh not installed or not authenticated | Skip GitHub sections, note it, continue with Git |
| Not inside a git repository | Skip Git section, rely on GitHub search |
| Issue tracker MCP unavailable | Skip tracker section silently |
| No activity in the window | Say so plainly and suggest widening --since |
Signals
- GitHub stars
- 30
- Forks
- 2
- Last commit
- Aug 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
standup-rlajous- Source
- github.com/rlajous/claude-code-commands