From paxos
Gather the user's GitHub PRs opened or updated today (across all repos) and format them as a concise summary. Use this skill when the user asks about their daily PRs, wants a standup update, daily summary, or asks to generate a message about what they shipped/opened/worked on today.
How this skill is triggered — by the user, by Claude, or both
Slash command
/paxos:daily-reportThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fetches all PRs the user authored or updated today using `gh search prs`, deduplicates them, and formats each one as a concise markdown list grouped by activity type.
Fetches all PRs the user authored or updated today using gh search prs, deduplicates them, and formats each one as a concise markdown list grouped by activity type.
gh search prs filters dates in UTC, but "today" means the user's local day. A naive --created="$(date +%Y-%m-%d)" query misses anything the user did after their local UTC-offset boundary (e.g. after 5 PM PT, when UTC has already rolled over). Always query a ±1 day UTC window around local today, then filter client-side to the user's local day.
Compute the three dates first (works on macOS BSD date and GNU date):
LOCAL_TODAY=$(date +%Y-%m-%d)
LOCAL_YESTERDAY=$(date -v-1d +%Y-%m-%d 2>/dev/null || date -d 'yesterday' +%Y-%m-%d)
LOCAL_TOMORROW=$(date -v+1d +%Y-%m-%d 2>/dev/null || date -d 'tomorrow' +%Y-%m-%d)
Run both gh search prs queries against the wider UTC range, then filter each result so its createdAt (or updatedAt) maps to LOCAL_TODAY in the user's local timezone:
gh search prs --author=@me --created="${LOCAL_YESTERDAY}..${LOCAL_TOMORROW}" \
--json url,title,body,repository,state,createdAt --limit 50 \
| jq --arg today "$LOCAL_TODAY" \
'map(select((.createdAt | fromdateiso8601 | strflocaltime("%Y-%m-%d")) == $today))'
gh search prs --author=@me --updated="${LOCAL_YESTERDAY}..${LOCAL_TOMORROW}" \
--json url,title,body,repository,state,createdAt,updatedAt --limit 50 \
| jq --arg today "$LOCAL_TODAY" \
'map(select((.updatedAt | fromdateiso8601 | strflocaltime("%Y-%m-%d")) == $today))'
strflocaltime formats the epoch in the shell's local timezone, so the filter precisely matches the user's local "today".
The --updated filter catches PRs where you pushed commits, responded to reviews, or made any modification today — even if the PR was opened days or weeks ago.
Deduplicate by URL. Categorize each PR:
createdAt maps to LOCAL_TODAYstate is MERGED (and not opened today)--updated results (not opened or merged today)Group PRs by activity type. Only show sections that have PRs in them.
### Opened
- [**owner/repo#123**](https://github.com/owner/repo/pull/123): Short description :loading:
### Merged
- [**owner/repo#456**](https://github.com/owner/repo/pull/456): Short description :merged:
### Updated
- [**owner/repo#789**](https://github.com/owner/repo/pull/789): Short description :loading:
Link the PR reference to its URL using markdown links. Use :merged: for merged PRs, :loading: for open PRs.
If there are no PRs at all, say: "No PR activity today."
Do NOT ask about posting to Slack unless the user explicitly requests it. If they do, convert the list to Slack's <url|label> link syntax and ask which channel before sending.
Read each PR's title and body to understand what it does, then write a single sentence (under 20 words) capturing the change. Focus on the user-facing or reviewer-facing impact, not implementation details. If the title already says it all, a light rephrase is fine.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub paxos/claude --plugin paxos