{"id":49875567,"url":"https://github.com/aktech/ai-sandbox","last_synced_at":"2026-05-15T12:10:56.162Z","repository":{"id":356610780,"uuid":"1229912518","full_name":"aktech/ai-sandbox","owner":"aktech","description":"Per-project Docker sandbox for AI coding agents like Pi and Claude Code","archived":false,"fork":false,"pushed_at":"2026-05-08T21:37:15.000Z","size":41,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-08T22:34:53.159Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aktech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":null,"dco":null,"cla":null}},"created_at":"2026-05-05T13:55:21.000Z","updated_at":"2026-05-08T21:35:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aktech/ai-sandbox","commit_stats":null,"previous_names":["aktech/ai-sandbox"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/aktech/ai-sandbox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aktech%2Fai-sandbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aktech%2Fai-sandbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aktech%2Fai-sandbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aktech%2Fai-sandbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aktech","download_url":"https://codeload.github.com/aktech/ai-sandbox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aktech%2Fai-sandbox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33066242,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":[],"created_at":"2026-05-15T12:10:55.450Z","updated_at":"2026-05-15T12:10:56.157Z","avatar_url":"https://github.com/aktech.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ai-sandbox\n\n[![ci](https://github.com/aktech/ai-sandbox/actions/workflows/ci.yml/badge.svg)](https://github.com/aktech/ai-sandbox/actions/workflows/ci.yml)\n[![image](https://github.com/aktech/ai-sandbox/actions/workflows/image.yml/badge.svg)](https://github.com/aktech/ai-sandbox/actions/workflows/image.yml)\n[![release](https://github.com/aktech/ai-sandbox/actions/workflows/release.yml/badge.svg)](https://github.com/aktech/ai-sandbox/actions/workflows/release.yml)\n\nRun AI coding agents (Claude Code, pi, etc.) in a Docker container instead\nof directly on your laptop. Each project gets its own container, and the\ncontainer can only see the folders you explicitly mount in. If the agent\ngoes wrong, you lose the container — not your home directory.\n\nThe CLI is called `psb`. One command spins up (or re-enters) a sandbox\nfor the current project and drops you into a shell where `claude` and\n`pi` are already installed.\n\n## Install\n\n```sh\nmake build       # builds ./bin/psb — put it on your $PATH\npsb build        # builds the Docker image (one-time, ~5 min)\n```\n\nYou need Docker running. On macOS, [colima](https://github.com/abiosoft/colima)\nworks well (`colima start`).\n\n## Use it\n\n```sh\ncd ~/dev/my-project\npsb              # first run: creates a container, drops you into zsh\n                 # next runs: re-enters the same container\n```\n\nInside the container, run `claude` or `pi` like you normally would.\n\n| Command          | What it does                                  |\n|------------------|-----------------------------------------------|\n| `psb`            | Enter the sandbox for the current project.    |\n| `psb stop`       | Stop the current project's container.         |\n| `psb rm`         | Delete the current project's container.       |\n| `psb ls`         | List all sandboxes.                           |\n| `psb status`     | Show one container's status.                  |\n| `psb build`      | Rebuild the image.                            |\n\n## What gets mounted\n\nBy default the container only sees the project directory. Anything else\nyou want available — your `.gitconfig`, dotfiles, a shared library — you\nlist in a config file:\n\n`~/.config/ai-sandbox/config.json`\n\n```json\n{\n  \"default\": {\n    \"mounts\": [\n      \"{{HOME}}/.gitconfig\",\n      \"{{HOME}}/.claude/settings.json\",\n      \"{{CWD}}\"\n    ]\n  },\n  \"projects\": {\n    \"/Users/me/dev/my-project\": {\n      \"extra_mounts\": [\"~/dev/shared-lib\"],\n      \"memory\": \"8g\",\n      \"cpus\": 4\n    }\n  }\n}\n```\n\n- `mounts` — the full list. Each entry becomes a `-v src:src` bind mount.\n- `extra_mounts` — appended to `mounts`. Use for per-project additions.\n- `memory`, `cpus`, `image` — optional per-project overrides.\n\nPlaceholders: `{{HOME}}`, `{{CWD}}`, `{{SHARED_DIR}}`. Shell-style `~/`\nand `$VAR` also work. Paths that don't exist on the host are skipped\nwith a warning.\n\n## Environment overrides\n\n| Var                | Default                              |\n|--------------------|--------------------------------------|\n| `PSB_IMAGE_NAME`   | `ai-sandbox-pi:latest`               |\n| `PSB_MEMORY`       | `4g`                                 |\n| `PSB_CPUS`         | `2`                                  |\n| `PSB_SHARED_DIR`   | `~/sb-shared`                        |\n| `PSB_CONFIG_FILE`  | `~/.config/ai-sandbox/config.json`   |\n| `ANTHROPIC_API_KEY`| passed through to the container      |\n\n## What's in the image\n\nDebian slim with `claude`, `pi`, Node, Go, `uv`, `pixi`, `git`, `zsh`.\nThe container runs as a non-root user whose UID/GID matches your host,\nso files you create inside stay writable from outside.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faktech%2Fai-sandbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faktech%2Fai-sandbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faktech%2Fai-sandbox/lists"}