Case study
Lyra
A desktop coding agent I'm building in Rust and Tauri — an agent loop with a real tool registry, token streaming, and a per-session approval flow for anything sensitive. Dogfooded daily toward a v1.0 I'd actually use.
- Role
- Solo builder
- Period
- 2026-08 → Present
- Status
- Still in progress
- Topics
- 4
The short version
I wanted a coding agent that lived on my desktop instead of in a browser tab, so I built one. Lyra is a Tauri desktop app with a Rust agent loop at its core: the model gets a real tool registry — file read/write/patch, search, terminal, web search — and every sensitive action passes through a per-session approval flow before it runs. It streams tokens as they come and remembers each session in SQLite.
What I built
- The agent loop. A Rust core with a tool registry: file read/write/patch, codebase search, terminal execution, and web search, each with explicit permission semantics.
- The approval flow. Per-session control over which tools run without asking. Destructive actions always stop for a human.
- Multi-provider by design. OpenRouter and MiniMax behind one interface, so the backend is swappable instead of load-bearing.
- The desktop shell. Tauri + a React front-end, with token streaming across the Rust/WebView boundary and SQLite-backed session persistence.
What was hard
The approval UX. Ask for permission too often and the human rubber-stamps everything, which is worse than not asking. Too rarely and the agent is scary to leave alone. Finding the line — and making the default safe without being annoying — is most of the product.
What happened next
I dogfood it daily and let that decide the roadmap. v1.0 is not a feature list; it is the point where I stop reaching for a plain terminal out of habit.
What I took from it
Building a tool you consume yourself makes the feedback loop brutally honest. Every rough edge in the approval flow or the streaming UX is one I hit in my own work first.