Summarize commits and PRs across team repos in GitHub and Azure DevOps. Use when users ask "who's doing what", "team activity", "what's the team been up to", or want a summary of PRs and commits.
This skill provides a consolidated view of team activity across multiple repositories in GitHub and Azure DevOps. It answers questions like:
| Before | After |
|---|---|
| Manually check 6+ repos across 2 platforms | Single command shows all activity |
| Miss PRs that need review | See all open PRs in one place |
| Lose track of team progress | Clear summary by person and repo |
| Pattern | Description |
|---|---|
*one-cloud* |
Any repo with "one-cloud" in the name |
firehydrant |
The FireHydrant repo |
core-logics |
The Core Logics repo |
*iac* |
IAC (Infrastructure as Code) repos |
coralogix |
The Coralogix observability repo |
| Organization | Project | Repository |
|---|---|---|
| Cloud-Delivery | spruce | spruce |
Parse user request for time range. Defaults:
For each tracked repository pattern, use the gh CLI:
List matching repos:
gh repo list ECI-Global --json name,nameWithOwner --limit 100 | jq '[.[] | select(.name | test("one-cloud|firehydrant|core-logics|iac|coralogix"; "i"))]'
Get commits (last 7 days):
gh api repos/{owner}/{repo}/commits --jq '.[] | {sha: .sha[0:7], author: .commit.author.name, date: .commit.author.date, message: .commit.message | split("\n")[0]}'
Get pull requests:
gh api repos/{owner}/{repo}/pulls?state=all --jq '.[] | {number, title, user: .user.login, state, created_at, merged_at}'
For the Cloud-Delivery/spruce repo:
Get commits:
az repos commit list --organization https://dev.azure.com/Cloud-Delivery --project spruce --repository spruce --top 50 --output json
Get pull requests:
az repos pr list --organization https://dev.azure.com/Cloud-Delivery --project spruce --repository spruce --status all --top 50 --output json
Group all activity by author/creator:
Create a consolidated report organized by:
## Team Activity (Last 7 Days)
### By Team Member
**@alice**
- 12 commits across 3 repos
- 2 PRs merged (one-cloud-api, core-logics)
- 1 PR open: #45 "Add caching layer" (one-cloud-api)
**@bob**
- 8 commits across 2 repos
- 1 PR merged (iac)
- 0 PRs open
**@carol**
- 5 commits (spruce - Azure DevOps)
- 1 PR open: !958 "Feature update" (spruce)
### By Repository
| Repository | Commits | PRs Merged | PRs Open |
|------------|---------|------------|----------|
| one-cloud-api | 15 | 3 | 2 |
| core-logics | 8 | 1 | 0 |
| fire-hydrant | 3 | 0 | 1 |
| iac | 6 | 2 | 0 |
| spruce (ADO) | 5 | 1 | 1 |
### Open PRs Needing Attention
| Repo | PR | Title | Author | Age |
|------|-----|-------|--------|-----|
| one-cloud-api | #45 | Add caching layer | @alice | 3d |
| fire-hydrant | #12 | Fix auth flow | @dave | 5d |
| spruce | !958 | Feature update | @carol | 2d |
An interactive web dashboard is available for visual exploration of team activity.
cd .claude/skills/github-activity-summary/dashboard
npm install
npm run dev
Then open http://localhost:3456
The dashboard analyzes FULL commit messages (not just the summary line) to extract deeper insights:
Detects the emotional tone of commits based on keywords:
Parses conventional commit format (type(scope): description):
feat: New featuresfix: Bug fixesrefactor: Code refactoringperf: Performance improvementsdocs: Documentation changestest: Testing additionschore: Maintenance tasksIdentifies commits indicating blockers:
blocked, waiting on, pendingWIP, work in progressneeds review, needs approvalTODO, FIXME, XXXworkaround, temporaryRecognizes completed work:
completed, finished, shippedlaunched, resolvedimplemented, integratedTracks developer work patterns:
Detects breaking changes via:
! after type: feat!: breaking changeBREAKING CHANGE: in commit bodyThe dashboard uses a json-render style component catalog. Claude can generate custom dashboard layouts by outputting JSON that maps to these components:
| Component | Purpose |
|---|---|
MetricCard |
Single metric with icon and trend |
ContributorCard |
Team member activity summary |
RepoCard |
Repository activity summary |
PRAlert |
Open PR with status indicator |
BarChart |
Bar chart visualization |
PieChart |
Pie chart visualization |
CommitList |
Recent commits list |
Ask Claude: "Show me a pie chart of commits by contributor" or "Create a dashboard focused on open PRs"
| User Says | Interpretation |
|---|---|
| "What's the team been up to?" | Last 7 days, all repos, all activity |
| "Show me this week's PRs" | Last 7 days, PRs only |
| "Who's committing to one-cloud?" | Last 7 days, one-cloud repos only |
| "Alice's activity this month" | Last 30 days, filter to alice |
| "Open PRs across all repos" | Current open PRs only |
| "What merged today?" | Last 24 hours, merged PRs only |
For automated daily email reports, see AUTOMATION.md.
Quick setup:
The automation script at scripts/generate-report.sh produces an HTML email-ready report.
gh CLI authenticatedaz CLI authenticated with appropriate permissionsGitHub:
gh CLI installed and authenticatedAzure DevOps:
az CLI installed and authenticatedTo modify tracked repositories, update this skill file:
The dashboard normalizes contributor names and applies timezone-aware work pattern analysis. To add or modify mappings, edit the CONTRIBUTOR_CONFIG object in dashboard/app/api/dashboard/route.ts:
const CONTRIBUTOR_CONFIG: Record<string, ContributorConfig> = {
// Travis Edgar - Atlantic Time (UTC-4)
'rustyautopsy': { name: 'Travis Edgar', timezone: -4, tzName: 'Atlantic' },
'tedgar': { name: 'Travis Edgar', timezone: -4, tzName: 'Atlantic' },
// Mahyar - Pacific Time (UTC-8)
'mahyar': { name: 'Mahyar', timezone: -8, tzName: 'Pacific' },
// Jeff Harris - London UK (UTC+0)
'jeharris-eci': { name: 'Jeff Harris', timezone: 0, tzName: 'London' },
};
Timezone offsets (hours from UTC):
| Timezone | Offset | Example Cities |
|---|---|---|
| Pacific | -8 | Los Angeles, Seattle |
| Mountain | -7 | Denver, Phoenix |
| Central | -6 | Chicago, Dallas |
| Eastern | -5 | New York, Atlanta |
| Atlantic | -4 | Halifax, Puerto Rico |
| UK/GMT | 0 | London, Dublin |
| CET | +1 | Paris, Berlin |
This ensures: