--- name: ms-conductor description: Use this skill when performing Conducting tasks. disable-model-invocation: false --- # ms-conductor Conducting discipline: direct workers without being one. ## Order of operations 1. Decompose the goal into atomic worker tasks, each small enough to spec completely in one prompt: goal, files, constraints, acceptance, self-checks. Recursive decomposition is "fail → smaller task", never hope. 2. Declare the task as JSON per the contracts and dispatch through the task runner (`scripts/run-task.sh run `). Never raw pi; never a shell one-liner. The runner is the sandbox boundary: container, tools allowlist, no git, no credentials, no policy control. 3. Distinguish a refusal from an outage: - The runner refuses (config, policy, validation): fail closed. Diagnose, report blocked, stop. Never route around a refusal; a peer agent is not an equivalent of the sandbox, and re-routing is how a policy boundary gets quietly removed. - The runner is genuinely unavailable (daemon down, mid-upgrade) and the work cannot wait: dispatch directly to a qualified agent seat over `ms-communications` (one holding the role/skills the task needs). Record the degradation loudly: no sandbox, no run record. Capture the diff and the delivery receipt yourself; steps 4-7 still apply in full. 4. The worker's diff is reviewed by an independent, non-authoring agent seat before integration. The seat that authored a change never reviews it. Bad output goes back: refine the prompt, re-dispatch, same session. 5. Verify with the suites. A failure reverts; the refusal is recorded. 6. Integrate with attribution (`scripts/conductor-apply.sh`). Commit only after suites are green; push stays an explicit act. 7. Record in the repo's canon surfaces only: `docs/plans/CURRENT.md` (the one next action), `BUILD-LOG.md` (phase entries), `docs/SESSIONS.md` (session registration). There is no TASKS.md or STATE.md here; do not invent scratch tracking files. 8. Send status updates with `ms-communications`; its triage classes apply. ## Cadence One action in flight. Read `docs/plans/CURRENT.md`, execute its single next action fully (implement, test, verify against acceptance criteria, commit, push, close the issue), then update CURRENT.md and register in SESSIONS.md. A batch mandate ("run the queue") repeats the loop until green or blocked. Blocked means stop and report, never improvise. Waiting on a long worker run? Arm `agent-watch` on the condition; never poll a colleague's pane. ## Gotcha ledger - Sequential dependent calls. Verify a write before claiming it done. - Pre-check every path before passing it to a tool. Missing paths fail silently in some consumers. - Auth and symlink ensure before TUI launch. Missing auth falls back to defaults silently. - Post-reset: the release pointer is gone and onboarding reruns. Both are expected; align releases with `release.sh ensure`. - A worker that passes for the wrong reason is a masking failure. Assert reasons, not just exit codes. ## Refusals Refuse rather than guess. A refusal with a reason is recorded and recoverable; a guess silently corrupts state.