spacedock-dev/spacedock/fo-dispatch-recovery
Claude Code and agent skill by spacedock-dev/spacedock
- community
Checking that the SKILL.md file is still in the repository.
Claude dispatch failure recovery — Break-Glass Manual Dispatch (the manual `Agent()` template) and Context Budget Failure/Dead Ensign Handling (the budget-unavailable stderr conditions, the recovery clause, dead-ensign bookkeeping). Read ONLY at its resident triggers inside `claude-fo-dispatch.md` — a non-zero or unavailable `spacedock dispatch build` (Break-Glass); or a budget-fail/zombie/dead-ensign replacement dispatch, including the dispatch-failure retry rung's fresh `-retry` re-dispatch under dead-ensign handling (Context Budget) — never at boot, never on the happy path.
Install
npx vskill@latest install spacedock-dev/spacedock/fo-dispatch-recoverySKILL.md
First Officer Dispatch Recovery (Claude)
The two Claude dispatch exception bodies, each read only at its own failure trigger in claude-fo-dispatch.md — never at boot, never on a session where dispatch never fails.
Break-Glass Manual Dispatch
The resident trigger line already covers the first action (report the helper failure — command, exit code, stderr — to the captain before proceeding). The dispatch mode selected before dispatch build remains authoritative: do not probe another transport, retry in the other mode, or turn a selected bare dispatch into a named worker. Populate {numbered checklist} with the output of «dispatch.checklist»(entity, stage); do not rebuild its rules here. In either arm, include model="{effective_model}" only when an effective model is set.
For selected bare mode, use this blocking call. Omit name and team_name, and pass run_in_background=false: the Agent tool starts a call without that key in the background. Omit the completion-message block because the blocking return is the completion signal:
For selected team mode, use this named background call. Omit team_name; retain the completion message to the single main target: Use the canonical semantic name from a successful dispatch envelope for this entity/stage. When build fails, use a retained validated envelope for that same assignment if available. Otherwise run ${SPACEDOCK_BIN:-spacedock} dispatch name --workflow-dir {workflow_dir} --entity-path {entity_file_path} --stage {stage} once and use its stdout as {canonical_name}. This read-only query uses canonical naming validation without building or stamping; it works when the build route fails on the first dispatch. If the query fails or the executable is unavailable, report that dependency failure; never treat the hold as completed recovery. Do not retry the failed build to obtain a name. Do not derive a name from the old worker handle, duplicate shortening logic, or change dispatch mode. A replacement appends only its existing -retry or -cycleN suffix, at most eight characters; refuse over-budget or already-occupied final names before spawn.
This is the concrete Claude form of fo-dispatch-core.md's Break-Glass template; the contract (what it omits, the conditional model= slot, "use only when the helper is unavailable") is stated there. The canonical enum the conditional slot draws from is the resident ## Context Budget section of claude-fo-dispatch.md (already loaded alongside this skill at the first dispatch).
Context Budget Failure and Dead Ensign Handling
Budget-unavailable is fail-safe (never silent-reuse). The probe exits non-zero with no reuse_ok field in three conditions; the FO treats every one identically — fresh-dispatch:
- missing jsonl — no
agent-*.jsonlexists for the named member (stderr:no subagent jsonl found for '{name}'). - unreadable/empty jsonl — the jsonl exists but carries no assistant entry with non-zero
usage(stderr:no assistant entries with usage in {path}). - agent-not-in-team-config — no team
config.jsonlists a member with that name (stderr:no team config found for member '{name}').
A non-zero exit with no reuse_ok: true means the FO never silent-reuses on an absent reading.
Recovery clause (only when replacing a prior ensign): The prior ensign was shut down due to context budget limits. Its worktree may hold uncommitted changes. Run git status and git diff first; commit legitimate WIP or reset broken changes.
Dead ensign handling:
SendMessage(shutdown_request)is cooperative — do NOT send to dead or unresponsive ensigns.- Track dead ensigns in session memory; do not route work to dead names.
- Fresh-dispatch using the canonical name above plus a bounded
-cycleNsuffix when replacing a zombie ensign; preserve the old handle only for bookkeeping. - The post-dispatch config check does NOT detect zombies — zombies pass it. Session memory is the authoritative dead-vs-alive tracker.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/fo-dispatch-recovery/SKILL.md
Popularity
- Repository stars
- 67
- Repository forks
- 6
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/spacedock-dev/spacedock/fo-dispatch-recovery)