waves-codex — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited waves-codex (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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 with Codex subagents. A wave is a bounded round of isolated workers in parallel, then a round that verifies what came back, then a deliberate decision to build on it — not an open-ended loop. Use this skill when a task is too broad for one clean linear pass but can be split into independent slices. You are the manager: discover the problem shape, stage and verify coverage, decompose it, spawn bounded Codex workers, collect one structured handoff from each worker, verify important claims, and synthesize the final deliverable.
The shape of every wave — WAVE: Workers fan out across disjoint slices -> Aggregate their handoffs -> Verify the evidence (the moat) -> Extend into another wave only when warranted. A loop doesn't know when to stop; a wave does, because verification is the stop function. (Invoke deliberately - a run spawns more agents than usual.)
Current Codex docs checked on 2026-06-14: Codex subagents are enabled by default in current releases, built-in roles include default, worker, and explorer, custom agents live in ~/.codex/agents/ or .codex/agents/, and subagent limits live under [agents] in config.toml. spawn_agents_on_csv is documented as experimental; use it when it is exposed in the active Codex surface, and fall back to normal subagent waves when it is not. No current Codex doc confirms a general-purpose claim-verifier or critic hook; use a verifier subagent, CSV verification pass, tests, validators, or codex exec --output-schema instead.
Read these references when using the skill:
references/handoff-format.md for the exact worker handoff contract.references/verification.md for verification gates and verifier-workerplaybooks.
references/examples.md for decomposition recipes.references/recommended-config.md for Codex config and custom agent snippets.references/adaptation-notes.md for Cursor-to-Codex translation notes.fan-out, or orchestration.
repo modules, audit dimensions, verification rows, or disjoint code ownership.
noisy exploration out of the manager thread, then check the claims that matter.
conflicts, narrowed scope, or high-stakes claims needing verification.
available.
research, tests, audits, bounded edits, or focused claim checks.
original request, your scratch reasoning, or sibling work unless you intentionally pass or fork that context.
Status: success is a claim, notevidence.
safer than a shared local-only model when workers run in separate sandboxes or worktrees, but write conflicts are still a coordination problem.
open question or suggested follow-up as a candidate second-wave task and spawn it. Keep going until every slice is terminal and the synthesis is complete -- stopping early while genuine follow-ups remain is the failure mode this skill guards against. (Stay within the depth/width caps in "Bounded Waves.")
A wave is bounded on purpose. Unbounded "loop-until-done" burns tokens for little gain: candidate generation is cheap, selection plateaus, and extra rounds are non-monotonic (more iterations can lower quality, not just cost). Keep the exploration, drop the runaway.
agents.max_threads); size it so youcan fully verify all of them. Go wider only with a cheap automatic check (tests, codex exec --output-schema, schema/exec) gating results.
near-duplicate the last wave) or a quality drop versus the prior wave.
hard/open-ended -> 5-8 for diversity; hardest/novel -> escalate reasoning/model, don't loop.
critique) into the next wave, never raw transcripts or losing candidates.
Loop-until-done is justified only when ALL hold: a cheap reliable ~ground-truth verifier exists; the signal is crisp/actionable (a failing test, not "try harder"); each iteration shows measurable progress; easy-medium difficulty; still hard-capped. Fits code-with-tests/exec-feedback; misfits open-ended research/writing/design.
Track the run with Codex's plan mechanism (update_plan) whenever the workflow has more than a couple of moving parts.
Do not fan out blind. First inspect enough local state to learn the natural shape of the work:
This manager-side discovery prevents duplicate worker scopes, blind spots, and mis-sized chunks.
Codex subagents inherit the current sandbox, approvals, MCP, and tool access, so remote or messy data does not always need to be staged locally first. Still stage data when it reduces risk or repeated work:
would make every worker redo the same setup.
irrelevant logs.
Then run a pre-fan-out gate:
chunks.
This serial prep is often the largest phase. The parallel fan-out is fast once inputs are clean and coverage is proven.
Choose the split axis that gives each worker clear ownership:
heavier changes.
For a large wave, usually 5 or more workers, state the decomposition plan and the pre-fan-out coverage gate to the user before spawning so they can redirect cheaply.
Respect agents.max_threads. Current Codex docs say it defaults to 6 when unset. If you need more slices than available threads, batch them into waves.
Triage each slice on two axes (classify-and-act): the Codex role (table in Step 2) and a verification tier - auto-accept (low-stakes, corroborated) -> single verifier -> multi-model/multi-pass panel (high-stakes) -> debate (contested, no ground truth). Spend verification where a wrong claim is expensive, not uniformly.
Spawn all independent workers in the same manager turn when possible. In Codex, the stable interaction is explicit: "spawn one agent per slice, wait for all of them, then summarize/synthesize." When the active tool surface exposes direct subagent tools, use those. If the surface names are visible, they may include spawn_agent, wait_agent, send_input, and close_agent.
Pick the smallest capable role:
| Slice | Codex role | Notes |
|---|---|---|
| Read-heavy code/data exploration | explorer | Best for targeted codebase questions and evidence gathering. Use gpt-5.5 with low reasoning for fast file reads and scans. |
| General research, docs, MCP/web work | default or custom docs researcher | Codex workers inherit available MCP/tooling. Use a custom agent when the research shape repeats. |
| Implementation or fixes | worker | Give explicit ownership of files/modules and warn that other workers may be active. |
| Review/security/test-risk audit | custom reviewer | Use read-only sandbox and higher reasoning for correctness/security work. |
| Browser/UI investigation | custom browser debugger | Give browser tooling and ask for evidence, not broad edits. |
| Verification of important claims | custom verifier | Give claim + cited sources, not the generator's reasoning. |
| Many row-shaped tasks | spawn_agents_on_csv | Experimental; use one CSV row per work item and require report_agent_job_result. |
Use gpt-5.5 for all manager and worker roles. Route cost/speed/capability with reasoning effort instead of older model families: low for fast reads/scans, medium for all-around work and research, high for coding and verifying, and xhigh for complex orchestration, deep problem solving, and synthesis before fan-out.
Codex handles spawning, routing follow-ups, waiting, and closing in the manager workflow. Current docs say when many agents are running, Codex waits until all requested results are available and returns a consolidated response.
Avoid manual polling loops. Continue non-overlapping local work while workers run; wait only when synthesis is blocked on their results. For each handoff:
Status.Coverage against the assigned slice.Key findings, evidence, confidence tags, and source paths/URLs.Sources and Confidence & verification.Open questions and Suggested follow-ups bullet as a candidatesecond-wave task: accept, reject, or consolidate it. Spawning a focused follow-up wave for real gaps is the normal path, not an exception.
Run cheap checks on every important finding:
Accept only evidence-backed, scope-correct, non-contradicted findings. Demote, re-task, or verify the rest.
Verification is the manager's highest-leverage job: checking a claim is usually cheaper than generating it, and unchecked errors compound across waves.
Use a dedicated verifier when a claim is high-stakes, contested, surprising, citation-heavy, single-sourced, or low-confidence. Give the verifier:
The verifier returns supported, partly-supported, unsupported, or source-not-found per claim. For many claims, prefer spawn_agents_on_csv when available: one claim per row, fixed JSON result via report_agent_job_result. If the CSV tool is unavailable, spawn normal verifier subagents in waves under agents.max_threads.
Multi-wave is the normal shape, not an exception: a realistic run is often 12 + 3 + 1 workers across three waves rather than one giant burst. Spawn another wave whenever first-wave handoffs expose:
Repeat until no slice is pending and nothing new surfaces (within the "Bounded Waves" depth/width caps).
Sequential second and third waves are spawned by the manager at depth 1 and are encouraged -- they are NOT what max_depth limits. agents.max_depth (default 1) governs recursion only: a worker spawning its own sub-workers. Keep recursion off by default and raise agents.max_depth deliberately and tightly only if a recursive subplanner is truly needed; manager-driven waves need no such change.
Do not forward raw handoffs as the final answer. Produce the user's requested artifact: report, roadmap, code patch, audit, decision memo, or implementation plan. Cite worker evidence when it helps, especially file paths, line numbers, data ranges, URLs, and unresolved uncertainties. Carry confidence into the final output: verified, single-sourced, or unverified. Never turn a low-confidence handoff into a confident sentence.
If implementation is required after the research wave, either:
codex exec in separate git worktrees for heavierparallel code attempts.
Verify the deliverable itself:
curl, screenshots, parsers, or smoke checks asappropriate.
Every worker prompt includes:
modules.
counts read such as 388/388, and call out skipped files/ranges.
(high|med|low), and say what would change the conclusion.
editing unless explicitly assigned.
references/handoff-format.md.Useful ending:
Return only the structured handoff from references/handoff-format.md. Use
exactly the headings. Include concrete evidence and confidence for every
important claim. Flag anything you could not verify.For research workers, add:
Use live/current sources when the fact may have changed. Do not rely on training
data for versioned APIs, pricing, schedules, product behavior, or current docs.
Flag anything you could not verify.For implementation workers, add:
You are not alone in the codebase. Other workers may be active. Own only the
files/modules listed above, do not revert changes you did not make, and adjust
to nearby changes if you encounter them.For verifier workers, add:
Your job is verification, not generation. Check only the assigned claim(s)
against the provided source(s) or oracle(s). Do not use the original worker's
reasoning. Return supported, partly-supported, unsupported, or source-not-found
with exact evidence.Use spawn_agents_on_csv when the work is naturally one row per worker: files, incidents, packages, PRs, migration targets, messages, customer records, or claims to verify.
Manager responsibilities:
id_column.instruction template with {column_name} placeholders.output_schema when downstream synthesis needs machine-readableresults.
report_agent_job_result exactly once.output_csv_path; use max_concurrency below or equal toagents.max_threads.
For a verifier pass, build claims.csv with claim_id, claim, sources, acceptance_question, and optional stakes. Require JSON fields: verdict, evidence, source_status, correction, confidence, and gaps.
If the CSV tool is unavailable in the active Codex surface, split the CSV into normal worker or verifier slices and use the handoff format.
For open-ended ideation or "produce the single best X", generate several candidates and filter rather than trusting one attempt:
codex exec --output-schema, schema/exec, dedup/clustering) before spending judge tokens. Generation is cheap; judging is not.
only among finalists. A naive O(N^2) tournament wastes tokens on also-rans.
git worktree plusone codex exec per attempt, then inspect/test/merge the winner.
Codex subagents are a good fit for parallel write work when you use worktrees, separate sandboxes, or disjoint ownership. Still treat write coordination as a real merge problem:
paths do not overlap.
serially.
git worktree plus one codex exec run per attempt.
Use these where they fit:
recounts are the strongest verification signals.
verifier agents are the Codex-native replacement for a dedicatedverifier worker.
spawn_agents_on_csv is ideal for a verifier-per-row pass when exposed.codex exec --output-schema gives machine-readable verification in scriptedfleets.
/review, GitHub code review, and reviewer custom agents help for coderisk review.
approvals_reviewer = "auto_review" is an approval/security reviewer only; itis not a general claim-verification hook.
general eval/critic hook for arbitrary worker findings.
Use this skill for interactive, bounded fan-out inside one Codex task.
For scripted or CI-style fleets, use codex exec with explicit sandbox and model settings, often one process per git worktree. codex exec --json and --output-schema are useful when another script needs stable events or machine-readable results.
For always-on, team-scale orchestration, use the Symphony pattern: an issue tracker or queue as the control plane, one agent workspace per item, bounded concurrency, retries, observability, and human review. Treat Symphony as a reference/spec pattern, not a drop-in replacement for this interactive skill.
update_plan for multi-wave work.gaps/duplicates.
agents.max_threads.explorer, worker, default, custom agents, verifier agents, orspawn_agents_on_csv deliberately.
verification needs.
before synthesizing.
writes.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.