Help us improve
Share bugs, ideas, or general feedback.
From exarchos
Resolves merged workflows to completed state: verifies PR merge status, backfills metadata, forces review resolution, and cleans up worktrees/branches. Run via /cleanup or user request.
npx claudepluginhub lvlup-sw/exarchosHow this skill is triggered — by the user, by Claude, or both
Slash command
/exarchos:cleanupThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill uses VCS operations through Exarchos MCP actions (`list_prs`, `get_pr_comments`, etc.).
Resolves merged PR workflows to completed state: verifies merge status, collects metadata, transitions phases, and cleans up worktrees/branches.
Completes a PR-based workflow: merges the pull request, removes the git worktree, and deletes the state file. Part of a multi-phase flow system.
Merges a reviewed PR via squash or rebase, then cleans up branches and worktrees. Handles integration branches and multi-phase merge plans.
Share bugs, ideas, or general feedback.
This skill uses VCS operations through Exarchos MCP actions (list_prs, get_pr_comments, 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.
Resolve merged workflows to completed state in a single operation. Replaces the manual multi-step process of navigating HSM guards after PR stacks merge.
For bulk cleanup of accumulated stale or abandoned workflows (as opposed to resolving a single merged workflow), use @skills/prune-workflows/SKILL.md. That skill invokes exarchos_orchestrate prune_stale_workflows in dry-run mode, displays candidates, and applies after user confirmation. Safeguards automatically skip workflows with open PRs or recent commits.
Rule of thumb: cleanup is per-workflow (one merged feature → completed); prune is bulk (N inactive workflows → cancelled). They are complementary, not alternatives.
Activate this skill when:
/exarchos:cleanup commandRead workflow state to get current phase and metadata:
mcp__plugin_exarchos_exarchos__exarchos_workflow({ action: "get", featureId: "<id>" })
If featureId not provided, use pipeline view to list active workflows:
mcp__plugin_exarchos_exarchos__exarchos_view({ action: "pipeline" })
For each PR associated with the workflow, verify it is merged.
Primary method — VCS MCP action:
exarchos_orchestrate({ action: "list_prs", state: "merged" })
For individual PR details, use exarchos_orchestrate({ action: "get_pr_comments", prId: "<number>" }) or the VCS provider's native API.
Collect from merged PRs:
prUrl: The PR URL (or array of URLs for stacked PRs)mergedBranches: The head branch names that were mergedSafety check: If ANY PR is not merged, abort with clear error message.
For detailed verification guidance, see references/merge-verification.md.
After verifying merge status, run the post-merge regression check:
exarchos_orchestrate({
action: "check_post_merge",
featureId: "<id>",
prUrl: "<url>",
mergeSha: "<sha>"
})
This check is advisory — findings are reported but do not block cleanup. If findings are detected, log them for the user's awareness before proceeding.
Call the MCP cleanup action with collected data:
mcp__plugin_exarchos_exarchos__exarchos_workflow({
action: "cleanup",
featureId: "<id>",
mergeVerified: true,
prUrl: "<url-or-array>",
mergedBranches: ["branch1", "branch2"]
})
This single call:
synthesis.prUrl and synthesis.mergedBranchesapprovedcompleted via universal cleanup pathworkflow.cleanup event to event storeRemove all worktrees associated with the workflow:
# Read worktrees from state (already captured in step 1)
git worktree remove .worktrees/<name>
git worktree prune
Handle gracefully if worktrees are already removed.
Remove merged local branches:
git fetch --prune
git branch -d <merged-branch-1> <merged-branch-2> ...
Output summary:
## Cleanup Complete
**Feature:** <featureId>
**Transition:** <previousPhase> → completed
**PRs merged:** <count>
**Worktrees removed:** <count>
**Branches synced:** ✓
Use dryRun: true to preview what cleanup would do without modifying state:
mcp__plugin_exarchos_exarchos__exarchos_workflow({
action: "cleanup",
featureId: "<id>",
mergeVerified: true,
dryRun: true
})
| Error | Cause | Resolution |
|---|---|---|
| STATE_NOT_FOUND | Invalid featureId | Check pipeline view for active workflows |
| ALREADY_COMPLETED | Workflow already done | No action needed |
| INVALID_TRANSITION | Workflow is cancelled | Cannot cleanup cancelled workflows |
| GUARD_FAILED | mergeVerified is false | Verify PRs are merged before cleanup |
| Don't | Do Instead |
|---|---|
| Use cleanup as escape hatch during implementation | Only use after PRs are merged |
| Skip merge verification | Always verify via GitHub API |
| Manually navigate HSM guards post-merge | Use /exarchos:cleanup |
| Leave worktrees after cleanup | Include worktree removal in process |
The cleanup action auto-emits events — do NOT manually emit:
workflow.cleanup — emitted by the MCP cleanup action for the phase change to completed