From exarchos
Shepherd PRs through CI and reviews to merge readiness. Operates as an iteration loop within the synthesize phase (not a separate HSM phase). Uses assess_stack to check PR health, fix failures, and request approval. Triggers: 'shepherd', 'tend PRs', 'check CI', or /shepherd.
npx claudepluginhub lvlup-sw/exarchosThis skill uses the workspace's default tool permissions.
This skill uses VCS operations through Exarchos MCP actions (`check_ci`, `list_prs`, `merge_pr`, `get_pr_comments`, `add_pr_comment`, etc.).
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
This skill uses VCS operations through Exarchos MCP actions (check_ci, list_prs, merge_pr, get_pr_comments, add_pr_comment, etc.).
These actions automatically detect and route to the correct VCS provider (GitHub, GitLab, Azure DevOps).
No gh/glab/az commands needed — the MCP server handles provider dispatch.
Iterative loop that shepherds published PRs through CI checks and code reviews to merge readiness. Uses the assess_stack composite action for all PR health checks, fixing failures and addressing feedback until the stack is green.
Note: Shepherd is not a separate HSM phase. It operates as a loop within the
synthesizephase. The workflow phase remainssynthesizethroughout the shepherd iteration cycle. Events (shepherd.iteration,ci.status) and theshepherd_statusview track loop progress without requiring a phase transition.
Position in workflow:
/exarchos:synthesize → /exarchos:shepherd (assess → fix → resubmit → loop) → /exarchos:cleanup
^^^^^^^^^ runs within synthesize phase
When mcp__plugin_exarchos_exarchos__exarchos_view pipeline accumulates stale workflows (inactive > 7 days), run @skills/prune-workflows/SKILL.md to bulk-cancel abandoned workflows before starting a new shepherd cycle. Safeguards skip workflows with open PRs or recent commits, so active shepherd targets are never touched. A clean pipeline makes shepherd iteration reporting easier to read and reduces noise in the stale-count view.
Activate when:
/exarchos:shepherd or says "shepherd", "tend PRs", "check CI"/exarchos:synthesize completes and PRs are enqueuedsynthesis.prUrl or artifacts.pr)create_pr already ran)Runbook: Each shepherd iteration follows the shepherd-iteration runbook:
exarchos_orchestrate({ action: "runbook", id: "shepherd-iteration" })If runbook unavailable, usedescribeto retrieve action schemas:exarchos_orchestrate({ action: "describe", actions: ["assess_stack"] })
The shepherd loop repeats until all PRs are healthy or escalation criteria are met. Default: 5 iterations.
At the start of each iteration, query quality hints to inform the assessment:
mcp__plugin_exarchos_exarchos__exarchos_view({ action: "code_quality", workflowId: "<featureId>" })
regressions is non-empty, include regression context in the status reportconfidenceLevel: 'actionable', surface the suggestedAction in the iteration summarygatePassRate < 0.80 for any skill, flag degrading quality trendsThis step ensures the agent acts on accumulated quality intelligence before polling individual PRs.
Invoke the assess_stack composite action to check all PR dimensions at once:
mcp__plugin_exarchos_exarchos__exarchos_orchestrate({
action: "assess_stack",
featureId: "<id>",
prNumbers: [123, 124, 125]
})
The composite action internally handles:
gate.executed events per CI check (feeds CodeQualityView) and ci.status events per PR (feeds ShepherdStatusView). See references/gate-event-emission.md for the event format.Review the returned actionItems and recommendation:
| Recommendation | Action |
|---|---|
request-approval | Skip to Step 4 |
fix-and-resubmit | Proceed to Step 2 |
wait | Inform user, pause, re-assess after delay |
escalate | See references/escalation-criteria.md |
Before iterating over individual action items, classify them so the loop
knows which to fix inline vs. delegate. Call classify_review_items on
the assessment's actionItems (the comment-reply subset is what the
classifier groups by file; CI-fix and review-address items are passed
through unchanged):
mcp__plugin_exarchos_exarchos__exarchos_orchestrate({
action: "classify_review_items",
featureId: "<id>",
actionItems: <actionItems from assess_stack>
})
The result returns groups: ClassificationGroup[] with a recommendation
per group: direct (handle inline), delegate-fixer (spawn the fixer
subagent for batched/HIGH-severity work), or delegate-scaffolder
(cheap subagent for doc nits). Iterate the groups in order, applying
per-group strategy, then consult references/fix-strategies.md for
detailed per-issue-type instructions.
Remediation event protocol (FLYWHEEL):
BEFORE applying a fix, emit remediation.attempted:
mcp__plugin_exarchos_exarchos__exarchos_event({
action: "append",
stream: "<featureId>",
event: {
type: "remediation.attempted",
data: { taskId: "<taskId>", skill: "shepherd", gateName: "<failing-gate>", attemptNumber: <N>, strategy: "direct-fix" }
}
})
Apply the fix (CI failure, review comment response, stack restack).
AFTER the next assess confirms the fix resolved the gate, emit remediation.succeeded:
mcp__plugin_exarchos_exarchos__exarchos_event({
action: "append",
stream: "<featureId>",
event: {
type: "remediation.succeeded",
data: { taskId: "<taskId>", skill: "shepherd", gateName: "<gate>", totalAttempts: <N>, finalStrategy: "direct-fix" }
}
})
These events feed selfCorrectionRate and avgRemediationAttempts metrics in CodeQualityView.
Action item types:
| Type | Strategy |
|---|---|
ci-fix | Read logs, reproduce locally, fix, commit to stack branch |
comment-reply | Use actionItem.reviewer, normalizedSeverity, file, line, and raw (full original comment) to compose a response. Provider adapters under servers/exarchos-mcp/src/review/providers/ populate the input fields per #1159 — no manual tier parsing needed. Posting: PR-level summary comments use the provider-agnostic add_pr_comment orchestrate action; per-thread inline replies currently require the platform-specific MCP (e.g. mcp__plugin_github_github__add_reply_to_pull_request_comment for GitHub) until VcsProvider gains a thread-reply primitive — see #1165 for tracking. |
review-address | Fix code for CHANGES_REQUESTED, reply to each thread |
restack | Run git rebase origin/<base>, verify with exarchos_orchestrate({ action: "list_prs" }) |
escalate | Consult references/escalation-criteria.md |
Every inline review comment must get a reply. The goal is that a human scanning the PR sees every thread has a response.
After fixes are applied, resubmit the stack:
git push --force-with-lease
Re-enable auto-merge if needed:
exarchos_orchestrate({ action: "merge_pr", prId: "<number>", strategy: "squash" })
Return to Step 1 for the next iteration. Track iteration count against the limit (default 5). If the limit is reached without reaching request-approval, escalate per references/escalation-criteria.md.
When assess_stack returns recommendation: 'request-approval' (all checks green, all comments addressed):
Request review via GitHub MCP:
mcp__plugin_github_github__update_pull_request({
owner: "<owner>", repo: "<repo>", pullNumber: <number>,
reviewers: ["<approver>"]
})
Fallback (if MCP token lacks write scope): gh pr edit <number> --add-reviewer <approver>
Report to user:
## Ready for Approval
All CI checks pass. All review comments addressed.
Approval requested from: <approvers>
PRs:
- #123: <url>
- #124: <url>
Run `/exarchos:cleanup` after merge completes.
Track shepherd progress via workflow state:
Initialize:
mcp__plugin_exarchos_exarchos__exarchos_workflow({
action: "set",
featureId: "<id>",
updates: {
"shepherd": {
"startedAt": "<ISO8601>",
"currentIteration": 0,
"maxIterations": 5,
"approvalRequested": false
}
}
})
After each iteration: Update currentIteration, record assessment summary and actions taken. On approval: set approvalRequested: true with timestamp and approver list.
For the full transition table, consult @skills/workflow-state/references/phase-transitions.md.
The shepherd skill operates within the synthesize phase and does not drive phase transitions directly.
Use exarchos_workflow({ action: "describe", actions: ["set", "init"] }) for
parameter schemas and exarchos_workflow({ action: "describe", playbook: "feature" })
for phase transitions, guards, and playbook guidance. Use
exarchos_event({ action: "describe", eventTypes: ["shepherd.iteration", "ci.status", "remediation.attempted"] })
for event data schemas before emitting events.
Before emitting any shepherd events, consult references/shepherd-event-schemas.md for full Zod schemas, type constraints, and example payloads. Use exarchos_event({ action: "describe", eventTypes: ["shepherd.iteration", "ci.status"] }) to discover required fields at runtime.
| Event | When | Purpose |
|---|---|---|
shepherd.started | On skill start (emitted by assess_stack) | Audit trail |
shepherd.iteration | After each assess cycle | Track progress |
gate.executed | Per CI check (emitted by assess_stack) | CodeQualityView -- gate pass rates |
ci.status | Per CI check result | ShepherdStatusView -- PR health tracking |
remediation.attempted | Before applying a fix | selfCorrectionRate metric |
remediation.succeeded | After fix confirmed | avgRemediationAttempts metric |
shepherd.approval_requested | On requesting review | Audit trail |
shepherd.completed | On merge detected (emitted by assess_stack) | Audit trail |
Consult these references for detailed guidance:
references/fix-strategies.md — Fix approaches per issue type, response templates, remediation event emission detailsreferences/escalation-criteria.md — When to stop iterating and escalate to the userreferences/gate-event-emission.md — Event format for gate.executed (now emitted by assess_stack)references/shepherd-event-schemas.md — Full Zod-aligned schemas for all four shepherd lifecycle eventsWhen iteration limits are reached or CI repeatedly fails, consult the escalation runbook:
exarchos_orchestrate({ action: "runbook", id: "shepherd-escalation" })
This runbook provides structured criteria for deciding whether to keep iterating, escalate to the user, or abort the shepherd loop based on iteration count, CI stability, and review status.
| Don't | Do Instead |
|---|---|
| Poll CI/reviews directly | Use assess_stack composite action |
| Force-merge with failing CI | Fix the failures first |
| Ignore inline comments | Address every thread with a reply |
| Loop indefinitely | Respect iteration limits, escalate |
| Skip remediation events | Emit remediation.attempted / remediation.succeeded for every fix |
| Push directly to main | All fixes go through stack branches |
After approval is granted and PRs merge, run /exarchos:cleanup to resolve the workflow to completed state.