Shelley is a mobile-friendly, web-based, multi-conversation, multi-modal, multi-model, single-user coding agent built for but not exclusive to exe.dev. It does not come with authorization or sandboxing: bring your own.
Mobile-friendly because ideas can come any time.
Web-based, because terminal-based scroll back is punishment for shoplifting in some countries.
Multi-modal because screenshots, charts, and graphs are necessary, not to mention delightful.
Multi-model to benefit from all the innovation going on.
Single-user because it makes sense to bring the agent to the compute.
curl -Lo shelley "https://github.com/boldsoftware/shelley/releases/latest/download/shelley_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')" && chmod +x shelleyThe binaries are on the releases page.
brew install --cask boldsoftware/tap/shelleyYou'll need Go and Node.
git clone https://github.com/boldsoftware/shelley.git
cd shelley
makeNew releases are automatically created on every commit to main. Versions
follow the pattern v0.N.9OCTAL where N is the total commit count and 9OCTAL is the commit SHA encoded as octal (prefixed with 9).
The technical stack is Go for the backend, SQLite for storage, and Typescript and React for the UI.
The data model is that Conversations have Messages, which might be from the user, the model, the tools, or the harness. All of that is stored in the database, and we use a SSE endpoint to keep the UI updated.
Shelley is partially based on our previous coding agent effort, Sketch.
Unsurprisingly, much of Shelley is written by Shelley, Sketch, Claude Code, and Codex.
Shelley is so named because the main tool it uses is the shell, and I like putting "-ey" at the end of words. It is also named after Percy Bysshe Shelley, with an appropriately ironic nod at "Ozymandias." Shelley is a computer program, and, it's an it.
Shelley is Apache licensed. We require a CLA for contributions.
Run make. Run make serve to start Shelley locally.
If you want to see how mobile looks, and you're on your home network where you've got mDNS working fine, you can run
socat TCP-LISTEN:9001,fork TCP:localhost:9000