# Desktop
URL: /en-US/docs/desktop

Settings map, Files / Git / Browser, marketplace, automations, and local Web Host pairing.



Desktop is the graphical host. It shares the local daemon with the [CLI](./cli.mdx). Install it from [Install Desktop](./install/desktop.mdx).

## Settings map [#settings-map]

### Basics [#basics]

| Tab        | What it holds                                  |
| ---------- | ---------------------------------------------- |
| General    | Notifications, tray / menu bar icon            |
| Appearance | Theme, font, UI language, mica / blur, pointer |

### Capabilities [#capabilities]

| Tab    | What it holds                                          |
| ------ | ------------------------------------------------------ |
| Models | Provider connect, model list, keys                     |
| Agents | LSP, commit / PR attribution                           |
| Tab    | Editor Tab completion                                  |
| Skills | Discover and generate [Skills](./customize/skills.mdx) |
| Rules  | [Rules](./customize/rules.mdx) slots                   |
| MCPs   | [MCP](./customize/mcp.mdx) servers                     |
| Hooks  | [Hooks](./customize/hooks.mdx)                         |
| Dreams | [Dreams](./customize/dreams.mdx) (Beta)                |

### Connect [#connect]

| Tab          | What it holds                                       |
| ------------ | --------------------------------------------------- |
| Networks     | LLM HTTP version, **Web Remote Access**             |
| Integrations | [GitHub Device Login](./customize/integrations.mdx) |
| Extensions   | Installed extensions, ZIP import                    |

A Developer tab appears only in Vite dev builds.

## Workspace panels [#workspace-panels]

| Tab     | Role                                                  |
| ------- | ----------------------------------------------------- |
| Files   | Tree, Monaco, Markdown preview, `plans/`              |
| Git     | Changes, history, commit / push / merge chips         |
| Browser | Embedded browser + element picker (**Electron only**) |
| Shell   | Embedded PTY (**Electron only**)                      |

### Shell [#shell]

Desktop (Electron only) has a **Shell** tab with an embedded PTY. That panel is for you. The agent still goes through [`shell`](./agent/tools.mdx) and approval; it does not type into your PTY.

CLI has no embedded PTY panel. Commands still run through the same `shell` tool on the shared daemon.

Override the Desktop PTY shell with `SPIRIT_TERMINAL_SHELL` if you need a specific binary.

### Git [#git]

The **Git** tab shows changes and history. Chips on the composer can start **commit**, **push**, or **merge**. This is host UI, not a Skill package.

Those chips inject a fixed prompt. The agent then uses [workspace and `shell` tools](./agent/tools.mdx).

### LSP [#lsp]

Turn language servers on in **Settings → Agents**, then install a provider if it is missing. Once a server is ready, the agent can call [`get_diagnostics`](./agent/tools.mdx).

| Id                           | Languages              | How it is installed                               |
| ---------------------------- | ---------------------- | ------------------------------------------------- |
| `typescript-language-server` | TypeScript, JavaScript | npm (`typescript-language-server`)                |
| `pyright`                    | Python                 | npm (`pyright`)                                   |
| `gopls`                      | Go                     | Go toolchain                                      |
| `rust-analyzer`              | Rust                   | rustup                                            |
| `clangd`                     | C, C++                 | Platform package (for example Homebrew or winget) |
| `jdtls`                      | Java                   | Manual                                            |
| `omnisharp`                  | C#                     | .NET                                              |

clangd and jdtls are not bundled. Install them yourself, then come back to Settings → Agents.

### Tab [#tab]

Tab is Monaco inline completion. Accept ghost text with one Tab. Open **Settings → Tab**, enable code completion (`codeCompletionEnabled`), and assign a lightweight chat model in **Settings → Models**. That slot also serves other lightweight background tasks.

If completion is empty, check that a lightweight chat model is connected and that the setting is on. This is not the agent conversation.

## Marketplace and automations [#marketplace-and-automations]

The sidebar opens the [marketplace](./customize/marketplace.mdx). Automations have their own view — [Desktop only](./customize/automations.mdx).

## Web Host pairing [#web-host-pairing]

Desktop can serve a web client on the local machine.

* Default listen: `127.0.0.1:7788`
* Settings → **Networks** → Web Remote Access
* First visit asks for a **6-digit pairing code** from that settings page
* Five failed attempts lock pairing until you restart Web Host
* Token is stored in the browser as `spirit-agent-web-host-token`

The agent still runs inside the shared daemon. The web client receives an authenticated snapshot; it is not a second agent.

**Binding `0.0.0.0` for remote LAN access is not an open product path.** The daemon and Web Host stay on loopback by default. A LAN IPv4 listen address in Networks is for a machine you control, not a public server.

Development overrides: `SPIRIT_DESKTOP_WEB_HOST=1`, `SPIRIT_WEB_HOST`, `SPIRIT_WEB_PORT`.
