Install any skill in seconds. Free to start, no credit card required.
Get Started Free →hashgraph-online/dispatcher
Use when you want the orchestrator to pick the next repo to work on across your whole portfolio — it enumerates candidate repos below the confinement root, resolves free/busy from each repo's session.lock lease, ranks the FREE ones by backlog priority × staleness × readiness, recommends the single most worthwhile one via AskUserQuestion, atomically claims it, and routes you to the chosen entry command. Triggers: "what should I work on next", "dispatch me to a repo", "pick the next project", "run
Passed 14 of 17 test cases with the skill, and 5 of 17 without it.
and 13 more in the full report
12 fixed6 passed either way4 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 11 test cases the skill fixed. Same model, same prompt, with and without the skill.
An operator wants to scan portfolio candidate repositories, override the default scan root directory to `/workspace/custom`, and output raw JSON without displaying human-readable tables. What exact CLI command line should be executed?
| Checked | Without skill | With skill |
|---|---|---|
| Executes `node scripts/lib/dispatcher/cli.mjs --json --start-dir /workspace/custom`. | Missed | Passed |
The instructions your model reads when the skill loads.
Cross-repo autopilot front-door — enumerate → rank → owner-AUQ → atomic claim → route. Read-only until the operator confirms; the only mutating step is the atomic
session.lockclaim, and it happens BEFORE any launch.
The dispatcher answers one question: "of all my repos, which is the most worthwhile to work on right now, and is it free?" It scans the confinement-root children, resolves each repo's free/busy status from its session.lock v2 lease (same lease semantics as the vault-status board), ranks only the FREE ones by priority × staleness × readiness, and recommends the single best one. You confirm via a picker, it claims the lease atomically (winning the race or excluding-and-re-ranking on a loss), then routes you to the entry command for that repo. Busy repos are listed-as-such, never selected.
/session, /plan, or /discovery directly in that repo./portfolio (gitlab-portfolio), not the dispatcher.gitlab-ops.AskUserQuestion (unavailable in dispatched agents; see .claude/rules/ask-via-tool.md AUQ-004).Run the read path (non-mutating). Either invoke the CLI directly or call runDispatch from the module:
node scripts/lib/dispatcher/cli.mjs --json
The JSON object has keys { candidates, free, ranked, warnings, recommended }:
candidates — every repo found below the confinement root (busy ones LISTED, not dropped).free — the subset with no live lease (free === true).ranked — the free candidates sorted DESC by score; ranked[0] is the recommendation.recommended — ranked[0] or null (no free candidates).warnings — human-readable degradation notes (glab/gh missing, host probe failed). Surface every warning to the operator — they explain why a repo was ranked on partial signals.Ranking combines three signals per repo (implementation: scripts/lib/dispatcher/rank.mjs): backlog priority (critical/high counts), staleness (days since the last completed session — older = more worthwhile, capped at 90d), and readiness (CI status × host resource verdict — only ever dampens). A null priority (glab/gh missing) is ranked on staleness × readiness alone with a warning; the dispatcher NEVER blocks on a missing CLI.
test cases passed, vs 5 / 17 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.