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 Cursor sandbox deployment

+322
+1
.github/workflows/deploy.yml
··· 34 34 zeroclaw, 35 35 wasmer, 36 36 nanoclaw, 37 + cursor, 37 38 ] 38 39 steps: 39 40 - name: Checkout repository
+118
apps/cf-sandbox/deploy/cursor/Dockerfile
··· 1 + FROM node:lts-trixie-slim 2 + 3 + ARG TARGETARCH 4 + 5 + COPY --from=docker.io/cloudflare/sandbox:0.7.8 /container-server/sandbox /sandbox 6 + 7 + RUN echo "deb [signed-by=/etc/apt/keyrings/doppler.gpg] https://packages.doppler.com/public/cli/deb/debian any-version main" | tee /etc/apt/sources.list.d/doppler-cli.list 8 + 9 + RUN apt-get update && apt-get install -y --no-install-recommends \ 10 + openssh-client \ 11 + git \ 12 + curl \ 13 + ca-certificates \ 14 + gnupg \ 15 + unzip \ 16 + python3 \ 17 + build-essential \ 18 + tmux \ 19 + gawk \ 20 + sed \ 21 + procps \ 22 + wget \ 23 + locales-all \ 24 + s3fs \ 25 + fontconfig \ 26 + sudo \ 27 + && useradd -m -s /bin/bash coder \ 28 + && echo "coder ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/coder 29 + 30 + ENV LC_ALL en_US.UTF-8 31 + ENV LANG en_US.UTF-8 32 + ENV LANGUAGE en_US.UTF-8 33 + 34 + RUN curl -s https://ohmyposh.dev/install.sh | bash -s && \ 35 + curl -s https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/refs/heads/main/themes/tokyonight_storm.omp.json | tee /root/.tokyonight_storm.omp.json >/dev/null && \ 36 + echo 'eval "$(oh-my-posh init bash --config ~/.tokyonight_storm.omp.json)"' >> /root/.bashrc 37 + 38 + 39 + RUN git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git && \ 40 + mkdir -p /root/.local && \ 41 + make -C ble.sh install PREFIX=/root/.local && \ 42 + rm -rf ble.sh && \ 43 + echo 'export LANG=en_US.UTF-8' >> ~/.bashrc && \ 44 + echo 'source -- ~/.local/share/blesh/ble.sh' >> ~/.bashrc 45 + 46 + RUN curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh && \ 47 + echo 'export PATH=$PATH:/root/.atuin/bin' >> ~/.bashrc && \ 48 + echo 'eval "$(atuin init bash)"' >> ~/.bashrc || true 49 + 50 + RUN case "${TARGETARCH}" in \ 51 + amd64) EZA_ARCH="x86_64-unknown-linux-musl" ;; \ 52 + arm64) EZA_ARCH="aarch64-unknown-linux-musl" ;; \ 53 + *) echo "Unsupported arch: ${TARGETARCH}" && exit 1 ;; \ 54 + esac && \ 55 + wget -qO /tmp/eza.tar.gz "https://github.com/eza-community/eza/releases/latest/download/eza_${EZA_ARCH}.tar.gz" && \ 56 + tar -xzf /tmp/eza.tar.gz -C /root/.local/bin && \ 57 + chmod +x /root/.local/bin/eza && \ 58 + rm /tmp/eza.tar.gz && \ 59 + echo 'alias ls="eza -l"' >> ~/.bashrc 60 + 61 + RUN curl -sLf --retry 3 --tlsv1.2 --proto "=https" 'https://packages.doppler.com/public/cli/gpg.DE2A7741A397C129.key' | gpg --dearmor | tee /etc/apt/keyrings/doppler.gpg >/dev/null \ 62 + && echo "deb [signed-by=/etc/apt/keyrings/doppler.gpg] https://packages.doppler.com/public/cli/deb/debian any-version main" | tee /etc/apt/sources.list.d/doppler-cli.list \ 63 + && apt-get update && apt-get install -y doppler && doppler --version 64 + 65 + RUN curl -fsSL https://tailscale.com/install.sh | sh 66 + 67 + RUN mkdir -p /root/.npm-global && npm config set prefix "/root/.npm-global" 68 + 69 + ENV PATH "/root/.npm-global/bin:${PATH}" 70 + 71 + RUN npm install -g pm2 72 + 73 + RUN curl https://cursor.com/install -fsS | bash 74 + 75 + RUN curl -fsSL https://deno.land/install.sh | sh 76 + 77 + RUN curl -fsSL https://bun.sh/install | bash 78 + 79 + ENV PATH "/root/.deno/bin:/root/.local/bin:${PATH}" 80 + 81 + RUN echo 'PATH="$HOME/.deno/bin:$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 82 + echo 'stty sane' >> ~/.bashrc && \ 83 + echo '. "$HOME/.bashrc"' >> ~/.profile 84 + 85 + COPY banner.sh /root/.local/bin 86 + 87 + RUN chmod a+x /root/.local/bin/banner.sh 88 + 89 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 90 + code-server --install-extension bastndev.lynx-theme --force && \ 91 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 92 + mkdir -p /usr/share/fonts && \ 93 + unzip -o /tmp/CascadiaMono.zip -d /usr/share/fonts/CascadiaMono && \ 94 + fc-cache -fv && \ 95 + touch /root/.vscode-setup-done 96 + 97 + RUN wget -qO /tmp/zoxide.tar.gz https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz && \ 98 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 99 + chmod +x ~/.local/bin/zoxide && \ 100 + rm /tmp/zoxide.tar.gz && \ 101 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 102 + 103 + USER coder 104 + RUN mkdir -p /home/coder && curl -fsSL https://zerobrew.rs/install | bash 105 + USER root 106 + 107 + RUN mv /home/coder/.local/bin/* ~/.local/bin 108 + 109 + WORKDIR /workspace 110 + 111 + ENV COMMAND_TIMEOUT_MS 300000 112 + 113 + # Required during local development to access exposed ports 114 + EXPOSE 8080 115 + EXPOSE 18789 116 + EXPOSE 3000/tcp 117 + 118 + ENTRYPOINT ["/sandbox"]
+32
apps/cf-sandbox/deploy/cursor/banner.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + readonly MAGENTA="$(tput setaf 5 2>/dev/null || echo '')" 4 + readonly GREEN="$(tput setaf 2 2>/dev/null || echo '')" 5 + readonly CYAN="$(tput setaf 6 2>/dev/null || echo '')" 6 + readonly NEON="$(tput setaf 50 2>/dev/null || echo '')" 7 + readonly NO_COLOR="$(tput sgr0 2>/dev/null || echo '')" 8 + 9 + cat << EOF 10 + ${NEON} 11 + ██████╗ ██████╗ ██████╗██╗ ██╗███████╗████████╗███████╗███╗ ██╗██╗ ██╗ 12 + ██╔══██╗██╔═══██╗██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝██╔════╝████╗ ██║██║ ██║ 13 + ██████╔╝██║ ██║██║ █████╔╝ █████╗ ██║ █████╗ ██╔██╗ ██║██║ ██║ 14 + ██╔═══╝ ██║ ██║██║ ██╔═██╗ ██╔══╝ ██║ ██╔══╝ ██║╚██╗██║╚██╗ ██╔╝ 15 + ██║ ╚██████╔╝╚██████╗██║ ██╗███████╗ ██║ ███████╗██║ ╚████║ ╚████╔╝ 16 + ╚═╝ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═══╝ 17 + ${NO_COLOR} 18 + 19 + ╭─────────────────────────────────────────────────────────────╮ 20 + │ This environment is ephemeral. │ 21 + │ What you build here lives fast and dies clean. │ 22 + │ │ 23 + │ Break systems. │ 24 + │ Spawn agents. │ 25 + │ Ship experiments. │ 26 + ╰─────────────────────────────────────────────────────────────╯ 27 + 28 + Type ${NEON}agent${NO_COLOR} to get started. 29 + 30 + Happy hacking! 🎉 31 + 32 + EOF
+109
apps/cf-sandbox/deploy/cursor/wrangler.jsonc
··· 1 + /** 2 + * For more details on how to configure Wrangler, refer to: 3 + * https://developers.cloudflare.com/workers/wrangler/configuration/ 4 + */ 5 + /** 6 + * For more details on how to configure Wrangler, refer to: 7 + * https://developers.cloudflare.com/workers/wrangler/configuration/ 8 + */ 9 + { 10 + "$schema": "node_modules/wrangler/config-schema.json", 11 + "name": "cursor", 12 + "main": "src/index.ts", 13 + "compatibility_date": "2025-05-06", 14 + "compatibility_flags": ["nodejs_compat"], 15 + "observability": { 16 + "enabled": true, 17 + }, 18 + /** 19 + * Smart Placement 20 + * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement 21 + */ 22 + // "placement": { "mode": "smart" } 23 + /** 24 + * Bindings 25 + * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including 26 + * databases, object storage, AI inference, real-time communication and more. 27 + * https://developers.cloudflare.com/workers/runtime-apis/bindings/ 28 + */ 29 + /** 30 + * Environment Variables 31 + * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables 32 + */ 33 + // "vars": { "MY_VARIABLE": "production_value" } 34 + "vars": { 35 + "SANDBOX_TRANSPORT": "websocket", 36 + "VOLUME_BUCKET": "pocketenv-volumes", 37 + "PREVIEW_TOKEN": "claude", 38 + }, 39 + /** 40 + * Note: Use secrets to store sensitive data. 41 + * https://developers.cloudflare.com/workers/configuration/secrets/ 42 + */ 43 + /** 44 + * Static Assets 45 + * https://developers.cloudflare.com/workers/static-assets/binding/ 46 + */ 47 + // "assets": { "directory": "./public/", "binding": "ASSETS" } 48 + /** 49 + * Service Bindings (communicate between multiple Workers) 50 + * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings 51 + */ 52 + // "services": [{ "binding": "MY_SERVICE", "service": "my-service" }] 53 + "containers": [ 54 + { 55 + "class_name": "Sandbox", 56 + "image": "./Dockerfile", 57 + "instance_type": "standard-3", 58 + "max_instances": 20, 59 + }, 60 + ], 61 + "durable_objects": { 62 + "bindings": [ 63 + { 64 + "class_name": "Sandbox", 65 + "name": "Sandbox", 66 + }, 67 + ], 68 + }, 69 + "migrations": [ 70 + { 71 + "new_sqlite_classes": ["Sandbox"], 72 + "tag": "v1", 73 + }, 74 + ], 75 + "hyperdrive": [ 76 + { 77 + "binding": "HYPERDRIVE", 78 + "id": "45a57339b01e45559b753ffcacbc20e4", 79 + }, 80 + ], 81 + /** 82 + * Smart Placement 83 + * https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement 84 + */ 85 + // "placement": { "mode": "smart" } 86 + /** 87 + * Bindings 88 + * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including 89 + * databases, object storage, AI inference, real-time communication and more. 90 + * https://developers.cloudflare.com/workers/runtime-apis/bindings/ 91 + */ 92 + /** 93 + * Environment Variables 94 + * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables 95 + * Note: Use secrets to store sensitive data. 96 + * https://developers.cloudflare.com/workers/configuration/secrets/ 97 + */ 98 + // "vars": { "MY_VARIABLE": "production_value" } 99 + /** 100 + * Static Assets 101 + * https://developers.cloudflare.com/workers/static-assets/binding/ 102 + */ 103 + // "assets": { "directory": "./public/", "binding": "ASSETS" } 104 + /** 105 + * Service Bindings (communicate between multiple Workers) 106 + * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings 107 + */ 108 + // "services": [ { "binding": "MY_SERVICE", "service": "my-service" } ] 109 + }
+21
apps/web/src/routeTree.gen.ts
··· 25 25 import { Route as DidSandboxRkeyTailscaleRouteImport } from './routes/$did.sandbox.$rkey/tailscale' 26 26 import { Route as DidSandboxRkeySshKeysRouteImport } from './routes/$did.sandbox.$rkey/ssh-keys' 27 27 import { Route as DidSandboxRkeySettingsRouteImport } from './routes/$did.sandbox.$rkey/settings' 28 + import { Route as DidSandboxRkeyServicesRouteImport } from './routes/$did.sandbox.$rkey/services' 28 29 import { Route as DidSandboxRkeySecretsRouteImport } from './routes/$did.sandbox.$rkey/secrets' 29 30 import { Route as DidSandboxRkeyRepositoryRouteImport } from './routes/$did.sandbox.$rkey/repository' 30 31 import { Route as DidSandboxRkeyPortsRouteImport } from './routes/$did.sandbox.$rkey/ports' ··· 109 110 const DidSandboxRkeySettingsRoute = DidSandboxRkeySettingsRouteImport.update({ 110 111 id: '/settings', 111 112 path: '/settings', 113 + getParentRoute: () => DidSandboxRkeyRoute, 114 + } as any) 115 + const DidSandboxRkeyServicesRoute = DidSandboxRkeyServicesRouteImport.update({ 116 + id: '/services', 117 + path: '/services', 112 118 getParentRoute: () => DidSandboxRkeyRoute, 113 119 } as any) 114 120 const DidSandboxRkeySecretsRoute = DidSandboxRkeySecretsRouteImport.update({ ··· 155 161 '/$did/sandbox/$rkey/ports': typeof DidSandboxRkeyPortsRoute 156 162 '/$did/sandbox/$rkey/repository': typeof DidSandboxRkeyRepositoryRoute 157 163 '/$did/sandbox/$rkey/secrets': typeof DidSandboxRkeySecretsRoute 164 + '/$did/sandbox/$rkey/services': typeof DidSandboxRkeyServicesRoute 158 165 '/$did/sandbox/$rkey/settings': typeof DidSandboxRkeySettingsRoute 159 166 '/$did/sandbox/$rkey/ssh-keys': typeof DidSandboxRkeySshKeysRoute 160 167 '/$did/sandbox/$rkey/tailscale': typeof DidSandboxRkeyTailscaleRoute ··· 177 184 '/$did/sandbox/$rkey/ports': typeof DidSandboxRkeyPortsRoute 178 185 '/$did/sandbox/$rkey/repository': typeof DidSandboxRkeyRepositoryRoute 179 186 '/$did/sandbox/$rkey/secrets': typeof DidSandboxRkeySecretsRoute 187 + '/$did/sandbox/$rkey/services': typeof DidSandboxRkeyServicesRoute 180 188 '/$did/sandbox/$rkey/settings': typeof DidSandboxRkeySettingsRoute 181 189 '/$did/sandbox/$rkey/ssh-keys': typeof DidSandboxRkeySshKeysRoute 182 190 '/$did/sandbox/$rkey/tailscale': typeof DidSandboxRkeyTailscaleRoute ··· 201 209 '/$did/sandbox/$rkey/ports': typeof DidSandboxRkeyPortsRoute 202 210 '/$did/sandbox/$rkey/repository': typeof DidSandboxRkeyRepositoryRoute 203 211 '/$did/sandbox/$rkey/secrets': typeof DidSandboxRkeySecretsRoute 212 + '/$did/sandbox/$rkey/services': typeof DidSandboxRkeyServicesRoute 204 213 '/$did/sandbox/$rkey/settings': typeof DidSandboxRkeySettingsRoute 205 214 '/$did/sandbox/$rkey/ssh-keys': typeof DidSandboxRkeySshKeysRoute 206 215 '/$did/sandbox/$rkey/tailscale': typeof DidSandboxRkeyTailscaleRoute ··· 226 235 | '/$did/sandbox/$rkey/ports' 227 236 | '/$did/sandbox/$rkey/repository' 228 237 | '/$did/sandbox/$rkey/secrets' 238 + | '/$did/sandbox/$rkey/services' 229 239 | '/$did/sandbox/$rkey/settings' 230 240 | '/$did/sandbox/$rkey/ssh-keys' 231 241 | '/$did/sandbox/$rkey/tailscale' ··· 248 258 | '/$did/sandbox/$rkey/ports' 249 259 | '/$did/sandbox/$rkey/repository' 250 260 | '/$did/sandbox/$rkey/secrets' 261 + | '/$did/sandbox/$rkey/services' 251 262 | '/$did/sandbox/$rkey/settings' 252 263 | '/$did/sandbox/$rkey/ssh-keys' 253 264 | '/$did/sandbox/$rkey/tailscale' ··· 271 282 | '/$did/sandbox/$rkey/ports' 272 283 | '/$did/sandbox/$rkey/repository' 273 284 | '/$did/sandbox/$rkey/secrets' 285 + | '/$did/sandbox/$rkey/services' 274 286 | '/$did/sandbox/$rkey/settings' 275 287 | '/$did/sandbox/$rkey/ssh-keys' 276 288 | '/$did/sandbox/$rkey/tailscale' ··· 406 418 preLoaderRoute: typeof DidSandboxRkeySettingsRouteImport 407 419 parentRoute: typeof DidSandboxRkeyRoute 408 420 } 421 + '/$did/sandbox/$rkey/services': { 422 + id: '/$did/sandbox/$rkey/services' 423 + path: '/services' 424 + fullPath: '/$did/sandbox/$rkey/services' 425 + preLoaderRoute: typeof DidSandboxRkeyServicesRouteImport 426 + parentRoute: typeof DidSandboxRkeyRoute 427 + } 409 428 '/$did/sandbox/$rkey/secrets': { 410 429 id: '/$did/sandbox/$rkey/secrets' 411 430 path: '/secrets' ··· 450 469 DidSandboxRkeyPortsRoute: typeof DidSandboxRkeyPortsRoute 451 470 DidSandboxRkeyRepositoryRoute: typeof DidSandboxRkeyRepositoryRoute 452 471 DidSandboxRkeySecretsRoute: typeof DidSandboxRkeySecretsRoute 472 + DidSandboxRkeyServicesRoute: typeof DidSandboxRkeyServicesRoute 453 473 DidSandboxRkeySettingsRoute: typeof DidSandboxRkeySettingsRoute 454 474 DidSandboxRkeySshKeysRoute: typeof DidSandboxRkeySshKeysRoute 455 475 DidSandboxRkeyTailscaleRoute: typeof DidSandboxRkeyTailscaleRoute ··· 464 484 DidSandboxRkeyPortsRoute: DidSandboxRkeyPortsRoute, 465 485 DidSandboxRkeyRepositoryRoute: DidSandboxRkeyRepositoryRoute, 466 486 DidSandboxRkeySecretsRoute: DidSandboxRkeySecretsRoute, 487 + DidSandboxRkeyServicesRoute: DidSandboxRkeyServicesRoute, 467 488 DidSandboxRkeySettingsRoute: DidSandboxRkeySettingsRoute, 468 489 DidSandboxRkeySshKeysRoute: DidSandboxRkeySshKeysRoute, 469 490 DidSandboxRkeyTailscaleRoute: DidSandboxRkeyTailscaleRoute,
+9
apps/web/src/routes/$did.sandbox.$rkey/services.tsx
··· 1 + import { createFileRoute } from '@tanstack/react-router' 2 + 3 + export const Route = createFileRoute('/$did/sandbox/$rkey/services')({ 4 + component: RouteComponent, 5 + }) 6 + 7 + function RouteComponent() { 8 + return <div>Hello "/$did/sandbox/$rkey/services"!</div> 9 + }
+32
daytona/cursor/Dockerfile
··· 1 + FROM daytonaio/sandbox:0.6.0 2 + 3 + RUN mkdir -p /home/daytona/.npm-global && npm config set prefix "/home/daytona/.npm-global" 4 + 5 + RUN curl -fsSL https://tailscale.com/install.sh | sh 6 + 7 + ENV PATH="/home/daytona/.local/bin:/home/daytona/.npm-global/bin:${PATH}" 8 + 9 + RUN npm install -g pm2 10 + 11 + USER root 12 + RUN mkdir -p /home/daytona/.local/share/fonts && chown -R daytona:daytona /home/daytona/.local 13 + USER daytona 14 + 15 + RUN curl -fsSL https://code-server.dev/install.sh | sh && \ 16 + code-server --install-extension bastndev.lynx-theme --force && \ 17 + curl -fsSL https://github.com/ryanoasis/nerd-fonts/releases/download/v3.4.0/CascadiaMono.zip -o /tmp/CascadiaMono.zip && \ 18 + unzip -o /tmp/CascadiaMono.zip -d /home/daytona/.local/share/fonts/CascadiaMono && \ 19 + fc-cache -fv && \ 20 + touch /home/daytona/.vscode-setup-done 21 + 22 + RUN curl -fsSL https://github.com/ajeetdsouza/zoxide/releases/download/v0.9.9/zoxide-0.9.9-x86_64-unknown-linux-musl.tar.gz -o /tmp/zoxide.tar.gz && \ 23 + mkdir -p ~/.local/bin && \ 24 + tar -xzf /tmp/zoxide.tar.gz -C ~/.local/bin zoxide && \ 25 + chmod +x ~/.local/bin/zoxide && \ 26 + rm /tmp/zoxide.tar.gz && \ 27 + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && \ 28 + echo 'eval "$(zoxide init bash)"' >> ~/.bashrc 29 + 30 + RUN curl -fsSL https://zerobrew.rs/install | bash 31 + 32 + RUN curl https://cursor.com/install -fsS | bash