From 81d4e80fd5aabe4e80f58e960affa795cf7d34ec Mon Sep 17 00:00:00 2001 From: godosa Date: Wed, 7 Oct 2026 07:27:17 +0200 Subject: workflow: initial public history --- shared/skills/wf-design/SKILL.md | 30 ++++++++++++++++++++ shared/skills/wf-orchestrate-loop/SKILL.md | 8 ++++++ shared/skills/wf-orchestrate/SKILL.md | 42 ++++++++++++++++++++++++++++ shared/skills/wf-pilot/SKILL.md | 44 ++++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 shared/skills/wf-design/SKILL.md create mode 100644 shared/skills/wf-orchestrate-loop/SKILL.md create mode 100644 shared/skills/wf-orchestrate/SKILL.md create mode 100644 shared/skills/wf-pilot/SKILL.md (limited to 'shared/skills') diff --git a/shared/skills/wf-design/SKILL.md b/shared/skills/wf-design/SKILL.md new file mode 100644 index 0000000..e9f02be --- /dev/null +++ b/shared/skills/wf-design/SKILL.md @@ -0,0 +1,30 @@ +--- +name: wf-design +description: Use when the owner starts or resumes this session as the project's wf design / rulings / planning session (after /clear, "design session", "rulings"). Optional args - a topic or task id to start with. +disable-model-invocation: true +--- + +# wf design session + +You turn questions into decisions and decisions into runner-ready tasks. A separate orchestrator session +runs the tasks (guide: /projects/public/workflow/docs/orchestrator.md); you never spawn workers. + +## Cold start +1. `wf list -s awaiting` (with `wf show ` for each), `wf list -s human`, `wf list --model opus` + (tasks needing design), new reports in `out/wf-batch-*.md` / `out/wf-orch.log` that ask for rulings. +2. Show the owner in ≤ 12 lines: open questions (id + one line), design tasks, your proposed order. +3. Args: topic or id → start there. None → the owner picks. + +## Work +- Rulings: decide with the owner (recommend; ask only on real forks) → record where it binds (spec + rulings section or the task body) → `wf done ` / `wf status clear` to unblock. +- New design: REQUIRED SUB-SKILL superpowers:brainstorming → spec committed. Multi-step build: + superpowers:writing-plans. +- Output is always runner-ready tasks for the orchestrator: `wf add` slices ≤ 1h, `Model:` the cheapest lane + that fits (sonnet = exact Done + pattern to copy + real-data pass/fail; haiku = mechanical; opus = judgement), + Done checkable headless (file/test + `wf add` follow-ups, never "report to owner"), `Ref:` to the spec. +- Task bodies: add `Code: ; test to copy: ::` only when already in your context (no extra research). +- Stale owner state: owner part already done → `wf done` or `wf move pending` + headless Done; title + still "(brainstorm)" after spec approval → `wf set --title` without it. Check notes before asking. +- Implement only when the owner says so. Commit bookkeeping and specs as you go. +- Topic finished and context > ~200k → tell the owner "/clear, then /wf-design". diff --git a/shared/skills/wf-orchestrate-loop/SKILL.md b/shared/skills/wf-orchestrate-loop/SKILL.md new file mode 100644 index 0000000..dcdfde8 --- /dev/null +++ b/shared/skills/wf-orchestrate-loop/SKILL.md @@ -0,0 +1,8 @@ +--- +name: wf-orchestrate-loop +description: Retired - use /wf-pilot. Only when the owner types /wf-orchestrate-loop. +disable-model-invocation: true +--- + +Retired 2026-10-05. Tell the owner in one line: use `/wf-pilot [--batch 4] [--lanes a,b] [--for 8h]` +(N tasks → `--batch`), then run /projects/public/workflow/shared/skills/wf-pilot/SKILL.md with their args. diff --git a/shared/skills/wf-orchestrate/SKILL.md b/shared/skills/wf-orchestrate/SKILL.md new file mode 100644 index 0000000..53a4785 --- /dev/null +++ b/shared/skills/wf-orchestrate/SKILL.md @@ -0,0 +1,42 @@ +--- +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. `stop lane` → tell the owner (awaiting/handback/post-check-red/wip). 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). diff --git a/shared/skills/wf-pilot/SKILL.md b/shared/skills/wf-pilot/SKILL.md new file mode 100644 index 0000000..1f01f2b --- /dev/null +++ b/shared/skills/wf-pilot/SKILL.md @@ -0,0 +1,44 @@ +--- +name: wf-pilot +description: Use when the owner types /wf-pilot in a project session (often an idle session opened from the phone app via Remote Control) to pilot an overnight run of headless `wf batch` runs; the session itself stays tiny. Args - "[--batch 4] [--lanes a,b] [--for 8h]" (tasks per batch default 4; lanes default all; deadline default 8h). +disable-model-invocation: true +--- + +# wf pilot (nested overnight run, never asks) + +`wf` = `python3 /projects/public/workflow/wf.py`. You pilot headless batch orchestrators (`wf batch K`, each a fresh +`claude -p` that spawns the workers) — never pick, spawn workers, implement or read code; never `wf next --as`. +Background: /projects/public/workflow/docs/orchestrator.md 'Pilot (nested)'. +Cloud lane (project `cloud = true`) runs inside each batch: its prompt makes the batch run `wf orch pick cloud` until stop, `wf cloud pull --all` at most every 10 min, `wf orch post cloud` per ended task; a cloud stop never stops local lanes (pilot needs no extra step). Needs the owner allow rule +`Bash(python3 /projects/public/workflow/wf.py batch:*)`; denied → tell the owner, end. + +## Start (no proposal, no questions) +K = `--batch` (4); deadline = now + `--for` (8h); lanes = `--lanes` or all. `wf lanes` · `wf list -s awaiting` +(remember the awaiting ids). One status line to the owner, then go. + +## Loop +1. Launch: `wf batch K [--lanes …] --left