container
Host-side setup, configuration, customization, builds, migration, and troubleshooting for the Aerovato Container CLI. Use when working with Aerovato Container, settings.json, Dockerfile.User, build stages, V2-to-V3 migration, mounts, harnesses, tools, permissions, Docker, or Podm
Install
npx skills add https://github.com/aerovato/container/tree/main/skills/container
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install aerovato-container@llmmart
git clone https://github.com/aerovato/container.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole aerovato/container collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Aerovato Container
Use this skill to help users operate the Aerovato container CLI. Confirm that the user means the Aerovato Container sandboxing CLI command when the word "container" is ambiguous.
Capability Boundary
Treat setup and customization as host-side work.
- Host-side agents can inspect and modify
~/.code-container/settings.json,~/.code-container/Dockerfile.User, and~/.code-container/configs/with user approval. - Agents inside a managed Container normally cannot access the host-side settings or user Dockerfile.
- The optional
agents-directorytool pack mounts Container's persisted copy of~/.agents; it does not expose host-side Container settings.- If you suspect you're inside a Container, ask the user to run outside the container.
- Never mount the complete host
~/.code-container/directory into a managed container. - If
~/.code-container/is missing, determine whether this is a fresh host installation or a managed Container session. Ask the user when uncertain. - If host files are inaccessible, explain the boundary and provide host-side steps instead of creating shadow configuration inside the managed container.
Operating Rules
- Inspect the current platform, installed version, settings, user Dockerfile, and relevant persisted configs before proposing changes.
- Obtain approval before installing software, changing files, starting a build, accessing the network, or cloning source code unless the user's request already explicitly authorizes that action.
- Make the smallest requested change. Preserve unknown JSON keys and existing Dockerfile instructions.
- Validate JSON after editing settings. Never write comments into
settings.json. - Select the narrowest correct build target and explain whether existing project containers must be recreated.
- Report the files changed and commands run.
Do not edit these internal values:
migrationVersiononboardingVersiontosVersion- Anything under
~/.code-container/temp/
Do not run container, container run, or container attach from a non-interactive agent command because they open an interactive shell. Ask the user to run interactive onboarding and settings flows. Non-interactive commands such as container --version, container --help, container list, and approved builds may be run when appropriate. Treat stop, remove, and container recreation as destructive actions requiring explicit approval.
Setup
Requirements are Windows, macOS, Linux, or WSL plus Docker or Podman.
Install on macOS or Linux:
curl -fsSL https://container.aerovato.com/install.sh | sh
Install on Windows PowerShell:
irm https://container.aerovato.com/install.ps1 | iex
Alternatively, install through npm when Node.js is available:
npm install -g @aerovato/container
After installation:
- Check
container --version. - Check
~/.code-container/archive/for V2 files and follow the migration guide when needed. - Ask the user to run
container initand complete Express or Custom onboarding. - If onboarding does not complete the initial image build, run or ask the user to run
container build full.
Read the Windows reference for native Windows and WSL caveats.
Route The Task
- For settings, packages, tools, harnesses, flags, mounts, build targets, or persisted config behavior, read configuration.
- For archived V2 files, read migration.
- For hands-off harness permission requests, read permissions and explain the security implications.
- For failures, unexpected behavior, skill availability, or source inspection, read troubleshooting.
Customization Rules
Use ~/.code-container/Dockerfile.User for ordinary packages and user-layer setup. Preserve this required base as the first Dockerfile instruction:
FROM localhost/aerovato/container-v3-harness:latest
Configure dockerfileCore only for base-image changes or commands that must run before tool and harness installation. Use dedicated settings keys for harnesses, tools, runtime selection, SSH, and runtime flags.
Build after direct changes:
Dockerfile.User:container build userenabledHarnesses:container build harnessenabledTools:container build toolsdockerfileCore:container build full- Runtime, flags, mounts, or persisted config content: no image build unless another image setting also changed
Changes to creation-time flags or the set of mounted configs affect only newly created project containers. Ask before removing and recreating an existing container.
Last-Resort Source Inspection
When documentation, configuration inspection, and runtime diagnostics cannot explain behavior, source inspection is allowed as a last resort. Ask before cloning or using network access. Prefer the source tag matching the installed container version instead of assuming main has identical behavior.
If source inspection reveals a reproducible bug or a clear, logical, non-breaking improvement, explain the evidence and ask whether the user wants help contributing it to aerovato/container. Do not create an issue, fork, branch, commit, or pull request without explicit approval. Follow the troubleshooting source-inspection procedure.
Files (container)
-
references
-
configuration.md 5.8 KB
# Configuration Use this reference when changing `~/.code-container/settings.json`, `~/.code-container/Dockerfile.User`, enabled packs, runtime flags, mounts, or persisted harness and tool configurations. ## Storage Container owns this host-side structure: ```text ~/.code-container/ ├── archive/ # Archived V2 files ├── configs/ # Persisted harness and tool configs mounted into containers ├── Dockerfile.User # User-owned final image layer ├── settings.json # Primary configuration └── temp/ # Generated Dockerfiles and internal state; do not edit ``` Only modify `settings.json`, `Dockerfile.User`, and requested files under `configs/`. Preserve unknown settings keys and omitted defaults. Do not edit migration, onboarding, or TOS version fields. ## Settings Schema Supported user-facing top-level keys: - `enabledHarnesses`: Array of harness pack IDs. - `enabledTools`: Array of tool pack IDs. - `runtime`: `"docker"` or `"podman"`. - `systemMounts`: Object with optional Boolean `ssh`. - `dockerRunFlags`: Array of individual arguments passed during container creation. - `dockerExecFlags`: Array of individual arguments passed when opening an interactive session. - `dockerfileCore`: Advanced base-stage configuration. Internal keys that must not be edited: - `migrationVersion` - `onboardingVersion` - `tosVersion` Container validates the complete JSON document. Preserve the existing object and change only requested values. Flags must be separate array entries: ```json { "dockerRunFlags": ["-p", "8080:80"], "dockerExecFlags": ["-e", "FOO=bar"] } ``` Do not combine a flag and value into one entry such as `"-p 8080:80"`. ## Dockerfile Core All `dockerfileCore` fields are optional: ```json { "dockerfileCore": { "baseImage": "ubuntu:24.04", "workdir": "/root", "cmd": "[\"/bin/bash\"]", "promptCommand": "RUN echo 'custom prompt' >> /root/.bashrc", "disableDefaultCommands": false, "customCommands": [ "RUN apt-get update && apt-get install -y postgresql-client", "ENV MY_VAR=hello" ] } } ``` Use this only when changing the base image or when commands must run before tool and harness installation. Run `container build full` after any change. Direct file edits do not reliably create a core dirty-state prompt. ## User Dockerfile Prefer `~/.code-container/Dockerfile.User` for ordinary package installation and final-layer customization. Preserve existing instructions and this required base as the first Dockerfile instruction: ```dockerfile FROM localhost/aerovato/container-v3-harness:latest ``` Example: ```dockerfile RUN apt-get update && apt-get install -y postgresql-client RUN npm install -g bun RUN pip install requests ``` Run `container build user` afterward. User Dockerfile changes are not tracked automatically. ## Harness Packs Current harness IDs: - `claude`: Claude Code - `opencode`: OpenCode V2 (default; installs via `https://opencode.ai/v2/install`) - `opencode-v1`: OpenCode V1 (legacy npm installation; manual selection only) - `codex`: OpenAI Codex - `pi`: Pi - `gemini`: Gemini CLI - `copilot`: GitHub Copilot CLI - `grok`: Grok Build - `cursor`: Cursor CLI - `nitro`: Aerovato Nitro - `antigravity`: Antigravity CLI After changing `enabledHarnesses`, run `container build harness`. Newly enabled harness config mounts require recreation of existing project containers. ## Tool Packs Current tool IDs: - `python` - `bun` - `enhanced-tools` - `agents-directory` - `npm-config` - `git-config` - `vim-config` - `deno` - `rust` - `go` - `uv` - `gh` - `aws` - `gcloud` - `azure` - `neovim` Onboarding detects tools and writes an explicit selection. When `enabledTools` is absent at build or mount time, no tool packs are implicitly applied. After changing `enabledTools`, run `container build tools`. Newly enabled tool config mounts require recreation of existing project containers. The `agents-directory` pack copies or prepares host `~/.agents` under `~/.code-container/configs/.agents` and mounts that persisted copy at `/root/.agents`. It does not live-sync later host changes. A globally installed skill added to host `~/.agents/skills` after onboarding may need to be installed or copied into Container's persisted `.agents` config separately. ## Mounts And Configs `systemMounts.ssh` controls the read-only host `~/.ssh` mount. Default behavior is disabled when the key is absent. Git configuration is supplied by the `git-config` tool pack, not by `systemMounts`. Harness and tool config sources live under `~/.code-container/configs/` and are mounted read-write at pack-specific destinations. Edit these persisted copies when changing behavior inside managed containers. Do not edit the normal host harness config and expect an existing persisted copy to update automatically. For a custom bind mount, add correctly separated runtime arguments to `dockerRunFlags`, for example: ```json { "dockerRunFlags": [ "--mount", "type=bind,source=/host/path,target=/container/path" ] } ``` Only mount resources the user explicitly approves. Never mount the complete host `~/.code-container/` directory. Mounts and `dockerRunFlags` apply at container creation. `dockerExecFlags` apply when attaching. Existing containers must be removed and recreated before creation-time changes take effect; obtain explicit approval first. ## Build Selection Container builds four stages in order: Core, Tools, Harness, and User. - `container build full`: Core through User. - `container build tools`: Tools through User. - `container build harness`: Harness and User. - `container build user`: User only. Use the narrowest target that begins at or before the changed stage. Runtime selection, flags, mount settings, and mounted config content do not themselves require an image rebuild. -
migration.md 2.6 KB
# V2 To V3 Migration Runtime setup archives V2 files but does not migrate their content. Perform content migration only with user approval. ## Detection Inspect `~/.code-container/archive/` for: - `MOUNTS.txt` - `DOCKER_FLAGS.txt` - `DOCKER_RUN_FLAGS.txt` - `Dockerfile.Packages` - An old `Dockerfile.User` If none exist, no V2 content migration is needed. Read [configuration](configuration.md) before editing current files. Skip an item when its equivalent is already present in the V3 configuration. This indicates that it may already have been migrated. Stop and ask the user whenever intent or equivalence is ambiguous. ## Runtime Flags V2 `DOCKER_FLAGS.txt` applied to both `docker run` and `docker exec`. Add its individual arguments to both `dockerRunFlags` and `dockerExecFlags`. V2 `DOCKER_RUN_FLAGS.txt` applied only to `docker run`. Add its individual arguments to `dockerRunFlags`. Preserve existing arguments, split flags and values into separate array entries, and deduplicate exact equivalents. ## Mounts Convert each `MOUNTS.txt` entry according to its purpose: - Host SSH mount: set `systemMounts.ssh` to `true`. - Git configuration: enable the `git-config` tool pack. - Other mounts: append separated `--mount` or `-v` arguments to `dockerRunFlags`. Never translate a mount into access to the complete host `~/.code-container/` directory. Confirm sensitive or broad host mounts with the user. ## Dockerfile Packages Ignore the archived base `FROM` instruction and migrate subsequent instructions through the appropriate V3 layer: - Ordinary user packages and final setup: append to `~/.code-container/Dockerfile.User`. - Base-image changes or commands that must precede tools and harnesses: append to `dockerfileCore.customCommands`. Preserve this required base as the first instruction in the current user Dockerfile: ```dockerfile FROM localhost/aerovato/container-v3-harness:latest ``` Do not duplicate instructions already present. ## Old User Dockerfile An archived user Dockerfile is from V2 when it does not use the V3 harness base. Read both old and current files, then append only the still-relevant instructions after the current V3 base. Do not restore the old `FROM` line. ## Completion Validate `settings.json` as JSON and review the resulting Dockerfile before building. - Any `dockerfileCore` migration: `container build full` - Tool selection only: `container build tools` - Harness selection only: `container build harness` - User Dockerfile only: `container build user` Creation-time flag and mount migrations also require project containers to be recreated. Obtain explicit approval before removing an existing container. -
permissions.md 1.7 KB
# Harness Permissions Use these settings only when the user explicitly asks to reduce or remove harness approval prompts inside managed containers. Full harness permissions allow an agent to modify or delete the mounted project and any writable mounted configuration. Optional credentials such as SSH or cloud configs may also be accessible. Explain this risk before changing permissions. Modify only the persisted files under `~/.code-container/configs/`. Do not change the normal host harness configurations for this task. ## OpenCode File: `~/.code-container/configs/.opencode/opencode.json` Merge this property into the existing JSON object: ```json { "permission": "allow" } ``` ## OpenAI Codex File: `~/.code-container/configs/.codex/config.toml` Set: ```toml approval_policy = "never" sandbox_mode = "danger-full-access" ``` Preserve unrelated TOML configuration and avoid duplicate keys. ## Claude Code File: `~/.code-container/configs/.claude/settings.json` Merge these properties into the existing JSON object: ```json { "permissions": { "allow": ["*", "Bash"] } } ``` Preserve other permission settings unless the user asks to replace them. ## Gemini CLI File: `~/.code-container/configs/.gemini/policies/rules.toml` Create the parent directory when needed and add: ```toml [[rule]] toolName = ["run_shell_command", "write_file", "replace"] decision = "allow" priority = 777 ``` Preserve existing rules. ## Applying Changes These files are bind-mounted, so edits normally become visible without an image rebuild. If the relevant harness was newly enabled after the project container was created, rebuild the harness image and recreate that project container with explicit approval. -
troubleshooting.md 5.1 KB
# Troubleshooting Start with documentation, current configuration, and non-interactive diagnostics. Inspect source only when those do not explain the behavior. ## Safe Diagnostics Confirm the installed CLI and available commands: ```bash container --version container --help container list ``` Do not run `container`, `container run`, or `container attach` through a non-interactive agent command. They open an interactive shell. Check the configured runtime in `~/.code-container/settings.json`, then use its normal status command when needed: ```bash docker info podman info ``` Run only the relevant command. Runtime startup may require the user to open Docker Desktop or start the Podman service. ## Configuration Failures For settings load failures: 1. Parse `~/.code-container/settings.json` as JSON. 2. Check keys and value types against [configuration](configuration.md). 3. Remove comments and trailing commas. 4. Preserve unknown valid data while correcting only the invalid field. 5. Never repair internal version values by guessing. Generated files under `~/.code-container/temp/` are not configuration sources. Fix settings or the user Dockerfile and regenerate through an appropriate build. ## Build Failures Identify the first failing stage and command. Use the narrowest target that includes the changed stage: - Core failure: `container build full` - Tools failure: `container build tools` - Harness failure: `container build harness` - User Dockerfile failure: `container build user` Do not repeatedly broaden the build without understanding the first error. Check network access, package repository availability, runtime readiness, and Dockerfile syntax. User Dockerfile changes and direct core edits do not reliably produce automatic stale-build prompts. ## Changes Not Appearing Use these distinctions: - Image content changed: rebuild from the affected stage. - Persisted config content changed: bind mounts normally expose it immediately. - Enabled pack changed: rebuild and recreate existing project containers so their mount set is regenerated. - `dockerRunFlags` or mounts changed: recreate existing project containers. - `dockerExecFlags` changed: the next interactive attachment uses them. - Runtime changed: containers belonging to the old runtime are not automatically moved. Removing a project container discards container-local state. Ask for explicit approval and explain the impact before `container remove` or equivalent runtime commands. ## Skill Availability Inside Managed Containers A host-side global skill installation does not guarantee availability inside managed containers. - Claude Code primarily uses `.claude/skills/`. - Codex, OpenCode, Gemini CLI, GitHub Copilot, and several other agents support `.agents/skills/`. - The `agents-directory` tool pack mounts `~/.code-container/configs/.agents`, not the live host `~/.agents` directory. - Installing a skill into host `~/.agents/skills/` after onboarding does not automatically update the persisted copy. - Project-local skills travel with the mounted project only when stored in a location recognized by the selected harness. Do not solve discovery by mounting the complete host `~/.code-container/`. If automatic provisioning is required, explain that it is a separate Container product and security decision. ## Last-Resort Source Inspection Use source inspection only after documented behavior, current files, and runtime output are insufficient. 1. Record `container --version` and the exact observed behavior. 2. Ask the user before network access or cloning. 3. Clone `https://github.com/aerovato/container` into a temporary location outside the user's project. 4. Prefer the release tag matching the installed version, commonly `v<version>`. 5. If no matching tag exists, state that limitation before inspecting `main`. 6. Treat the clone as read-only unless the user explicitly approves contribution work. 7. Inspect the smallest relevant source path and its tests. 8. Do not run release workflows, standalone binary compilation, or interactive Container sessions. 9. Compare source behavior with the installed version and report file references and concrete evidence. 10. Remove the temporary clone afterward only when that cleanup was included in the user's approval. Useful source areas include: - `src/types.ts`: Settings and state schemas. - `src/container.ts`: Mount generation and container execution. - `src/docker.ts`: Build stages and dirty-state clearing. - `src/harness-packs.ts`: Harness IDs, installation, and config mounts. - `src/tool-packs.ts`: Tool IDs, installation, and config mounts. - `src/onboarding.ts`: Detection, config copying, and setup behavior. - `src/platform/`: Platform-specific paths, filesystems, and runtime startup. - `tests/`: Expected behavior and regressions. If the evidence shows a reproducible bug or a clear, logical, non-breaking improvement, explain: - Expected behavior. - Actual behavior. - Reproduction steps. - Relevant source and tests. - The smallest likely correction. Then ask whether the user wants help contributing to `aerovato/container`. Do not create an issue, fork, branch, commit, or pull request without explicit approval. -
windows.md 1.1 KB
# Windows Support Aerovato Container runs natively on Windows alongside Linux, macOS, and WSL. ## Requirements - Windows 10 or 11, or WSL2 - Docker Desktop for Windows or Podman No extra compatibility layer is required for native Windows. Container detects supported runtimes, harnesses, and tools during onboarding. ## Config Paths Harness and tool definitions use POSIX-style paths such as `~/.config/opencode`. Container expands these against the Windows home directory. When a Windows application stores configuration elsewhere, such as `%APPDATA%`, automatic migration may not find it. Copy the required configuration into the corresponding location under `~/.code-container/configs/` only with user approval. ## Project Paths UNC project paths such as `\\server\share\project` are not supported. Container canonicalizes Windows drive paths so native Windows and WSL access to the same project resolve to the same managed container. ## WSL When invoked inside WSL, Container follows Linux behavior. Use paths visible to the selected runtime and avoid mixing inaccessible Windows and WSL mount sources.
-
-
SKILL.md 6 KB
--- name: container description: Host-side setup, configuration, customization, builds, migration, and troubleshooting for the Aerovato Container CLI. Use when working with Aerovato Container, settings.json, Dockerfile.User, build stages, V2-to-V3 migration, mounts, harnesses, tools, permissions, Docker, or Podman. Do not use it to expose host Container configuration inside managed containers. license: BSD-3-Clause compatibility: Configuration tasks require host-side access to ~/.code-container. Setup supports Windows, macOS, Linux, and WSL with Docker or Podman. metadata: author: aerovato repository: https://github.com/aerovato/container --- # Aerovato Container Use this skill to help users operate the Aerovato `container` CLI. Confirm that the user means the [Aerovato Container](https://github.com/aerovato/container) sandboxing CLI command when the word "container" is ambiguous. ## Capability Boundary Treat setup and customization as host-side work. - Host-side agents can inspect and modify `~/.code-container/settings.json`, `~/.code-container/Dockerfile.User`, and `~/.code-container/configs/` with user approval. - Agents inside a managed Container normally cannot access the host-side settings or user Dockerfile. - The optional `agents-directory` tool pack mounts Container's persisted copy of `~/.agents`; it does not expose host-side Container settings. - If you suspect you're inside a Container, ask the user to run outside the container. - Never mount the complete host `~/.code-container/` directory into a managed container. - If `~/.code-container/` is missing, determine whether this is a fresh host installation or a managed Container session. Ask the user when uncertain. - If host files are inaccessible, explain the boundary and provide host-side steps instead of creating shadow configuration inside the managed container. ## Operating Rules 1. Inspect the current platform, installed version, settings, user Dockerfile, and relevant persisted configs before proposing changes. 2. Obtain approval before installing software, changing files, starting a build, accessing the network, or cloning source code unless the user's request already explicitly authorizes that action. 3. Make the smallest requested change. Preserve unknown JSON keys and existing Dockerfile instructions. 4. Validate JSON after editing settings. Never write comments into `settings.json`. 5. Select the narrowest correct build target and explain whether existing project containers must be recreated. 6. Report the files changed and commands run. Do not edit these internal values: - `migrationVersion` - `onboardingVersion` - `tosVersion` - Anything under `~/.code-container/temp/` Do not run `container`, `container run`, or `container attach` from a non-interactive agent command because they open an interactive shell. Ask the user to run interactive onboarding and settings flows. Non-interactive commands such as `container --version`, `container --help`, `container list`, and approved builds may be run when appropriate. Treat `stop`, `remove`, and container recreation as destructive actions requiring explicit approval. ## Setup Requirements are Windows, macOS, Linux, or WSL plus Docker or Podman. Install on macOS or Linux: ```bash curl -fsSL https://container.aerovato.com/install.sh | sh ``` Install on Windows PowerShell: ```powershell irm https://container.aerovato.com/install.ps1 | iex ``` Alternatively, install through npm when Node.js is available: ```bash npm install -g @aerovato/container ``` After installation: 1. Check `container --version`. 2. Check `~/.code-container/archive/` for V2 files and follow [the migration guide](references/migration.md) when needed. 3. Ask the user to run `container init` and complete Express or Custom onboarding. 4. If onboarding does not complete the initial image build, run or ask the user to run `container build full`. Read [the Windows reference](references/windows.md) for native Windows and WSL caveats. ## Route The Task - For settings, packages, tools, harnesses, flags, mounts, build targets, or persisted config behavior, read [configuration](references/configuration.md). - For archived V2 files, read [migration](references/migration.md). - For hands-off harness permission requests, read [permissions](references/permissions.md) and explain the security implications. - For failures, unexpected behavior, skill availability, or source inspection, read [troubleshooting](references/troubleshooting.md). ## Customization Rules Use `~/.code-container/Dockerfile.User` for ordinary packages and user-layer setup. Preserve this required base as the first Dockerfile instruction: ```dockerfile FROM localhost/aerovato/container-v3-harness:latest ``` Configure `dockerfileCore` only for base-image changes or commands that must run before tool and harness installation. Use dedicated settings keys for harnesses, tools, runtime selection, SSH, and runtime flags. Build after direct changes: - `Dockerfile.User`: `container build user` - `enabledHarnesses`: `container build harness` - `enabledTools`: `container build tools` - `dockerfileCore`: `container build full` - Runtime, flags, mounts, or persisted config content: no image build unless another image setting also changed Changes to creation-time flags or the set of mounted configs affect only newly created project containers. Ask before removing and recreating an existing container. ## Last-Resort Source Inspection When documentation, configuration inspection, and runtime diagnostics cannot explain behavior, source inspection is allowed as a last resort. Ask before cloning or using network access. Prefer the source tag matching the installed `container` version instead of assuming `main` has identical behavior. If source inspection reveals a reproducible bug or a clear, logical, non-breaking improvement, explain the evidence and ask whether the user wants help contributing it to `aerovato/container`. Do not create an issue, fork, branch, commit, or pull request without explicit approval. Follow [the troubleshooting source-inspection procedure](references/troubleshooting.md).
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.