Use -x for non-interactive mode and --dangerously-allow-all to auto-approve all tool calls (safe inside E2B sandboxes). Amp uses its own API key from ampcode.com/settings.
import { Sandbox } from 'e2b'const sandbox = await Sandbox.create('amp', { envs: { AMP_API_KEY: process.env.AMP_API_KEY },})const result = await sandbox.commands.run( `amp --dangerously-allow-all -x "Create a hello world HTTP server in Go"`)console.log(result.stdout)await sandbox.kill()
Use --stream-json to get a real-time JSONL event stream with rich metadata — including tool calls, token usage, thinking blocks, and permission decisions.
import { Sandbox } from 'e2b'const sandbox = await Sandbox.create('amp', { envs: { AMP_API_KEY: process.env.AMP_API_KEY },})const result = await sandbox.commands.run( `cd /home/user/repo && amp --dangerously-allow-all --stream-json -x "Find and fix all TODO comments"`, { onStdout: (data) => { for (const line of data.split('\n').filter(Boolean)) { const event = JSON.parse(line) if (event.type === 'assistant') { console.log(`[assistant] tokens: ${event.message.usage?.output_tokens}`) } else if (event.type === 'result') { console.log(`[done] ${event.message.subtype} in ${event.message.duration_ms}ms`) } } }, })await sandbox.kill()
If you need to customize the environment (e.g. pre-install dependencies, add config files), build your own template on top of the pre-built amp template.