npx skills add ...
npx skills add amelnagdy/delegate-skills --skill delegate-setup
Configure delegation fleet lanes: which implementer CLI handles which kind of work, with optional model and effort (or variant) dials. Discovers installed CLIs, proposes a lane map for user approval, and writes global or project config only after explicit yes. Use when the user asks to set up, configure, or reconfigure delegation lanes, a fleet of lanes, or which implementer handles feature/tests/ui work — not for dispatching a coding task to an implementer.
npx skills add amelnagdy/delegate-skills --skill delegate-setup
You are the orchestrator in setup mode. Discover installed implementer CLIs, propose a fleet of lanes, and write configuration only after the user approves.
This skill does not dispatch coding work. It only authors the lane map.
One concept: lanes. Never say “routes.”
Example lane: feature → implementer opencode, model opencode/grok, variant high
(OpenCode uses variant for reasoning intensity, not effort).
*-delegate skill instead.--model / --effort / --variant on that relay.implementer.model, effort or variant, …) only if that implementer supports them — see references/schema.md.AGENTS.md, CLAUDE.md, or other user agent-instruction files.*-delegate relay from this skill.(<skill-dir> is this skill’s install directory — the folder that contains this SKILL.md.)
discover → load → grounding menu → propose (with Basis) → scope → approve → write
Summarize installed vs missing, auth (true / false / null = unknown), and whether models were
reported, aliases (curated aliases in the registry, not live discovery — full model names also
work), unsupported, or failed.
global / project). Do not paste
both raw files unless asked.projectPresent is true and projectTrusted is false, label the project lanes untrusted.
They cannot dispatch until the user reviews and approves a project write.Discovery reports capability, never task fit. So ask one grounding question before proposing anything — one question, three options, not a wizard:
How should I pick the lanes? (1) Quick defaults — I decide, no questions. (2) Interview — about four questions on how you want work allocated. (3) Usage scan — I re-read your CLIs’ local session folders (counts and dates only, never the conversations) and let the numbers place your lanes — if one CLI dominates, expect one question about its role. Happy to do 2 and 3 together.
node "<skill-dir>/scripts/discover.mjs" --usage. Tell the user it is metadata
only before running it. Each discovered CLI gains usage: { sessions, lastUsed }; null means no
probe is wired — unknown, not unused.repo basis.That menu is also the consent surface — the option chosen sets how much of the map is yours to decide:
my opinion, say plainly that the map is your opinion, and keep it cheap to revise.model). Omitting is
always safe — every dial has a default the user already lives with, and a CLI’s configured default
is their standing choice, better evidence than your priors. Choosing which installed implementer
gets a lane is still yours — Basis my opinion — but a dial that raises spend is not: offer your
dial picks only as an addendum after the proposal, see
references/setup-dialogue.md.Delegation economics. The orchestrator reviews and lands every result — the review is the quality gate, so optimize total cost, not implementer prestige:
Question phrasings for the burn/spare and trust interview live in references/setup-dialogue.md.
Then propose the lanes. Name them after the work the user described; fall back to feature, tests,
ui, fast, complex. Installed implementers only.
Show:
| Lane | Implementer | Model | Effort / variant | Basis | Source (if updating) |
|---|---|---|---|---|---|
| feature | opencode | opencode/grok | variant: high | your answer + schema requirement | — |
| tests | codex | — | — | usage data | — |
| ui | claude | — | — | my opinion (implementer) | — |
Basis is mandatory on every lane: your answer / usage data / repo / my opinion /
schema requirement (a dial the schema forces is neither evidence nor opinion — say so). A lane you
picked from model-quality priors is my opinion — never present it as something the tooling
determined, and “installed and authenticated” is capability, not evidence of fit. When a lane’s
implementer and its dials come from different places, split the label — see
references/setup-dialogue.md.
Then the complete JSON (version: delegate-fleet.v1). One line of why per lane; flag auth or
model uncertainty.
Schema and dial table: references/schema.md.
global.global (say so).On explicit yes, write only the chosen scope (validate first). Build the payload from that
scope’s raw file (or an empty lanes object if new) — not from the effective merged load view,
or a project write will shadow global-only lanes and a global write will promote project-only ones.
Create a uniquely named file under the platform temporary directory ($TMPDIR, %TEMP%, or Node
os.tmpdir(); never hard-code /tmp, which breaks on native Windows), write the exact approved
JSON into it with the orchestrator's file-writing tool, and use that populated path as
<lanes-json> below. Never validate an empty temp file. Remove the temp file after the
validation/write attempt, whether it succeeds or fails.
Re-read with load, then confirm the path written and the active lane names. Project writes bind
approval to the exact config content; later changes fail closed until re-approved. On update, a short
before/after is enough.
Stop after confirming. Tell the user the map is ready. For later work: read the lane’s
implementer, load that *-delegate skill, and dispatch with --lane <name> (explicit
--model / --effort / --variant still win when passed). Do not start a delegate task
unless they ask.
Same flow. Show the effective current map, propose changes, approve, write one scope’s file. Reinstalling the skills package must not rewrite these files — they live outside the package.