EmpryoEmpryo.beta
surfaces

Desktop app

The Empryo desktop app: a native multi-tab client with the living Genome map, Monaco preview, visual diffs, embedded terminals, and drawer-based controls.

The desktop app is a native client for the same engine the TUI and headless CLI run. It adds a windowed, multi-pane workspace: a living map of your codebase, a real editor preview, visual diffs, embedded terminals, and every setting behind a drawer. macOS, Windows, and Linux (.AppImage/.deb/.rpm/.pkg.tar.zst). Grab it from the download page.

How it's built

The app is Electron. The window you see is a React renderer; the agent itself runs in a bundled background process (the "bridge") that talks to the renderer over a small JSON-line protocol. That bridge builds the exact same agent the terminal uses — one code graph and one memory store per window — so behavior is identical across surfaces. Settings are shared with the CLI by default, so your keys, theme, and config carry over.

Tabs

Each tab is an independent conversation lane on one shared workspace, mirroring the TUI. Tabs share the Genome and memory and coordinate edits through cross-tab file claims; every edit is attributed to its tab.

ShortcutAction
Cmd/Ctrl+TNew tab
Cmd/Ctrl+WClose tab
Cmd/Ctrl+19Switch tab
Cmd/Ctrl+KCommand palette

Each tab chip shows its index, a running indicator, the model, the count of files edited, and the running cost. Double-click to rename, drag to reorder. A renamed tab keeps its name: the label is written into the session log, so it survives a reload, a reconnect, and a session restore — and the same name shows up when the TUI or a Hearth chat opens that session.

The Primordial Deep

The signature desktop surface is a living map of your repository's context window. Every file is a cell drifting in space; the agent is a micro-organism that swims to whatever file it is touching right now. The layout comes from your real dependency graph and PageRank — structure never moves, so the map stays stable as the agent works.

Files move through awareness tiers as the session runs:

  • Unknown — fog, never looked at.
  • Known — present in the injected Genome.
  • Discovered — read or touched this session (the fog lifts with a pulse).
  • Edited — changed by the agent.

A scoreboard tracks coverage, links, and edits, with achievement badges and milestone toasts as coverage climbs. Hover any cell for its imports, importers, blast radius, and co-changes; fuzzy-search to fly the camera to a file. Open it fullscreen or dock it beside the chat.

The map is built to be cheap to leave open. When the agent is idle and nothing has moved for a few seconds it throttles itself to a trickle and fades its water shimmer out — any input, agent event, or camera motion snaps it back to full rate the same frame, so it never *feels* throttled. A GPU pill sits right on the map (docked and fullscreen, beside the Waves and Dark toggles) and always shows the engine currently drawing the deep: Fast with a lightning bolt — the discrete GPU, smoothest picture, the default — or Eco with a leaf — the integrated GPU, for laptops that would rather stay cool and quiet. Hover it for the full explanation, click to switch; the map rebuilds in place. The same choice (as Performance / Efficiency) plus per-surface frame-rate caps live in Settings → Window. On a machine with no usable WebGL at all (VMs, remote desktops, blocklisted drivers) the map degrades to a quiet "not available" panel and the rest of the app is untouched.

Panes

  • Sidebar — a virtualized file tree with a filter; edited files get a diff button.
  • Context pane — Context, Memory, and Errors tabs: genome token stats, recently read and edited files, top memories, loaded skills, and live indexing status.
  • Inspector — a live tool-call log with elapsed timers, and a visual before/after diff viewer.
  • Status bar — genome counts, token and cost totals, files edited, git branch, and a cross-tab file-claims popover.
  • File preview — a Monaco editor with real go-to-definition, find-references, and hover, backed by the language servers. Edit and save with Cmd/Ctrl+S.

Drawers

Every control lives in a drawer, opened from the titlebar or the command palette:

Settings

Theme, window (opacity, blur, vibrancy, density, motion, map frame rate and GPU), intelligence depth, add-ons, and general options.

Keys

Provider API keys plus a Codex (ChatGPT) sign-in card.

MCP

Add and edit project or global MCP servers with live status.

Skills

Search, install, load, and remove skills.

LSP

Install, update, and restart language servers from the Mason registry.

Git

Stage, unstage, and commit, with click-to-preview diffs.

Router

Per-slot task-router models and the max concurrent agents.

Storage

Disk usage by category, with per-category clear and database vacuum.

Capabilities

Hooks, the tool enable/disable catalog, and privacy globs.

Doctor

Health and setup checks — prerequisites, Nerd Fonts, and diagnostics.

Hearth

Remote control over Telegram or Discord — pairing, daemon, and logs.

Proxy

The CLIProxyAPI relay lifecycle with a live login console.

Browser

The app ships a real Chromium, and your agent drives it. It navigates, clicks, types, scrolls, screenshots at any device size, inspects elements, records network traffic, throttles to slow-3g, and runs Core Web Vitals and accessibility audits. You watch it happen in the same window, so "show me the bug" and "fix the bug" use one browser.

It reads pages, not pictures

Ask an agent to click something and it usually guesses a CSS selector from your source, clicks, screenshots, and finds out whether it guessed right. Three round-trips and an image per attempt.

Empryo takes a snapshot first. Every visible interactive element, with a handle:

  button "Save changes" ref=e7
* button "Undo" ref=e8
  textbox "Email" ref=e3 [value=""]
  [scrollable "Results" y=0/1840 ref=e12]

The agent then acts on ref=e7. One read, no guessing, a fraction of an image in tokens.

The snapshot reaches into shadow DOM and same-origin iframes, and it catches div and span click handlers that a tag-based scan misses, so it works on React component libraries and web-component apps rather than plain HTML alone.

Two markers carry the state you would otherwise burn a screenshot to learn:

  • * means new since the last snapshot. After a click, snapshot again and read what appeared. A dropdown that opened shows up as starred options.
  • Anything sitting behind a modal or toast is left out, and the overlay covering it is named. A handle you cannot click is worse than no handle.

Focus stays yours

Your agent applies keystrokes to the element it targets. Nothing goes through the window's focus, so you can keep typing in chat while the agent fills a form in the browser.

Minimize the panel and the page keeps working. Screenshots capture from the page rather than the screen, so a background tab photographs like a visible one.

Two agents, two pages

Each chat tab leases the browser tabs it drives. A second agent opens its own tab and works there. Reads reach any tab, including one another agent holds. Aim a click at somebody else's page and you get a refusal naming the holder rather than a silent theft. Closing the browser or clearing cookies waits until the other tab finishes, and a dev server belongs to whoever started it.

Cross-tab coordination covers the rules in full.

Dev servers

Point .empryo/launch.json at your dev commands and the agent starts one and opens it in a tab. The browser reaches localhost and private-network addresses; public sites stay blocked.

Desktop-only features

These exist only in the desktop app:

  • The Primordial Deep — the live WebGL Genome map.
  • The browser — a driveable Chromium with page snapshots, device emulation, network recording, and audits.
  • Monaco preview — an editable buffer with real code intelligence.
  • Visual diffs — virtualized before/after line diffs in the inspector and sidebar.
  • Embedded terminals — up to five real shells (a VS Code-style shell picker), toggled with ` Ctrl+ ``.
  • Image pipeline — attach, paste, or drag in images; crop and annotate them inline; open them in a lightbox. They flow to the agent as vision parts.
  • Streaming OAuth consoles for the proxy and subscription sign-ins.

Next