Burla Parallel Dev Clusters
Burla-Cloud/burla
Sets up an isolated Burla dev cluster per git worktree so several agents can work in parallel, and explains when to use local-dev or remote-dev.
Stage a SUB/WAVE git worktree so the dev stack can run from it, then start it.
$ npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install perminder-klair/subwave subwave-worktree-dev --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/perminder-klair/subwave.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/subwave-worktree-dev .claude/skills/subwave-worktree-dev && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "subwave-worktree-dev" agent skill from https://github.com/perminder-klair/subwave/tree/develop/.claude/skills/subwave-worktree-dev into .claude/skills/subwave-worktree-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subwave-worktree-dev", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/perminder-klair/subwave/tree/develop/.claude/skills/subwave-worktree-devType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install perminder-klair/subwave subwave-worktree-dev --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/perminder-klair/subwave.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/subwave-worktree-dev .agents/skills/subwave-worktree-dev && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "subwave-worktree-dev" agent skill from https://github.com/perminder-klair/subwave/tree/develop/.claude/skills/subwave-worktree-dev into .agents/skills/subwave-worktree-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subwave-worktree-dev", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install perminder-klair/subwave subwave-worktree-dev --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/perminder-klair/subwave.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/subwave-worktree-dev .cursor/skills/subwave-worktree-dev && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "subwave-worktree-dev" agent skill from https://github.com/perminder-klair/subwave/tree/develop/.claude/skills/subwave-worktree-dev into .cursor/skills/subwave-worktree-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subwave-worktree-dev", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/perminder-klair/subwave.git --path .claude/skills/subwave-worktree-dev--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install perminder-klair/subwave subwave-worktree-dev --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/perminder-klair/subwave.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/subwave-worktree-dev .gemini/skills/subwave-worktree-dev && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "subwave-worktree-dev" agent skill from https://github.com/perminder-klair/subwave/tree/develop/.claude/skills/subwave-worktree-dev into .gemini/skills/subwave-worktree-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subwave-worktree-dev", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install perminder-klair/subwave subwave-worktree-devInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/perminder-klair/subwave.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/subwave-worktree-dev .github/skills/subwave-worktree-dev && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "subwave-worktree-dev" agent skill from https://github.com/perminder-klair/subwave/tree/develop/.claude/skills/subwave-worktree-dev into .github/skills/subwave-worktree-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subwave-worktree-dev", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install perminder-klair/subwave subwave-worktree-dev --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/perminder-klair/subwave.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/subwave-worktree-dev .opencode/skills/subwave-worktree-dev && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "subwave-worktree-dev" agent skill from https://github.com/perminder-klair/subwave/tree/develop/.claude/skills/subwave-worktree-dev into .opencode/skills/subwave-worktree-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "subwave-worktree-dev", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
subwave-worktree-devStage a SUB/WAVE git worktree so the dev stack can run from it, then start it.
Subwave Worktree Dev is an agent skill from perminder-klair/subwave. Stage a SUB/WAVE git worktree so the dev stack can run from it, then start it. A git worktree only checks out tracked files — the dev stack also needs gitignored files (controller/.env, web/.env.local, docker/.env, web/nodemodules, and a state/ directory) that this skill copies or scaffolds from the main working tree. Use this skill whenever the user wants to test branch changes in a worktree, run subwave from a worktree, "prep"/"set up" a worktree for dev mode, or asks to copy env files / nodemodules / state…
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/prep-worktree.sh`).
It sits in Development, covering Git worktrees. It works with Git and Docker. The repository describes itself as: Personal internet radio: Agentic AI DJ. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 45ef433. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
dockernpmgitcurlbashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use docker, npm, git and curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Subwave Worktree Dev loads about 2.1k tokens when it runs. Until then it costs about 202 tokens; SKILL.md has 875 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
gitignored files (controller/.env, web/.env.local, docker/.env, web/node_modules,| `.env` | Root `.env` — `ADMIN_USER` / `ADMIN_PASS` / `SITE_URL`. Dev compose references it as `./.env`; compose refuse| `controller/.env` | Dev compose declares `env_file: ./controller/.env` — controller container won't start without it.| `web/.env.local` | Dev API/stream URL overrides (`NEXT_PUBLIC_API_URL` etc.). Without it the web UI defaults to same-o| `docker/.env` | Compose variable substitution (legacy — harmless to copy). |hing the **main checkout's** `controller/.env`, `state/`, or configAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from perminder-klair/subwave at commit 45ef433, republished under its MIT licence (© perminder-klair). 875 words, ~2,106 tokens.
.claude/skills/subwave-worktree-dev/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Get the SUB/WAVE dev stack running from inside a git worktree so branch changes can be tested without touching the main checkout.
A worktree checks out every tracked file, so all source is already there. But the dev stack also depends on gitignored files that do not travel with a worktree checkout:
| File | Why the stack needs it |
|---|---|
.env | Root .env — ADMIN_USER / ADMIN_PASS / SITE_URL. Dev compose references it as ./.env; compose refuses to start without it. |
controller/.env | Dev compose declares env_file: ./controller/.env — controller container won't start without it. Navidrome + Ollama config. |
web/.env.local | Dev API/stream URL overrides (NEXT_PUBLIC_API_URL etc.). Without it the web UI defaults to same-origin /api and cannot reach the controller. |
docker/.env | Compose variable substitution (legacy — harmless to copy). |
state/setup-config.json | Navidrome creds the wizard saved on main. Without this the controller reports needsSetup: true and the player redirects to /onboarding on every load. |
state/secrets.env | Cloud LLM / TTS API keys (if main has any). Sourced into the controller's process.env on boot. |
state/settings.json | Operator's full config — LLM provider/model, personas, shows, TTS. Without it the controller boots with default settings (llm.model = ''), every LLM call returns "fetch failed", and the new skills cannot run. |
state/moods.json | Library mood tagging produced by npm run tag (LLM walk over the whole library — expensive to redo per branch). |
state/sfx.json + sfx/ | Sound-effects catalogue metadata + rendered WAVs the admin UI lists and liquidsoap mixes in. |
state/jingles.json + jingles.m3u + jingles/ | Pre-rendered station idents. Liquidsoap reads the M3U with reload_mode="watch". |
state/recent-plays.json | 24h play log — the picker and the library-deep-cut skill key off it for dedup. |
state/sessions/ | Archived DJ sessions (the live one is regenerated on boot). |
state/voice/ | Persona TTS reference voices (Chatterbox cloning refs, if any). |
web/node_modules | Needed by npm run dev. |
state/ | Bind-mounted into the containers. A worktree's state/ is empty. |
state/ is mirrored from main so the worktree boots into the same configured
station — same LLM provider, same personas, same library moods, same jingles —
ready to test branch changes against real data. Runtime state (queue.json,
session.json, archive/, logs/, listeners.jsonl, now-playing.json) is
not copied, since those would clash with what the worktree's own containers
produce fresh on first boot. The broadcast container generates its own
state/icecast-secrets.env on first boot, so worktrees never need to copy
icecast config either.
sub-wave-broadcast, …) and host ports (Web 7700, Controller 7701,
Icecast 7702). A worktree stack and the main-checkout stack collide — stop
whatever is running before starting another.--build, web changes do not. The controller
image COPYs its source at build time, so testing worktree controller code
requires docker compose up -d --build. The web dev server (npm run dev)
hot-reloads from the worktree filesystem, so UI changes appear with no build.The target worktree is usually the session's current directory. Confirm it is a linked worktree and not the main checkout:
git rev-parse --absolute-git-dir # a worktree's is <main>/.git/worktrees/<name>
git worktree list # shows the main tree + every linked worktreeIf the user named a specific worktree path, use that.
Only one stack can run. Stop whatever is up (it may be the main checkout's):
# Kill the web dev server if it holds :7700 — but only if it is `node`,
# never macOS ControlCenter/AirPlay.
WEB_PID=$(lsof -nP -iTCP:7700 -sTCP:LISTEN -t 2>/dev/null | head -1)
[ -n "$WEB_PID" ] && ps -p "$WEB_PID" -o comm= | grep -qi node && kill "$WEB_PID"
# Bring down whichever dev stack is up. The compose file lives at the
# checkout root (not under docker/); container names are global, so any
# checkout's docker-compose.dev.yml targets the running containers.
docker compose -f <some-checkout>/docker-compose.dev.yml downRun the bundled script. It copies the env files, mirrors the operator's
declarative state/ from main (settings, moods, sfx, jingles, sessions, voice),
and runs npm install for the web app. <skill base directory> is the
absolute path shown as "Base directory for this skill" when the skill loads.
bash "<skill base directory>/scripts/prep-worktree.sh" <worktree-path>Flags: --reset-state wipes and re-scaffolds state/ (use when the user wants
a clean slate); --skip-npm skips the dependency install (use when
node_modules is already good). The script is idempotent — re-running it only
fills in what is missing, never overwrites a file the worktree already has.
Compose files now live at the worktree root (not under docker/):
cd <worktree-path> && docker compose -f docker-compose.dev.yml up -d --build--build is required so the worktree's controller source is baked into the
image. The first build is slow (all services); later builds only rebuild
changed layers. Then start the web dev server in the background (it is a
long-running foreground process):
cd <worktree-path>/web && npm run devGive Liquidsoap ~5s to connect to Icecast, then probe the controller:
sleep 5
curl -sf http://localhost:7701/health # expect {"status":"on-air"}
curl -sf -o /dev/null -w '%{http_code}\n' http://localhost:7700 # expect 200If /health fails, peek at docker compose logs --tail=30 controller broadcast
and surface the error. A fresh state/ is normal — an empty queue and default
settings on first boot are expected, not faults.
npm run dev hot-reloads it.cd <worktree-path> && docker compose -f docker-compose.dev.yml up -d --build controller.liquidsoap/radio.liq change — it is bind-mounted in dev; just
docker compose restart broadcast.scripts/prep-worktree.sh (copies env files, scaffolds state/, npm install)docker compose up -d --build / down against a worktree's dev compose filenpm run dev / killing a node process on :7700curl health probes--reset-state when state/ already has real data the user may wantdocker compose down -v (wipes volumes)node process on :7700controller/.env, state/, or configsubwave-control to start/stop.docker-compose.yml or docker-compose.byo.yml) → use subwave-control.git pull + rebuild, jingle generation, config
changes → use subwave-deploy.© perminder-klair, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in .claude/skills/subwave-worktree-dev of perminder-klair/subwave.
Open the folder on GitHubat commit 45ef433
Subwave Worktree Dev next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Subwave Worktree Dev this skillperminder-klair/subwave | 1.4k | — | ~2.1k | Automated safety check: Notes | MIT | |
| Burla Parallel Dev ClustersBurla-Cloud/burla | 263 | — | ~1.6k | Automated safety check: Pass | Custom licence | |
| Tnr Dev Serverstudie-tech/TheNinjaRPG | 104 | — | ~2.5k | Automated safety check: Notes | None | |
| Superset Project Setupsuperset-sh/superset | 15k | — | ~577 | Automated safety check: Notes | Custom licence | |
| Polyphonyalinaqi/maggy | 707 | — | ~980 | Automated safety check: Pass | MIT | |
| Worktree StackLanternOps/breeze | 130 | — | ~1.2k | Automated safety check: Notes | AGPL-3.0 |
Burla-Cloud/burla
Sets up an isolated Burla dev cluster per git worktree so several agents can work in parallel, and explains when to use local-dev or remote-dev.
studie-tech/TheNinjaRPG
Run a TheNinjaRPG dev server locally from any git worktree, provision disposable test users, and call tRPC endpoints as those users.
superset-sh/superset
Makes a repository Superset-ready by writing .superset/config.json with setup, teardown and run scripts, then proving it with a real throwaway workspace.
alinaqi/maggy
Multi-agent orchestration with container-isolated workspaces — each agent session runs in its own Docker container with independent git branches
LanternOps/breeze
A skill your agent uses when an agent needs a running, seeded, Playwright-ready Breeze stack for the current git worktree.
borghei/Claude-Skills
Manage parallel development with Git worktrees: creation with port allocation, environment sync, branch isolation, and cleanup.
perminder-klair/subwave
Benchmark and compare LLM models for SUB/WAVE's on-air calls — track picks, segments, listener requests, DJ scripts, banter, and programme beats — in both candidate-pool and agent modes, using…
perminder-klair/subwave
Start or stop the SUB/WAVE radio stack (a personal internet radio station) in dev or production mode — no builds, no rebuilds, no config rendering.
perminder-klair/subwave
Draft a Discord release announcement for SUB/WAVE from a release PR, tag, or version number.
perminder-klair/subwave
Open a release pull request from develop to main for SUB/WAVE, and keep develop from drifting behind main.
perminder-klair/subwave
Write a news post for the SUB/WAVE "Dispatches" page, a short human-friendly tutorial about a feature, fix, or release.
perminder-klair/subwave
Drive a controller/admin-UI change end-to-end from a worktree without touching the live station — isolated controller on a spare port + temp STATEDIR, worktree Next dev server, Playwright against…
Categories
Stage a SUB/WAVE git worktree so the dev stack can run from it, then start it. Subwave Worktree Dev is an agent skill from perminder-klair/subwave. Stage a SUB/WAVE git worktree so the dev stack can run from it, then start it.
Subwave Worktree Dev fits situations like: the user wants to test branch changes in a worktree; run subwave from a worktree; prep/set up a worktree for dev mode; asks to copy env files / nodemodules / state into a worktree — phrases like test this worktree in dev mode.
Run `npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a claude-code`. Or copy the skill folder (.claude/skills/subwave-worktree-dev in perminder-klair/subwave) into .claude/skills/subwave-worktree-dev in your project. Claude Code loads it when a task matches its description.
Run `npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a codex`. Or copy the skill folder (.claude/skills/subwave-worktree-dev in perminder-klair/subwave) into .agents/skills/subwave-worktree-dev in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add perminder-klair/subwave --skill subwave-worktree-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/subwave-worktree-dev, .gemini/skills/subwave-worktree-dev, .github/skills/subwave-worktree-dev and .opencode/skills/subwave-worktree-dev in your project.
Going by SKILL.md and its folder, Subwave Worktree Dev needs a shell for the scripts in its folder and the command-line tools its instructions call (docker, npm, git, curl and bash). Our summary lists: Node.js; A Bash shell; Docker.
SKILL.md contains no URLs. Its commands use docker, npm, git and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Subwave Worktree Dev is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Subwave Worktree Dev: Burla Parallel Dev Clusters (Burla-Cloud/burla, 263 stars), Tnr Dev Server (studie-tech/TheNinjaRPG, 104 stars), Superset Project Setup (superset-sh/superset, 15k stars) and Polyphony (alinaqi/maggy, 707 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
perminder-klair (a GitHub user) maintains it in perminder-klair/subwave, which has 1,414 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: perminder-klair/subwave on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.