
关于
创建包含 Claude Code、语言特定工具链(Python/Node/Rust/Go)和持久卷的 DevContainer。适用于为项目添加 DevContainer 支持、设置隔离开发环境或配置沙箱化 Claude Code 工作区
name: devcontainer-setup description: Creates devcontainers with Claude Code, language-specific tooling (Python/Node/Rust/Go), and persistent volumes. Use when adding devcontainer support to a project, setting up isolated development environments, or configuring sandboxed Claude Code workspaces. risk: safe source: vibeship-spawner-skills (Apache 2.0) date_added: 2026-03-06
Devcontainer 设置技能
创建预配置的 devcontainer,包含 Claude Code 和语言特定工具链。
何时使用
- 用户要求"设置 devcontainer"或"添加 devcontainer 支持"
- 用户需要沙盒化的 Claude Code 开发环境
- 用户需要具有持久化配置的隔离开发环境
何时不使用
- 用户已有 devcontainer 配置,只需要修改
- 用户询问的是通用 Docker 或容器问题
- 用户想要部署生产容器(此技能仅用于开发)
工作流程
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
阶段 1:项目侦察
推断项目名称
按以下顺序检查(使用第一个匹配项):
package.json→name字段pyproject.toml→project.nameCargo.toml→package.namego.mod→ 模块路径(/后的最后一段)- 目录名称作为后备
转换为 slug:小写,将空格/下划线替换为连字符。
检测语言栈
| 语言 | 检测文件 |
|------|----------|
| Python | pyproject.toml, *.py |
| Node/TypeScript | package.json, tsconfig.json |
| Rust | Cargo.toml |
| Go | go.mod, go.sum |
多语言项目
如果检测到多种语言,按以下优先级顺序配置所有语言:
- Python - 主要语言,使用 Dockerfile 安装 uv + Python
- Node/TypeScript - 使用 devcontainer feature
- Rust - 使用 devcontainer feature
- Go - 使用 devcontainer feature
对于多语言 postCreateCommand,链接所有设置命令:
uv run /opt/post_install.py && uv sync && npm ci
所有检测到的语言的扩展和设置应合并到配置中。
阶段 2:生成配置
从 resources/ 目录的基础模板开始。替换:
{{PROJECT_NAME}}→ 人类可读名称(例如 "My Project"){{PROJECT_SLUG}}→ 用于卷的 slug(例如 "my-project")
然后应用下面的语言特定修改。
基础模板功能
基础模板包含:
- Claude Code 及 marketplace 插件(anthropics/skills, trailofbits/skills, trailofbits/skills-curated)
- Python 3.13 通过 uv(快速二进制下载)
- Node 22 通过 fnm(Fast Node Manager)
- ast-grep 用于基于 AST 的代码搜索
- 网络隔离工具(iptables, ipset)具有 NET_ADMIN 能力
- 现代 CLI 工具:ripgrep, fd, fzf, tmux, git-delta
语言特定部分
Python 项目
检测: pyproject.toml, requirements.txt, setup.py, 或 *.py 文件
Dockerfile 添加内容:
基础 Dockerfile 已通过 uv 包含 Python 3.13。如果需要不同版本(从 pyproject.toml 检测),修改 Python 安装:
# Install Python via uv (fast binary download, not source compilation)
RUN uv python install <version> --default
devcontainer.json 扩展:
添加到 customizations.vscode.extensions:
"ms-python.python",
"ms-python.vscode-pylance",
"charliermarsh.ruff"
添加到 customizations.vscode.settings:
"python.defaultInterpreterPath": ".venv/bin/python",
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
postCreateCommand:
如果存在 pyproject.toml,链接命令:
rm -rf .venv && uv sync && uv run /opt/post_install.py
Node/TypeScript 项目
检测: package.json 或 tsconfig.json
无需 Dockerfile 添加内容: 基础模板已通过 fnm(Fast Node Manager)包含 Node 22。
devcontainer.json 扩展:
添加到 customizations.vscode.extensions:
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
添加到 customizations.vscode.settings:
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
postCreateCommand: 从 lockfile 检测包管理器并与基础命令链接:
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- 无 lockfile →