I've been building Cerne Code — a free, open-source desktop coding agent that runs 100% locally. Think "Claude Code" as a desktop app, but free and compatible with Ollama, llama.cpp, LM Studio, and any OpenAI-compatible API.
This post covers the architecture, key technical decisions, and what I learned along the way.
The agent can read, edit, and create files (with a sandbox + diff review), run commands (including background dev servers), search the web (multi-engine, no API key needed), generate documents (Excel, Word, PDF, PowerPoint), control the screen via computer_use, and delegate subtasks to sub-agents.
Tool execution loop: Each turn, the model decides which tool to call. The loop runs in a background async task — the UI gets progress events via Tauri's event system.
Sandboxed editing: Every write_file/edit_file goes to a project-side sandbox first. The user approves/rejects each diff before anything touches the real file.
Pipeline Dev→QA→Analyst: The agent can implement something, then a skeptical verifier confirms with real tests before declaring success. If it fails, it loops back to the dev phase.
Multi-engine web search: DuckDuckGo + Brave + Mojeek aggregated, with dedup and ranking by consensus. No API key needed by default.
Audio input & TTS: Speak instead of typing. Listen instead of reading.
Skills, Agents & Personas: Reusable instruction files, specialized sessions, and custom personas with their own tone.
I tested 12 local models on tool-calling ability. The winner: gemma4-e4b-qat-mtp via TurboQuant (llama.cpp fork) — 60/60 on 6 tool tasks, 0.2s per call. Full benchmark in the README.
Rust compilation is slower to iterate on, but the resulting binary is ~5MB vs Electron's 150MB+. Memory usage is also significantly lower — the app idles at ~80MB.
MIT license. Download, fork, contribute.
🔗 [https://github.com/RuvianFabrin/cerne-code](https://github.com/RuvianFabrin/cerne-code)
🔗 [https://ruvianfabrin.github.io/cerne-code.html](https://ruvianfabrin.github.io/cerne-code.html)