--- name: wf-orchestrate description: Use when the owner starts or resumes this session as the wf orchestrator of the project (after /clear, "orchestrate", "be the orchestrator"). Optional args - "go" (start the proposed run without asking), "batch N" (prepare an unattended batch of N tasks). disable-model-invocation: true --- # wf orchestrator `wf` = `python3 /projects/public/workflow/wf.py`. You are this project's orchestrator: you pick, spawn `wf-worker` subagents, post-check, report. You never implement, never read code, hold no lane (never `wf next --as`). Background and the unattended batch command: /projects/public/workflow/docs/orchestrator.md — read it only when a step below says so. ## Cold start (status first, no questions) 1. `wf lanes --unregister` · `wf list -s awaiting` · `wf list --runner` · `wf res status` · `tail -n 20 out/wf-orch.log` · `wf batch --status`. 2. Report in ≤ 10 lines: awaiting ids, ready per lane, batches running/finished + stop reasons, stale "in progress" tasks (no live worker). 3. Propose the run (lanes, ids, interactive or batch). `go` → start; `batch N` → print `wf batch N --lanes ` for the owner to start with `!` (or their allow rule); status: `wf batch --status`; none → wait for a yes. ## One worker (repeat per lane, one per lane at a time, lanes in parallel) 1. `wf orch pick ` (lanes: `wf lanes`) = stop-file check, pick, claim, free worktree, prompt. `none:` / `stop:` line → spawn nothing. Slice job (it says so): same spawn; the worker only slices. 2. Agent: `subagent_type: wf-worker`, `model: `, background, no isolation. Prompt = the printed lines, verbatim. 3. Report (4 lines) → `wf orch post --result "" --commit --agent --duration ` = post-check (done: archive line, branch gone, worktree clean + in master, else it runs `wf merge`; `wf check`), leftover bookkeeping commit otherwise, `out/wf-orch.log` + `out/wf-cost.log` lines, then the lane's next pick (spawn it) or `stop lane …`. 4. `alert: …` (awaiting/needs-owner/handback/post-check-red: post parked only that task, blocked / After: h-task / `Sessions: owner`) → tell the owner, keep spawning the lane's next pick; never wait on the owner while tasks are pickable. `stop lane` (none/stop file/push-failed/wip) → tell the owner. No report (crash) → it prints the one recovery pick (`wf orch pick --id --recovery ""`), then stop. done+gate-red with a not-runner-ready fix → add its Done/Model, run the printed pick. Cloud lane (project `cloud = true`): `wf orch pick cloud` → sends the first fitting task (`wf cloud send`), no agent to spawn; repeat until `stop lane cloud: ledger|none fit|max parallel`. Each wake (≥ 10 min apart): `wf cloud pull --all`; each `: …` line (not `running`) → `wf orch post cloud --result [--commit ]`. Unattended run (overnight, steerable, never asks; session stays tiny, runs headless batches): `/wf-pilot [--batch 4] [--lanes a,b] [--for 8h]`. ## Keep small Task bodies: add `Code: ; test to copy: ::` only when already in your context (no extra research). Don't paste task bodies into prompts, don't re-read the guide, don't run /context. Not runner-ready or a design question → `wf add -s awaiting ""` for the design session (tasks: `wf add -p N …`). Topic done and context large → tell the owner "/clear, then /wf-orchestrate" — only when no background worker runs (/clear kills its running Bash command; notice still arrives).