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 modal and e2b SSH providers

Handle modal and e2b in the ssh command (use tty with pty=false),
extend the Provider union and update the unsupported-provider error
message to include them.

Stop calling decrypt() when constructing ModalClient; pass tokens
directly from options.

+12 -5
+2 -2
apps/api/src/pty/modal/index.ts
··· 33 33 options: SandboxEnvironmentOptions, 34 34 ): Promise<{ sandbox: Sandbox; cmd: ContainerProcess<string> }> { 35 35 const modal = new ModalClient({ 36 - tokenId: decrypt(options.tokenId), 37 - tokenSecret: decrypt(options.tokenSecret), 36 + tokenId: options.tokenId, 37 + tokenSecret: options.tokenSecret, 38 38 }); 39 39 const sandbox = await modal.sandboxes.fromId(options.id); 40 40
+8 -2
apps/cli/src/cmd/ssh/index.ts
··· 70 70 process.exit(1); 71 71 } 72 72 73 - // export type Provider = "daytona" | "deno" | "cloudflare" | "vercel" | "sprites"; 73 + // export type Provider = "daytona" | "deno" | "cloudflare" | "vercel" | "sprites" | "modal" | "e2b"; 74 74 switch (sandbox.provider) { 75 75 case "cloudflare": 76 76 await cloudflare(sandbox); ··· 87 87 case "sprites": 88 88 await tty(sandbox, true); 89 89 break; 90 + case "modal": 91 + await tty(sandbox, false); // pty 92 + break; 93 + case "e2b": 94 + await tty(sandbox, false); // pty 95 + break; 90 96 default: 91 97 consola.error( 92 98 `Sandbox ${chalk.yellowBright(sandbox.name)} uses provider ` + 93 99 `${chalk.cyan(sandbox.provider)}, but this command only supports ` + 94 - `${chalk.cyan("cloudflare")}, ${chalk.cyan("daytona")}, ${chalk.cyan("deno")}, ${chalk.cyan("vercel")}, or ${chalk.cyan("sprites")} sandboxes.`, 100 + `${chalk.cyan("cloudflare")}, ${chalk.cyan("daytona")}, ${chalk.cyan("deno")}, ${chalk.cyan("vercel")}, ${chalk.cyan("sprites")}, ${chalk.cyan("modal")} or ${chalk.cyan("e2b")} sandboxes.`, 95 101 ); 96 102 process.exit(1); 97 103 }
+2 -1
apps/cli/src/types/providers.ts
··· 4 4 | "cloudflare" 5 5 | "vercel" 6 6 | "sprites" 7 - | "modal"; 7 + | "modal" 8 + | "e2b";