Gh daily
45 production-grade AI agent skills for real dev workflows. Code review, shipping, docs, git. Works with any skill-compatible agent.
npx -y skills add mgiovani/cc-arsenal --skill gh-dailyAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generate a GitHub-based standup report from assigned issues, open/merged PRs, review requests, and git commit history. Use when the user asks for a standup, daily update, or status report and works with GitHub Issues/PRs. Trigger phrases include "standup report", "daily update", "what did I do yesterday", "GitHub status report". Not for Jira-based standups (use jira-daily) — gh-daily is GitHub-only and never queries Jira.
SKILL.md
7.8 KB, as published. Nobody here has run it
GitHub Daily - Standup Meeting Preparation
Generates a standup report from GitHub Issues, PRs, notifications, and git history.
Anti-Hallucination Guidelines
Standup reports must reflect actual work done, not guesses:
- Only list issues/PRs that came back from
ghCLI output. - Only mark "Completed" if state is
closedor PR ismerged. - Use real
git logcounts, never estimate. - Only mention blockers that are explicitly labeled or commented in GitHub.
- Only include a report section if Phase 3 actually gathered data for it. Never fill a section with placeholder text like "[List any risks]" — omit the section entirely instead.
Phase 1: Determine Repository and User
Detect context in order of priority: --repo owner/repo argument, current git remote, then gh CLI default.
REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null)
if [ -z "$REPO" ]; then
echo "ERROR: Not in a GitHub repository. Use --repo owner/repo to specify."
fi
echo "Detected repo: $REPO"
GH_USER=$(gh api user -q .login 2>/dev/null)
echo "Authenticated as: $GH_USER"
If no repo is detected and none provided, ask the user to specify with --repo owner/repo.
If --all-repos is passed, skip the single-repo detection above and instead collect the repo list to scan:
REPOS=$(gh search issues --assignee @me --state open --limit 20 --json repository --jq '[.[].repository.nameWithOwner] | unique | .[]')
Run Phase 3 once per repo in $REPOS, passing each as --repo in turn, and concatenate the results before Phase 4. Without --all-repos, $REPO is a single value and every Phase 3 command below must pass --repo "$REPO".
Phase 2: Calculate Date Range
# Report from Friday if today is Monday, otherwise from yesterday
if [[ $(date +%u) == 1 ]]; then
SINCE_DATE=$(date -v-3d +%Y-%m-%d 2>/dev/null || date -d "3 days ago" +%Y-%m-%d)
else
SINCE_DATE=$(date -v-1d +%Y-%m-%d 2>/dev/null || date -d "yesterday" +%Y-%m-%d)
fi
echo "Reporting since: $SINCE_DATE"
--since <date> overrides $SINCE_DATE directly.
Phase 3: Gather Activity Data
Every gh issue/gh pr command below takes --repo "$REPO" (or the current repo in the --all-repos loop) — omitting it lets gh fall back to whatever repo the CLI feels like, silently pulling data for the wrong project.
# Issues assigned to me (open)
gh issue list --repo "$REPO" --assignee @me --state open --json number,title,state,labels,milestone,updatedAt,createdAt --limit 50
# Issues closed recently (by me)
gh issue list --repo "$REPO" --assignee @me --state closed --json number,title,state,labels,closedAt,milestone --limit 20 | jq --arg since "$SINCE_DATE" '[.[] | select(.closedAt >= $since)]'
# PRs authored by me (open)
gh pr list --repo "$REPO" --author @me --state open --json number,title,state,reviewDecision,isDraft,labels,updatedAt --limit 30
# PRs merged recently
gh pr list --repo "$REPO" --author @me --state merged --json number,title,mergedAt,labels --limit 20 | jq --arg since "$SINCE_DATE" '[.[] | select(.mergedAt >= $since)]'
# Git activity
git log --author="$(git config user.email)" --since="$SINCE_DATE" --oneline --all --no-merges
git rev-list --count --since="$SINCE_DATE" --author="$(git config user.email)" --all 2>/dev/null || echo "0"
Run these two only when reviews are in scope — always for --format detailed (the default), and for any other format when --include-reviews is passed. Skip them otherwise; don't spend the extra API calls on a report that won't use the data.
# PRs where my review is requested
gh pr list --repo "$REPO" --search "review-requested:@me" --state open --json number,title,author,updatedAt,labels --limit 20
# Unread notifications (mentions, review requests, assignments)
gh api notifications --jq '.[] | select(.unread == true) | {reason: .reason, title: .subject.title, type: .subject.type, url: .subject.url}'
Phase 4: Classify and Score
Classify each issue/PR from the JSON already gathered above — no subagents needed, this is a direct pass over data you already have:
- Completed: state is
closed(issues) ormerged(PRs) since$SINCE_DATE. - In Progress: open,
updatedAtwithin the window. - Blocked: has a
blocked/blockinglabel or a comment mentioning a blocker. - Review Needed: open PRs from the review-requested query (only present when reviews were gathered in Phase 3).
Match git commits to issues/PRs by number references in commit messages (#123, fixes #456) to show which issues have code changes.
Optionally prioritize within each category using label/milestone signals: priority: critical/P0 and blocked labels surface first, then items closest to a milestone due date, then stale items (>7 days no update).
Phase 5: Generate Report
Track sections completed with TodoWrite, then render using one of the formats below. Every section in the template is conditional on having matching data from Phase 3/4 — a report with nothing blocked has no Blockers section, a report with no milestone data has no Milestone section. Never invent numbers or fill a heading with placeholder brackets to keep a section "complete."
Output Formats
For the default, brief, and slack templates, see references/output-formats.md (load when rendering the final report).
- Default (detailed): full report with completed work, in-progress items, PRs, blockers, reviews requested.
- Brief (
--format brief): one line per section, for quick standups. - Slack (
--format slack): markdown formatted for posting in Slack/Teams.
Command Options
--repo <owner/repo>/-r <owner/repo>— specify the repository explicitly.--since <date>— override the automatic date calculation, e.g.--since 2025-01-20.--format <brief|detailed|slack>— choose output format (default: detailed).--all-repos— scan all repos where you have recent assigned issues (see Phase 1); runs Phase 3 once per repo.--include-reviews— include PRs where your review was requested. Detailed format gathers this by default; brief and slack need the flag to include it.
Usage Examples
gh-daily # auto-detect repo, yesterday's activity
gh-daily --repo myorg/backend # specify repo
gh-daily --format brief # quick standup
gh-daily --format slack # for Slack posting
gh-daily --since 2025-01-15 # custom date range
gh-daily --all-repos # all repos you contribute to
gh-daily --since $(date -v-7d +%Y-%m-%d 2>/dev/null || date -d "7 days ago" +%Y-%m-%d) --format detailed # weekly summary
Important Notes
- Requires
ghCLI installed and authenticated (gh auth login, verify withgh auth status). - Repository context is auto-detected from git remote or set with
--repo. - Git commit analysis uses the local git repository.
- All metrics come from actual GitHub and git data — never estimated.
- Not for Jira: this skill only talks to
gh/git. Usejira-dailyfor a Jira-ticket-based standup, including in mixed environments where both trackers are in play.