alpinejs / summarize-activity
Install for your project team
Run this command in your project directory to install the skill for your entire team:
mkdir -p .claude/skills/summarize-activity && curl -L -o skill.zip "https://fastmcp.me/Skills/Download/1024" && unzip -o skill.zip -d .claude/skills/summarize-activity && rm skill.zip
Project Skills
This skill will be saved in .claude/skills/summarize-activity/ and checked into git. All team members will have access to it automatically.
Important: Please verify the skill by reviewing its instructions before using it.
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.
0 views
0 installs
Skill Content
---
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.