pei-docker-usage
Helper for PeiDocker (`pei-docker-cli`). Trigger ONLY when the user explicitly requests PeiDocker usage OR when working within a PeiDocker-generated project (indicated by `user_config.yml`).
Best use case
pei-docker-usage is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Helper for PeiDocker (`pei-docker-cli`). Trigger ONLY when the user explicitly requests PeiDocker usage OR when working within a PeiDocker-generated project (indicated by `user_config.yml`).
Teams using pei-docker-usage should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/pei-docker-usage/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How pei-docker-usage Compares
| Feature / Agent | pei-docker-usage | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Helper for PeiDocker (`pei-docker-cli`). Trigger ONLY when the user explicitly requests PeiDocker usage OR when working within a PeiDocker-generated project (indicated by `user_config.yml`).
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# PeiDocker Usage
## Overview
PeiDocker (`pei-docker-cli`) is a tool that automates the creation of Docker environments. Instead of writing complex `Dockerfile`s and `docker-compose.yml` files, you define your environment in a high-level YAML file (`user_config.yml`). PeiDocker then generates the necessary Docker configuration.
**Official Repository:** [https://github.com/igamenovoer/PeiDocker](https://github.com/igamenovoer/PeiDocker)
**Key Features:**
* **Two-Stage Builds:** Separates system setup (`stage-1`) from application/dev setup (`stage-2`).
* **Built-in SSH:** easy configuration of SSH access to containers.
* **Dynamic Storage:** Seamlessly switch between host-mounted volumes (dev) and Docker volumes (deployment).
* **Proxy Support:** Configure proxies for build and run time.
## Execution Strategy
When invoking `pei-docker-cli`, follow this priority order:
1. **Project-Local (Pixi):** If working in a Pixi-managed project (check for `pyproject.toml` or `pixi.toml` with `pei-docker` dependency), use:
```bash
pixi run pei-docker-cli ...
```
2. **Global (uv):** Check for global installation:
```bash
uv tool run pei-docker-cli ...
```
3. **Fallback:** If neither is found, suggest installation:
* **In Pixi project:** `pixi add pei-docker`
* **Global usage:** `uv tool install pei-docker`
## Workflow
The standard workflow for using PeiDocker is:
### 1. Create a Project
Initialize a new PeiDocker project in a target directory.
```bash
pixi run pei-docker-cli create -p path/to/project_dir
```
This creates the directory structure and a template `user_config.yml`.
### 2. Configure (`user_config.yml`)
Edit the `user_config.yml` in the project directory to define your environment.
**Key Sections:**
* `stage_1`: Base image settings (OS, system packages).
* `image`: Base image (e.g., `ubuntu:24.04`) and output tag.
* `ssh`: Enable SSH, set ports and users.
* `apt`: Configure apt mirrors (e.g., `tuna`, `aliyun`).
* `stage_2`: Application/Developer settings.
* `storage`: Define where `/app`, `/data`, and `/workspace` map to (host paths or auto-volumes).
* `custom`: Scripts to run on build, first run, or login.
See [basic-examples.md](references/basic-examples.md) and [advanced-examples.md](references/advanced-examples.md) for detailed configuration examples.
### 3. Generate Docker Files
After editing `user_config.yml`, generate the `docker-compose.yml` and `Dockerfile`s.
```bash
# From within the project directory
cd path/to/project_dir
pixi run pei-docker-cli configure
# Or specifying the path
pixi run pei-docker-cli configure -p path/to/project_dir
```
### 4. Build and Run
Use standard `docker compose` commands to build and start the containers.
```bash
cd path/to/project_dir
# Build the images (progress=plain shows build logs)
docker compose build stage-1 --progress=plain
docker compose build stage-2 --progress=plain
# Run the container (usually stage-2 for development)
docker compose up -d stage-2
```
## Common Tasks
### Adding Custom Scripts
PeiDocker allows running scripts at various lifecycle stages. Scripts should be placed in `container-scripts/` (to run inside container) or `host-scripts/` (to run on host).
In `user_config.yml`:
```yaml
stage_2:
custom:
on_build:
- 'stage-2/custom/install-my-app.sh'
on_first_run:
- 'stage-2/custom/setup-env.sh'
```
### Configuring SSH
To enable SSH access:
```yaml
stage_1:
ssh:
enable: true
port: 22 # Container internal port
host_port: 2222 # Host mapped port
users:
developer:
password: 'password123'
pubkey_file: '~' # Use current user's public key
```
## References
* **[guidelines.md](references/guidelines.md)**: Best practices for project structure, data safety, and customization.
* **[user-config-reference.md](references/user-config-reference.md)**: Full reference for `user_config.yml` options.
* **[installation-scripts.md](references/installation-scripts.md)**: Usage guide for system installation scripts (Pixi, uv, Node.js, Bun).
* **[user_config.yml](templates/user_config.yml)**: Template for a full `user_config.yml` file.
* **[basic-examples.md](references/basic-examples.md)**: Basic configurations (SSH, GPU, Volumes).
* **[advanced-examples.md](references/advanced-examples.md)**: Advanced scenarios (Env Vars, OpenGL, Complex Apps).
* **[cli-reference.md](references/cli-reference.md)**: Detailed CLI command reference.Related Skills
conan-basic-usage
Basic operations for the Conan C++ package manager. Use when the user explicitly asks to 'use conan' for tasks like creating projects, installing dependencies, or building packages, or asks for 'how to' guidance on Conan setup.
deepface-basic-usage
Basic usage guide for the DeepFace library (face recognition, verification, analysis).
docker-pixi-project-offline
Scripted process to build and verify a Pixi-managed project in Docker, then produce a portable WORKDIR/product directory for air-gapped use.
pixi-make-offline-channel
Use when the user wants to create a self-hosted, offline-installable Conda channel (mirror) containing a specific subset of packages using Pixi.
pixi-make-cu-build-env
Guides the agent to setup a new or existing Pixi environment for compiling C++ and CUDA code. It ensures the correct compilers, toolkits, and CMake configurations are in place for a robust user-space build.
pixi-install-nvidia
Use when the user says "use pixi to install <some nvidia tool>" (or similar) and wants NVIDIA/CUDA/GPU packages installed via Pixi (no sudo/apt), e.g., CUDA toolkit pieces, cuDNN/NCCL, PyTorch CUDA builds, RAPIDS.
explore-dnn-model
Manual invocation only; use only when the user explicitly requests `explore-dnn-model` by name. Explore how to run a given DNN model checkpoint in the current Python environment by locating weights + upstream source code, resolving dependencies with user confirmation, running reproducible experiments under `tmp/`, and producing reports about I/O contracts, timing, and profiling.
openspec-ext-revise-by-decision
Manual invocation only; use only when the user explicitly requests `openspec-ext-revise-by-decision` by exact name. Revise OpenSpec change artifacts from a review or decision document that contains questions plus `DECISION` blocks, applying chosen decisions from a review file such as `openspec/changes/<change>/review/review-*.md` back into proposal, design, specs, and tasks.
openspec-ext-review-plan
Review an OpenSpec change (or a single OpenSpec change artifact file) for completeness, coherence, and alignment with existing system design; capture actionable feedback plus open questions; write a review report under the change directory (review/review-YYYYMMDD-HHMMSS.md).
openspec-ext-respond-to-review
Read an OpenSpec review report critically, evaluate the reviewer's proposals and findings against the current change artifacts and repository context, and write developer-owned final decisions/responses back into the review document. Use when the user explicitly mentions `openspec` or points to a path under `openspec/` while asking to examine a review report carefully, decide open questions, respond to findings, fill `DECISION` blocks, respond to an OpenSpec review file, or record final answers in an OpenSpec review document without yet revising the proposal, design, specs, or tasks.
openspec-ext-hack-through-test
Manual invocation only. OpenSpec-specific hack-through-testing workflow targeting production-level end-to-end paths using real data and real user workflows — not CI smoke/unit/integration tests. Three subskills: `propose` to create an OpenSpec change with HTT-ready test cases (automatic scripts and interactive guides) by invoking `openspec-propose` or `openspec-ff-change`, `revise` to update an existing OpenSpec change so its artifacts support hack-through-testing-driven implementation and testing, and `run` to exercise an implemented OpenSpec change through the full hack-through-testing loop (in-place by default, or in a disposable snapshot worktree when requested). Use when the user explicitly asks for `openspec-ext-hack-through-test`, points to `openspec/changes/...` while asking to propose, revise, run, exercise, or prepare work under hack-through-testing principles, or wants OpenSpec work shaped for fast blocker discovery through patch-forward testing.
openspec-ext-explain
Create or update OpenSpec change explanation docs that capture developer-facing questions and answers under `openspec/changes/.../explain/`. Use when the user explicitly mentions `openspec` or points to a path under `openspec/` while asking to create, update, document, or maintain a Q&A, FAQ, explain note, or question-and-answer doc for an OpenSpec change based on user questions, implementation notes, review questions, or current chat context.