Top
Best
New

Posted by usrme 1/9/2026

Code and Let Live(fly.io)
https://sprites.dev/
508 points | 189 commentspage 4
CGamesPlay 1/10/2026|
I spun one up, started a server on port 8080, ran `sprite url`, it gave me a URL, that URL just has `{ "error": "unauthorized" }`. How am I supposed to access it?
mrkurt 1/10/2026|
sprite url update --auth public

It requires your api token by default.

CGamesPlay 1/10/2026|||
Oh, thanks, that works. ([edit] rewrote this whole post) I guess I need to install my own tunneling into the VM to do web development on it, but that's not so bad. The lack of regional support is crippling, because whatever region you put me in is ~200ms from me and the typing lag is terrible.

I'd love to adopt this for all my development (which I currently do using rented cloud instances, so I'm pretty comfortable with the remote development paradigm). I'm especially excited about the snapshot/clone pattern, and have (this past week) been researching solutions for exactly this problem.

Hope you launch multiple regions for this ASAP. Will be watching.

mrkurt 1/10/2026||
If you `sprite console` to it, it'll forward any ports you open to localhost. You can tunnel almost everything through the CLI with the `sprite proxy` command.
indigodaddy 1/10/2026|||
Do we handle our own certs or do you have a proxy in front of the sprites that can do auto ssl stuff?
tptacek 1/10/2026||
We handle all the SSL stuff. Sprites run on the same Anycast network with the same control plane as Fly Machines, which are built for srs bzns.
raducu 1/12/2026||
Would it be possible for the CLI not to be binary and just a shell script, or a webshell would be great.

My issue is I've had my work laptop wiped twice because of things I've installed on it and it's a hassle to switch accounts/devices but I've love to give sprites a go.

mikomraz 1/12/2026|
really? how come? what are they using to detect binaries?
djmashko2 1/11/2026||
On the documentation, you install the NPM package via Anthropic: https://sprites.dev/api (on this page, if you select Node)

npm install @anthropic-ai/sprites

Is there some relationship between Anthropic and Fly.io that I didn't hear about?

Omni5cience 1/12/2026|
I noticed the same thing, I suspect it's hallucinated. It seems like the correct package is @fly/sprites --https://www.npmjs.com/package/@fly/sprites
mehdi1964 1/11/2026||
Treating agents like full computers instead of ephemeral sandboxes makes a lot of sense—durable state and checkpoints solve real pain points that stateless containers force you to work around. Curious how this approach scales when you need dozens or hundreds of Sprites at once.
psanford 1/10/2026||
What is the criteria for a sprite being "idle"? Is it no network activity or is it cpu based?
mrkurt 1/10/2026||
It stays awake if you have an open connection (like sprite console) or an exec session if running and producing stdout.

You can specify a max exec time for a process when you launch it via the API.

karmajunkie 1/12/2026||
Is there something we have to do to get a sprite to idle? Because I started one over the weekend that's still running despite no network usage, so that seems to be currently broken.
simonw 1/10/2026||
Looks like it's no network activity for 30 seconds.
zaptheimpaler 1/11/2026||
The sprite installer got stuck after "Installed to ..." for me. After waiting a few minutes I just ctrl+ced and looked at what it does after and manually ran "sprite auth setup --token <token>" and that seems to just hang for me.
siliconc0w 1/11/2026||
It'd cool to create a MCP for this so you can have your agents run persistent code/other agents.

This is a large pain point today if you aren't technical, most of the chat interfaces just let you create frontend only apps.

tptacek 1/11/2026|
You can do this now without an MCP, by auth'ing the `sprite` command inside of a Sprite and telling Claude to go document it for you. You can do things like "make me three versions of this feature on three different Sprites so I can compare them". It is spooky how easy it is to teach agents this stuff.
kristo 1/15/2026||
It looks like tmux sessions don't keep the sprite alive though, so you can't run cc in the background :/
aostiles 1/11/2026||
This seems cool but maybe not for a production setting requiring concurrency? I just signed up on PAYG which offers 3 concurrent sprites. I only see an option to upgrade to 10 concurrent sprites.
tptacek 1/11/2026|
Without getting into Kurt's galaxy-brained take on the declining importance of "production" in a post-AI world, I'd say: yeah, run prod apps on Fly Machines, for more predictable performance, scaling, and pricing. Do exploratory computing --- "figuring out what you'd run on a Fly Machine" --- in Sprites.
BoorishBears 1/14/2026||
The last few hours were a roller coaster after spending my weekend trying to build something Sprites-like on Fly Machines to power a feature in a larger project, then coming across this (great, I don't need to build it!) to realizing this is a seemingly a consumer product and I haven't been saved from an awful slog.
dangoodmanUT 1/11/2026|
I thought fly.io snapshots weren't guaranteed to stick around? Although I can can't find the docs mentioning it, but i checked within the last few months... maybe they changed it?
tptacek 1/11/2026|
More complicated than that, but with respect to Sprites --- this is a totally new stack.
dangoodmanUT 1/11/2026||
it seems like when you snapshot, you snapshot memory AND the filesystem (immutable ftw), that's pretty awesome

i am dying to know: firecracker still? I know you have an upcoming post abt it, but i'm incredibly impatient when it comes to fool new infra

dangoodmanUT 1/11/2026|||
Alright nerd-snipe snooping research post happning now!

Seems like they are using JuiceFS under the hood, with an overlay root for your CoW semantics. JuiceFS gives them instant clone (because they're not cloning the whole rootfs), while the chnages to the overlay are done as an overlayfs and probably synced back to S3 via a custom block device they have mounted into firecracker.

You can also see they are using juicefs it for the "policy" directly (which I'm assuming is the network policy functionality). iirc juicefs has support for block devices too, so maybe they are using that to back the rootfs overlay.

One concerning thing is the `/var/lib/docker` mount - i ran this in an ubuntu container, did they... attach it? Maybe that's a coincidence, but docker is not installed on the sprite by default. (the terminal is also super busted when used through an ubuntu container)

https://pastebin.com/raw/kt6q9fuA (edit: moved terminal output to pastebin because it was so ugly here)

I played with a similar stack recently, my guess is they are: 1. making some base vm, snapshotting it 2. when you create a vm, they just restore a copy and push metadata to it (probably via one of the mounts) 3. any changes that you make to the rootfs are stored on the juicefs block device (the overlay), which is relatively minimal compared to the base os. JucieFS also supports snapshotting, so that's probably how they support memory + filesystem snapshot and restore so quick

interestingly, seems they provision maybe a max disk size of 100GB for total checkpoints?

```

NAME TYPE SIZE FSTYPE MOUNTPOINTS

loop0 loop 100G /.sprite/checkpoints/active

```

fuse is definitely being used within the VMM, i can see a fuse mount and id being assigned. They're probably using juicefs directly for the policy mount because that doesn't need to be local nvme-cached, just consistent. The local-nvme -> s3 write-through runs on the hypervisor through a custom block device they attach to the firecracker vmm. This might just be the --cache-dir + --writeback cache option in juicefs. Wild guess is just 1 file per block.

guessing the "s3" here is tigris, since fly.io seems to have a relatoinship with them, and that probably keeps latency down for the filesystem

dangoodmanUT 1/11/2026|||
i think firecracker, just snooping around a sprite i see a lot of virtio-mmio, which afaik CHV would be using PCI in those instances
More comments...