From base
Creates a personal activity summary across all GitHub repositories for reflection. Use when the user wants to create weekly reports, work reviews, task summaries, activity retrospectives, or review their recent contributions. Also trigger when asked "what did I do this week", "summarize my work", "create a work log", "振り返り", or any variation of reviewing personal GitHub activity over a time period.
npx claudepluginhub kkhys/claude-code-marketplaceThis skill is limited to using the following tools:
Generate a personal activity summary across all GitHub repositories.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Generate a personal activity summary across all GitHub repositories.
The purpose is reflection — helping the user see the bigger picture of their work, not just producing a mechanical list of links. Synthesize what they focused on, what they accomplished, and what's still in flight.
Default: past 7 days. If the user specifies a different period (e.g., "this month", "last 2 weeks", "3/1 ~ 3/14"), calculate the start date accordingly.
START_DATE=$(date -v-7d +%Y-%m-%d)
END_DATE=$(date +%Y-%m-%d)
Run these in parallel across all repositories. Using --sort updated with --updated captures items that were active during the period — a PR created two weeks ago but merged this week should appear.
# PRs authored
gh search prs --author "@me" --sort updated \
--updated ">=${START_DATE}" --limit 100 \
--json repository,title,url,state,createdAt,mergedAt,number
# Issues authored or assigned
gh search issues --author "@me" --sort updated \
--updated ">=${START_DATE}" --limit 100 \
--json repository,title,url,state,createdAt,closedAt,number
# PR reviews given to others
gh search prs --reviewed-by "@me" --sort updated \
--updated ">=${START_DATE}" --limit 100 \
--json repository,title,url,state,number,repository,author
Dedup: if a PR appears in both "authored" and "reviewed", keep it under "authored" only.
When the period covers a week or more, fetch daily contribution counts to visualize activity trends. This gives a quick sense of busy vs. quiet days.
USERNAME=$(gh api user --jq '.login')
gh api "users/${USERNAME}/contributions" \
--jq '.contributions[] | select(.date >= "'${START_DATE}'")'
If this endpoint is unavailable, approximate from the PR/issue data by counting items per day based on createdAt / mergedAt dates.
Render as a simple ASCII bar chart:
03/01 ███ 3
03/02 █████████ 9
03/03 ████████████ 12
Scale the bars relative to the most active day. Place the chart near the top of the output, right after the heading — it gives an immediate visual overview before the detailed breakdown.
This is where the summary becomes useful for reflection.
Clean up PR titles before including them in the output:
[main], [develop], [release] — these are merge artifacts, not meaningful contentfeat:, fix:, etc.) as they convey intent[develop] #9793 feature/PDQ-1578/TECM-3648) — replace with the actual PR title or a human-readable description from the PR bodymain -> release, keep as-is since they describe the action## Activity Summary (YYYY-MM-DD ~ YYYY-MM-DD)
### Daily Activity
\```
MM/DD ████████████████ 16
MM/DD ████████ 8
MM/DD ██████████████ 14
\```
### [Theme / Feature Area]
[1-2 sentence narrative describing what was accomplished and why it matters]
- [Title](url) — repo-name (merged/open/closed)
- [Title](url) — repo-name (closed)
### [Another Theme]
[Narrative]
- [Title](url) — repo-name (merged)
### Reviews
- [PR Title](url) — repo-name (@author)
- [PR Title](url) — repo-name (@author)
---
**Totals**: X PRs (Y merged), Z issues (W closed), V reviews
**Active repos**: repo-a, repo-b, repo-c
The output structure should match the shape of the data, not a rigid template: