Loading...
Loading...
Interactively prune stale non-terminal workflows from the pipeline. Use when the user says 'prune workflows', 'clean stale workflows', 'pipeline cleanup', or runs /prune. Runs a dry-run preview, displays candidates with staleness and safeguard skips, prompts the user to proceed/abort/force, then bulk-cancels approved workflows with a workflow.pruned audit event. Safeguards skip workflows with open PRs or recent commits unless force is set.
npx skill4agent add lvlup-sw/exarchos prune-workflowsghglabazprune_stale_workflowsworkflow.prunedworkflow.cancelled/prunemcp__exarchos__exarchos_view({ action: "pipeline" })ghgitdryRun: truemcp__exarchos__exarchos_orchestrate({
action: "prune_stale_workflows",
args: {
dryRun: true
}
}){
candidates: [
{ featureId: string, phase: string, workflowType: string, stalenessMinutes: number }
],
skipped: [
{ featureId: string, reason: "open-pr" | "active-branch" }
]
}thresholdMinutesincludeOneShotoneshottrueforce## Prune Candidates (3)
| Feature ID | Type | Phase | Stale (min) |
|---|---|---|---|
| feat-old-experiment | feature | implementing | 14430 |
| oneshot-typo-fix | oneshot | plan | 9120 |
| debug-flaky-test | debug | investigate | 8650 |
## Skipped by Safeguards (2)
| Feature ID | Reason |
|---|---|
| feat-active-pr | open-pr |
| feat-recent-work | active-branch |candidates.length === 0skipped.length === 0No stale workflows to prune. Pipeline is clean.
proceed -- prune the listed candidates (skipped workflows stay) abort -- exit without changes force -- bypass safeguards and prune skipped workflows too
proceeddryRun: falsethresholdMinutesincludeOneShotmcp__exarchos__exarchos_orchestrate({
action: "prune_stale_workflows",
args: {
dryRun: false
}
})pruned{
candidates: [...],
skipped: [...],
pruned: [
{ featureId: string, previousPhase: string }
]
}prunedcancelledworkflow.prunedforceforce: trueworkflow.prunedskippedSafeguards: [...]mcp__exarchos__exarchos_orchestrate({
action: "prune_stale_workflows",
args: {
dryRun: false,
force: true
}
})skippedabort## Prune Complete
**Pruned:** 3 workflows transitioned to cancelled
**Skipped:** 2 workflows preserved by safeguards
**Force bypass:** no
### Pruned Workflows
- feat-old-experiment (was: implementing)
- oneshot-typo-fix (was: plan)
- debug-flaky-test (was: investigate)force### Safeguards Bypassed
- feat-active-pr: open-pr
- feat-recent-work: active-branch| Safeguard | Behavior | Reason key |
|---|---|---|
| Open PR | Skip if | |
| Recent commits | Skip if | |
branchNameforce: trueworkflow.pruned| Don't | Do Instead |
|---|---|
| Skip the dry-run step | Always start with |
| Auto-confirm without showing the table | Render the candidate table and wait for explicit user input |
Use | Reserve |
Manually call | Use this skill -- it batches the cancel loop and emits the |
| Run on every session | Pruning is a maintenance operation; run when pipeline accumulation is observable |
> /prune
## Prune Candidates (2)
| Feature ID | Type | Phase | Stale (min) |
|---|---|---|---|
| feat-old-spike | feature | plan | 12880 |
| oneshot-readme-tweak | oneshot | implementing | 9700 |
## Skipped by Safeguards (0)
(none)
Proceed? (proceed/abort/force)
> proceed
## Prune Complete
**Pruned:** 2 workflows transitioned to cancelled
**Skipped:** 0
**Force bypass:** no
### Pruned Workflows
- feat-old-spike (was: plan)
- oneshot-readme-tweak (was: implementing)> /prune
## Prune Candidates (1)
| Feature ID | Type | Phase | Stale (min) |
|---|---|---|---|
| feat-stale-no-pr | feature | implementing | 11200 |
## Skipped by Safeguards (1)
| Feature ID | Reason |
|---|---|
| feat-stale-with-pr | open-pr |
Proceed? (proceed/abort/force)
> force
## Prune Complete
**Pruned:** 2 workflows transitioned to cancelled
**Skipped:** 0
**Force bypass:** yes
### Pruned Workflows
- feat-stale-no-pr (was: implementing)
- feat-stale-with-pr (was: implementing)
### Safeguards Bypassed
- feat-stale-with-pr: open-pr> /prune
No stale workflows to prune. Pipeline is clean.mcp__exarchos__exarchos_orchestrate({
action: "describe",
actions: ["prune_stale_workflows"]
})prune_stale_workflowsworkflow.cancelledhandleCancelworkflow.prunedtriggeredBy: 'manual'skippedSafeguards_eventsworkflow.pruned