merged-prs
Skill0 starsChanged 3 months agoMITView on GitHub
Summarize PRs merged across all Azure DevOps projects within a time window. Default 24 hours; accepts overrides like `48h` or `7d`. Use when the user asks "what got merged" / "PRs from the last X hours/days" / "what shipped recently".
In this repository27 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- buildSkill
- cleanup-worktreeSkill
- db-querySkill
- db-searchSkill
- dd-errorsSkill
- devops-wiki-updateSkill
- devops-workitem-createSkill
- devops-workitem-readSkill
- devops-workitem-updateSkill
- finalize-taskSkill
- find-codeSkill
- merge-mainSkill
- panel-review-fixSkill
- panel-reviewSkill
- prSkill
- rebase-mainSkill
- starttaskSkill
- testSkill
- ask-codexSkill
- ask-geminiSkill
- councilSkill
- dailySkill
- find-sessionSkill
- mm-notifySkill
- optimize-promptSkill
- qSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 75
Don't fetch PR descriptions/diffs by default — title + author is enough for the overview.
- Very specific: line 78
If the user is on a feature branch and only cares about one repo, this skill is overkill — point them at git log --since=...
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Merged PRs Summary
Summarize completed (merged) pull requests across the user's Azure DevOps server within a time window.
Arguments
$ARGUMENTS — optional time window. Examples: 24h, 48h, 7d, 3d. Defaults to 24h when empty.
Parse it as <number><unit> where unit is h (hours) or d (days). Convert days to hours (1d = 24h).
Azure DevOps server
- Base URL:
https://devops.example.com - Auth: Windows Integrated (curl
--negotiate -u :) - Projects: discover at runtime via
/DefaultCollection/_apis/projects?api-version=7.0. e.g.MyProject(primary) andSandbox.
Steps
- Parse the window. Determine the cutoff datetime as
now - <window>. If$ARGUMENTSis empty or unparseable, fall back to 24 hours. - List projects.
Extract projectcurl -s -L --negotiate -u : "https://devops.example.com/DefaultCollection/_apis/projects?api-version=7.0"namevalues from the JSONvaluearray. - Fetch completed PRs per project. For each project name:
The API returns most-recent-first. If the oldest PR returned is still newer than the cutoff, increasecurl -s -L --negotiate -u : "https://devops.example.com/DefaultCollection/<ProjectName>/_apis/git/pullrequests?searchCriteria.status=completed&api-version=7.0&\$top=200"$topand re-fetch (some windows like7dwill need 500+). - Filter by
closedDate— keep PRs whereclosedDate >= cutoff. Note:closedDateis ISO-8601 with fractional seconds and aZsuffix; parse robustly. - Group by repository (
p['repository']['name']). Within each repo, list PRs asPR <id> | <author display name> | <title>. - Render the summary in this shape:
- Lead line: total PR count across all projects + the window.
- Sections by repo, sorted by PR count descending. Use tiered headers (Heavy / Moderate / Light / Singletons) when the spread justifies it; otherwise just one flat list.
- Within each repo entry, group multiple PRs by the same author when natural ("Jane Doe refactoring (X, Y, Z)") rather than listing each as a bare bullet.
- Skip projects with zero PRs in window, but mention them briefly ("Sandbox had none") so the user knows they were checked.
- End with a short Themes paragraph: cross-cutting patterns (e.g. "solution-structure cleanup dominates", "the BI team is mid-migration to a new scheduler"), or "No obvious cross-repo incident" if nothing stands out.
Python one-liner for filtering/grouping
The data is easier to handle in Python than jq on Windows. Pattern that works:
curl -s ... | python -c "
import sys, json
from datetime import datetime, timedelta, timezone
from collections import defaultdict
d = json.load(sys.stdin)
cutoff = datetime.now(timezone.utc) - timedelta(hours=<N>)
prs = [p for p in d['value']
if datetime.fromisoformat(p['closedDate'].replace('Z','+00:00').split('.')[0]+'+00:00') >= cutoff]
by_repo = defaultdict(list)
for p in prs: by_repo[p['repository']['name']].append(p)
for repo, items in sorted(by_repo.items(), key=lambda x: -len(x[1])):
print(f'=== {repo} ({len(items)}) ===')
for p in items:
print(f\" PR {p['pullRequestId']} | {p['createdBy']['displayName']} | {p['title']}\")
"Notes
- Don't fetch PR descriptions/diffs by default — title + author is enough for the overview. Only drill into a specific PR if the user asks "tell me more about PR X".
- The PR
titleis usually the merge commit subject (DevOps strips theMerged PR <id>:prefix on the web UI but the API title is clean). - Windows curl handles the URL escaping fine, but the
$topquery param must be escaped as\$topin bash to avoid shell expansion. - If the user is on a feature branch and only cares about one repo, this skill is overkill — point them at
git log --since=...instead.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

