Limn is a CLI and runtime for building and deploying small full-stack TypeScript apps — capsules — without leaving your agent. One server file, one client file, a database, auth, storage, logs, and a live URL. All of it.
Every line of Limn is written for agents. The capsule directory is the app.
The CLI is the entire surface. The docs ship raw markdown and llms.txt
so a coding agent can go from idea to deployed URL in one session.
Works with any provider and any harness — Claude Code, Codex, your own. No lock-in, ever.
DB, auth, object storage, logs, deploys. The runtime ships the boring parts so you ship the app.
Dump tables, tail logs, and export data from the CLI. Guess less, look more.
Every deploy gets a live URL. Claim it, name it, point your own domain at it.
Anonymous deploys expire. Idle cost is near zero. Build throwaway things freely.
A store for extensions and integrations — Raycast-style, Chrome-style, everything is an add-on.
A capsule is one complete app in a single directory. The contract is deliberately tiny so an agent can hold the whole thing in context.
Create a capsule from a template in one command.
Server handlers, Preact client, shared types. Types flow end to end.
Publish anonymously, then claim it. Live URL, logs, and DB in your terminal.
# one capsule = one directory . ├── server/index.ts # schema, queries, mutations ├── client/index.tsx # Preact UI ├── shared/ # pure TS, both sides └── .env.lakebed.server # server-only secrets npx limn new my-app --template todo npx limn dev npx limn deploy # → https://quiet-river-99404a.limn.app npx limn claim # keep it forever npx limn db dump <url> # inspect live state
The next generation of tools won't be an app you open — it'll be a capability layer your agent reaches for. Deploys, telemetry, integrations, home automation, one-off generators: a store of extensions on top of a single harness.
Limn is the beginning of that. A model- and provider-agnostic core where the UI is optional, the CLI is the API, the docs are written for machines, and every idea gets a URL before lunch.
Read them as a human, or feed them to a model. Same words, same structure.