Your AI agent doesn't know it's in production.
It just ran a migration against your live database. With your full credentials. At 3am. While you were asleep.
Devin needs database access to test a feature. So you hand it your production credentials. Because what else are you going to do? Spin up a whole new environment for a 20-minute task?
The AI agent doesn't understand blast radius. It will run whatever query it thinks is right. With your full credentials. Against your live database. It doesn't know the difference between staging and production, and it never will.
Real credentials. Contained risk.
Ephemeral sandboxes clone only the secrets the agent needs into a temporary, isolated environment. The AI gets real credentials that actually work, but they're walled off from everything else. When the task is done, the sandbox and its secrets cease to exist.
Real credentials, fully isolated. The sandbox self-destructs when the TTL expires.
A playground, not the production floor.
Clone
Cherry-pick secrets from production. Only the three the agent actually needs, not all forty-two.
Isolate
The agent works with real credentials inside a walled-off environment. Production never knows it exists.
Destroy
TTL expires, the sandbox and every secret inside it cease to exist. No cleanup scripts. No forgotten credentials.
One command to isolate. Zero commands to clean up.
AI agents don't understand blast radius
AI coding agents
Devin needs DB access for a migration test. Give it scoped credentials that vanish the moment the task ends.
Preview deployments
Every Vercel preview gets its own isolated secrets, scoped to the branch. Merged? Secrets are already gone.
CI test suites
Fresh credentials per pipeline run. No shared state bleeding between tests. No stale tokens causing flaky failures.
Contractor access
External devs get the credentials they need for a two-week sprint. Engagement ends, access ends. Automatically.
Or spin up sandboxes from code
const sandbox = await fv.environments.createSandbox({fromEnvironment: "production",secrets: ["DB_URL", "STRIPE_KEY"],ttlMinutes: 30,});// 30 minutes. Then it's gone.
# Create an ephemeral sandbox
sandbox = fv.environments.create_sandbox(
from_environment="production",
secrets=["DB_URL", "STRIPE_KEY"],
ttl_minutes=30,
)
# 30 minutes. Then it's gone.