<!-- Markdown mirror. Canonical: https://empryo.com/docs/surfaces/desktop -->

# 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: chat beside the living Genome map, the file tree, and a cell panel docked on the right.](https://empryo.com/screenshots/desktop.webp)

*The desktop app: chat beside the living Genome map, the file tree, and a cell panel docked on the right.*

The desktop app is a native client for the same engine the [TUI](/docs/surfaces/tui) and [headless CLI](/docs/surfaces/headless) 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](https://empryo.com/download).

Empryo isn't Apple-notarized yet. Gatekeeper shows "Empryo is damaged" until this clears the quarantine flag.

## How it's built

The app is Electron. The window is what you see, and the agent runs beside it in its own background process. That process builds the same agent the terminal does, with one code graph and one memory store per window, so both surfaces behave the same way. 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](/docs/agents/cross-tab). Every edit is attributed to its tab.

| Shortcut | Action |
|----------|--------|
| `Cmd/Ctrl+T` | New tab |
| `Cmd/Ctrl+W` | Close tab |
| `Cmd/Ctrl+1`…`9` | Switch tab |
| `Cmd/Ctrl+K` | Command 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](/docs/surfaces/tui) or a [Hearth](/docs/tools/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 cheap to leave open. After a few idle seconds it slows itself right down and fades the water shimmer out. Any input, agent event or camera move brings it back to full speed on the same frame, so it never feels slow.

A button on the map shows which graphics chip is drawing it: **Fast** with a lightning bolt for the discrete GPU, which gives the smoothest picture and is the default, or **Eco** with a leaf for the integrated one, which laptops prefer for heat and battery. Click to switch and the map rebuilds in place. The same choice, named Performance and Efficiency, plus frame-rate caps per surface, lives in **Settings → Window**.

On a machine with no usable WebGL at all, such as a VM or a remote desktop, the map shows a quiet "not available" panel and nothing else changes.

## 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`.

## The workbench

Every control is a page in one of eight destinations, Work, Files, Changes, Genome, My
tools, Costs & usage, Settings, Help, reached from the sidebar, the breadcrumb, or
`Cmd/Ctrl+K`. Keys, MCP, skills, agents, permissions, orchestration runs, routines,
background jobs, rooms and the advice ledger all live there, each with its own history
and back button.

[The workbench](/docs/surfaces/workbench) documents every destination and section.

## 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](/docs/agents/cross-tab) 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.
- **[Computer use](/docs/tools/computer-use)**. The agent reads and drives real UI beyond the panel: your own Chrome, an app window, the whole display. A scope cue says what it can reach, the mote cursor shows where it is, and your own mouse never interrupts it, stop it from the lanes panel or `/computer stop`.
- **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+` ``.
- **Images**, attach, paste or drag them in, crop and annotate them in place, open them in a lightbox. The agent sees them.
- **Streaming OAuth consoles** for the proxy and subscription sign-ins.
- **Right-to-left layout**, in Arabic the interface mirrors, controls included: sliders, menus and arrow-key navigation run the other way, not just the padding. Prompts and replies take their direction per paragraph, so mixed Arabic-English content reads in its natural order while code, paths and diffs stay left-to-right. See [Languages](/docs/tools/languages).

## Next

#### Cross-tab coordination

How parallel tabs avoid clobbering each other's edits.

#### Configuration

The config shared between the desktop app and the CLI.
