Top
Best
New

Posted by usrme 1/9/2026

Code and Let Live(fly.io)
https://sprites.dev/
506 points | 188 comments
simonw 1/10/2026|
I'm really excited about https://sprites.dev/ - it hits two of my favourite problems at once:

1. Developer environment sandboxes. This is a cheap and convenient way to run Claude Code / Codex CLI / etc in YOLO mode in a persistent sandboxed VM with a restricted blast radius if something goes wrong.

2. Sandbox API. Fly now have a product that lets me make a simple JSON API call to run untrusted code in a new sandbox. There's even snapshotting support so I can roll back to a known state after running that code.

I wrote more a bunch more about this here: https://simonwillison.net/2026/Jan/9/sprites-dev/

dang 1/10/2026||
I know you know this, as you posted it, but readers might want to look at this related thread:

Fly's Sprites.dev addresses dev environment sandboxes and API sandboxes together - https://news.ycombinator.com/item?id=46561089 - Jan 2026 (10 comments)

realty_geek 1/10/2026||
I have found container-use to be super useful for this.

https://container-use.com/quickstart

BTW Simon, I was super happy when I heard on Theo's podcast that he will be encouraging you to monetise your work more. I'm super appreciative of your work and I'm pretty convinced that the more you profit from it, the better the universe will be!!!

skrebbel 1/11/2026||
For those of us who weren’t on that podcast, can you clarify who Theo is?
genghisjahn 1/11/2026||
Theo Brown? T3.gg?
therealwardo 1/11/2026||
I really want to love this, but my experience in the first 20 seconds is unfortunately like some of my other experiences coding against Fly APIs, they're broken.

https://sprites.dev/api has this command:

$ curl -X POST "https://api.sprites.dev/v1/sprites" \ -H "Authorization: Bearer $SPRITES_TOKEN" \ -d '{"name": "my-sprite"}'

which responds with

{"error":"name is required"}

if you use the request body in the full "Create Sprite" documentation at https://sprites.dev/api/sprites#create then it does work.

can I live with some rough edges for some personal workflows that only impact me when things break? sure. however, I was thinking about playing with some CI/CD stuff using sprites that would impact our whole team if things broke and I'm really on the fence because of this experience in the first 20 seconds.

Fly team - please put some black box probes or just better testing on the example you give in the quick start. if you document it, test it.

Aurornis 1/11/2026||
The documentation is correct now. I assume someone from fly is reading the comments.
tvink 1/11/2026|||
Probably because you didn't include the content type header?
therealwardo 1/11/2026|||
yep that would fix it. just needs a little docs change.

a "quick start" really should just work when you copy paste them.

rendaw 1/11/2026|||
Can it be some other content type?
nextaccountic 1/11/2026||
Can this issue be reported?

I wish more companies had open issue trackers (some proprietary software have issues on Github for example, but, it doesn't need to be Github, just let people discuss issues in the open)

senko 1/11/2026||
I might have missed this in the docs, but is there a way to fork/clone a sprite, or restore a checkpoint into a new one?

Use cases: set up my preferred env in one sprite and use that as a template for others; or fire off a few independent sprites with claude code exploring alternative solutions, then choose a winner and reap the rest.

tptacek 1/11/2026|
It's coming, and it'll make sense how and why next week when I run the "how this shit works" post.

I actually pushed to include it in the launch release. You'd have to ask Kurt why he didn't, but I think the idea is just to get more real-world usage first.

mcintyre1994 1/11/2026|||
Do you expect that to replace git worktree for getting Claude to work on multiple things in parallel? That was something I was curious about watching the demo video.
mcintyre1994 1/11/2026||
Can’t edit, but adding I noticed that there’s a limit of 3 sprites running concurrently for pay as you go, so that’s probably not a realistic day-to-day workflow.
senko 1/11/2026|||
> It's coming, and it'll make sense how and why next week when I run the "how this shit works" post.

Thanks! Also looking forward to reading the post :)

> the idea is just to get more real-world usage first

My particular wish notwithstanding, I agree with this.

sheepscreek 1/10/2026||
> Claude is a hyper-productive five-year-old savant. It’s uncannily smart, wants to stick its finger in every available electrical socket, and works best when you find a way to let it zap itself.

This alone was worth the upvote!

abelanger 1/10/2026||
This is seriously cool - it's exactly the DX and API I've been waiting for from sandboxed execution providers.

I'd love to be able to configure the base image/VM in a way that doesn't bundle coding tools or anything else I don't need, and comes with some other binaries installed (I'm more interested in using this as an API for a sandbox use-case I have). Is there a way to do this at the moment / is this on the roadmap?

Another option would be configuring the sprite via checkpoint and then cloning the checkpoint from a base sprite, but I don't see this option anywhere either.

indigodaddy 1/11/2026|
Yes! It would be kinda cool to have the ability to docker-deploy (think the fly method even -- just to get your sprite on its feet the way YOU want it) a base sprite image and then just go from there in the normal sprite way from then on.
spondyl 1/11/2026||
Philosophically, I like Fly and have been a customer since very early on.

That said, I dread having to do anything CLI related, which for hobby projects is like once every few weeks.

Glancing at the docs for Sprite, I worry that this will be another CLI where a good 95% of the time that I go to invoke a command, my workflow is interrupted by an auto-updater that takes longer than whatever interaction I'm trying to do and derails my train of thought.

causal 1/11/2026|
Same. Abandoned fly for Digital Ocean when I found myself hitting my head against the wall trying to get their "just works" to work too often.
yoavsha1 1/11/2026||
I know it's one me for thinking this -- since the domain is fly.io -- but I was really hoping this is some local solution. Not self-hosted, but just local. A thin command line wrapper to something (docker? bubblewrap?) that gave me sort of a containerized "VM" experience for my local machine using CoW.
_kb 1/11/2026||
Check out LXC and the wider Incus set of projects: https://linuxcontainers.org/incus/.

Running IncusOS on some local hardware with ZFS underneath is a phenomenally powerful sandbox.

zackify 1/11/2026||
Yeah I can make an lxc container called "ai" that has an ssh read key and then a few pre cloned projects. When I want to work I can clone and start it then get the same effect on my own hardware and for free. Just need a small little wrapper to make this a bit more streamlined
mkagenius 1/11/2026||
If you are on mac, you can use Coderunner[1]. It will run locally on your and execute any AI generated code in an apple container.

1. Coderunner - https://github.com/instavm/coderunner

mwcampbell 1/10/2026||
I want something like this, but running on my own box. I now have a Linux box with plenty of RAM and storage under my desk. (It happens to be an NVIDIA DGX Spark, but I'm not really interested in passing the GPU through to these sandboxed VMs; I know that's not practical anyway.) Maybe I'll see if I can hack together a local solution like this using Firecracker.
tptacek 1/10/2026||
That's coming. It's what Jerome has been working on these past few months.
haute_cuisine 1/11/2026|||
What about `docker run`? It'll be the same isolated container that keeps state. You can also mount some local directory
indigodaddy 1/10/2026||
Maybe bend smolvm to your needs?
chrismccord 1/11/2026||
I've been having so much fun working on sprites (and working with sprites) the last the several months. There's some neat parts of the Elixir side of this we're going to open source soon.

Also check out the 5 min demo we put out where I walk thru some sprite basics: https://www.youtube.com/watch?v=7BfTLlwO4hw

tptacek 1/11/2026|
One of the coolest things about this is that Claude in his environment --- without him asking to --- knows how to drive Sprites. If you ask it to run a server, it will register it as a local service so it survives reboots. Without you asking to, it'll checkpoint when it makes big changes. I think this is kind of freaky.

I can't say enough how, if you're using this like Kurt and Chris have been, you have like, a dozen sleeping Sprites in your Sprite list. If you're not doing anything with them, they're not really costing you anything. When you want to do something new, there's no point figuring out which of your existing Sprites to do it on. Just make a new one.

Always having a sane place to run anything I happen to be doing, without making any decisions, it's a weird feeling.

losvedir 1/11/2026|||
Oh no, as someone who hoards browser tabs, I fear where this will lead me...
mcintyre1994 1/11/2026||||
That’s a great demo! For curious mere mortals, are all those custom instructions that make Claude know how to use it public? I’d like to learn how to drive it myself too, just out of curiosity!
kasey_junk 1/11/2026||
Check out the skills that are installed on the box by default
indigodaddy 1/11/2026|||
Do we pay a storage penalty for inactive sprites?
tptacek 1/11/2026||
You pay for the storage you actually use (not the raw capacity). If you build, like, a relatively complicated Python web service with some assets, and all the build deps that go with that, you might be on the hook for, like, 90 cents in a month.
indigodaddy 1/11/2026||
Right that makes sense thank you
dtkav 1/10/2026|
fly.io is doing really good work. I've super enjoyed building our product on their platform. I love fly-replay combined with super fast start-up.

I've been thinking a lot about how to run agents (and skills) securely while giving them a lot of powerful capabilities.

I recently used their macaroons library to turn arbitrary API keys (e.g. for stripe's API) into macaroons. I route requests for an upstream host (like stripe) through Envoy as a mitm proxy which injects the real creds after verifying the macaroon.

It is such a powerful pattern. I'm always worried about leaking sensitive keys through prompt injection attacks (or just sending them to anthropic), but in this model you can attenuate the keys (both capabilities & validity window) client side. The Envoy proxy lives inside my flycast network so it can't be accessed externally.

It would be so cool if fly built something like this into sprites.dev (though I can see how it would be spooky to have fly install their own certs for stripe, etc...)

tptacek 1/10/2026||
If you read Ben Toews work on the tokenizer you have a good sense of where I want Sprites to go with key leaks and prompt injection:

https://fly.io/blog/tokenized-tokens/

dtkav 1/10/2026||
Awesome stuff! Thanks for the reply.

Tokenizer is an explicit proxy though right?

My use case is very similar, but I wanted a transparent proxy so I could run unmodified scripts. It is a tricky design decision though.

I also mount a little fuse filesystem that mints macaroon on read (with a shorter lifetime, probably inspired by y'all but i forget from where).

I work on realtime collaboration of markdown files (currently in Obsidian), which has become a shared-context substrate for agents, skills, etc.. Our own company workspace has skills that have scoped access to fly, stripe, gmail, etc. We're definitely drinking the file-over-app personal-software-for-teams Kool-Aid, so the problem space for us includes access control and auditing.

Love your work :)

tptacek 1/10/2026||
We have enough control over the execution environment in a Sprite (unlike a Fly Machine, where the implied Linux contract we have with our users gets in the way) that we can trivially hide explicit proxies.

We can also attach Macaroons to Fly Machines and Sprites for configurable ambient privileges, something I've wanted us to expose as a feature for a very long time.

dtkav 1/10/2026||
Awesome, i look forward to that. I think that could be a major differentiator for sprites. I wish i could work on that problem at fly.io scale.

What is the contract with sprites? Is it just built-with-linux but not promising Linux? Or is it more like a machine but y'all control the container image?

tptacek 1/10/2026||
There's no "formal" contract in either place but people running on Fly Machines expect that there's nothing at all between them and the kernel, and we don't have that expectation in Sprites; we can do whatever we want. :)

I don't want to get too far into the rest of the details only because I'm writing this up for next week. They're not that interesting technically, but they're a really big deal for us in other ways.

dtkav 1/10/2026||
Great, i look forward to reading it.
CGamesPlay 1/11/2026||
Did you write up anything about this? Is this off the shelf behavior for Envoy or did you create this API yourself?
dtkav 1/11/2026||
I can open source it next week when i get a chance.
More comments...