A workspace you can daily-drive, collaboration that needs no server, and EMMA — an agent that runs on your models, on your machine, and never changes a line you haven't approved.
local-first · no account · no telemetry · works offline · cloud models opt-in
EMMA reads the project, stages her changes, and stops. The diff opens, you read it hunk by hunk, and what you untick never touches your disk.
Online is a bonus, never a requirement. There is no account to make and nothing phones home.
Monaco — the actual VSCode editor — with split editors and editor groups, resizable panes, a real bottom region for Problems and Output, breadcrumbs, sticky scroll, Peek Definition and zen mode. Multi-language LSP for TS/JS, Python, Rust and Go.
Talk to her, hand her tasks, let her run the floor. She works in staged, agentic steps — or calls up a crew of named teammates who work in parallel, each thinking out loud in their own colour. Her brain runs on your local model, Claude, or GPT.
Your installed models are first-class — chat, code and agent tasks all on your hardware. Cloud models are an opt-in extra, never a dependency, and your keys are sealed in a local vault behind a passphrase (scrypt + AES-256-GCM).
Two laptops on the same wifi find each other and pair up. Live cursors, shared EMMA, offline-edit merge, and peer identities verified with Ed25519 — a name can be spoofed, an identity can't. Plus a model mesh that pools everyone's GPUs.
EMMA uses standard MCP tools, and Build Emma is itself an MCP server — external agents can drive your workspace. Standard tools in, standard tools out. A sandboxed plugin API adds commands and EMMA tools of your own.
Push-to-talk speech in, spoken replies out, and a "Hey EMMA" wake word — processed entirely on your machine with Whisper and Piper. No audio ever leaves the room.
She reads, she stages, she runs what she wrote — and if it fails she reads the failure and fixes it. Then you see the diff. Nothing changes your code silently, ever.
Both are answered. These are the parts that took the longest and matter the most — each one found by actually running the thing.
She used to write code and stop; whether it worked was your problem. Now her work is run before you see it. The hard part: staged changes aren't on disk, so a test runner could never see them — verification applies them, runs, and always puts them back. The workspace ends byte-identical and unapproved code never survives a run.
Symbols per file, imports between files, and files ranked by how many others depend on them — 170 files in 135ms. A task opens with the project's shape instead of a flat path list, and there's a sidebar panel so when EMMA says a change belongs in rpc.ts, you can see why.
The rail lists each change and the diff beside it renders the resolved file — so unticking a hunk makes it vanish from what you're reading. You are always looking at exactly what would land, never at an approximation of it.
Every run is recorded passed, failed or unproven, and that record outranks any name-and-size heuristic. Below three proven runs it says nothing at all — one lucky success is not a 100% record.
Sessions run on your LAN over mDNS with host-approved joins and editor/viewer roles. Want it over the internet? It tunnels through infrastructure you already own — no service of ours sits in the middle, because there is no service. The engine refuses to open it while joins are unapproved, and that refusal has no setting.
A repeatable audit across five surfaces and both themes — and Monaco and xterm are not excluded, because their colours come from our tokens, so their contrast is ours. It found eight real violations, including generated syntax colours and all sixteen ANSI colours failing AA on a light ground. Every pair passes now.
One self-contained installer. The UI, the window shell, the engine, a Node runtime and the bundled language servers all ship inside it — you install one thing.
The AppImage is portable — mark it executable and run it. No root required.
Not code-signed yet, so Windows will show "Windows protected your PC" on first run. Click More info → Run anyway. Unsigned means no certificate has been bought — it does not mean unchecked.
Builds cleanly, but hasn't had its hands-on install check. It follows Linux and Windows rather than shipping untested.