Launch HN: Terminal Use (YC W26) – Vercel for filesystem-based agents
Here's a demo: https://www.youtube.com/watch?v=ttMl96l9xPA.
Our biggest pain point with hosting agents was that you'd need to stitch together multiple pieces: packaging your agent, running it in a sandbox, streaming messages back to users, persisting state across turns, and managing getting files to and from the agent workspace.
We wanted something like Cog from Replicate, but for agents: a simple way to package agent code from a repo and serve it behind a clean API/SDK. We wanted to provide a protocol to communicate with your agent, but not constraint the agent logic or harness itself.
On Terminal Use, you package your agent from a repo with a config.yaml and Dockerfile, then deploy it with our CLI. You define the logic of three endpoints (on_create, on_event, and on_cancel) which track the lifecycle of a task (conversation). The config.yaml contains details about resources, build context, etc.
Out of the box, we support Claude Agent SDK and Codex SDK agents. By support, we mean that we have an adapter that converts from the SDK message types to ours. If you'd like to use your own custom harness, you can convert and send messages with our types (Vercel AI SDK v6 compatible). For the frontend, we have a Vercel AI SDK provider that lets you use your agent with Vercel's AI SDK, and have a messages module so that you don't have to manage streaming and persistence yourself.
The part we think is most different is storage.
We treat filesystems as first-class primitives, separate from the lifecycle of a task. That means you can persist a workspace across turns, share it between different agents, or upload / download files independent of the sandbox being active. Further, our filesystem SDK provides presigned urls which makes it easy for your users to directly upload and download files which means that you don't need to proxy file transfer through your backend.
Since your agent logic and filesystem storage are decoupled, this makes it easy to iterate on your agents without worrying about the files in the sandbox: if you ship a bug, you can deploy and auto-migrate all your tasks to the new deployment. If you make a breaking change, you can specify that existing tasks stay on the existing version, and only new tasks use the new version.
We're also adding support for multi-filesystem mounts with configurable mount paths and read/write modes, so storage stays durable and reusable while mount layout stays task-specific.
On the deployment side, we've been influenced by modern developer platforms: simple CLI deployments, preview/production environments, git-based environment targeting, logs, and rollback. All the configuration you need to build, deploy & manage resources for your agent is stored in the config.yaml file which makes it easy to build & deploy your agent in CI/CD pipelines.
Finally, we've explicitly designed our platform for your CLI coding agents to help you build, test, & iterate with your agents. With our CLI, your coding agents can send messages to your deployed agents, and download filesystem contents to help you understand your agent's output. A common way we test our agents is that we make markdown files with user scenarios we'd like to test, and then ask Claude Code to impersonate our users and chat with our deployed agent.
What we do not have yet: full parity with general-purpose sandbox providers. For example, preview URLs and lower-level sandbox.exec(...) style APIs are still ...
35 comments
[ 5.0 ms ] story [ 65.0 ms ] threadeg. I already run Kubernetes
When I read this, I think of Fly.io's sprites.dev. Is that reasonable, or do you consider this product to be in a different space? If the latter, can you ELI5?
1) Can I use this with my ChatGPT pro or Claude max subscription? 2)
I suspect it works as follows: when a task starts, filesystem contents sync down from S3/R2/GCS to a local directory, which gets bind-mounted into the container. The agent reads and writes normally - no FUSE, no network round-trips per file op. On task completion or explicit sync, changes flush back to object storage. The presigned URL support for upload/download is the giveaway that object storage is the source of truth.
This makes way more sense than FUSE for agent workloads. Agents do thousands of small reads (find, grep, git status) that would each be a network call with FUSE. With copy-on-mount it's all local disk speed after initial sync.
Cross-task sharing falls out naturally - two tasks mounting the same filesystem ID just means two containers syncing from the same S3 prefix. Probably last-write-wins rather than distributed locking, which is fine since agents rarely have concurrent writes to the same file.
I have been building an OSS self-hostable agent infra suite at https://ash-cloud.ai
Happy to trade notes sometime!
One question: for the "existing tasks stay on old version" case, do you support any kind of manual migration trigger? E.g. if I fix a genuine bug in how I'm parsing a document, I might want to re-run the agent on specific old workspaces with the new version, rather than waiting for users to start new tasks.
One area I'd love to understand better: inter-agent communication and auditability. When multiple agents share the same filesystem (e.g., a coordinator agent and several sub-agents), how is message passing or state handoff handled? Is it purely file-based (agents read/write to agreed-upon paths), or is there a more structured IPC mechanism?
More importantly, from an audit perspective: is there a way to replay or inspect the full sequence of reads/writes and agent messages across a multi-agent task? For production use cases (document processing, internal tooling), being able to trace why an agent made a decision — and which files it read at that moment — feels like a hard requirement. Curious whether this is on the roadmap or expected to be handled at the application layer.
I know OSS business models are rough, but someone is going to solve this in open source and I think that is what will achieve traction.
I started by managing the claude agent sdk myself in a daytona container, and it was a lot more challenging than I thought. The agent kept crashing in streaming mode and there was no thread crash, so it was hard to debug, esp in a cloud container like Daytona. I also realized that I needed to implement my own session management system + my own database if I wanna save the chat and on top of that streaming so the messages come out in real time. AND I need to manage my own container janitor/heart beat system so that un-used containers don't just sit there, but I also don't want them to go cold immediately after each message since cold start takes a bit.. They all seem simple but at each step there are some edge cases. I ended up vibe coding most all of that, but it was just quite fragile. For those who hasn't tried the agent sdks, it feels like it's clearly designed to be ran on a client computers with permanent storage + lots of ram than microVMs. Which was not what I expected.
After that, I tried to find some managed option. Starting with blackbox ai because I saw a vercel tweet about them, and for some reason I just couldn't get their agent API stuff to work AT ALL?... I'm curious as to if it's actually working for anyone. Then I tried sandbox dev, which doesn't store container/sessions/storage stuff out of the box for you, so it wasn't much better than doing the daytona container myself. And then I tried terminaluse, and it worked better than I expected given all of the other stuff that I tried.
So at the end of the day, it's kind of like a managed cloud services that does agent chat history, session recovery, streaming + a CLI that makes it easy for my own codex to debug/deploy + file system sync. From what I can tell, there isn't anyone else that can do all that and I'm pretty pleased with using them.