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

# Surfaces

> One engine, three surfaces: the interactive terminal UI, the native desktop app, and the headless CLI. The same Genome, tools and sessions under each.

Empryo is one engine with three faces. The agent loop, the [Genome](/docs/concepts/genome), the [tool belt](/docs/tools/ast-edit), [sessions](/docs/tools/sessions) and your config are identical no matter how you launch it. Only the interface changes.

Pick whichever fits what you're doing right now. You can switch mid-project and pick up the same session where you left it.

#### Terminal UI

The default. Run `empryo` in a repo for a full keyboard-driven workspace: chat, tabs, panels, an embedded Neovim, and a live status bar.

#### Desktop app

A native window with the living Genome map, a Monaco file preview, visual diffs, embedded terminals, and every setting behind a drawer.

#### Headless CLI

No UI. Pipe a prompt, stream JSON or JSONL events, and gate on exit codes, built for scripts and CI.

## One engine underneath

Whatever surface you pick, the same things are true:

- The repository is parsed into a live dependency graph and edits go through the [AST and language servers](/docs/tools/ast-edit), not find-and-replace.
- [Sessions](/docs/tools/sessions) and [checkpoints](/docs/tools/checkpoints) persist to `.empryo/` in the project, so you can resume, or rewind, across surfaces.
- [Configuration](/docs/reference/configuration), keys, themes, and [memory](/docs/tools/memory) are shared. Set a key once, use it everywhere.
- [Cross-tab coordination](/docs/agents/cross-tab) keeps parallel lanes from clobbering each other in both the TUI and the desktop app.

## Pick by task

| You want to… | Use |
|--------------|-----|
| Pair on a codebase, interactively | [Terminal UI](/docs/surfaces/tui) |
| See the codebase and diffs visually | [Desktop app](/docs/surfaces/desktop) |
| Automate in CI or a script | [Headless CLI](/docs/surfaces/headless) |
| Look up a flag or command | [CLI reference](/docs/reference/cli) · [Commands](/docs/reference/commands) |
