Passdown dispatch
Skill vunm-io/passdown/plugins/passdown/skills/passdown-dispatch
Shift-handover workflow for AI coding agents — capture ideas into an inbox, dispatch tasks to the cheapest capable executor (any CLI agent or subagent), and hand work down between sessions, agents, and tools. Composes with superpowers and OpenSpec.
npx -y skills add vunm-io/passdown --skill passdown-dispatchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use before executing any multi-task plan or change, including before Superpowers executing-plans, to decide which tasks stay in the current session and which run on configured external CLI agents or explicitly authorized native subagents; verifies delegated results before marking tasks done
SKILL.md
7.4 KB, as published. Nobody here has run it
Passdown Dispatch
The orchestrator session should stay small and cheap. Route each task to the cheapest executor that can do it well; keep only judgment-heavy work in the main session.
Execution gate
Run this skill before execution begins when any of these conditions apply:
- the plan or change has three or more pending tasks;
- any task has a
[dispatch: ...]tag; - any pending task is independently delegable or mechanical; or
- another installed skill or plugin is about to execute the plan, including
Superpowers
executing-plans.
Do not enter an inline plan executor, Superpowers executing-plans, an
external CLI adapter, or a native subagent executor until routing is complete.
The gate may still route every task to main; the required outcome is an
explicit per-task routing decision before implementation starts.
A direct user instruction to execute one clearly scoped task does not require
this gate unless that task itself requests delegation. When a user explicitly
asks to bypass delegation and work only in the current session, honor that
choice and route the relevant tasks to main rather than silently skipping the
gate.
Configuration (read first)
Build the effective passdown configuration root-to-nearest. Read applicable
AGENTS.md files from the workspace/repository root down to the current
directory, plus any parent file explicitly referenced by a thin entrypoint.
Merge ## passdown keys in that order: nearer values override the same key and
inherit omitted keys. Resolve relative paths against the file that declared
them.
Read the effective executors entry, cheapest first:
## passdown
- executors: agy, subagent, main # cheapest first; omit what's unavailable
Detect the current host and its available tools before routing. Executor names describe a target, not the host:
| Executor | How to invoke | Notes |
|---|---|---|
agy (Antigravity CLI) | agy --print "<prompt>" [--add-dir <path>] | Non-interactive; --continue resumes the last thread |
kiro-cli | kiro-cli chat "<prompt>" | Check non-interactive support with --help first |
codex | Configured Codex adapter on a non-Codex host | On Claude Code this may be /codex:rescue; when the current host is Codex, skip this self-target instead of recursively running Codex |
subagent | Current host's native subagent tool | Use only when the user explicitly asks for delegation/subagents and host policy permits it |
main | current session | Reserve for judgment-heavy work |
Also read inherited executor notes lines in the effective configuration. They
record environment constraints and past failures (sandbox write scope,
network access, non-interactive permission gates) and veto the default
routing: a task that must write outside the repo, reach the network, or run
a toolchain wrapper that writes to its own install dir (e.g. flutter) is
incompatible with a sandboxed executor unless its sandbox was configured for
it beforehand. Executors cannot be reconfigured mid-dispatch — that is user
setup work, done before the executor earns its place in the list.
Routing rules (starting point — tune per workspace)
- Honor explicit tags first: tasks planned with the passdown schema or the
standalone markdown template may carry
[dispatch: external-ok]or[dispatch: main]tags — follow them. Untagged tasks are classified by the rules below. - Mechanical, fully specified (rename, apply a template, config change, boilerplate): cheapest external CLI executor.
- Moderate, verifiable (small feature with tests, clear spec): subagent or external executor with a verification step.
- Judgment-heavy (architecture, ambiguous requirements, security): main session, or a fresh dedicated session.
- A configured
subagentis not implicit authorization. If the user has not explicitly requested delegation, keep the task inmainor ask first. - When unsure, try the cheaper compatible executor once; escalate on failure.
Propose recording what worked and what failed, with the root cause in
executor notes. Update shared AGENTS.md only when that write is within the requested task and does not overwrite concurrent changes.
Dispatch contract (thin forwarder)
When sending a task to an external executor:
- Capture a pre-dispatch baseline: repository root, branch,
git status --short, tracked diff, and untracked paths. A dirty tree is allowed only when the task does not overlap pre-existing changes and the baseline makes ownership unambiguous. Otherwise keep the task inmainor ask the user. - Build a self-contained prompt: task text, relevant file paths, done
criteria, and how to record completion (e.g. tick the checkbox in
tasks.md). For OpenSpec-planned work, prefer stateless instructions:"Run: openspec instructions apply --change <name> --json, then complete the next pending task and mark it [x]."If the change uses a custom schema, the executor must be able to resolve it as a real directory — repo-localopenspec/schemas/<name>/or user-level~/.local/share/openspec/schemas/<name>/; symlinks fail with "Unknown schema" (openspec CLI 1.5.0). Verify before dispatching. - Always include this environment clause in the prompt: "If a command fails because of sandbox, permission, or network restrictions, STOP and report the error verbatim. Do not work around it (no HOME redirects, no local caches, no config or project-file edits)." Environment failures are the orchestrator's to fix, not the executor's — an executor improvising around its sandbox burns time and leaves junk and unreviewable state behind.
- Invoke with one adapter action. Do not babysit output line by line.
- Return a structured summary: outcome, changed paths, verification evidence, and remaining work. Preserve sandbox, permission, and network environment errors verbatim; summarize successful intermediate output.
- Verify before trusting: run the task's done criteria yourself (tests,
openspec status, file checks). An unverified task stays unchecked. After a failed dispatch, compare against the baseline and remove only paths proven to be created or changed by that executor. Never run broad reset/clean commands and never discard pre-existing user changes. If attribution is ambiguous, stop and ask instead of cleaning or retrying. - Use only flags supported by the selected adapter. Execution/background and resume/fresh vocabulary is adapter-specific, not a portable contract.
Rules
- Never mark a task complete based only on an executor's claim.
- One task per dispatch unless tasks are trivially mechanical and share context.
- If an executor fails twice on the same task, escalate to the next tier — do not retry a third time.
- Give each dispatch a wall-clock budget. If a background job shows no fresh adapter-specific progress signal for ~10 minutes, check process liveness; a stale "running" status is a failure — cancel, compare against the baseline, and escalate. A hang-to-timeout in a non-interactive executor (e.g. an unanswerable permission prompt) counts as a failure too.