Open source · MIT · Spindle everywhere
An agent that lives wherever you work.
Spindle is a durable coding agent. Every step is a committed revision of the conversation, the files and the app state, so a run that is killed resumes where it stopped, a model request is never sent twice by accident, and going back restores all three at once. The same engine runs in your terminal, on your server, inside your app, and in your browser.
Work is a thread of knots that stay tied.
A spindle spins thread. Spindle spins work into revisions: each one commits what the conversation said, what the workspace holds and what the app's state is, in one transaction. Nothing committed is ever edited after.
Five rules, enforced by the store, not by convention.
One revision holds everything.
Conversation, workspace and app state commit together. Go back, and all three come back: no files left over from a future that was undone.
Sent at most once.
Every model request is reserved before it leaves. A crash, a kill or a dropped connection never quietly sends it again, and never quietly bills you twice.
Unknown is said, not guessed.
When a request's fate cannot be known, Spindle tells you so. Continue never resends it; Retry sends it once more, on your word.
The store decides; hosts act.
A portable decision driver, with no network and no clock, says what a turn needs next. Whatever hosts it performs the effect and hands the answer back.
Sessions move.
A session is a directory, or one file. Export it from one host and go on in another: from your terminal to your browser and back, history and unknowns included.
An engine you can trust with an interruption.
Kill it mid-turn. Every committed step is still there, and continuing resumes the turn where it stopped.
A Rust crate, a JSON-RPC process, an HTTP host, or WebAssembly inside your JavaScript app. Same rules in each.
Runs on your machine with your provider keys. Keys are read per request and never written into a session.
There is no Spindle cloud. Requests go from your host to the provider you chose.
It cannot unsend a request or refund a charge. It tells you when one may have happened.
Commands run in a bubblewrap sandbox where Linux allows; otherwise Spindle says so, or refuses if you required it.
One core. Any host.
Native or embedded, every host runs the same driver over the same store. They differ only in who performs the effects: the native binary does it itself; an app (or the browser extension) does it for the WebAssembly package.
A CLI that survives you.
spindle new,
say, continue, retry, rewind. Sessions are directories
you can inspect, export and move.
Your agent, on your phone.
spindle serve
runs a mobile web UI and an HTTP API on loopback, paired per device, behind your own HTTPS proxy.
Durability as a library.
Drive sessions over JSON-RPC or HTTP, or run the WebAssembly package in Node or a browser worker, with app tools whose calls keep stable ids across crashes.
The first product: Spindle for Browser.
Spindle's durability and embeddability, carried whole into the browser. No server, no host required: threads, a Linux, your keys and your files, all inside the browser. Tested on Chrome, Edge and Brave.
An agent that lives in your browser.
Spindle keeps your conversation and workspace together, helps recover saved progress after interruptions, and lets you export the session when you want to move. In the browser, threads keep going with the panel closed and read your tabs once you switch that on.
See Spindle for Browser →From source, in a minute of typing.
Rust 1.89 or newer and a C compiler; on Linux, bubblewrap for sandboxed commands.
git clone https://github.com/SiliconState/Spindle.git
cd Spindle/spindle
cargo build --release --locked -p spindle-store --features cli --bin spindle
./target/release/spindle login deepseek # or any provider: spindle providers
./target/release/spindle --dir ../demo new --provider deepseek --isolation required \
"Create a small command-line calculator with tests"
./target/release/spindle --dir ../demo continue # after any interruption
Experimental, single-operator software. Spindle cannot unsend a request, refund a charge, or undo what a command did outside its workspace. Read the security notes before giving it real work.