Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add Sassy-Dog/sassydog-skills/plugin install sassy-dogWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/sassy-dog/sassydog-skills/pr-shepherd)<a href="https://agentmods.dev/skills/sassy-dog/sassydog-skills/pr-shepherd"><img src="https://agentmods.dev/badge/skills/sassy-dog/sassydog-skills/pr-shepherd/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/sassy-dog/sassydog-skills/pr-shepherd"><img src="https://agentmods.dev/badge/skills/sassy-dog/sassydog-skills/pr-shepherd.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00182 | $0.08775 |
| Opus 5 | $0.00091 | $0.04387 |
| Sonnet 5 | $0.00036 | $0.01755 |
| Haiku 4.5 | $0.00018 | $0.00877 |
Grade A, and why
pr-shepherd scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
So “the poller went quiet” is evidence for rows 1 and 4 only; for rows 2 and 3 the poller reports *pending*. **The row that matters for a merge is not the row the poller disagrees about most loudly.** `merge-shepherd.sh` How it starts
The opening of the file, as written. The whole thing — 212 lines — stays where its author put it; the contents beside it link to each section on GitHub.
PR Shepherd
PR lifecycle mechanics from "PR opened" to "merged and cleaned up": verify mergeable, watch checks, retry transient GitHub failures, merge (or enqueue) greens, serialize coupled PRs, tear down batch worktrees. Works in any GitHub repo; project workflow skills delegate here so the mechanics live in one place.
This skill does NOT decide what to merge — the caller (user or project skill) owns that. It also never auto-rebases a CONFLICTING PR; conflicts are surfaced for a human decision.
Inputs to establish first
From the caller's request (ask if missing and not inferable):
- Repo —
owner/name, or infer from cwd. - PR number(s) — what to shepherd.
- Merge policy — merge queue or direct merge. Project skills state this explicitly; otherwise detect (see
references/merge-queue.md) and confirm a guess rather than acting on it. - Coupled-PR concerns — does the batch touch migrations / codegen / other derived artifacts? (See
references/serialization.md.) - Teardown scope — worktree paths from a batch manifest, if the caller ran parallel sub-agents.
- Stacked PRs — is any PR a layer of a stack? Detected automatically by
scripts/stack-probe.sh, never asked. (Seereferences/stacked-prs.md.)
Workflow
1. Mergeable check — always first
CONFLICTING silently blocks CI from firing ("no checks reported" looks identical to "CI hasn't started"). Check before any watch loop:
gh pr view "$PR" --repo "$REPO" --json mergeable,mergeStateStatus --jq '"\(.mergeable) \(.mergeStateStatus)"'
For more than one PR — or a "where does everything stand" probe — prefer the scripted snapshot over hand-rolled --jq variants; it reuses the poller's type-aware pending predicate and prints the same table + JSON as a watch tick:
REPO="$REPO" bash ${CLAUDE_PLUGIN_ROOT}/skills/pr-shepherd/scripts/poll-prs.sh --once "$PR" # zero PR args = every open PR
Surface CONFLICTING immediately — do not auto-rebase. For generated-file conflicts, point the caller at the regenerate-don't-hand-merge recipe in references/serialization.md.
What ships with it
12 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/merge-queue.md 9.5 KB
- references/serialization.md 4.3 KB
- references/stacked-prs.md 9.7 KB
- references/worktree-teardown.md 7.2 KB
- scripts/gh-retry.sh 2.3 KB runs code
- scripts/merge-shepherd.sh 21 KB runs code
- scripts/poll-prs.sh 6.6 KB runs code
- scripts/poll-queue.sh 9.0 KB runs code
- scripts/pr-failure-log.sh 3.0 KB runs code
- scripts/probe-platform-health.sh 75 KB runs code
- scripts/stack-probe.sh 6.3 KB runs code
- scripts/teardown.sh 16 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 7d ago Changed 1d73b4c2f0d4
- 8d ago Changed c7aab95802fd
- 11d ago First seen · 212 lines · 182 tokens per session scan A fd82110b522f
pr-shepherd is a skill published in the GitHub repository Sassy-Dog/sassydog-skills (0 stars, last pushed 3d ago), licensed Apache-2.0. It adds 182 tokens to every session and 8,775 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
commit
Git commit workflow with precommit hook handling, lint/type checking, README updates, and API reference updates. Use when the user wants to commit changes. Handles precommit hooks that modify files (formatting, linting) by re-staging and retrying. Runs ruff lint and pyright type checks on staged Python files, and…
update-pr
Update an existing pull request with new changes. Use when the user wants to update a PR, push follow-up changes to a PR, refresh a PR description, or sync a PR with latest commits. Triggers on: update pr, update-pr, update the pr, push to pr, refresh pr, sync pr, update pull request.
codex-setup
Initialize sd0x-dev-flow infrastructure for Codex CLI and other non-Claude agents. Generates AGENTS.md, installs the commit-msg hook, copies runner scripts. The pre-push gate is opt-in via --with-push-gate. Use when setting up a new project or after updating skills.
smart-rebase
Smart partial rebase for squash-merge repositories. Auto-detect which commits to keep/drop when base branch was squash-merged into target. Use when: user says 'rebase', 'partial rebase', 'base already merged', 'smart rebase', or /smart-rebase. Not for: simple git rebase (the developer runs it — Claude never executes…
next-step
Change-aware next step advisor. Use when: user asks what to do next, workflow progression is unclear, session just started with dirty worktree. Not for: executing the suggested command (user decides), auto-loop decisions (hooks handle that). Output: findings-based suggestions or session summary with commit seed.
merge-prep
Pre-merge analysis and preparation. Analyzes source branch vs target branch: commit stats, conflict detection, file impact. Analysis-only v1 — outputs report + suggested commands, does not auto-merge. Use when: user says 'merge prep', 'pre-merge', 'merge analysis', or /merge-prep.