Agent skill

Devcontainer Dev

by stacklok in stacklok/toolhive-studio

Spin up and interact with ToolHive Studio's containerized dev environment (Xvfb + noVNC + DinD).

Apache-2.0Auto-check: notesAgent Workflows

Install Devcontainer Dev

skills CLI
$ npx skills add stacklok/toolhive-studio --skill devcontainer-dev -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install stacklok/toolhive-studio devcontainer-dev --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/stacklok/toolhive-studio.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.codex/skills/devcontainer-dev .claude/skills/devcontainer-dev && rm -rf skills-src

Use ~/.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/

Facts

Skill name
devcontainer-dev
GitHub stars
170
Token cost
~3.8k tokens
SKILL.md length
1,473 words
Files
1
Skills in repo
9
Repo updated
First seen
Licence
Apache-2.0

At a glance

Spin up and interact with ToolHive Studio's containerized dev environment (Xvfb + noVNC + DinD).

  • Works in 3 steps: Written to a file by the launcher:… → Set as the terminal tab title via OSC… → Prominent banners in the output — a…
  • Debugging the app in isolation — locally
  • SKILL.md covers Entry point, The three scripts, What the container runs and Finding the URL (the logs are…, plus 7 more sections
  • Calls docker, pnpm and npx

What it does

Devcontainer Dev is an agent skill from stacklok/toolhive-studio. Spin up and interact with ToolHive Studio's containerized dev environment (Xvfb + noVNC + DinD). Use when running, testing, or debugging the app in isolation — locally, in a git worktree, or in GitHub Codespaces; when touching .devcontainer/, scripts/devcontainer-.sh, or the devContainer:dev npm script; or when debugging "blank white window", "Docker daemon failed to start", or "Missing X server" errors in the devcontainer. The container is fully isolated: no host pnpm install, no host Docker socket, no host…

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows, covering Git worktrees, MCP servers and Containers. It works with Docker, GitHub, pnpm and Git. The repository describes itself as: ToolHive is an application that allows you to install, manage and run MCP servers and connect them to AI agents. The licence is Apache-2.0.

When your agent uses it

  • Debugging the app in isolation — locally
  • In a git worktree
  • In GitHub Codespaces
  • Touching .devcontainer/

Example prompts

  • “blank white window”
  • “Docker daemon failed to start”
  • “Missing X server”
  • “/devcontainer-dev”

Requirements

  • Docker
  • Pre-approved tools (allowed-tools): Read, Grep, Glob, Bash

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Written to a file by the launcher: ~/.cache/toolhive-studio-url. Survives any amount of output.
  2. Set as the terminal tab title via OSC escape. Visible in the tab bar of most terminals regardless of scrollback state.
  3. Prominent banners in the output — a green initial block right after devcontainer up, plus an inverse-video ✓ ToolHive ready — banner that…

What it can do on your machine

Read from SKILL.md and the folder at commit 87f7a55. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Grep
    • Glob
    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • docker
    • pnpm
    • npx
    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use docker, pnpm and npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Devcontainer Dev loads about 3.8k tokens when it runs. Until then it costs about 150 tokens; SKILL.md has 1,473 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~150
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteRuns commands with sudoSKILL.md:208
    sudo modprobe iptable_nat iptable_filter ip_tables
  • NoteRuns commands with sudoSKILL.md:214
    ptable_nat\niptable_filter\nip_tables" | sudo tee /etc/modules-load.d/docker.conf
  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Grep, Glob, Bash

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.

SKILL.md

The full file from stacklok/toolhive-studio at commit 87f7a55, republished under its Apache-2.0 licence (© stacklok). 1,473 words, ~3,793 tokens.

Download SKILL.mdSave it as .claude/skills/devcontainer-dev/SKILL.md (or your agent's skills folder).
name
devcontainer-dev
description
Spin up and interact with ToolHive Studio's containerized dev environment (Xvfb + noVNC + DinD). Use when running, testing, or debugging the app in isolation — locally, in a git worktree, or in GitHub Codespaces; when touching `.devcontainer/*`, `scripts/devcontainer-*.sh`, or the `devContainer:dev` npm script; or when debugging "blank white window", "Docker daemon failed to start", or "Missing X server" errors in the devcontainer. The container is fully isolated: no host pnpm install, no host Docker socket, no host X11/GPU — experiment freely without contaminating the host.
allowed-tools
Read, Grep, Glob, Bash

Containerized Dev Environment

An isolated, cross-platform test environment for ToolHive Studio. The whole Electron app — including its backend thv binary and the MCP-server containers it spawns — runs inside a single devcontainer. You interact with the UI via a noVNC browser tab.

The entire stack (Node, Electron, display server, window manager, VNC server, Docker-in-Docker, DBus, keyring) lives in the container. Nothing is installed on the host. That's the whole point: every worktree can have its own container and its own experiments, with zero risk of contaminating the user's global installs.


Entry point

pnpm devContainer:dev

runs scripts/devcontainer-dev.sh on the host. The script is "smart":

  • If executed on the host: runs devcontainer up to build/start the container, then devcontainer exec to run the entrypoint inside it.
  • If executed inside a container (detected via /.dockerenv): skips the build step and just runs the entrypoint directly. This path is used by GitHub Codespaces.

The three scripts

ScriptRuns onPurpose
scripts/devcontainer-dev.shhostPicks a host port, kills stale processes, starts readiness poller, opens browser when ready, devcontainer execs the entrypoint.
scripts/devcontainer-entrypoint.shin containerCleans stale X/VNC state, starts Xvfb, fluxbox, x11vnc, websockify/noVNC, dbus, gnome-keyring, then runs pnpm start.
scripts/devcontainer-post-start.shin containerpostStartCommand in devcontainer.json. In Codespaces (detected via $CODESPACES) it nohup-launches the entrypoint in the background so the noVNC preview pane opens without user action.

What the container runs

  • Node 24 (matches .nvmrc)
  • Electron + runtime deps — GTK, NSS, X11, etc. (see .devcontainer/Dockerfile)
  • Display stack — Xvfb (virtual framebuffer at 1920×1200), fluxbox (window manager, auto-fullscreens windows with WM_CLASS=ToolHive), x11vnc (VNC server), noVNC + websockify (browser client on port 6080)
  • Secret provider stack — dbus + gnome-keyring. Required by ToolHive's secret API; without them the backend returns 500 on secrets endpoints. Mirrors the setup in .github/workflows/_e2e.yml.
  • Docker-in-Docker via the docker-in-docker:2 devcontainer feature. Supplies /var/run/docker.sock inside the container so the bundled thv CLI can spawn MCP-server containers.

Finding the URL (the logs are very long)

pnpm start + electron-forge + Vite + Electron + HMR produce a lot of output. The terminal scrollback often exhausts. Three recovery mechanisms are built in:

  1. Written to a file by the launcher: ~/.cache/toolhive-studio-url. Survives any amount of output.
    bash
    cat ~/.cache/toolhive-studio-url
  2. Set as the terminal tab title via OSC escape. Visible in the tab bar of most terminals regardless of scrollback state.
  3. Prominent banners in the output — a green initial block right after devcontainer up, plus an inverse-video ✓ ToolHive ready — <URL> banner that fires only once the app is actually usable.

If you're piping the output:

bash
pnpm devContainer:dev 2>&1 | tee /tmp/dev.log
# later:
grep -E 'ToolHive ready|vnc\.html' /tmp/dev.log

The readiness banner is what you care about. It gates on three signals simultaneously:

  • noVNC's HTTP endpoint answers (the browser tab will actually load)
  • The Electron binary is running (matched via pgrep -f 'electron/dist/electron')
  • thv serve is running (matched via pgrep -f 'thv serve' — not pgrep -x thv, because the short-lived version-check invocation also matches on bare name)

Only once all three are true does the banner fire and the host's browser auto-open.


Per-worktree isolation

Each git worktree gets its own independent devcontainer:

  • Container identity — labelled with devcontainer.local_folder=<absolute-worktree-path>. The devcontainer CLI uses this to decide which container to reuse vs create fresh.
  • Node modules — volume named toolhive-node-modules-<basename>, scoped to the worktree's basename. No cross-worktree install pollution.
  • Host port — the primary clone uses :6080; additional worktrees try :6080 first and fall back to a Docker-assigned random port if it's taken. So multiple worktrees can run simultaneously. The actual bound port is queried with docker port "$CONTAINER_ID" 6080/tcp and the URL is generated from that.
  • DinD, display state, keyring, etc. — all container-local. Tearing down a worktree's container removes all of it.

The host is never touched — no host-side pnpm install, no host-side /tmp/.X11-unix mount, no host-side Docker socket passthrough, no host GPU. Everything the app needs is inside the container. Even the NVIDIA driver on the host is unreachable from inside — the container uses CPU software rendering.


Interacting with a running container

Find the container ID for a given worktree:

bash
WORKDIR="$(pwd)"   # or a specific worktree path
CONTAINER=$(docker ps --filter "label=devcontainer.local_folder=$WORKDIR" --format '{{.ID}}' | head -1)

Common operations:

bash
# Shell in
docker exec -it "$CONTAINER" bash

# Run as the devcontainer user (usually correct for pnpm / thv commands)
docker exec -u node "$CONTAINER" pnpm test

# One-off inspection
docker exec "$CONTAINER" ps auxf

# DinD health
docker exec "$CONTAINER" docker info
docker exec "$CONTAINER" docker ps
Log files (written by the entrypoint)
PathContents
/tmp/xvfb.logXvfb startup and runtime errors
/tmp/fluxbox.logWindow manager
/tmp/x11vnc.logVNC server — includes client connection events
/tmp/websockify.lognoVNC WebSocket proxy
/tmp/keyring.loggnome-keyring-daemon unlock output
/tmp/entrypoint.logOutput of the Codespaces auto-launch entrypoint (only exists in Codespaces)
Killing stale state

If the app gets wedged, the entrypoint's first action on every run is to pkill all the usual suspects. To do it manually:

bash
docker exec "$CONTAINER" bash -c '
  pkill -f "electron/dist/electron"; pkill -f "thv serve"
  pkill -f Xvfb; pkill -f fluxbox; pkill -f x11vnc; pkill -f websockify
  rm -f /tmp/.X99-lock /tmp/.X11-unix/X99
'

Driving the app as an agent

The container has enough tools for an AI agent to both see and interact with the running Electron window without going through the browser / noVNC. Useful for headless testing, reproducing user-reported UI bugs, or validating a feature end-to-end.

All commands run via docker exec against the container with DISPLAY=:99 set (matches Xvfb's display).

See the screen (screenshots)
bash
# Take a PNG of the whole virtual framebuffer
docker exec "$CONTAINER" bash -c 'DISPLAY=:99 import -window root /tmp/shot.png'
# Copy it to the host for viewing / feeding to a vision model
docker cp "$CONTAINER:/tmp/shot.png" /tmp/shot.png

import is from ImageMagick. For a specific window only, use xwininfo to get the WID then import -window <WID>.

See the window tree (what's there, where, which is focused)
bash
docker exec "$CONTAINER" bash -c 'DISPLAY=:99 xwininfo -root -tree'
docker exec "$CONTAINER" bash -c 'DISPLAY=:99 xdotool getactivewindow getwindowname'
docker exec "$CONTAINER" bash -c 'DISPLAY=:99 xdotool search --name ToolHive'

The main app window has WM_CLASS=ToolHive (see gotcha below). Its geometry is usually 1920x1200+0+0 once fluxbox has auto-fullscreened it.

Interact with the UI (mouse, keyboard)
bash
# Move the mouse and click
docker exec "$CONTAINER" bash -c 'DISPLAY=:99 xdotool mousemove 400 300 click 1'

# Type into whatever has focus
docker exec "$CONTAINER" bash -c "DISPLAY=:99 xdotool type --delay 20 'hello world'"

# Send a keystroke
docker exec "$CONTAINER" bash -c 'DISPLAY=:99 xdotool key ctrl+shift+i'   # DevTools

# Focus the main window by name
docker exec "$CONTAINER" bash -c 'DISPLAY=:99 xdotool search --name ToolHive windowactivate'
Typical agent loop

Screenshot → feed to vision model → decide next action → xdotool → screenshot again. The usual caveats apply: pixel-coordinate automation is fragile, and CSS changes or modal dialogs can throw it off. For robust long-term automation, prefer a DOM-level approach (e.g. Chrome DevTools Protocol against Electron's remote debugging port — not currently wired in, see Future: CDP access).

Show full SKILL.md (586 more words)Show less
Future: CDP access

For DOM-level agent automation (querying, clicking specific elements by selector, scraping state), the cleanest path is Chromium's DevTools Protocol. Opt-in: pass --remote-debugging-port=9223 to Electron in the entrypoint, add -p 9223:9223 to the container's runArgs, and the agent connects via ws://localhost:9223/devtools/page/<id>. Not currently enabled by default; add it when you need it.


Gotchas

Docker daemon won't start (Linux, non-stock kernels)

Symptom: (*) Failed to start docker, retrying... in a loop; thv has no runtime; dockerd.log contains:

failed to create NAT chain DOCKER: iptables failed: ...
can't initialize iptables table `nat': Table does not exist (do you need to insmod?)

Seen on zen, hardened, XanMod, and other non-stock Linux kernels that don't autoload iptables modules. Fix (on the host):

bash
sudo modprobe iptable_nat iptable_filter ip_tables

Persist across reboots:

bash
echo -e "iptable_nat\niptable_filter\nip_tables" | sudo tee /etc/modules-load.d/docker.conf

A complete explanation is in a comment block in .devcontainer/devcontainer.json directly above the docker-in-docker feature declaration. Mac, Windows/WSL2, Codespaces, and stock Ubuntu/Debian/Fedora are unaffected.

Electron renders a blank white page

Root cause: Docker's default /dev/shm is 64 MB, too small for Chromium's compositor buffers; it fails silently and paints nothing.

This is already fixed in the setup:

  • runArgs has --shm-size=2g to grow the shared memory
  • The entrypoint launches Electron with --disable-dev-shm-usage so Chromium falls back to /tmp anyway

If you're modifying the startup flags, keep these.

Fluxbox fullscreen rule doesn't match

The Electron main window's WM_CLASS is ToolHive, not Electron. The ~/.fluxbox/apps file the entrypoint generates targets (class=ToolHive) for that reason. The Electron-classed windows that show up in xwininfo are tiny 16×16 internal helper windows — ignore them.

Readiness false-positive (transient processes)

pgrep -x thv would match the short-lived thv version / thv --version invocation that Electron runs during startup to verify the binary is present. The long-running backend is always thv serve --openapi ... --port=N, so use pgrep -f "thv serve" to gate on that specifically.

Readiness false-positive (pgrep self-match)

When using pgrep -f PATTERN from a shell command (e.g. bash -c 'pgrep -f "thv serve"'), the pattern string appears verbatim in the invoking shell's argv — and pgrep -f matches against the full argv of every process. So pgrep matches its own parent shell and always returns true, even when nothing is actually running the target process. Use the standard bracket-class trick: pgrep -f '[t]hv serve'. The regex character class [t] matches t literally, so it still matches thv serve, but the literal string [t]hv serve in the invoking shell's argv doesn't match the regex. See scripts/devcontainer-dev.sh and .devcontainer/greeting.sh for the pattern in use.

Secret provider returns 500

ToolHive's secret API needs DBus + gnome-keyring. The Dockerfile installs dbus, dbus-x11, gnome-keyring, libsecret-1-0, libsecret-1-dev, and the entrypoint starts dbus-launch and unlocks the keyring with gnome-keyring-daemon --unlock --components=secrets,ssh,pkcs11. The exact setup mirrors .github/workflows/_e2e.yml — if it breaks, cross-reference there.


Rebuilding the container

Most script changes don't require a rebuild (scripts are bind-mounted). A rebuild is only needed when you change:

  • .devcontainer/Dockerfile (apt packages)
  • .devcontainer/devcontainer.json → runArgs, features, mounts

To force a rebuild:

bash
npx --yes @devcontainers/cli up --workspace-folder . --remove-existing-container

Codespaces specifics

  • forwardPorts: [6080] exposes noVNC via the Codespaces tunnel (HTTPS).
  • portsAttributes."6080".onAutoForward: "openPreview" makes the Simple Browser preview pane open automatically.
  • postStartCommand runs scripts/devcontainer-post-start.sh, which (when $CODESPACES is set) nohup-launches the entrypoint in the background. So opening a Codespace gets you a running app with no terminal commands.
  • The on-host port-picking logic (NOVNC_HOST_PORT env var, etc.) is a no-op here — forwardPorts is the only mechanism that matters for the user-facing URL.

What this skill is NOT

  • Not a guide for the standard non-container dev workflow. If you want pnpm start running directly on the host, follow the top-level CLAUDE.md instructions, not this skill.
  • Not a guide for packaging or e2e tests. pnpm make / pnpm e2e have their own workflows.
  • Not a general Docker / devcontainer tutorial. It only covers this project's specific setup.

© stacklok, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .codex/skills/devcontainer-dev of stacklok/toolhive-studio.

Open the folder on GitHubat commit 87f7a55

Compare with similar skills

Devcontainer 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.

Devcontainer Dev compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Devcontainer Dev this skillstacklok/toolhive-studio170—~3.8kAutomated safety check: NotesApache-2.0
Project Releaseswimmwatch/cloakbrowser-mcp161—~1.9kAutomated safety check: PassMIT
Dotnet Debuggingnovotnyllc/dotnet-artisan233—~2.1kAutomated safety check: PassMIT
Pluggedin Stack OpsVeriTeknik/pluggedin-app103—~1.3kAutomated safety check: NotesMIT
Project Pull Requestswimmwatch/cloakbrowser-mcp161—~1kAutomated safety check: PassMIT
ReleaseWebMCP-org/npm-packages103—~1.6kAutomated safety check: NotesMIT

Similar skills

  • Project Release

    swimmwatch/cloakbrowser-mcp

    Prepare, publish, verify, or recover a cloakbrowser-mcp release only when the user explicitly requests release work.

    161 GitHub stars~1.9k tokensUpdated 5 days ago
    Agent WorkflowsAuto-check passed
  • Dotnet Debugging

    novotnyllc/dotnet-artisan

    Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…

    233 GitHub stars~2.1k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Pluggedin Stack Ops

    VeriTeknik/pluggedin-app

    A skill your agent uses when deploying, restarting, verifying or rolling back the containerised plugged.in production stack, when the site returns 404 or 5xx after a deploy or git operation, or when…

    103 GitHub stars~1.3k tokensUpdated yesterday
    DevOps & CloudAuto-check: notes
  • Project Pull Request

    swimmwatch/cloakbrowser-mcp

    Create, update, prepare, or review a cloakbrowser-mcp GitHub Pull Request only when the user explicitly requests PR work.

    161 GitHub stars~1k tokensUpdated 5 days ago
    DevelopmentAuto-check passed
  • Release

    WebMCP-org/npm-packages

    Release the @mcp-b monorepo with Changesets and pnpm, using npm trusted publishing in GitHub Actions.

    103 GitHub stars~1.6k tokensUpdated 3 days ago
    DevelopmentAuto-check: notes
  • Project Docs Maintainer

    swimmwatch/cloakbrowser-mcp

    Maintain, organize, consolidate, or audit the cloakbrowser-mcp documentation set only when the user explicitly requests project documentation maintenance or an authorized public change requires it.

    161 GitHub stars~569 tokensUpdated 5 days ago
    DevelopmentAuto-check passed

More from stacklok/toolhive-studio

All 9 skills in this repo
  • Deep Links

    stacklok/toolhive-studio

    Deep links in ToolHive Studio. An agent skill from stacklok/toolhive-studio.

    170 GitHub stars~1.6k tokensUpdated today
    Auto-check: notes
  • Bug Fix TDD

    stacklok/toolhive-studio

    Reproduce and fix bugs using TDD. An agent skill from stacklok/toolhive-studio.

    170 GitHub stars~1.7k tokensUpdated today
    Auto-check: notes
  • Security Vuln Remediation

    stacklok/toolhive-studio

    Remediate security vulnerabilities found by Grype or pnpm audit.

    170 GitHub stars~2.3k tokensUpdated today
    Auto-check: notes
  • Skill Creator

    stacklok/toolhive-studio

    Create new AI agent skills for Claude Code, Codex, and Cursor.

    170 GitHub stars~677 tokensUpdated today
    Auto-check passed
  • Testing API Assertions

    stacklok/toolhive-studio

    Verify API requests in tests. An agent skill from stacklok/toolhive-studio.

    170 GitHub stars~993 tokensUpdated today
    Auto-check passed
  • Testing API Overrides

    stacklok/toolhive-studio

    Test that components send correct query parameters or request arguments.

    170 GitHub stars~1.6k tokensUpdated today
    Auto-check passed

Questions about Devcontainer Dev

What does Devcontainer Dev do?

Spin up and interact with ToolHive Studio's containerized dev environment (Xvfb + noVNC + DinD). Devcontainer Dev is an agent skill from stacklok/toolhive-studio. Spin up and interact with ToolHive Studio's containerized dev environment (Xvfb + noVNC + DinD).

When should I use Devcontainer Dev?

Devcontainer Dev fits situations like: debugging the app in isolation — locally; in a git worktree; in GitHub Codespaces; touching .devcontainer/.

How do I install Devcontainer Dev in Claude Code?

Run `npx skills add stacklok/toolhive-studio --skill devcontainer-dev -a claude-code`. Or copy the skill folder (.codex/skills/devcontainer-dev in stacklok/toolhive-studio) into .claude/skills/devcontainer-dev in your project. Claude Code loads it when a task matches its description.

How do I install Devcontainer Dev in Codex?

Run `npx skills add stacklok/toolhive-studio --skill devcontainer-dev -a codex`. Or copy the skill folder (.codex/skills/devcontainer-dev in stacklok/toolhive-studio) into .agents/skills/devcontainer-dev in your project. Codex loads it when a task matches its description.

Can I use Devcontainer Dev in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add stacklok/toolhive-studio --skill devcontainer-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/devcontainer-dev, .gemini/skills/devcontainer-dev, .github/skills/devcontainer-dev and .opencode/skills/devcontainer-dev in your project.

What does Devcontainer Dev need to run?

Going by SKILL.md and its folder, Devcontainer Dev needs the command-line tools its instructions call (docker, pnpm, npx and bash). Our summary lists: Docker. Its frontmatter pre-approves these tools: Read, Grep, Glob, Bash.

Does Devcontainer Dev access the network?

SKILL.md contains no URLs. Its commands use docker and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Devcontainer Dev safe to install?

Our automated static check of SKILL.md found notes only (runs commands with sudo; pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Devcontainer Dev use?

Devcontainer Dev is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Devcontainer Dev use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Devcontainer Dev?

Skills that share tags, products or a category with Devcontainer Dev: Project Release (swimmwatch/cloakbrowser-mcp, 161 stars), Dotnet Debugging (novotnyllc/dotnet-artisan, 233 stars), Pluggedin Stack Ops (VeriTeknik/pluggedin-app, 103 stars) and Project Pull Request (swimmwatch/cloakbrowser-mcp, 161 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Devcontainer Dev?

stacklok (a GitHub organization) maintains it in stacklok/toolhive-studio, which has 170 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 7, 2026.

Source: stacklok/toolhive-studio on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.