muster
Skill1 starsChanged 51 days agoApache-2.0View on GitHub
Have the AI report actionable open-PR state across every repo the connected GitHub account owns — failing/pending checks, merge conflicts, unresolved review threads — grounded in live data, not one repo at a time. Use when the user says muster, asks for a portfolio status, wants to know what's actionable across all their repos, or asks "what needs my attention today across my repos".
3 other projects use a version of this.
Adopted by
Most recently taken up by
- howells/skillstheir own version, first seen Nov 6, 2026
- maximilianfalco/messhalltheir own version, first seen Oct 11, 2026
- olcayseygan/crumoratheir own version, first seen Oct 2, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- howells/skills★ 5same name
- maximilianfalco/messhall★ 1same name
- olcayseygan/crumora★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 7 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Use this skill when the user wants a status pass across their whole GitHub account, not just the current repo — every other status skill …
- Distinctive: line 37
Stop. Never touch a PR/issue — this skill only reads.
- Very specific: line 47
Not permission to act on anything it finds — a failing check or an unresolved finding is information for the chief to route to ship, roast, …
- Distinctive: line 54
Run when the user explicitly asks for a muster, a portfolio status, what's actionable across their repos, or "what needs attention today" …
- Very specific: line 57
Do not run automatically; every other status-reporting skill here (runes, reckoning, plunder, watchtower) is invoke-on-purpose, and this …
- Very specific: line 124
Check/status rollup via pull_request_read method get_check_runs, paginating through every page.
- Distinctive: line 239
Keep it to what's actionable — a clean repo gets counted, not narrated.
- Distinctive: line 262
Never touch a PR or issue, resolve a thread, or post a reply as part of this skill — it only reads.
- Very specific: line 264
Never walk closed or merged PR history — that's reckoning/plunder's job, not this skill's.
- Distinctive: line 266
Never report a repo's or PR's check as "clean" when the underlying query didn't actually complete — report it as unverified instead of …
- Very specific: line 269
Never expand scope to org-owned repos the account doesn't personally own — affiliation=owner only, matching this skill's own stated scope.
- Very specific: line 274
Stop and say so if gh isn't installed or authenticated — repo enumeration has no MCP path in this session, so there's no fallback left to …
- Distinctive: line 277
Stop and say so if repo enumeration itself fails or can't be paginated to completion — don't report a partial repo list as the whole …
- Very specific: line 282
Stop after presenting the summary.
- Distinctive: line 294
If blocked, drop the orc voice and state the blocker plainly.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Muster Workflow
Use this skill when the user wants a status pass across their whole GitHub
account, not just the current repo — every other status skill here
(runes, watchtower, reckoning, plunder) is scoped to one repo.
Contents
- At A Glance
- What This Is Not
- Trigger Rules
- Requirements
- Prerequisites
- Default Path
- Summary Format
- Guardrails
- Stop Conditions
- Handoff
- Response Examples
At A Glance
- Enumerate every repo the connected account personally owns (not org membership), excluding forks and archived repos.
- For each repo's open pull requests, check failing/pending checks, merge
conflicts, and unresolved review-thread counts — the same live checks
hooks/watchtower-nudge.shalready runs for one branch's PR, fanned out across every open PR in every repo. - Report only what's actionable, the same "quiet unless there's something
to say" instinct
watchtoweruses — not a wall of "repo X: all clear" lines. - Stop. Never touch a PR/issue — this skill only reads.
What This Is Not
- Not
watchtower:watchtoweris a one-line ambient nudge for the current repo's current branch; Muster is an invoked, multi-repo report covering every open PR across the whole account. - Not
reckoning/plunder: both are single-repo historical reports (every PR ever, open/closed/merged). Muster looks at live, open-PR state only, across many repos — it does not walk closed or merged history anywhere. - Not permission to act on anything it finds — a failing check or an
unresolved finding is information for the chief to route to
ship,roast, orlandon a specific repo, not something this skill acts on itself.
Trigger Rules
- Run when the user explicitly asks for a muster, a portfolio status, what's actionable across their repos, or "what needs attention today" across more than the current repo.
- Do not run automatically; every other status-reporting skill here
(
runes,reckoning,plunder,watchtower) is invoke-on-purpose, and this one is no different — this is explicitly not a second ambient hook.
Requirements
ghinstalled and authenticated. Repo enumeration needsgh api --paginate user/repos, since no MCP tool in this session exposes "every repo I own" as a direct list —search_repositoriesis a search index (queryuser:<login>), not the authoritative access list, and can lag or miss private repos depending on token scope. Per-PR checks still prefer the GitHub MCP connector when available, falling back toghthe same as every other skill.- Without
ghauthenticated, stop and say the muster can't run rather than reporting a partial or single-repo result as the whole portfolio. - This flow assumes
ghis authenticated as a user-account token (a personal access token or OAuth token), sincegh api userandgh api user/reposare user-to-server endpoints. A GitHub App installation token can't call either at all — it authenticates as the installation, not a user, and both calls would fail outright rather than silently narrow. That failure is caught by the existing "stop ifghisn't authenticated" path; this skill doesn't implement a separate installation-token path (GET /installation/repositoriesunder app-installation auth), so an installation token is out of scope here, not a case that produces a misleadingly narrow result. - A fine-grained personal access token, by contrast, does work with
/userand/user/repos, but can be scoped to a chosen subset of repos rather than every repo the account owns — the response returns only what the token can see, with no field flagging that it's partial. This skill has no way to independently confirm a PAT's real scope, so it can't detect this case; note it as a caveat in the report (see Summary Format) rather than silently presenting a scoped token's count as the whole portfolio.
Prerequisites
- Confirm the connected identity via
get_mewhen MCP is available. Repo enumeration always goes throughghregardless (no MCP tool exposes it directly — see below), so also rungh api user --jq .loginand compare it againstget_me's login before enumerating. If they differ, the account whose repos get enumerated isn't the one the report would label as "Account" — stop and surface the mismatch rather than silently reporting one identity's login against another identity's repos. When MCP is unavailable,gh api user --jq .loginis the only identity check and needs no cross-check against itself. - Enumerate every repo:
gh api --paginate --method GET user/repos -f affiliation=owner --jq '.[] | select(.fork==false and .archived==false) | {name, owner: .owner.login, full_name}'. The explicit--method GETmatters here, not just style:gh apiswitches its default method from GET to POST the moment any-f/-Ffield is present, andPOST /user/reposcreates a new repository rather than listing them — the opposite of this skill's read-only guarantee. Page through every page the same wayreckoning's owngh api --paginatefallback does — a single page under-covers an account whose repo count exceeds one page. This lookup is unverified in this repo until exercised live against a real account; confirm the shape of a real response before trusting it at scale, the same cautionplunder's new thread-attribution lookup got. - For each enumerated repo, list its open pull requests (
list_pull_requestswithstate: open, orgh api --paginate "repos/$owner/$repo/pulls?state=open"when MCP is unavailable), paginating through every page of MCP results too, not only theghfallback — a repo with more open PRs than one page holds still needs every one counted. Include each PR'sdraftfield — it comes back in the same listing call, no separate fetch needed. A repo with zero open PRs needs no further check — move on without reporting it. - For each open PR, gather the same live facts
hooks/watchtower-nudge.shalready checks for one PR:- Check/status rollup via
pull_request_readmethodget_check_runs, paginating through every page. A run'sconclusion(only set oncestatusiscompleted) offailure,cancelled, ortimed_outis a failing check;action_requiredandstaleare actionable the same way — GitHub uses both for a run that needs attention before the PR can proceed, not a passive wait state. Astatusofqueued,in_progress,requested,waiting, orpendingis still pending. Astatusofcompletedwithconclusionsuccess,neutral, orskippedis a passing run — contributes nothing to "actionable" or "unverified," unlike every other combination above. Only astatus/conclusioncombination none of these three groups (failing, pending, passing) names — including a value GitHub adds later — is reported as unverified, never silently folded into "no detected issues"; an unrecognized state is exactly the kind of gap this skill's own fail-closed rule exists to catch.get_status(the older combined-status API) doesn't distinguish any of the above from a plain failure and can't see individual check-run states, so it isn't a real substitute: whenget_check_runsitself isn't available, or its own pagination fails partway through, report the PR's checks as unverified rather than falling back toget_statusor a partial page as if either gave equivalent information. get_check_runsonly sees GitHub Checks API entries (GitHub Actions and Checks-API-integrated apps). A CI system that posts through the older Statuses API instead — a commit status, not a check run — never shows up there at all, so also callpull_request_readmethodget_statuson the head commit as an additional source, not a replacement. Check the status count first, not juststatealone: verified live (gh api repos/.../commits/<sha>/status) that GitHub's combined-status endpoint returnsstate: "pending"even whentotal_countis0— a repo with no legacy Statuses-API integration at all (the common case; this repo included) would otherwise get every PR flagged as having a pending check forever. Only readstateoncetotal_countis greater than zero:failure/erroris a failing check,pendingis a pending check,successis passing and contributes nothing to either bucket. Atotal_countof0also contributes nothing — there's no legacy status to report on. Any otherstatevalue withtotal_countgreater than zero — a combination none of the above names — is reported as unverified, the same fail-closed catch-allget_check_runsandmergeable_statealready use. This is additive to theget_check_runsclassification above, which stays the primary, more granular source.- Mergeable state (
mergeable_state/mergeStateStatus) — compare case-insensitively, since the REST field returns lowercase (dirty) and the GraphQL field returns uppercase (DIRTY), and this skill reads either depending on which tool answered.dirty/DIRTYflags a real conflict;unknown/UNKNOWNmeans GitHub hasn't finished computing mergeability yet and is reported as unverified, not assumed clean;draft/DRAFT(some mergeable-state responses report this directly, in addition to the PR's owndraftfield already captured above) excludes the PR from "no detected issues" the same way thedraftfield does;unstable/UNSTABLEstays on the checks/status path above rather than being treated as its own merge-conflict category;blocked/BLOCKED(branch protection requires a status check or review this PR hasn't met) is actionable on its own — GitHub's response doesn't say which requirement is unmet, so report it as blocked when a reason can be inferred from the checks/thread data already gathered, or unverified when it can't, but never let it fall through unclassified.cleanandhas_hooks/HAS_HOOKS(a legacy pre-receive-hooks status, informational only) both contribute nothing to either bucket. Any other value none of this list names — including one GitHub adds later — is reported as unverified, the same fail-closed catch-all the check-run classification above already uses. - Unresolved review-thread count via
pull_request_readmethodget_review_comments, paginating through every page of threads (or the same paginated GraphQLreviewThreads(first: 100, after: $cursor)loop the hook script andreckoningboth already use — nested per-thread comment pagination isn't needed, onlyis_resolved/isResolvedon each thread's first page), counting threads where that field is false. This counts every unresolved thread on the PR, not only ones aroastreview posted — the same conventionhooks/watchtower-nudge.shalready uses (it has no per-thread provenance filter either). Report it as "unresolved review threads," not "roast findings," so an ordinary human review comment isn't mislabeled as one. Only report a PR's unresolved count as confirmed when this check actually completed — a failed or incomplete thread query means "unverified," never "assume zero." If the connected GitHub MCP server has a restricted or "lockdown" mode enabled that filters its own responses, this skill has no way to detect that from inside a query result — a filtered query can return successfully while still under-reporting threads. This is a caveat on the same "confirmed complete" claim, not a separate check to add; there's nothing this skill's own instructions can do to detect or work around a connector-level restriction it isn't told about.
- Check/status rollup via
- A repo or PR whose check fails partway through (a listing page errors, a thread query can't complete) is reported as unverified for that one repo/PR, not silently dropped or assumed clean — the muster continues to the next repo rather than aborting the whole pass for one failure.
Default Path
- Confirm identity (see Prerequisites).
- Enumerate every owned, non-fork, non-archived repo.
- For each repo, list open PRs; skip repos with none.
- For each open PR, gather checks/status, mergeable state, and unresolved review-thread count per Prerequisites.
- Classify each PR: failing checks, pending checks, merge conflict,
unresolved review threads, draft, no detected issues, or unverified (a
check that couldn't complete). Draft is its own classification, not a
note folded into another one: a draft PR reports as draft even when
every other check comes back clean, and belongs in the Actionable list
(see Summary Format) rather than silently landing in the clean-repo
count, where a "report a draft PR's draft state" instruction with
nowhere in the output to actually put it would otherwise go unfollowed.
"No detected issues" reports only what this skill actually checked — it
is not a land-readiness guarantee. This pass does check draft state (see
Prerequisites); what it does not check, unlike
land's own preconditions, is required-review approval status — a PR still missing a required approval can otherwise show no detected issues under the checks this skill runs. - Report only repos/PRs with something actionable or unverified, per Summary Format — omit clean repos from the listed detail, but still count them in the totals.
Summary Format
Keep it to what's actionable — a clean repo gets counted, not narrated.
- Account — the connected login, and how many repos were counted (owned, non-fork, non-archived) vs. how many had at least one open PR.
- Actionable — one line per PR that needs attention: repo, PR number/URL, and why (failing check, pending check, merge conflict, blocked by branch protection, N unresolved review threads, draft) — grouped by repo. A draft PR lists here even when every other check is clean.
- Unverified — any repo or PR whose check couldn't complete, reported separately from a confirmed-clean result.
- Clean — a count only ("N repos, M open PRs, all clean") — no per-PR detail for PRs with nothing actionable.
- Coverage caveat — a standing note that the repo count reflects what the authenticated token can see; a scoped fine-grained personal access token can silently narrow that below every repo the account actually owns, and this skill has no way to detect that case. A GitHub App installation token isn't a silent-narrowing case — it can't authenticate this flow at all (see Requirements) — so it doesn't belong in this caveat.
Guardrails
- Never touch a PR or issue, resolve a thread, or post a reply as part of this skill — it only reads.
- Never walk closed or merged PR history — that's
reckoning/plunder's job, not this skill's; Muster stays scoped to open PRs only. - Never report a repo's or PR's check as "clean" when the underlying query didn't actually complete — report it as unverified instead of assuming the best case.
- Never expand scope to org-owned repos the account doesn't personally own
—
affiliation=owneronly, matching this skill's own stated scope.
Stop Conditions
- Stop and say so if
ghisn't installed or authenticated — repo enumeration has no MCP path in this session, so there's no fallback left to try. - Stop and say so if repo enumeration itself fails or can't be paginated to completion — don't report a partial repo list as the whole portfolio.
- A failure scoped to one repo or PR's checks (not enumeration itself) doesn't stop the whole pass — report that one item as unverified and continue, per Prerequisites.
- Stop after presenting the summary; do not proceed into
ship,roast,land, or any mutation on any repo without the user separately asking for it, naming that repo.
Handoff
- Unless the user asked for plain output, open with a fresh one-line phrase
in the orc voice, speaking as the Warden from
context/personality.md(the target repo's copy when it exists, otherwise${CLAUDE_PLUGIN_ROOT}/context/personality.md). If they did, open with the plain summary instead. - Present the summary per Summary Format.
- If blocked, drop the orc voice and state the blocker plainly.
Response Examples
Opening lines are samples of the orc voice; write a fresh one each time.
Actionable state found (illustrative — actual output names real repos/PRs):
🧭 Hrrm. Rode the whole realm: two strongholds need the chief's eye. ✨
Account: <login> (N repos counted, M with at least one open PR)
Actionable:
- <owner>/<repo-a> — PR #12: failing check `test`
- <owner>/<repo-b> — PR #7: 2 unresolved review threads
- <owner>/<repo-d> — PR #4: draft
Unverified: <owner>/<repo-c> — PR #3: review-thread check didn't complete
Clean: 6 repos, 9 open PRs, all clean
Coverage: reflects what the authenticated token can seeWhole portfolio clean:
🧭 Hah! Every banner flies clean across the realm.
Account: <login> (N repos counted, M with at least one open PR, all clean)Blocked, no gh access:
⚠️ Muster is blocked: gh isn't installed or authenticated, and no MCP tool
in this session lists every repo the account owns. No pass was performed.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.

