SuperAPI AI 工具集

devcontainer-setup

部署与运维

查看项目

更新于 10-16 02:41

技能介绍

用途

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 包含所有必需的设置命令(用 && 串联)。

限制

仅在任务明确匹配上述范围时使用本技能。不要将输出视为环境特定验证、测试或专家审查的替代。如果缺少必需的输入、权限、安全边界或成功标准,应停止并请求澄清。本技能仅用于开发环境,不用于生产容器部署。