waves — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited waves (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Run wave-based orchestration inside one local Cursor session. A wave is a bounded round of isolated agents working in parallel, then a round that verifies what came back, then a deliberate decision to build on it — not an open-ended loop. You are the orchestrator: you discover, decompose the goal into independent slices, fan them out to parallel workers (the Task tool, run in the background = "Multitask Mode"), read each worker's structured handoff, verify it, and synthesize one deliverable. Workers are isolated and return exactly one handoff.
The shape of every wave — WAVE:
parallel round).
the synthesize barrier.
trust it.
A loop doesn't know when to stop; a wave does, because verification is the stop function. (Invoked explicitly with /waves: a run spawns more agents than usual, so it's opt-in, not auto-triggered.)
This is the local, zero-setup adaptation of the Cursor team's orchestrate plugin (which spawns cloud agents over the Cursor SDK). Same principles — planners plan, workers hand off up, no cross-talk — without any of that cloud setup. For heavyweight cloud fan-out, see "Escalating" below.
chunks, files/modules, audit dimensions).
parallelize locally (see "Parallel writes" for why).
Adapted from orchestrate. These keep the run converging without coordination.
Discovering, decomposing, reading handoffs, and writing the final deliverable are your job. The bulk reading/research/analysis is delegated to workers.
your prior steps, or sibling workers.** Every worker prompt must be fully self-contained: goal context, its exact slice, where to look, what to return.
only thing you read back. Define its exact shape (see references/handoff-format.md).
workspace; concurrent writes to overlapping paths corrupt each other.
(driven by a handoff gap or a new user request). Stop only when every slice is terminal and the synthesis is complete.
Status: success is a claim, notevidence. Check each handoff against something re-openable before folding it into the synthesis. See "Verification" below and references/verification.md.
Track it with TodoWrite so the waves stay visible.
Do not fan out blind. Spend a few cheap tool calls in the main session to learn the shape of the problem: list the directory, read the schema, sample the data, confirm coverage/size. This is what tells you the natural decomposition (how many chunks, which workstreams). Skipping discovery produces overlapping or mis-sized slices.
explore workers are read-only with no MCP or internet access, so they can't reach remote hosts, databases, or networked sources. If the source is remote or wrapped in noise, the orchestrator must stage clean inputs before fanning out:
rsync/export the relevant data to a localscratch dir so read-only workers can read it (e.g. query a remote SQLite read-only, export the rows, rsync the markdown).
blobs (base64, logs); fix timestamps. Doing this once beats making every worker re-derive it (and keeps noise out of their context).
each prompt can point at one path.
partition sums to the total (e.g. 8 chunks × ~388 = 3,097) so no slice is a silent blind spot. Fix anomalies (bad sort, dups) centrally, then re-check. (Details: references/verification.md §1.)
In practice this serial prep is often the largest phase; the parallel fan-out is fast once inputs are clean.
Before fanning out, classify each slice on two axes — this is the classify-and-act pattern, routing the right work to the right handler:
explore) / web-research (generalPurpose) /shell / competing-attempt (best-of-n-runner) / specialized review (bugbot, security-review). (See the table under "Choosing subagent_type".)
auto-accept (low-stakes, corroborated) → single verifier (medium) → multi-model panel (high-stakes) → debate (contested, no ground truth). Spend the verification budget where a wrong claim is expensive, not uniformly.
Split along whichever axis makes slices independent:
(e.g. messages 1–500, 501–1000, …).
stack", "research the Notion SDK", "audit auth code").
Each slice needs: a one-line scope, what to look at, and a defined output. For a big wave (roughly 5+ workers), state the decomposition plan to the user before spawning so they can redirect cheaply. If you have many slices, fan out in waves (launch a batch, let it complete, launch the next) rather than all at once, so you stay within practical concurrency limits.
Send one message with multiple `Task` tool calls — that is what makes them run concurrently. Set run_in_background: true on each (Multitask Mode). Pick subagent_type per slice (table below). Give each a 3-5 word description and a self-contained prompt ending with the required handoff format.
Then end your turn. You are notified as each background worker completes — do not AwaitShell, poll, or read output files in a loop. The Task call itself confirms the launch.
As handoffs arrive, read each one: note Status, extract Key findings, and mine Open questions / Suggested follow-ups — each bullet may become a second-wave task. Reconcile conflicts across workers.
Don't trust a handoff because it says `success`. Verify each finding's evidence (cited file:line / URL / metric resolves and says what's claimed), recount headline numbers from the source, and route low-confidence, conflicting, or citation-heavy claims to a verifier before they enter the draft. See "Verification" below.
If handoffs exposed gaps, dependencies, or follow-ups, spawn another parallel wave the same way. Repeat until no slice is pending and nothing new surfaced.
Synthesize all handoffs into the single artifact the user asked for (roadmap, report, summary, plan). Cite which worker produced which finding when it helps, and carry each claim's confidence through (verified / single-sourced / unverified) — never launder a low into a confident sentence.
Then write any code/files yourself, or spawn a dedicated implementation wave (mind "Parallel writes"). Verify the deliverable, not just the handoffs: re-run/curl/validate served artifacts, regression-check sibling routes, and re-read the critical files you wrote (see references/verification.md §6).
A wave is bounded on purpose. "Loop-until-done" (spawn until a stop condition) is a real pattern, but unbounded it burns tokens for little gain: candidate generation is cheap, but selection plateaus, and extra rounds are non-monotonic — more iterations can lower quality, not just cost. Bounded waves keep the exploration and drop the runaway.
wider only when a cheap automatic check (tests, schema, exec) gates the results.
and its outputs are near-duplicates of the last (stagnation), or when quality dropped versus the prior wave.
resource; spend there.
hard/open-ended → 5–8 for approach diversity; hardest/novel → don't loop, escalate the model.
winner + a short critique) into the next wave — never raw transcripts or losing candidates. Long, irrelevant context measurably degrades reasoning.
Loop-until-done is justified only when ALL hold: a cheap, reliable ~ground-truth verifier exists; the signal is crisp and actionable (a failing test, not "try harder"); each iteration shows measurable progress; the work is easy–medium difficulty; and it stays hard-capped. That fits code-with-tests and exec-feedback pipelines; it misfits open-ended research/writing/design (verify in bounded waves instead).
The orchestrator's highest-leverage job. You can't make a worker smarter at inference time, but verifying a handoff is far cheaper than producing it, and in a multi-wave run one unchecked bad handoff compounds into the synthesis.
contradiction skim, citations actually support the claim.
COMPLETELY", live sources, flag-unverified. (Don't rely on freeform "double-check yourself"; give an oracle or a separate verifier.)
claims — give it the claim + sources but not the generator's reasoning, and have it reason against a rubric/reference before its verdict (reference-guided + CoT is the cheapest reliable judge upgrade). Never show the generator the verifier's rubric (anti-gaming). For the highest-stakes calls, a multi-model panel + synthesis checks harder still (see "Multi-model fan-out").
independent sources that actually entail the claim (a citation being present ≠ the claim being supported).
prompt → dedicated verifier → ask the user, who may choose a stronger model) instead of folding them in.
Strongest on objective, checkable work (counts, code, facts-with-sources); on taste/judgment, verify the sub-claims, don't fake a grade. Keep claims honest: isolation reduces error propagation / path dependency, but don't claim a quantified "prevents poisoning" — there's no isolation-only ablation. Full playbook: references/verification.md.
subagent_type| Slice is… | Use | Notes |
|---|---|---|
| Read-only code/data exploration | explore | Fast, read-only, no MCP/internet. Pass thoroughness: "quick" / "medium" / "very thorough". |
| Research needing web / MCP (Exa, Ref, docs) | generalPurpose | Multi-step; can use available web/MCP tools. Do not set readonly: true (that disables MCP/internet). |
| Multi-step work mixing read + light reasoning | generalPurpose | The general workhorse. |
| Shell/git heavy investigation | shell | Command execution specialist. |
| Browser testing / UI verification | browser-use | Navigates and screenshots. Stateful: auto-resumes one shared instance, so don't fan out `browser-use` in parallel — use a single serial UI slice. Needs agent mode (not readonly). |
| Competing attempts at the same task | best-of-n-runner | Each runs in an isolated git worktree/branch — safe from shared-checkout clobbering; you then compare attempts and merge the winner. |
Only pass model when the user explicitly requests a specific model (and if a requested model is unavailable, say so rather than silently substituting). The deliberate exception is a user-requested multi-model panel — see "Multi-model fan-out" below.
For review/audit slices, Cursor also exposes specialized subagents when available (e.g. bugbot, security-review, ci-investigator, ci-watcher) — prefer them for those slice types.
The default fan-out runs each slice on one model. A high-stakes slice — an architecture/design call, a risky correctness question, a security or audit pass, or a key research synthesis — fan the same slice out to a panel of different models, then act as judge and synthesizer.
Reconcile; don't concatenate. Label CONSENSUS (2+ models agree) vs lone-model findings, resolve contradictions, dedupe overlap, and carry each claim's confidence into one answer. The synthesis is where most of the value lives — per OpenRouter's Fusion research, roughly three-quarters of the gain comes from the synthesis step, not the model diversity — so invest there rather than stapling outputs together. Evidence: a panel of independent models + a judge + a synthesizer matched and surpassed a single top-tier model on hard, deep-research problems (OpenRouter, Surpassing Frontier Performance with Fusion, openrouter.ai/blog/announcements/fusion-beats-frontier/).
Run it in Cursor: pass a different `model` to each sibling Task worker on the same slice, launch them in one message with run_in_background: true (parallel), then synthesize. This is the one time the orchestrator picks models — only when the user asks for a multi-model pass or the slice is explicitly high-stakes — so ask which models to use; don't guess slugs. That's the deliberate exception to the default rule (otherwise don't set model).
Caveat: a panel multiplies token cost (you pay every worker) and adds latency — reserve it for high-stakes slices, not routine ones. The adversarial multi-model review (a panel of reviewer models + one synthesized verdict) is this same pattern applied to code review.
For open-ended ideation or "produce the single best X", generate several candidates and filter — don't trust one attempt:
(tests, schema/exec, dedup/clustering) before spending judge tokens — generation is cheap, judging is not. (AlphaCode's shape: generate many → filter ~99% by tests → cluster → submit a few.)
only among finalists. A naive O(N²) tournament spends most of its tokens comparing also-rans.
own git worktree), then inspect/test/merge the winner yourself.
generate-and-filter of verification.
A worker cannot ask follow-up questions. Under-specified prompts drift silently. Write each as if you get one shot. Every worker prompt includes:
references/handoff-format.md.(high|med|low), and state what you could not verify. Analysis workers: "read COMPLETELY (N lines) and report the count." Research workers: "use live sources, not training data."
sibling worker).
context — tell it to return only the structured handoff and to write any large artifact to a file and cite the path instead of pasting it inline.
worker that siblings may be active: own only the listed paths, don't revert others' changes, and never spawn its own subagents (only the orchestrator fans out).
See references/handoff-format.md for the copy-paste worker handoff template and references/examples.md for a full worked run (the health-coach research job in the screenshots) plus reusable decomposition recipes.
Local subagents share one working directory. Concurrent writes to overlapping files clobber each other.
strictly disjoint, or do the edits serially after the research waves finish.
best-of-n-runner (each in itsown git worktree/branch), then inspect, test, and merge the chosen result yourself — worktrees prevent clobbering, not the merge.
For genuinely large builds (many concurrent code-writing agents, runs that outlive this session, PRs per task), escalate to the Cursor team's orchestrate plugin if it's installed. It spawns cloud agents via the Cursor SDK, isolates each on its own branch, and reconciles handoffs from disk/git. It requires its own setup (credentials and a runtime, plus optional Slack) — check its docs — and is invoked explicitly (e.g. /orchestrate <goal>).
Cursor subagent mechanics here were checked on 2026-06-15. The details most likely to drift: the cloud orchestrate plugin's setup, and whether Cursor caps concurrent background subagents (not officially documented). Re-verify those if they matter to your run.Task calls sent in one message, run_in_background: true.Status); escalatedlow-confidence / conflicting / uncited findings before synthesizing.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.