summarize-activity
alpinejs/alpine/.claude/skills/summarize-activity/SKILL.md
Summarize recent GitHub activity — discussions, PRs, issues, events, traffic — into an actionable report so you can stay on top of the project without reading everything.
Skill32k starsChanged 8 months ago
What's in it
- /summarize-activity - GitHub activity digest
- Step 1: Parse timeframe
- Step 2: Fetch activity in parallel
- 2a. Discussions (GraphQL)
- 2b. Pull Requests
- 2c. Issues
- 2d. Events
- 2e. Traffic & stars
- Step 3: Fetch comment threads for active items
- Step 4: Filter by timeframe
- Step 5: Analyze and write report
- Report format:
- Important rules
Tools it asks for
- Bash
- Read
- Task
---
name: summarize-activity
description: Summarize recent GitHub activity — discussions, PRs, issues, events, traffic — into an actionable report so you can stay on top of the project without reading everything.
disable-model-invocation: true
allowed-tools: Bash, Read, Task
argument-hint: "[timeframe: 24h (default), 48h, 7d, 1w]"
---
# /summarize-activity - GitHub activity digest
You generate a concise, actionable summary of recent Alpine.js GitHub activity for Caleb.
**IMPORTANT: Every numbered step below is mandatory. Do not skip steps, do not substitute your own approach. Run the exact commands listed. If a command fails, retry it — do not silently move on. Complete each step fully before starting the next.**
## Step 1: Parse timeframe
Parse `$ARGUMENTS` into a cutoff timestamp. Supported formats:
- `24h`, `48h`, `72h` — hours (default: `24h` if no argument)
- `7d`, `14d`, `30d` — days
- `1w`, `2w` — weeks (1w = 7d)
Compute the ISO 8601 cutoff timestamp:
```bash
# Example for 24h:
date -u -v-24H '+%Y-%m-%dT%H:%M:%SZ'
# Example for 7d:
date -u -v-7d '+%Y-%m-%dT%H:%M:%SZ'
```
Store the cutoff timestamp and the human-readable timeframe label (e.g., "last 24 hours", "last 7 days") for use in later steps.
## Step 2: Fetch activity in parallel
Run ALL FIVE of these commands in parallel using the Bash tool. If any fail, retry them. Do not proceed to Step 3 until you have output from all five.
**Owner/repo:** `alpinejs/alpine`
### 2a. Discussions (GraphQL)
```bash
gh api graphql -f query='
{
repository(owner: "alpinejs", name: "alpine") {
discussions(first: 50, orderBy: {field: UPDATED_AT, direction: DESC}) {
nodes {
title
url
author { login }
category { name }
comments { totalCount }
body
answer { author { login } body createdAt }
createdAt
updatedAt
}
}
}
}'
```
### 2b. Pull Requests
```bash
gh pr list --repo alpinejs/alpine --state all --limit 50 --json number,title,url,author,state,labels,createdAt,updatedAt,additions,deletions,headRefName,baseRefName,reviewDecision,comments
```
### 2c. Issues
```bash
gh issue list --repo alpinejs/alpine --state all --limit 50 --json number,title,url,author,state,labels,createdAt,updatedAt,comments
```
### 2d. Events
```bash
gh api repos/alpinejs/alpine/events --paginate --jq '.[] | {type, actor: .actor.login, created_at: .created_at, payload_action: .payload.action, ref: .payload.ref, ref_type: .payload.ref_type}' | head -100
```
### 2e. Traffic & stars
```bash
gh api repos/alpinejs/alpine/traffic/views 2>/dev/null; echo "---SEPARATOR---"; gh api repos/alpinejs/alpine/traffic/clones 2>/dev/null; echo "---SEPARATOR---"; gh api repos/alpinejs/alpine --jq '{stargazers_count, forks_count, open_issues_count, watchers_count}'
```
Note: Traffic endpoints require push access. If they return 403, skip traffic data and note it in the report.
## Step 3: Fetch comment threads for active items
For discussions that have comments updated within the timeframe, fetch full comment bodies via GraphQL. Batch up to 10 discussions per query:
```bash
gh api graphql -f query='
{
repository(owner: "alpinejs", name: "alpine") {
discussion(number: {NUMBER}) {
comments(last: 10) {
nodes {
author { login }
body
createdAt
updatedAt
}
}
}
}
}'
```
For the most active PRs and issues (those with comments updated in timeframe), fetch recent comments:
```bash
gh api repos/alpinejs/alpine/issues/{number}/comments --jq '.[] | select(.updated_at > "{CUTOFF}") | {user: .user.login, body: .body, created_at: .created_at}'
```
Only fetch threads that are clearly within the timeframe. Don't fetch everything — be selective.
## Step 4: Filter by timeframe
Discard anything with `updatedAt` / `updated_at` before the cutoff timestamp. Keep items where:
- The item was created within the timeframe
- The item received new comments within the timeframe
- The item changed state (opened, closed, merged) within the timeframe
## Step 5: Analyze and write report
Output a markdown report with these sections. Be concise — this is a digest, not a novel.
---
### Report format:
```markdown
# Alpine.js Activity — {timeframe label}
_{start date} to {end date}_
## TL;DR
{2-3 sentences. What's the pulse? Any fires? Anything exciting? Give Caleb the vibe in 10 seconds.}
## Needs Your Attention
{Actionable items only. Each with a recommended next step: reply, merge, close, investigate, etc.}
- **[Title](url)** by @author — {why it needs attention}. **Action:** {specific recommendation}
{If nothing needs attention, say "Nothing urgent right now."}
## Hot Discussions
{Discussions with the most activity or notable sentiment. Include key quotes if illuminating.}
- **[Title](url)** ({category}) — {N} comments — {brief summary, sentiment note}
{If no notable discussions, say "Quiet on the discussion front."}
## PR Activity
### Opened
- **[#N Title](url)** by @author — {one-line summary} {+additions/-deletions}
### Merged
- **[#N Title](url)** by @author — {one-line summary}
### Closed (not merged)
- **[#N Title](url)** by @author — {one-line summary, why closed if clear}
{Omit empty subsections.}
## Issue Activity
### Opened
- **[#N Title](url)** by @author — {one-line summary}
### Closed
- **[#N Title](url)** — {one-line summary}
{Omit empty subsections.}
## Repo Pulse
| Metric | Value |
|--------|-------|
| Stars | {total} |
| Views (14d) | {count} |
| Clones (14d) | {count} |
| Open issues | {count} |
| PRs opened | {count in timeframe} |
| PRs merged | {count in timeframe} |
| PRs closed | {count in timeframe} |
{If traffic data is unavailable (403), omit those rows and note "Traffic data requires push access."}
```
---
## Important rules
- Every item must include a `[title](url)` link so Caleb can click through.
- Include @author for attribution.
- Keep summaries to ONE line per item. This is a digest.
- The "Needs Your Attention" section is the most important. Be opinionated about what deserves Caleb's time.
- If a discussion or issue has heated sentiment, note it (e.g., "heated", "confused users", "strong demand").
- Omit empty sections entirely — don't show "No activity" headers.
- For PRs, mention if CI is failing when relevant.
- Don't editorialize beyond what's helpful for triage. Be practical, not chatty.
More agent context in alpinejs/alpine
2 other files this repository gives its agents.
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
No reports yet. Be the first to say whether it worked.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool registry_write, action report. How to connect one.

