dispatch-nu

star 1

Wave-based spec dispatcher for any project using dispatch.codex.nu (Codex+AC hybrid) or dispatch.nu (Auto-Claude only). Spawns Zellij panes, tracks state in JSON, pre-plans via Ollama cloud, routes specs to Codex CLI or Auto-Claude by agent field. Use when checking wave status, launching specs, rescuing stalled panes, resetting failed specs, or bootstrapping a new project dispatcher.

ryanmaclean By ryanmaclean schedule Updated 4/15/2026

name: dispatch-nu description: > Wave-based spec dispatcher for any project using dispatch.codex.nu (Codex+AC hybrid) or dispatch.nu (Auto-Claude only). Spawns Zellij panes, tracks state in JSON, pre-plans via Ollama cloud, routes specs to Codex CLI or Auto-Claude by agent field. Use when checking wave status, launching specs, rescuing stalled panes, resetting failed specs, or bootstrapping a new project dispatcher.

dispatch.codex.nu — Hybrid Spec Dispatcher

Routes specs to Codex CLI (gpt-5.3-codex) or Auto-Claude (run.py) per spec. Pre-plans every spec via Ollama cloud (qwen3-coder:480b-cloud) before dispatch. Tracks state in .codex/dispatch-state.json. Spawns named Zellij panes.

Projects

Project Dispatcher Session
triz $HOME/triz/dispatch.codex.nu wise-xylophone
dub (EFI) $HOME/dub/dispatch.codex.nu wise-xylophone
bop $HOME/bop/dispatch.nu bop

Quick reference

nu dispatch.codex.nu plan                        # show all waves + agent + plan status
nu dispatch.codex.nu status                      # done / failed / pending counts
nu dispatch.codex.nu pre-plan                    # queue all specs through Ollama now
nu dispatch.codex.nu run --wave 1 --yes          # run wave 1 (skips confirmation)
nu dispatch.codex.nu run --yes                   # run all pending waves
nu dispatch.codex.nu watch-handoff --from-wave 1 --to-wave 2 --yes
nu dispatch.codex.nu mark-done 011              # manually mark complete
nu dispatch.codex.nu mark-failed 011            # manually mark failed
nu dispatch.codex.nu reset --spec 011           # reset single spec to pending
nu dispatch.codex.nu reset                      # reset ALL (nuclear)
nu dispatch.codex.nu retry                      # re-queue all failed specs
nu dispatch.codex.nu review 011                 # print spec.md
nu dispatch.codex.nu list                       # table of all specs
nu dispatch.codex.nu lock                       # check active run lock

Launching panes (two-pane pattern)

# Pane A — run current wave
zellij --session wise-xylophone run --name "proj-wave1" --close-on-exit -- \
  nu -c "cd $HOME/PROJ && nu dispatch.codex.nu run --wave 1 --yes"

# Pane B — auto-chain to next wave when A finishes
zellij --session wise-xylophone run --name "proj-handoff" --close-on-exit -- \
  nu -c "cd $HOME/PROJ && nu dispatch.codex.nu watch-handoff --from-wave 1 --to-wave 2 --yes"

Spec table fields

Field Values Meaning
wave 0–N Dependency order — higher = later
cost 1–4 ⚀trivial ⚁small ⚂medium ⚃complex — drives cooldown
agent "codex" / "ac" Routes to Codex CLI or Auto-Claude run.py
mode "direct" / "isolated" direct=writes to repo, isolated=worktree (needs merge)

Cooldown delays (rate limit pacing)

Cost Delay Typical specs
1 trivial 15s config, gitignore
2 small 30s docs, thin wrappers
3 medium 60s parsers, commands, extensions
4 complex 90s LLM integration, TUI, MCP server

Batch pause of 2 min every 4 specs on wave 2+.

Ollama pre-planning

Runs qwen3-coder:480b-cloud on each spec.md before Codex touches it. Writes .auto-claude/specs/{spec}/plan.md with:

  • Risk register (top 5 risks + mitigations)
  • File order (what to create, in order)
  • Crate audit (APIs to verify before writing)
  • Gotchas (known pitfalls)

Codex receives both spec.md and plan.md as context → fewer wrong turns.

# Pre-plan all specs now (run while waiting for wave 1):
nu dispatch.codex.nu pre-plan

State file

.codex/dispatch-state.json
{"completed": ["001","002",...], "failed": [], "skipped": []}

Pane shell calls mark-done NNN or mark-failed NNN on exit. Signal files also written to /tmp/triz-done-NNN for cross-script coordination.

Rescue playbook

# Stale lock (process died without clearing):
rm .codex/dispatch-lock.json
nu dispatch.codex.nu retry

# Pane exited but mark-done never fired:
nu dispatch.codex.nu mark-done 011

# Spec produced bad output, redo it:
nu dispatch.codex.nu reset --spec 011
nu dispatch.codex.nu run --wave 2 --yes

# Rate limited mid-wave:
nu dispatch.codex.nu retry
nu dispatch.codex.nu run --wave 2 --yes

Bootstrap a new project

Copy the template and edit the specs [] table and constants:

cp ~/.claude/skills/dispatch-nu/dispatch.codex.nu.template /path/to/project/dispatch.codex.nu
# Edit: PROJECT_DIR, specs table (id/name/wave/cost/agent/mode)
# Seed completed: ["any-pre-done-specs"] in state
nu dispatch.codex.nu pre-plan   # plan everything via Ollama
nu dispatch.codex.nu plan       # review
nu dispatch.codex.nu run --wave 1 --yes

dub-specific notes (dispatch.codex.nu)

  • Uses gpt-5.3-codex -c model_reasoning_effort=xhigh
  • Wave 1 is strictly sequential (each spec is the next's input)
  • Isolated specs need manual merge before next wave
  • watch-handoff waits for wave N then auto-starts wave N+1

triz-specific notes

  • 001+002 pre-seeded as completed in state
  • Codex specs: 011, 017, 018, 019, 020 (pure Rust / TypeScript / config)
  • AC specs: 003, 004, 005, 006, 007, 008, 009, 012, 013, 014, 016 (complex LLM/Nu)
  • Wave 1: 011-core-commands via Codex (no LLM deps, deterministic Rust)
Install via CLI
npx skills add https://github.com/ryanmaclean/skills --skill dispatch-nu
Repository Details
star Stars 1
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator