Crea devcontainers preconfigurados con Claude Code, herramientas específicas de cada lenguaje y volúmenes persistentes para entornos de desarrollo aislados.
- Estrellas en GitHub
- 8136
- Archivos
- 10
- Último commit
- 11 nov 2026
- Licencia
- CC-BY-SA-4.0
- Herramientas permitidas
- —
¿Qué hace la skill devcontainer-setup?
devcontainer-setup es una agent skill. Crea devcontainers preconfigurados con Claude Code, herramientas específicas de cada lenguaje y volúmenes persistentes para entornos de desarrollo aislados.
Resumen generado a partir del SKILL.md de la skill.
Sobre la skill devcontainer-setup
Esta SKILL permite a los desarrolladores configurar entornos de desarrollo en entornos controlados (sandboxed) con Claude Code. Automatiza la creación de devcontainers preconfigurados mediante un reconocimiento previo del proyecto para detectar lenguajes como Python, Node/TypeScript, Rust o Go. Una vez identificado el stack, genera un directorio de configuración completo que contiene un Dockerfile, devcontainer.json, un script de post-instalación y configuraciones de shell.
Un agente debe cargar esta SKILL cuando un usuario solicite añadir soporte para devcontainer o necesite un espacio de trabajo aislado. El proceso genera un directorio .devcontainer/ estructurado que incluye herramientas CLI modernas como ripgrep, fzf y tmux, además de funciones de seguridad como sandboxing con bubblewrap e aislamiento de red. Gestiona específicamente proyectos multi-lenguaje combinando extensiones y encadenando comandos de configuración. Esta herramienta está destinada estrictamente a entornos de desarrollo y no está pensada para el despliegue de contenedores en producción.
Lo que un agente puede hacer con ella
- 1Añadir soporte de devcontainer a un proyectoConfigura un nuevo entorno de desarrollo generando automáticamente todos los archivos de contenedor necesarios.
- 2Crear espacios de trabajo de Claude Code aisladosEstablece un entorno aislado para Claude Code utilizando funciones de seguridad como bubblewrap y aislamiento de red.
- 3Configurar entornos multi-lenguajeConfigura un único espacio de trabajo que soporte tanto Python como Node.js mediante la combinación de sus extensiones y comandos de configuración específicos.
- 4Garantizar la persistencia de datos de desarrolloGenera configuraciones que incluyen volúmenes persistentes para datos específicos de cada lenguaje, como los módulos de Cargo o Go.
Escrito a partir del SKILL.md de la skill. Cada caso de uso se verifica con una cita del mismo.
Cómo instalar la skill devcontainer-setup
Cada comando copia la carpeta de la skill al directorio de skills del cliente. Reinicia el cliente o inicia una nueva sesión para cargarla.Instalar la skill devcontainer-setup en Plugin
/plugin marketplace add trailofbits/skills /plugin install devcontainer-setup@trailofbits
Instalar la skill devcontainer-setup en Claude Code
~/.claude/skills/devcontainer-setup/SKILL.md
$ npx degit trailofbits/skills/plugins/devcontainer-setup/skills/devcontainer-setup ~/.claude/skills/devcontainer-setupInstalar la skill devcontainer-setup en Claude Code (project)
.claude/skills/devcontainer-setup/SKILL.md
$ npx degit trailofbits/skills/plugins/devcontainer-setup/skills/devcontainer-setup .claude/skills/devcontainer-setupInstalar la skill devcontainer-setup en Codex
~/.agents/skills/devcontainer-setup/SKILL.md
$ npx degit trailofbits/skills/plugins/devcontainer-setup/skills/devcontainer-setup ~/.agents/skills/devcontainer-setupInstalar la skill devcontainer-setup en Gemini CLI
~/.gemini/skills/devcontainer-setup/SKILL.md
$ npx degit trailofbits/skills/plugins/devcontainer-setup/skills/devcontainer-setup ~/.gemini/skills/devcontainer-setupInstalar la skill devcontainer-setup en Claude.ai
npx degit trailofbits/skills/plugins/devcontainer-setup/skills/devcontainer-setup devcontainer-setup && zip -r devcontainer-setup.zip devcontainer-setup # claude.ai → Customize → Skills → + → Create skill → Upload a skill → devcontainer-setup.zip
Verificaciones automáticas
Ejecutado 14 nov 2026Informe completo →Superó nuestras comprobaciones automáticas. No es una auditoría de seguridad: lee los scripts antes de dejar que un agente los ejecute. Cómo funcionan las verificaciones
- Repositorio de origen vinculado y accesibletrailofbits/skills/plugins/devcontainer-setup/skills/devcontainer-setup is public and reachablegithub.com/trailofbits/skills/tree/HEAD/plugins/devcontainer ↗Aprobado
- Licencia de código abierto (OSI)CC-BY-SA-4.0 is not OSI-approvedspdx.org/licenses/CC-BY-SA-4.0.html ↗Hallazgo
- Commit o lanzamiento en el último añoLast commit 2026-11-11github.com/trailofbits/skills/commits ↗Aprobado
- Sin descargar y ejecutar ni robo de credenciales en los scripts2 scripts read; no download-and-run, remote eval, base64 execution or credential uploadAprobado
- Sin instrucciones ocultas en SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/trailofbits/skills/blob/HEAD/plugins/devcontainer ↗Aprobado
- Las herramientas preaprobadas están acotadasNo pre-approved tools; the agent asks before using onegithub.com/trailofbits/skills/blob/HEAD/plugins/devcontainer ↗Aprobado
SKILL.md
Ver en GitHubDevcontainer Setup Skill
Creates a pre-configured devcontainer with Claude Code and language-specific tooling.
When to Use
- User asks to "set up a devcontainer" or "add devcontainer support"
- User wants a sandboxed Claude Code development environment
- User needs isolated development environments with persistent configuration
When NOT to Use
- User already has a devcontainer configuration and just needs modifications
- User is asking about general Docker or container questions
- User wants to deploy production containers (this is for development only)
Workflow
flowchart TB
start([User requests devcontainer])
recon[1. Project Reconnaissance]
detect[2. Detect Languages]
generate[3. Generate Configuration]
write[4. Write files to .devcontainer/]
done([Done])
start --> recon
recon --> detect
detect --> generate
generate --> write
write --> done
Phase 1: Project Reconnaissance
Infer Project Name
Check in order (use first match):
package.json→namefieldpyproject.toml→project.nameCargo.toml→package.namego.mod→ module path (last segment after/)- Directory name as fallback
Convert to slug: lowercase, replace spaces/underscores with hyphens.
Detect Language Stack
| Language | Detection Files |
|---|---|
| Python | pyproject.toml, *.py |
| Node/TypeScript | package.json, tsconfig.json |
| Rust | Cargo.toml |
| Go | go.mod, go.sum |
Multi-Language Projects
If multiple languages are detected, configure all of them in the following priority order:
- Python - Primary language, uses Dockerfile for uv + Python installation
- Node/TypeScript - Uses devcontainer feature
- Rust - Uses devcontainer feature
- Go - Uses devcontainer feature
For multi-language postCreateCommand, chain all setup commands:
uv run /opt/post_install.py && uv sync && npm ci
Extensions and settings from all detected languages should be merged into the configuration.
Phase 2: Generate Configuration
Start with base templates from resources/ directory. Substitute:
{{PROJECT_NAME}}→ Human-readable name (e.g., "My Project"){{PROJECT_SLUG}}→ Slug for volumes (e.g., "my-project")
Then apply language-specific modifications below.
Base Template Features
The base template includes:
- Claude Code with marketplace plugins (anthropics/skills, trailofbits/skills, trailofbits/skills-curated)
- Sandboxing via bubblewrap and socat
- Python 3.13 via uv (fast binary download)
- Node 22 via fnm (Fast Node Manager)
- ast-grep for AST-based code search
- Network isolation tools (iptables, ipset) with NET_ADMIN capability
- Security mounts:
.devcontainer/mounted read-only to prevent container escape - Token forwarding:
CLAUDE_CODE_OAUTH_TOKENandANTHROPIC_API_KEYviaremoteEnv - Modern CLI tools: ripgrep, fd, fzf, tmux, git-delta
Language-Specific Sections
Python Projects
Detection: pyproject.toml, requirements.txt, setup.py, or *.py files
Dockerfile additions:
The base Dockerfile already includes Python 3.13 via uv. If a different version is required (detected from pyproject.toml), modify the Python installation:
# Install Python via uv (fast binary download, not source compilation)
RUN uv python install <version> --default
devcontainer.json extensions:
Add to customizations.vscode.extensions:
"ms-python.python",
"ms-python.vscode-pylance",
"charliermarsh.ruff"
Add to customizations.vscode.settings:
"python.defaultInterpreterPath": ".venv/bin/python",
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
postCreateCommand:
If pyproject.toml exists, chain commands:
rm -rf .venv && uv sync && uv run /opt/post_install.py
Node/TypeScript Projects
Detection: package.json or tsconfig.json
No Dockerfile additions needed: The base template includes Node 22 via fnm (Fast Node Manager).
devcontainer.json extensions:
Add to customizations.vscode.extensions:
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
Add to customizations.vscode.settings:
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
postCreateCommand: Detect package manager from lockfile and chain with base command:
pnpm-lock.yaml→uv run /opt/post_install.py && pnpm install --frozen-lockfileyarn.lock→uv run /opt/post_install.py && yarn install --frozen-lockfilepackage-lock.json→uv run /opt/post_install.py && npm ci- No lockfile →
uv run /opt/post_install.py && npm install
Rust Projects
Detection: Cargo.toml
Features to add:
"ghcr.io/devcontainers/features/rust:1": {}
devcontainer.json extensions:
Add to customizations.vscode.extensions:
"rust-lang.rust-analyzer",
"tamasfe.even-better-toml"
Add to customizations.vscode.settings:
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer"
}
postCreateCommand:
If Cargo.lock exists, use locked builds:
uv run /opt/post_install.py && cargo build --locked
If no lockfile, use standard build:
uv run /opt/post_install.py && cargo build
Go Projects
Detection: go.mod
Features to add:
"ghcr.io/devcontainers/features/go:1": {
"version": "latest"
}
devcontainer.json extensions:
Add to customizations.vscode.extensions:
"golang.go"
Add to customizations.vscode.settings:
"[go]": {
"editor.defaultFormatter": "golang.go"
},
"go.useLanguageServer": true
postCreateCommand:
uv run /opt/post_install.py && go mod download
Reference Material
For additional guidance, see:
references/dockerfile-best-practices.md- Layer optimization, multi-stage builds, architecture supportreferences/features-vs-dockerfile.md- When to use devcontainer features vs custom Dockerfile
Adding Persistent Volumes
Pattern for new mounts in devcontainer.json:
"mounts": [
"source={{PROJECT_SLUG}}-<purpose>-${devcontainerId},target=<container-path>,type=volume"
]
Common additions:
source={{PROJECT_SLUG}}-cargo-${devcontainerId},target=/home/vscode/.cargo,type=volume(Rust)source={{PROJECT_SLUG}}-go-${devcontainerId},target=/home/vscode/go,type=volume(Go)
Output Files
Generate these files in the project's .devcontainer/ directory:
Dockerfile- Container build instructionsdevcontainer.json- VS Code/devcontainer configurationpost_install.py- Post-creation setup script.zshrc- Shell configurationinstall.sh- CLI helper for managing the devcontainer (devccommand)
Validation Checklist
Before presenting files to the user, verify:
- All
{{PROJECT_NAME}}placeholders are replaced with the human-readable name - All
{{PROJECT_SLUG}}placeholders are replaced with the slugified name - JSON syntax is valid in
devcontainer.json(no trailing commas, proper nesting) - Language-specific extensions are added for all detected languages
postCreateCommandincludes all required setup commands (chained with&&)
User Instructions
After generating, inform the user:
- How to start: "Open in VS Code and select 'Reopen in Container'"
- Alternative:
devcontainer up --workspace-folder . - CLI helper: Run
.devcontainer/install.sh self-installto add thedevccommand to PATH
Archivos de esta skill
10Preguntas sobre la skill devcontainer-setup
¿Cómo instalo la skill devcontainer-setup en Claude Code?
Ejecuta npx degit trailofbits/skills/plugins/devcontainer-setup/skills/devcontainer-setup ~/.claude/skills/devcontainer-setup. Claude Code carga las skills desde ~/.claude/skills (todos los proyectos) o .claude/skills (un proyecto) y usa una skill cuando su descripción coincide con la tarea.
¿Qué clientes pueden usar la skill devcontainer-setup?
Cualquier cliente que lea el formato Agent Skills: Claude Code, Codex, Gemini CLI y claude.ai (subir como ZIP). Los scripts de la skill se ejecutan solo donde el cliente permite la ejecución de código.