Repository navigation
[Feature]: On-demand cloud task environments through an external sandbox broker #18019
Replies: 10 comments 4 replies
|
Strong +1. I'd go further and say this is the feature currently holding T3 Code back. |
|
This would not only have to be limited to Clouds, but also ideally some interface would be in the middle so that custom/in-house/private deployments would be possible. |
|
Yes, support for cloud sandboxes would be a big unlock for T3 Code. My laptop constantly goes OOM due to memory from running builds. boat.dev and daytona.io are good first candidates that I support. |
|
+1 for amp orbs since you can self host them now too! |
|
A plugin style interface would be ideal, so that arbitrary implementations could be contributed by the community, to support also various in-house solutions. I'd like to contribute time and resources for this if there's a consensus about what the interface should look like by the maintainers. |
|
+1, and here is the other half of this: once tasks run on other machines, you need to see them apart from the work on your laptop. I already send long agent runs to boat.dev VMs. In T3 those threads look exactly like local ones, so I can't tell at a glance what is running off my machine, which one is waiting on me, or which one lost its connection. I've been using a patched build for this every day. It does two things: A VMs section at the bottom of the sidebar. One row per task, with its status and how long it has been running:
Above the rows, each task is a small boat that moves along a strip of water as it runs and docks when it finishes, so you can see the whole fleet in one look. You can collapse the section, or hide it so it shrinks to a "2 VMs running" pill. Those threads leave the main list, so local work stays readable. A Run on VM button next to Send. Your message folds into a paper boat and flies to the VMs section, and a "Starting VM…" row waits there until the remote thread shows up.
run-on-vm-animation.mp4The screenshots and recording are from my design prototype, with made-up task names. Every status comes from data T3 already has: pending approvals and input, whether a thread is running, and whether its environment is connected. The rough part is how my build finds the tasks. It matches a title prefix that my VM launcher sets, and Run on VM sends my own slash command. A real version would use each thread's environment, and the sandbox broker proposed here, to know what is remote. Run on VM would then become this proposal's "New cloud sandbox", or the move in #31077. I'm not asking you to merge my patch. I'm sharing it in case it helps shape how cloud tasks look once they exist, and I'm happy to share the code if it's useful. |
|
I'd like for these environments to be ephemeral - maybe one per thread, and automatically stopped/killed after some timeout. Providers like agent37 already support wake-on-ssh/sleep-on-inactivity for pets, but I want efficient concurrency with cattle. |
|
A few additional sandboxing options could be: Local / self hosted: Commercial: A T3 managed version (like Orbs) would be a pretty decent way to monetize this as well :) |
|
NOTE: This comment was left by gpt-6.1-sol high on behalf of Dj Gilcrease. This now has a working external plugin: Sandboxes, released as v0.1.1. The implementation post in the plugin-system discussion has screenshots of launching from the composer, automatic pairing to a real Docker sandbox, the thread-pane status, and a stopped sandbox with its conversation retained. Docker and Boat are built in, with an external executable/HTTPS driver for other providers. The controller owns provisioning and the first send, and manages stop/resume, idle and cost limits, and guarded deletion. Rehome is optional; transcripts are retained without it. It requires the shared plugin-system prototype host, rather than upstream T3 Code. Guest images need the matching host, agent tools, and Git access. The screenshots use the free Replay (dev) fixture; native mobile UI has not been exercised. |
|
I built the per-task flow this discussion asks for, with boat.dev, and I'd like a maintainer's call on direction before opening a PR. What it does
Why SSH, not pairingThe sandbox is a desktop-managed SSH environment, so T3 runs on it the way it runs on any SSH host and nothing listens on a public URL. The desktop authorizes its own key through boat's How it differs from #27949 and #31898Those create machines from Settings and bound their cost with a lifetime timer. This ties the sandbox to its threads, so it stops when the work settles, as asked above for one ephemeral sandbox per thread. Questions
Demo (65 s) & Code: https://github.com/kjj6198/t3code/blob/boat-assets/boat-thread-sandbox.mp4 t3code-boat-thread-sandbox.mp4 |


Uh oh!
There was an error while loading. Please reload this page.
Problem
I want T3 Code's graphical interface, extra tools, and existing native Codex and Claude Code integrations, with an isolated remote development environment created on demand for each task/worktree. Today an SSH environment must already exist; I would like to avoid maintaining an always-on development server.
Proposed solution
Support a user-configured external sandbox broker as an environment provider. The broker could run on Cloudflare Workers and provision environments through Boat, Daytona, or another provider. T3 would request a new environment for a task, wait for readiness, then connect using its existing remote-server/SSH or pairing flow. T3 would continue running the actual Codex and Claude Code harnesses inside the sandbox.
A minimal first version could be an environment provisioning hook/API that returns connection details, with visible provisioning progress, failures, cancellation, and retry. A native provider integration could follow later.
Expected workflow
Separate sandboxes can use separate checkouts/branches rather than requiring a Git worktree to span machines. Concurrent tasks should have separate environment identities.
Boundaries
Provider keys remain in the broker. Agent and repository authentication should be scoped, with explicit retention policy. Stop/resume must preserve files and conversation state; deleting an environment must be an explicit action. Provisioning and cleanup should survive client disconnects, and retrying a request must not create duplicate machines.
Related requests
Would a broker/provisioning-hook extension fit T3's remote-environment architecture? If not, guidance on the appropriate extension boundary would help those implementing it in a fork.
Providers considered: https://boat.dev/ and https://www.daytona.io/
All reactions