Run Dozzle Dev Instance
amir20/dozzle
Starts a Dozzle dev server on a port derived from the current worktree so you can test by hand in a browser, without disturbing instances started elsewhere.
Run a Sandcastle lane — a sandboxed implement→review loop over a fixed batch of work in its own worktree, ended by an agent-authored PR.
$ npx skills add will-ness-ai/skills --skill sandcastle -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install will-ness-ai/skills sandcastle --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/will-ness-ai/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sandcastle .claude/skills/sandcastle && 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 "sandcastle" agent skill from https://github.com/will-ness-ai/skills/tree/main/skills/sandcastle into .claude/skills/sandcastle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sandcastle", 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/will-ness-ai/skills/tree/main/skills/sandcastleType 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 will-ness-ai/skills --skill sandcastle -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install will-ness-ai/skills sandcastle --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/will-ness-ai/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sandcastle .agents/skills/sandcastle && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sandcastle" agent skill from https://github.com/will-ness-ai/skills/tree/main/skills/sandcastle into .agents/skills/sandcastle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sandcastle", 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 will-ness-ai/skills --skill sandcastle -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install will-ness-ai/skills sandcastle --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/will-ness-ai/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sandcastle .cursor/skills/sandcastle && 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 "sandcastle" agent skill from https://github.com/will-ness-ai/skills/tree/main/skills/sandcastle into .cursor/skills/sandcastle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sandcastle", 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/will-ness-ai/skills.git --path skills/sandcastle--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 will-ness-ai/skills --skill sandcastle -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install will-ness-ai/skills sandcastle --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/will-ness-ai/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sandcastle .gemini/skills/sandcastle && 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 "sandcastle" agent skill from https://github.com/will-ness-ai/skills/tree/main/skills/sandcastle into .gemini/skills/sandcastle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sandcastle", 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 will-ness-ai/skills sandcastleInstalls 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 will-ness-ai/skills --skill sandcastle -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/will-ness-ai/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sandcastle .github/skills/sandcastle && 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 "sandcastle" agent skill from https://github.com/will-ness-ai/skills/tree/main/skills/sandcastle into .github/skills/sandcastle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sandcastle", 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 will-ness-ai/skills --skill sandcastle -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install will-ness-ai/skills sandcastle --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/will-ness-ai/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sandcastle .opencode/skills/sandcastle && 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 "sandcastle" agent skill from https://github.com/will-ness-ai/skills/tree/main/skills/sandcastle into .opencode/skills/sandcastle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sandcastle", 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.
sandcastleRun a Sandcastle lane — a sandboxed implement→review loop over a fixed batch of work in its own worktree, ended by an agent-authored PR.
Sandcastle is an agent skill from will-ness-ai/skills. Run a Sandcastle lane — a sandboxed implement→review loop over a fixed batch of work in its own worktree, ended by an agent-authored PR.
Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `agents/openai.yaml`, `references/run-hygiene.md` and `references/ticket-sources.md`).
It sits in Development, covering Git worktrees. It works with Docker. The repository describes itself as: Skills for building high quality software. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 71d8909. 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.
Shell commands in SKILL.md call:
npxgitghpnpmdockerFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, git, gh, pnpm and docker, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GH_TOKENCLAUDE_CODE_OAUTH_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Sandcastle loads about 1.4k tokens when it runs, and up to ~2.6k if it reads all its reference files. Until then it costs about 37 tokens; SKILL.md has 778 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.
- `.sandcastle/.env` is per-working-dir (untracked, never travels with a branch) — copy the agent token in, refresh `GH_Automated 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); files beside SKILL.md are not scanned.
The full file from will-ness-ai/skills at commit 71d8909, republished under its MIT licence (© will-ness-ai). 778 words, ~1,410 tokens.
.claude/skills/sandcastle/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Hand a batch of tickets to Sandcastle's sandboxed agents and let them work AFK. Each run is a lane: its own worktree, its own branch, its own run config naming exactly its tickets — so concurrent lanes never interact and nothing ever queries a shared pool. The loop implements then reviews one ticket per iteration, folds each onto the lane branch, runs until dry (an iteration lands no commits), and ends with a PR agent that gates the branch and opens the lane's PR.
Sandcastle (@ai-hero/sandcastle) orchestrates coding-agent CLIs inside Docker sandboxes, driven from a repo's tracked .sandcastle/ template. Prereqs: Docker running, plus tokens for the agent (CLAUDE_CODE_OAUTH_TOKEN) and GitHub (GH_TOKEN).
The batch is whatever work list you were handed — usually the ticket numbers a /to-tickets run just published (they are already in the conversation), but any tracker query result or literal list works. Read references/ticket-sources.md for how your source expresses tickets in the run config, its commit trailer, and its mark-done action. Name the lane: branch sandcastle/<batch-slug>, worktree ../<repo>-<batch-slug>.
Done when you can enumerate the batch exactly — ids in hand, nothing left implied by a label or query that another session could grow.
git worktree add -b <branch> ../<repo>-<batch-slug> <base>
Repo has no .sandcastle/ template yet: scaffold with npx sandcastle init (check --help; pick sequential-reviewer), then adapt: main.mts reads the run config and passes the batch in via promptArgs, ends with the PR phase and a process.exit(0); mount ~/.claude/skills read-only so in-sandbox agents can run /implement, /tdd, /code-review; pin the docker imageName (the default derives from the directory name and breaks in a worktree); persist the package-manager store across runs — and anchor every runtime dir you add (pnpm-store/, patches/, plus run.json) in the root gitignore, since re-init regenerates the nested one.
In the worktree, write the untracked .sandcastle/run.json:
{ "branch": "sandcastle/<batch-slug>", "base": "main",
"tickets": [292, 293], "notes": "sandbox has no browser/emulator — verify via unit/jsdom tests" }cap is optional and defaults to tickets + 1 — pure dry-stop headroom, so a lane always ends dry, never at a cap. notes reaches the implement prompt verbatim.
.sandcastle/.env is per-working-dir (untracked, never travels with a branch) — copy the agent token in, refresh GH_TOKEN=$(gh auth token). Seed the package-manager store warm from another worktree's store dir (cp -Rc), then install.
Done when the run config echoes exactly the step-1 batch and the resolved ticket list prints their full bodies.
Show the lane in the same message that launches it — tickets, branch, base, cap, model — then start the orchestrator (pnpm sandcastle, or npx tsx .sandcastle/main.mts) in the background. Config is read once at launch: a wrong cap or list means relaunch, never an edit under a live run.
Done when the loop is running and iteration 1 shows in .sandcastle/logs/.
One ticket per iteration: implement → review → fold onto the lane branch. The implement prompt has the agent skip tickets blocked by open work and pick the next workable one, so one blocker never stalls the lane. Judge a run by its logs and docker ps, never by the process — when a run looks stalled, hung after its final iteration, or needs killing, read references/run-hygiene.md.
Done when the loop went dry and every ticket in the run config is accounted for: landed, or named with why not.
After dry, the PR phase runs as its own sandbox agent: it re-runs the repo gate — judging any red against <base>, so a failure that reproduces on base is filed as its own issue and named in the PR rather than blocking — authors the body from the run config's ticket list (one line per landed ticket, every unlanded one named), pushes the lane branch, and opens the PR against <base>. Merging stays a human act.
Done when the PR URL exists and its body accounts for every ticket in the run config. Report the URL, then do any host-side mark-done your source needs (ticket-sources.md).
Lanes are independent by construction. Two residual rules: lanes over overlapping code merge serially — branch the second after the first merges, so cross-lane conflicts happen at merge time as ordinary git, not mid-loop where a conflict kills an orchestrator; and one lane per worktree — a live orchestrator owns its worktree (run-hygiene.md has the liveness check).
{{TICKETS}} and {{NOTES}} arrive via the run's promptArgs; {{SOURCE_BRANCH}} = the branch the agent works on; {{TARGET_BRANCH}} = the host's branch when the iteration started.<promise>COMPLETE</promise>; the orchestrator stops once an iteration lands no commits.claudeCode("<model>") model, and the docker({ imageName, mounts }) provider with its onSandboxReady install hook. Everything per-batch lives in run.json, not in main.mts.© will-ness-ai, 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 3 other files (references) in skills/sandcastle of will-ness-ai/skills.
Open the folder on GitHubat commit 71d8909
Sandcastle 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 |
|---|---|---|---|---|---|---|
| Sandcastle this skillwill-ness-ai/skills | 168 | — | ~1.4k | Automated safety check: Notes | MIT | |
| Run Dozzle Dev Instanceamir20/dozzle | 15k | — | ~747 | Automated safety check: Pass | MIT | |
| Build Px4 macOSPX4/PX4-Autopilot | 13k | — | ~1.1k | Automated safety check: Pass | BSD-3-Clause | |
| Subwave Worktree Devperminder-klair/subwave | 1.4k | — | ~2.4k | 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 |
amir20/dozzle
Starts a Dozzle dev server on a port derived from the current worktree so you can test by hand in a browser, without disturbing instances started elsewhere.
PX4/PX4-Autopilot
Build PX4 board firmware on macOS in the px4-dev Docker container, including git worktrees, and stage commit-labeled artifacts without flashing hardware.
perminder-klair/subwave
Stage a SUB/WAVE git worktree so the dev stack can run from it, then start it.
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.
theopenco/llmgateway
Build, launch, and drive the LLM Gateway stack in an isolated worktree environment to verify API, gateway, dashboard, playground, or screenshot changes.
will-ness-ai/skills
Drive the local cmux app — workspaces, panes, surfaces, terminal input, agent sessions, and browser surfaces.
will-ness-ai/skills
Build a wizard-style HTML page that teaches how and why a change works.
will-ness-ai/skills
Shine a light into a wayfinder map's fog — work one direction now, out of frontier order, or redraw the map itself.
will-ness-ai/skills
Field-test a skill by running it cold in parallel agent sessions, then turn what they hit into edits.
will-ness-ai/skills
Converge on a frontend look through rounds of prototypes and grilling verdicts.
will-ness-ai/skills
Find how this problem is already solved: standards we could adopt, and the industry's best practices.
Works with
Categories
Run a Sandcastle lane — a sandboxed implement→review loop over a fixed batch of work in its own worktree, ended by an agent-authored PR. Sandcastle is an agent skill from will-ness-ai/skills. Run a Sandcastle lane — a sandboxed implement→review loop over a fixed batch of work in its own worktree, ended by an agent-authored PR.
Sandcastle fits situations like: tasks that involve Git worktrees.
Run `npx skills add will-ness-ai/skills --skill sandcastle -a claude-code`. Or copy the skill folder (skills/sandcastle in will-ness-ai/skills) into .claude/skills/sandcastle in your project. Claude Code loads it when a task matches its description.
Run `npx skills add will-ness-ai/skills --skill sandcastle -a codex`. Or copy the skill folder (skills/sandcastle in will-ness-ai/skills) into .agents/skills/sandcastle 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 will-ness-ai/skills --skill sandcastle -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sandcastle, .gemini/skills/sandcastle, .github/skills/sandcastle and .opencode/skills/sandcastle in your project.
Going by SKILL.md and its folder, Sandcastle needs the command-line tools its instructions call (npx, git, gh, pnpm and docker) and credentials named GH_TOKEN and CLAUDE_CODE_OAUTH_TOKEN. Our summary lists: Node.js; Docker; A credential in CLAUDE_CODE_OAUTH_TOKEN.
SKILL.md contains no URLs. Its commands use npx, git, gh and docker, 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. Review the folder before installing.
Sandcastle is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.4k tokens (SKILL.md is roughly 5.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Sandcastle: Run Dozzle Dev Instance (amir20/dozzle, 15k stars), Build Px4 macOS (PX4/PX4-Autopilot, 13k stars), Subwave Worktree Dev (perminder-klair/subwave, 1.4k stars) and Burla Parallel Dev Clusters (Burla-Cloud/burla, 263 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
will-ness-ai (a GitHub user) maintains it in will-ness-ai/skills, which has 168 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 9, 2026.
Source: will-ness-ai/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.