Give coding agents your project files, not your whole computer.
aicage runs AI coding agents in containers while you work on the same local project files.
Agents need deep access (read code, run commands, install dependencies). Their built-in safety checks are naturally limited.
Running agents in containers gives a hard boundary – with aicage the experience stays the same.
- Work with the same project files as the agent
- Configure shared folders, agent images, and runtime options
- Same paths and user inside the container1
- Pre-built and tested images
- Automatic updates for agents and images
See Why cage agents? for the full rationale.
Use one of these builtin CLI agents or add your own.
amp
|
Auggie CLI · auggie |
claude
|
codex
|
GitHub Copilot CLI · copilot |
Factory CLI · droid |
goose
|
Kiro CLI · kiro-cli |
opencode
|
qwen
|
vibe
|
Install:
pipx install aicageIn your project directory, start the agent you want to use:
aicage <agent>Accept the setup choices, then sign in or confirm that the agent is already signed in.
- Prefer file-based credential storage or API keys; keyring-based auth does not work.
- If sign-in fails, sign in with the agent on the host, then try again.
Use your agent in your IDE while Aicage runs it in a Docker container.
Add the configuration for your IDE, plugin and agent from these example configuration files:
| IDE | Plugin | Linux / macOS | Windows |
|---|---|---|---|
| VS Code | ACP Client | ~/.config/Code/User/settings.json | %APPDATA%\Code\User\settings.json |
| JetBrains | AI Assistant | ~/.jetbrains/acp.json | %USERPROFILE%.jetbrains\acp.json |
- Install the IDE plugin
- Configuration
- Visual Studio Code: In the plugin settings, add your agent’s config into the
settings.json. - JetBrains IDE: In the plugin’s settings add your agent as a
custom ACP agent. Replace
/path/to/aicagewith the full path toaicage.
- Visual Studio Code: In the plugin settings, add your agent’s config into the
These agents need one additional ACP bridge. Install the bridge for the agent you use:
# Run only the command for your agent.
npm install -g amp-acp
npm install -g @agentclientprotocol/claude-agent-acp
npm install -g @agentclientprotocol/codex-acpFor JetBrains IDEs, replace the bridge's /path/to/... in the plugin settings with its full path.
Run aicage <agent> from the project directory to change the agent's container setup. Your IDE uses the saved
project configuration.
After aicage <agent> starts, you will see this setup overview:
Configuration Scope: useGlobalorDirectory treeto reuse settings.Bind Mounts: extra host files and directories the container should be able to access.Extensions: optional local additions that install tools or request extra host shares.Docker Args: extradocker runarguments such as-e,-p, or--network.Base: the base image used for the agent image. The suggested default is best for most users.Docker socket: lets the agent use Docker on the host when you explicitly enable it.OK: saves the current project config for that agent and starts the container.
Use Bind Mounts when the agent needs access to files or directories outside the project.
To adjust how the container starts, open Docker Args in the setup screen.
Use it for normal docker run arguments such as:
-e FOO=bar
-p 3000:3000
--network my-netSee Docker run pass-through args.
Extensions let you add tools on top of an existing agent image. Quick start:
git clone https://github.com/aicage/aicage-custom-samples.git $HOME/.aicage-customThen rerun aicage <agent> and select the extension in the setup screen.
See Extensions.
If you want the agent to run Docker commands, enable Docker socket in the setup screen.
The complete user documentation lives in the aicage.wiki.
- First-use setup issues:
- See Known hiccups.
- On Windows:
- Set
git config --global core.autocrlf trueon the Windows host to avoid line-ending diffs.
- Set
- Pass arguments to the agent:
aicage <agent> resume <session-id>
- Share additional host folders:
- Use
Sharesor extension-provided shares in the setup UI.
- Use
- Use proxies:
aicageforwardsHTTP_PROXY,HTTPS_PROXY,ALL_PROXY, andNO_PROXY.- See CLI options.
- Use host networking or custom networks:
- See Host networking.
- On macOS with native Docker:
- See Known hiccups for the current support caveat.
- Add custom tools, agents, or base images:
aicage lets you customize images at three levels:
extensions: Add software and shared files/foldersagents: Add other agentsbase images: Custom agent environments
The sample repo is a fast way to see working examples and copy a template.
Quick start:
git clone https://github.com/aicage/aicage-custom-samples.git $HOME/.aicage-customThen run any agent:
aicage <agent>These are only samples. Use them to learn the structure, then replace or edit them with your own definitions.
aicage detects whatever you place under ~/.aicage-custom and offers it during selection.
Extensions can install tools and request additional host mounts.
After adding or changing custom definitions, restart aicage.
- Extensions: Customization-Extensions
- Custom agents: Customization-Agents
- Custom base images: Customization-Base-Images
Image updates are handled automatically; see Updates.
You should not have to choose between approving every small step and giving an agent access to your whole computer.
Agent restrictions and approval prompts get in the way of real work. But turning them off gives the agent access to everything your user account can read or change, far beyond the project.
aicage gives the agent a container with your project files and only the extra access you choose. The rest of your
computer stays out of reach.
Footnotes
-
On Windows, run
aicagefrom WSL for matching paths and user. Native Windows paths are mounted under/mnt/<drive>and the container runs asroot. ↩