Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
oimiragieo avatar

Wave Executor

  • 39 installs
  • 36 repo stars
  • Updated July 14, 2026
  • oimiragieo/agent-studio

Helps with ai & agent building tasks.

About

wave-executor is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.

  • wave-executor
  • AI & Agent Building
  • AI-coding skill

Wave Executor by the numbers

  • 39 all-time installs (skills.sh)
  • Ranked #8,302 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oimiragieo/agent-studio --skill wave-executor

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs39
repo stars36
Last updatedJuly 14, 2026
Repositoryoimiragieo/agent-studio

What it does

Helps with ai & agent building tasks.

Files

SKILL.mdMarkdownGitHub ↗

Wave Executor

Overview

Wave Executor runs EPIC-tier batch pipelines by spawning a fresh Claude Code process per wave via the Claude Agent SDK. Each wave gets a clean Bun runtime with zero accumulated spawn() or abort_signal state, preventing the JSC garbage collector use-after-free crash (oven-sh/bun, anthropics/claude-code#21875, #27003) that occurs when a single Bun process handles thousands of concurrent subagent spawns.

This is the framework's implementation of the Ralph Wiggum pattern: iteration over fresh processes with file-based coordination.

When to Use

Use this skill when:

  • EPIC-tier batch work: >10 artifacts, >5 waves
  • Multi-wave skill updates, bundle generation, or mass refactoring
  • Any pipeline expected to run >30 minutes with parallel subagents
  • Work that previously crashed due to Bun segfaults

Do NOT use for:

  • Simple 1-3 skill updates (use skill-updater directly)
  • Single-skill work (use Task() subagent)
  • Work that fits in one context window (just do it inline)

How It Works

Router invokes wave-executor via Bash
  │
  └─ node .claude/tools/cli/wave-executor.mjs --plan <path>
       │  (runs on system Node.js — NOT Bun)
       │
       ├─ Reads plan.json with wave definitions
       ├─ Reads inventory.json for resume state
       │
       ├─ For each pending wave:
       │    ├─ SDK query() → NEW Bun process (fresh GC)
       │    ├─ Claude executes wave tasks
       │    ├─ Streams output to stdout
       │    ├─ Bun process exits → memory freed
       │    ├─ Updates inventory.json
       │    └─ Sleeps → next wave
       │
       └─ Returns JSON summary

Key invariant: no single Bun process accumulates more than ~100 spawns.

Invocation

Via Bash (agents):

node .claude/tools/cli/wave-executor.mjs --plan <path> --json

Via slash command (users):

/wave-executor --plan .claude/context/plans/my-plan.json

CLI flags:

FlagDefaultDescription
--plan <path>requiredPath to wave plan JSON
--model <model>claude-sonnet-4-6Model for wave execution
--max-turns <n>50Max conversation turns per wave
--start-from <n>1Resume from wave N
--dry-runfalsePreview without executing
--jsonfalseMachine-readable output

Plan File Format

{
  "name": "enterprise-bundle-generation",
  "waves": [
    {
      "id": 1,
      "skills": ["rust-expert", "python-backend-expert", "typescript-expert"],
      "domain": "language",
      "promptTemplate": "Update enterprise bundle files for skills: {skills}. Read each SKILL.md and .claude/rules/ file. Do 3-5 WebSearch queries for current {domain} tools and patterns. Generate domain-specific bundle files (append-only, never overwrite non-stubs). Validate JSON schemas and Node.js syntax. Commit results."
    },
    {
      "id": 2,
      "skills": ["nextjs-expert", "react-expert", "svelte-expert"],
      "domain": "web-framework"
    }
  ],
  "config": {
    "model": "claude-sonnet-4-6",
    "maxTurnsPerWave": 50,
    "sleepBetweenWaves": 3000,
    "inventoryPath": ".claude/context/runtime/wave-inventory.json"
  }
}

Each wave must have id (number) and skills (non-empty array). Optional: domain, promptTemplate.

Inventory Tracking

The executor maintains an inventory file at the configured path (default .claude/context/runtime/wave-inventory.json). This enables:

  • Resume from crash: --start-from N picks up where a failed run left off
  • Progress monitoring: read the inventory file to see completed waves
  • Cost tracking: each wave records its cost

Integration with Router

The router should use this skill when the planner classifies work as EPIC-tier:

1. Planner creates a plan file with wave definitions 2. Router invokes: Skill({ skill: 'wave-executor' }) 3. Agent runs: node .claude/tools/cli/wave-executor.mjs --plan <path> --json 4. Router reads JSON result for success/failure

The router's Bun process stays idle during execution (single Bash call) — no subagent spawning, no hook accumulation.

Iron Laws

1. ALWAYS spawn each wave in a fresh Bun process to prevent GC-related crashes in long-running sessions 2. NEVER batch more concurrent waves than the configured MAX_PARALLEL_WAVES limit 3. ALWAYS await wave completion acknowledgment before spawning the next wave 4. NEVER proceed to the next wave if the current wave has any failed or incomplete agents 5. ALWAYS log wave metadata (wave number, agent count, duration) for pipeline observability

Anti-Patterns

Anti-PatternWhy It FailsCorrect Approach
Reusing the same process across wavesGC pressure causes crashes in long pipelinesSpawn a fresh Bun process per wave
Exceeding MAX_PARALLEL_WAVESResource exhaustion and flaky failuresRespect the configured concurrency limit
Starting next wave before current completesRace conditions and incomplete pipeline stateAwait wave completion signal before advancing
Ignoring failed agents in a wavePartial state propagates incorrect data forwardHalt and surface failures before continuing
No wave metadata loggingCan't diagnose which wave caused issuesLog wave number, agents, and duration to context

Memory Protocol (MANDATORY)

Before starting:

  • Read .claude/context/memory/learnings.md for prior wave execution learnings
  • Check inventory file for resume state

After completing:

  • Append wave execution summary to .claude/context/memory/learnings.md
  • Record any errors to .claude/context/memory/issues.md
  • Record architecture decisions to .claude/context/memory/decisions.md
ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.