用途
devcontainer-setup 用于创建一个预配置的开发容器(devcontainer),其中包含 Claude Code 以及语言特定工具链。它适合以下场景:
- 用户要求“设置 devcontainer”或“添加 devcontainer 支持”
- 用户希望获得沙箱化的 Claude Code 开发环境
- 用户需要带持久配置的隔离开发环境
以下情况不适用:
- 用户已有 devcontainer 配置,仅需修改
- 用户询问一般性的 Docker 或容器问题
- 用户要部署生产容器(本技能仅用于开发)
主要能力
工作流程:项目侦察 → 检测语言 → 生成配置 → 写入 .devcontainer/ 目录。
Phase 1:项目侦察
推断项目名称,按顺序取第一个匹配项:package.json 的 name 字段、pyproject.toml 的 project.name、Cargo.toml 的 package.name、go.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
各语言检测到的扩展与设置将合并到配置中。
Phase 2:生成配置
从 resources/ 目录的基础模板开始,替换占位符:{{PROJECT_NAME}} → 人类可读名称;{{PROJECT_SLUG}} → 用于卷的 slug。
基础模板特性包括:Claude Code 及市场插件(anthropics/skills、trailofbits/skills、trailofbits/skills-curated);通过 uv 安装 Python 3.13(快速二进制下载);通过 fnm(Fast Node Manager)安装 Node 22;ast-grep 用于基于 AST 的代码搜索;网络隔离工具(iptables、ipset)及 NET_ADMIN 能力;现代 CLI 工具:ripgrep、fd、fzf、tmux、git-delta。
各语言特定配置
Python 项目:基础 Dockerfile 已含 Python 3.13 via uv;如需其他版本,修改 Python 安装:
RUN uv python install <version> --default
devcontainer.json 扩展新增 ms-python.python、ms-python.vscode-pylance、charliermarsh.ruff;设置新增 python.defaultInterpreterPath 为 .venv/bin/python,并将 ruff 设为默认格式化器、保存时整理导入。postCreateCommand 若存在 pyproject.toml:
rm -rf .venv && uv sync && uv run /opt/post_install.py
Node/TypeScript 项目:无需 Dockerfile 新增(基础模板已含 Node 22 via fnm)。扩展新增 dbaeumer.vscode-eslint、esbenp.prettier-vscode,并将 Prettier 设为默认格式化器、保存时执行 ESLint 修复。postCreateCommand 根据 lockfile 检测包管理器并串联:
- pnpm-lock.yaml →
uv run /opt/post_install.py && pnpm install --frozen-lockfile - yarn.lock →
uv run /opt/post_install.py && yarn install --frozen-lockfile - package-lock.json →
uv run /opt/post_install.py && npm ci - 无 lockfile →
uv run /opt/post_install.py && npm install
Rust 项目:新增 feature ghcr.io/devcontainers/features/rust:1;扩展新增 rust-lang.rust-analyzer、tamasfe.even-better-toml,并将 rust-analyzer 设为格式化器。postCreateCommand:有 Cargo.lock 用 uv run /opt/post_install.py && cargo build --locked,否则用 uv run /opt/post_install.py && cargo build。
Go 项目:新增 feature ghcr.io/devcontainers/features/go:1(version: latest);扩展新增 golang.go,并设置 Go 格式化器与 go.useLanguageServer。postCreateCommand:uv run /opt/post_install.py && go mod download。
参考材料:references/dockerfile-best-practices.md(层优化、多阶段构建、架构支持)、references/features-vs-dockerfile.md(何时使用 devcontainer feature 与自定义 Dockerfile)。
添加持久化卷:devcontainer.json 中新增挂载的模式:
"mounts": [
"source={{PROJECT_SLUG}}-<purpose>-${devcontainerId},target=<container-path>,type=volume"
]
常见新增:Rust 的 source={{PROJECT_SLUG}}-cargo-${devcontainerId},target=/home/vscode/.cargo,type=volume;Go 的 source={{PROJECT_SLUG}}-go-${devcontainerId},target=/home/vscode/go,type=volume。
使用方式
生成的输出文件位于项目 .devcontainer/ 目录:
- Dockerfile - 容器构建说明
- devcontainer.json - VS Code/devcontainer 配置
- post_install.py - 创建后设置脚本
- .zshrc - Shell 配置
- install.sh - 管理 devcontainer 的 CLI 辅助(devc 命令)
生成后告知用户:
- 启动方式:“在 VS Code 中打开并选择 'Reopen in Container'”
- 替代方式:
devcontainer up --workspace-folder . - CLI 辅助:运行
.devcontainer/install.sh self-install将 devc 命令加入 PATH
验证清单:向用户展示文件前需确认:所有 {{PROJECT_NAME}} 占位符已替换为人类可读名称;所有 {{PROJECT_SLUG}} 占位符已替换为 slug;devcontainer.json 的 JSON 语法有效(无尾随逗号、嵌套正确);所有检测到的语言均已添加对应扩展;postCreateCommand 包含所有必需的设置命令(用 && 串联)。
限制
仅在任务明确匹配上述范围时使用本技能。不要将输出视为环境特定验证、测试或专家审查的替代。如果缺少必需的输入、权限、安全边界或成功标准,应停止并请求澄清。本技能仅用于开发环境,不用于生产容器部署。