Repository navigation
Provision sandbox environments from Settings (Boat, Daytona, Vercel, Upstash, Celesto + any driver) #27949
Replies: 9 comments 1 reply
|
Implementation draft: #27950 It includes the server-side driver contract, Boat and Daytona drivers, the Add environment → Sandbox flow, focused tests, and web captures. It is explicitly waiting on the direction approval this discussion asks for. |
|
Live Daytona results for #27950, since the PR notes Daytona was only tested with mocks. I ran it against a real Daytona account from the dev web client. What works as written: create ( What broke: pairing. Daytona's preview proxy echoes the caller's origin for CORS and Two more things, separate from that fix:
Happy to help test Daytona as this moves. I have an account and can run whatever you need. |
update: everything's on one branch nowthe PRs got closed for not having approval first, fair enough. moved it all to one branch so we can agree on scope here before anything gets reopened: branch: what it doesadd environment → sandbox spins up a cloud machine with your own provider key (boat, daytona, vercel, upstash box, celesto), installs t3 and pairs it like any other remote environment. projects, threads, terminals, browser all work the same. each provider is one driver file + a registry entry nothing keeps billing in the background
ready to work (all opt-in)
hardening
templates
smaller form: provider is one row, saved key shows "key saved · replace", provider settings live under advanced, and the "repository to clone" field is gone tested live
not tested yet: daytona templates (my key lacks snapshot scope), vercel on a hobby plan, and upstash's idle auto-pause (it pauses after 1h without activity and t3 traffic doesn't count as activity, so long agent runs could get cut). railway sandboxes i left out for now, no stop/resume and free plans kill idle ones after 5 min @matt-palmetto thanks for the daytona run, your CORS fix is cherry-picked with your authorship. both things you raised are covered: a sandbox can always be deleted from t3, and the lifetime limit + provider auto-stop catch anything pairing left behind. a per-task delete-on-stop mode would be an easy follow-up if wanted questions for maintainers
if something should be out, i'll cut it before opening anything |
|
follow-up idea for the "ready to work" part: #29777 proposes setup profiles, so a new sandbox (or devbox) gets the CLIs, agent config (instructions, skills, MCP servers) and sign-ins of the environment you already work on. applied on every sandbox create, first time + drift check on persistent ones. kept separate so it doesn't grow the scope of this one |
|
quick update + a question on direction
would that fit better than a separate "add environment → sandbox" flow? happy to reshape it around whatever abstraction you're building, or to start small with just the driver contract + one provider a few things i hit testing live that might save time either way:
|
|
https://www.docker.com/c/sbx-promo/ docker cloud sandbox will also be nice |
|
Any new considerations on this one with the news of Conductor retiring their Cloud feature? I think it'd be worth maintaining this so there is an easy path of migration for companies that relied on Conductor Cloud before. https://www.conductor.build/announcement, and it doesn't require devs to learn a new mental model around where agents run (npx connect still requires devs to think about work tree cleanup, and a machine sharing resources). |
update: one sandbox per chatchanged the model after using it daily. a sandbox config is now just a recipe, and every chat started on it gets its own sandbox:
if you want to try it without a fork, i made a small kit that builds the branch as a separate "T3 Code Custom" app next to the official one and rebases it on upstream every night: https://github.com/OmarAlex24/t3code-diy (unofficial, mac only) same questions as above still stand for maintainers, happy to cut scope before anything gets reopened |
|
I've been working on a related implementation in my fork. I started before noticing the approval-first contribution policy, so I'd like to discuss the architecture here before proposing anything for upstream. My approach differs in a few ways:
I also like the newer one-sandbox-per-chat direction proposed here. My implementation currently favors reusable environments and agent-driven delegation, but the composer workflow and chat-level cleanup would make disposable sandboxes much easier to use. The multi-provider work here is also further along than mine. I think provisioning an environment and deciding which chat or agent owns it should be separate concerns. That could let persistent environments, disposable cloud workspaces and local Docker sandboxes share the relevant infrastructure without forcing the same lifecycle on all of them. Would maintainers be open to a smaller first contribution covering the provider contract, lifecycle and environment connectivity, with agent orchestration and advanced capabilities following separately? I'm happy to adapt the existing implementation to whichever direction fits T3's architecture. |






Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Problem
Settings → Environments can only pair a T3 server that already runs somewhere. Using a cloud sandbox means creating the machine by hand, installing
t3, exposing a port, minting a pairing link and pasting it back.Proposal
Add environment → Sandbox provisions the machine with the user's own provider key, installs T3, runs
t3 serve, exposes it and pairs it through the existing pairing path. Projects, threads, terminals and reconnects are unchanged.Scope
Status
Branch:
OmarAlex24:feat/sandbox-environments. Every driver was tested live (details in this comment).Questions for maintainers
All reactions