the universal sandbox runtime for agents and humans. pocketenv.io
sandbox openclaw agent claude-code vercel-sandbox deno-sandbox cloudflare-sandbox atproto sprites daytona
7
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add pty-server to modal Dockerfiles and images map

Select container images in sandbox route from new images map with a
fallback to openclaw

+138
+21
apps/sandbox/src/images.ts
··· 1 + export const images: Record<string, string> = { 2 + openclaw: "ghcr.io/pocketenv-io/modal-openclaw:0.1.0", 3 + amp: "ghcr.io/pocketenv-io/modal-amp:0.1.0", 4 + claude: "ghcr.io/pocketenv-io/modal-claude:0.1.0", 5 + codex: "ghcr.io/pocketenv-io/modal-codex:0.1.0", 6 + copilot: "ghcr.io/pocketenv-io/modal-copilot:0.1.0", 7 + crush: "ghcr.io/pocketenv-io/modal-crush:0.1.0", 8 + cursor: "ghcr.io/pocketenv-io/modal-cursor:0.1.0", 9 + gemini: "ghcr.io/pocketenv-io/modal-gemini:0.1.0", 10 + kilo: "ghcr.io/pocketenv-io/modal-kilo:0.1.0", 11 + kiro: "ghcr.io/pocketenv-io/modal-kiro:0.1.0", 12 + mise: "ghcr.io/pocketenv-io/modal-mise:0.1.0", 13 + nix: "ghcr.io/pocketenv-io/modal-nix:0.1.0", 14 + nullclaw: "ghcr.io/pocketenv-io/modal-nullclaw:0.1.0", 15 + opencode: "ghcr.io/pocketenv-io/modal-opencode:0.1.0", 16 + opencrust: "ghcr.io/pocketenv-io/modal-opencrust:0.1.0", 17 + picoclaw: "ghcr.io/pocketenv-io/modal-picoclaw:0.1.0", 18 + pkgx: "ghcr.io/pocketenv-io/modal-pkgx:0.1.0", 19 + wasmer: "ghcr.io/pocketenv-io/modal-wasmer:0.1.0", 20 + zeroclaw: "ghcr.io/pocketenv-io/modal-zeroclaw:0.1.0", 21 + };
+2
apps/sandbox/src/routes/sandboxes.ts
··· 43 43 import crypto from "node:crypto"; 44 44 import process from "node:process"; 45 45 import prepareSandbox from "../lib/prepare-sandbox.ts"; 46 + import { images } from "../images.ts"; 46 47 47 48 const SUPPORTED_PROVIDERS = ["daytona", "vercel", "deno", "sprites"]; 48 49 ··· 194 195 vercelTeamId: params.vercelTeamId, 195 196 modalTokenId: decrypt(params.modalTokenId), 196 197 modalTokenSecret: decrypt(params.modalTokenSecret), 198 + image: images[params.base] || images["openclaw"], 197 199 }); 198 200 const sandboxId = await sandbox.id(); 199 201
+6
modal/amp/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/claude/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/codex/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/copilot/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/crush/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/cursor/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/gemini/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/kilo/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/kiro/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/mise/Dockerfile
··· 47 47 RUN npm install -g pm2 48 48 49 49 USER root 50 + 51 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 52 + chmod a+x /tmp/pty-server && \ 53 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 54 + chmod +x /usr/bin/pty-server 55 + 50 56 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 57 USER modal 52 58
+6
modal/nix/Dockerfile
··· 26 26 && echo "modal ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/modal 27 27 28 28 USER root 29 + 30 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 31 + chmod a+x /tmp/pty-server && \ 32 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 33 + chmod +x /usr/bin/pty-server 34 + 29 35 RUN ARCH=$(uname -m) && \ 30 36 if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; fi && \ 31 37 if [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
+6
modal/nullclaw/Dockerfile
··· 59 59 RUN npm install -g pm2 60 60 61 61 USER root 62 + 63 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 64 + chmod a+x /tmp/pty-server && \ 65 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 66 + chmod +x /usr/bin/pty-server 67 + 62 68 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 63 69 USER modal 64 70
+6
modal/openclaw/Dockerfile
··· 57 57 RUN npm install -g @chrysb/alphaclaw pm2 58 58 59 59 USER root 60 + 61 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 62 + chmod a+x /tmp/pty-server && \ 63 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 64 + chmod +x /usr/bin/pty-server 65 + 60 66 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 61 67 USER modal 62 68
+6
modal/opencode/Dockerfile
··· 47 47 pm2 48 48 49 49 USER root 50 + 51 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 52 + chmod a+x /tmp/pty-server && \ 53 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 54 + chmod +x /usr/bin/pty-server 55 + 50 56 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 57 USER modal 52 58
+6
modal/opencrust/Dockerfile
··· 61 61 RUN npm install -g pm2 62 62 63 63 USER root 64 + 65 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 66 + chmod a+x /tmp/pty-server && \ 67 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 68 + chmod +x /usr/bin/pty-server 69 + 64 70 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 65 71 USER modal 66 72
+6
modal/picoclaw/Dockerfile
··· 61 61 RUN npm install -g pm2 62 62 63 63 USER root 64 + 65 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 66 + chmod a+x /tmp/pty-server && \ 67 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 68 + chmod +x /usr/bin/pty-server 69 + 64 70 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 65 71 USER modal 66 72
+6
modal/pkgx/Dockerfile
··· 47 47 RUN npm install -g pm2 48 48 49 49 USER root 50 + 51 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 52 + chmod a+x /tmp/pty-server && \ 53 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 54 + chmod +x /usr/bin/pty-server 55 + 50 56 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 57 USER modal 52 58
+6
modal/wasmer/Dockerfile
··· 47 47 RUN npm install -g pm2 48 48 49 49 USER root 50 + 51 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 52 + chmod a+x /tmp/pty-server && \ 53 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 54 + chmod +x /usr/bin/pty-server 55 + 50 56 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 51 57 USER modal 52 58
+7
modal/zeroclaw/Dockerfile
··· 61 61 RUN npm install -g pm2 62 62 63 63 USER root 64 + 65 + RUN curl -L https://github.com/tsirysndr/pty-tunnel-server/releases/download/v0.0.2/pty-server-linux-x86_64.tar.gz | tar xz -C /tmp && \ 66 + chmod a+x /tmp/pty-server && \ 67 + mv /tmp/pty-tunnel-server /usr/local/bin && \ 68 + chmod +x /usr/bin/pty-server 69 + 64 70 RUN mkdir -p /home/modal/.local/share/fonts && chown -R modal:modal /home/modal/.local 71 + 65 72 USER modal 66 73 67 74 RUN curl -fsSL https://code-server.dev/install.sh | sh && \