Standalone harness-neutral plugin for subagent-driven development via external CLIs (codex / opencode / agy): token-efficient plan execution plus the verified knowledge base that makes dispatch safe.
Everything is self-contained. The sdd skill and provider packs are discovered
from this repository; no machine-specific paths are required.
Version: 1.5.0
Requires the superpowers plugin and whichever dispatch CLIs you use on PATH
(codex, opencode, agy), each authenticated once interactively.
/plugin marketplace add discreteds/sdd-dispatch-plugin
/plugin install sdd-dispatch@sdd-dispatch-marketplace
(A local checkout also works: /plugin marketplace add /path/to/sdd-dispatch-plugin.)
This repository is also a Codex plugin (.codex-plugin/plugin.json) with a self-hosted
marketplace:
codex plugin marketplace add discreteds/sdd-dispatch-plugin
codex plugin add sdd-dispatch@sdd-dispatch-marketplaceManual alternative
(clone + symlink into $HOME/.agents/skills/) and full details:
codex/INSTALL.md. The Codex entry point is skills/sdd/SKILL.md.
skills/sdd/ # plan-execution skill and harness adapters
skills/delegate/ # direct one-off dispatch skill (no plan machinery)
skills/sdd-dispatch-verify/ # CLI re-verification skill
core/ # shared doctrine, playbook, roles, and logs
providers/<id>/ # self-contained provider packs
contracts/ # implementer, task-reviewer, design-reviewer, and reader contracts
codex/INSTALL.md # Codex installation instructions
archive/v1.1/ # verbatim legacy references
references/ # v1.1 tombstones with migration links
scripts/validate-packs # pack validator and resolver
scripts/codex-smoke # Codex layout and validator smoke test
| Skill | Purpose |
|---|---|
sdd |
Execute an implementation plan through the active harness and provider packs |
delegate |
Directly dispatch an explicitly requested one-off job or homogeneous batch through the provider packs — no plan required |
sdd-dispatch-verify |
Re-run the CLI probe suite when versions bump or models release |
delegate <task> dispatches a self-contained job (or homogeneous batch) to an external
CLI with the full pack doctrine — role inference from core/roles.md, model tiering,
liveness, hardened evidence gates (staged + untracked + HEAD-unchanged), controller
commits, and session resume — but none of the SDD plan-execution ceremony. Levers:
via <provider>, floor it / play it safe / explicit model, with review,
read-only, supervised / unsupervised. Jobs implying ≥3 planned dispatch cycles
run supervised automatically (announced). Artifacts and the lifecycle ledger live in
.sdd-dispatch/delegate/ (ignored via .git/info/exclude). The boundary is semantic:
multi-task implementation plans go to the sdd skill regardless of how they arrived;
tasks below the triviality floor stay inline unless delegation was explicitly
requested.
Add one directory under providers/ satisfying the provider pack contract:
pack.md, models.md, and verification-log.md with the required manifest
fields and tables. Run:
python3 scripts/validate-packs --root .Adding a provider requires zero edits to core/; routing is manifest-driven.
The manifest is the YAML front matter of pack.md. Required: schema-version, id,
cli, verified-version, version-argv, resume-argv, session-source,
stall-signal, sandbox. Optional: fork-flag, session-list-argv,
readiness-argv, readiness-timeout-seconds, and:
| Field | Values | Meaning |
|---|---|---|
report-transport |
report-file (default) · captured-output |
How an agent's report gets back to the controller |
Declare captured-output when the CLI cannot reliably write an agent-authored file to a
workspace path. The skills then ask for no file and take the full report as the
captured final message, saving it themselves. Getting this wrong is not cosmetic: on such
a provider a report-file request fails intermittently while the exit code stays 0, so
the report is silently missing and any reviewer downstream loses an input. agy is
captured-output; codex and opencode are report-file.
Every value is validator-enforced, and *-argv arrays are data — argv[0] must equal
cli, and shell metacharacters are rejected, so a manifest can never smuggle in a
command to execute.
The packs are living documents: CLIs flip behavior between patch releases, models come
and go, and every live dispatch is evidence. Where a finding gets recorded depends on
what you can write to (the recording ladder — full rules in
core/verification-protocol.md §Recording and the sdd-dispatch-verify skill, step 0):
- Writable source checkout — append to the pack's
verification-log.md, update the pack facts, and commit. Never record into an installed plugin cache (Claude Code~/.claude/plugins/cache/..., Codex~/.codex/plugins/cache/...) — caches are clobbered on the next upgrade. - Clone but no push rights — commit locally and open an issue or PR carrying the log entry.
- No source tree (installed copy only) — open an issue
using the Verification finding template (
verificationlabel), one issue per independent finding: CLI + plugin version, trigger, the pack assertion under test, verdict, verbatim evidence, impact. Search first: if an equivalent issue exists, a 👍 reaction adds weight to its prioritisation; comment only when you bring a new angle or wrinkle not already covered.
A finding recorded only in an installed cache is a finding lost.
