{"id":34853264,"url":"https://github.com/aicage/aicage","last_synced_at":"2026-05-06T13:08:58.443Z","repository":{"id":323089949,"uuid":"1092090078","full_name":"aicage/aicage","owner":"aicage","description":"Runs agentic coding assistants in Docker containers","archived":false,"fork":false,"pushed_at":"2026-04-27T22:42:29.000Z","size":2393,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-28T00:24:11.102Z","etag":null,"topics":["agentic","agentic-code","agentic-coding","claude","claude-code","cli-wrapper","cline","codex","docker","docker-container","droid","fence","llm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aicage.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-11-08T01:26:44.000Z","updated_at":"2026-04-27T22:42:26.000Z","dependencies_parsed_at":"2025-12-15T07:03:52.779Z","dependency_job_id":"a90b8d28-8325-4563-90f0-373a6725df4f","html_url":"https://github.com/aicage/aicage","commit_stats":null,"previous_names":["wuodan/llm-agent-dock","aicage/aicage"],"tags_count":93,"template":false,"template_full_name":null,"purl":"pkg:github/aicage/aicage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aicage%2Faicage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aicage%2Faicage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aicage%2Faicage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aicage%2Faicage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aicage","download_url":"https://codeload.github.com/aicage/aicage/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aicage%2Faicage/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32695047,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic","agentic-code","agentic-coding","claude","claude-code","cli-wrapper","cline","codex","docker","docker-container","droid","fence","llm"],"created_at":"2025-12-25T19:32:33.081Z","updated_at":"2026-05-06T13:08:58.436Z","avatar_url":"https://github.com/aicage.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# aicage\n\nRun your favorite AI coding agents comfortably in Docker.\n\n## Why use `aicage`?\n\nAgents need deep access (read code, run shells, install deps).\nTheir built-in safety checks are naturally limited.\n\nRunning agents in containers gives a hard boundary - while the experience stays the same.\nSee [Why cage agents?](#why-cage-agents) for the full rationale.\n\n## First-time quick start\n\n- Prerequisites:\n  - Docker\n  - Python 3.10+ and `pipx`\n- Install:\n  \n  ```bash\n  pipx install aicage\n  ```\n  \n- Navigate to your project directory and run:\n\n  ```bash\n  aicage --yes \u003cagent\u003e\n  ```\n\n`--yes` accepts suggested defaults and skips setup prompts. This is the fastest first run.\n\n- Built-in agent examples:\n\n  ```bash\n  aicage --yes claude\n  aicage --yes codex\n  aicage --yes copilot\n  aicage --yes crush\n  aicage --yes droid\n  aicage --yes gemini\n  aicage --yes goose\n  aicage --yes opencode\n  aicage --yes qwen\n  ```\n\nExample output of first run with agent `codex`:\n\n[![Example output of first run with agent codex](https://raw.githubusercontent.com/wiki/aicage/aicage/screenshots/01-quickstart-with-yes-thumb.png)](https://raw.githubusercontent.com/wiki/aicage/aicage/screenshots/01-quickstart-with-yes.png)\n\n## Full setup (optional)\n\nIf you want full interactive setup instead of defaults:\n\n1. Show project config path and contents:\n\n   ```bash\n   aicage --config info\n   ```\n\n2. Remove config if needed:\n\n   ```bash\n   aicage --config remove\n   aicage --config remove \u003cagent\u003e\n   ```\n\n3. Run again without `--yes`:\n\n   ```bash\n   aicage \u003cagent\u003e\n   ```\n\nExample output of full setup prompt flow:\n\n[![Example output of full setup prompt flow](https://raw.githubusercontent.com/wiki/aicage/aicage/screenshots/02-full-config-start-thumb.png)](https://raw.githubusercontent.com/wiki/aicage/aicage/screenshots/02-full-config-start.png)\n\n## Full documentation\n\nThe complete user documentation lives in the wiki:\n[aicage.wiki](https://github.com/aicage/aicage/wiki)\n\n## Common scenarios\n\n- Pass arguments to the agent:\n  - `aicage \u003cagent\u003e resume \u003csession-id\u003e`\n- Share additional host folders:\n  - `aicage --share ~/.m2 \u003cagent\u003e`\n  - `aicage --share /path/to/data:ro \u003cagent\u003e`\n  - Extensions can also define extra shares (host mounts).\n- Let the agent use Docker:\n  - `aicage --docker \u003cagent\u003e`\n- Set environment variables:\n  - `aicage -e FOO=bar -- \u003cagent\u003e`\n- Use proxies:\n  - `aicage` forwards `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, and `NO_PROXY`.\n  - See [CLI options](https://github.com/aicage/aicage/wiki/CLI-Options).\n- Use host networking or custom networks:\n  - See [Host networking](https://github.com/aicage/aicage/wiki/Host-Networking).\n- On Windows with a Linux container/WSL workspace:\n  - set `git config --global core.autocrlf true` on the Windows host to avoid line-ending diffs.\n- Run into first-use setup issues:\n  - See [Known hiccups](https://github.com/aicage/aicage/wiki/Known-Hiccups).\n- Add custom tools/agents/base images:\n  - [Extensions](https://github.com/aicage/aicage/wiki/Customization-Extensions)\n  - [Custom agents](https://github.com/aicage/aicage/wiki/Customization-Agents)\n  - [Custom base images](https://github.com/aicage/aicage/wiki/Customization-Base-Images)\n\n## Built-in agents\n\n| CLI      | Agent              | Homepage                                                                           |\n|----------|--------------------|------------------------------------------------------------------------------------|\n| claude   | Claude Code        | [https://claude.com/product/claude-code](https://claude.com/product/claude-code)   |\n| codex    | Codex CLI          | [https://developers.openai.com/codex/cli](https://developers.openai.com/codex/cli) |\n| copilot  | GitHub Copilot CLI | [https://github.com/features/copilot/cli](https://github.com/features/copilot/cli) |\n| crush    | Crush              | [https://github.com/charmbracelet/crush](https://github.com/charmbracelet/crush)   |\n| droid    | Factory CLI        | [https://factory.ai/product/cli](https://factory.ai/product/cli)                   |\n| gemini   | Gemini CLI         | [https://geminicli.com](https://geminicli.com)                                     |\n| goose    | Goose CLI          | [https://goose-docs.ai](https://goose-docs.ai)                     |\n| opencode | OpenCode           | [https://opencode.ai](https://opencode.ai)                                         |\n| qwen     | Qwen Code          | [https://qwenlm.github.io/qwen-code-docs](https://qwenlm.github.io/qwen-code-docs) |\n\nYour existing CLI config for each agent is mounted inside the container so you can keep using your\npreferences and credentials.\n\n## Customization\n\n`aicage` lets you customize images at three levels: extensions, agents, and base images. The sample repo is a fast\nway to see working examples and copy a template.\n\nQuick start:\n\n```bash\ngit clone https://github.com/aicage/aicage-custom-samples.git $HOME/.aicage-custom\n```\n\nThen run any agent:\n\n```bash\naicage \u003cagent\u003e\n```\n\nThese are only samples. Use them to learn the structure, then replace or edit them with your own definitions.\n`aicage` detects whatever you place under `~/.aicage-custom` and offers it during selection.\nExtensions can install tools and request additional host mounts.\n\nAfter adding or changing custom definitions, restart `aicage`.\n\nIf your project is already configured for an agent, `aicage` will keep using the saved config. To reconfigure (and\nsee new bases/agents/extensions), run `aicage --config remove` and start `aicage` again. To reset only one agent\nentry, use `aicage --config remove \u003cagent\u003e`. Use `aicage --config` to inspect the current config.\n\n- Extensions: [Customization-Extensions](https://github.com/aicage/aicage/wiki/Customization-Extensions)\n- Custom agents: [Customization-Agents](https://github.com/aicage/aicage/wiki/Customization-Agents)\n- Custom base images: [Customization-Base-Images](https://github.com/aicage/aicage/wiki/Customization-Base-Images)\n\nImage updates are handled automatically; see [Updates](https://github.com/aicage/aicage/wiki/Updates).\n\n## aicage options\n\n- `--dry-run` prints the composed `docker run` command without executing it.\n- `-y`, `--yes` applies default answers for all prompts and suppresses prompt output.\n- `--docker` mounts `/run/docker.sock` into the container to enable Docker-in-Docker workflows.\n- `--share \u003cpath\u003e` mounts a host path into the container at the same path. Repeatable; add `:ro` for read-only.\n- Extensions can also request grouped host mounts during setup.\n- `--config` prints the project config path and its contents.\n- `--config remove [\u003cagent\u003e]` removes the full project config or only one agent entry.\n\nConfiguration file formats are documented in [CONFIG.md](CONFIG.md). Extension authoring is documented in\n[doc/extensions.md](doc/extensions.md).\n\n## Why cage agents?\n\nAI coding agents read your code, run shells, install packages, and edit files. That power is useful,\nbut granting it directly on the host expands your risk surface.\n\nWhere built-in safety is limited:\n\n- Allow/deny lists only cover known patterns; unexpected commands or attack paths can slip through.\n- Some agents work fully only after relaxing their own safety modes, broadening what they can touch.\n- “Read-only project” features are software rules. Other projects and files still sit alongside them\n  on the same host.\n\nHow aicage mitigates this:\n\n- Containers create a hard boundary: the agent can access only what you explicitly mount. Day-to-day\n  use stays familiar—just with the host kept out of reach.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faicage%2Faicage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faicage%2Faicage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faicage%2Faicage/lists"}