---
url: https://clusto.app/docs/claude-code-web-ui.md
description: >-
  Clusto is a self-hosted Claude Code web UI and desktop app for Windows, Linux
  and Android. Sessions run on your own servers; chat or terminal from anywhere.
---

# Self-Hosted Claude Code Web UI and Desktop App

Clusto gives Claude Code a graphical interface that runs against your own
machines. You install a small daemon (`clustod`) on a server or workstation, and
Claude Code runs there. You use it through a desktop app for Windows and Linux, an
Android app, or a web app in the browser. All of them show the same sessions, and
your code and sessions stay on your nodes.

One detail on what "self-hosted" means here. The daemon, the sessions and your
files are yours and run on hardware you control. The web app's static files are
served from clusto.app, and the web client signs in with a Clusto account. The
web client then connects straight to your daemon.

## One app, three forms

The Clusto app is one codebase shipped three ways:

* **Desktop app** for Windows (installer) and Linux (`.deb`, `.rpm`, AppImage and
  tarball). There is no native macOS build in the current release.
* **Android app**, distributed as an APK from the download page.
* **Web app** at [clusto.app/app](https://clusto.app/app), installable as a PWA.
  It is the way to use Clusto on iPhone, iPad and macOS today. On iPhone and
  iPad, Safari's **Add to Home Screen** gives you a standalone app.

Get any of them from [clusto.app/download](https://clusto.app/download). See
[Downloads and Installation](/downloads) for the platform list and
[Web Client (PWA)](/web-client) for browser details.

## The daemon runs your agents

The apps are clients. Install the daemon on the machine where you want Claude
Code to run:

```bash
curl -fsSL https://dl.clusto.app/install.sh | sh
clusto install
```

On Windows, use the PowerShell installer from the same page. Then add the node's
host, port and token under **Connection** in the app. You can connect several
nodes, and the app lists sessions from all of them. For the full path on a
server, see [Run Claude Code on a Server or VPS](/run-claude-code-on-a-server).

The web client needs a way to reach the node over `wss://`, because browsers
block plain `ws://` from an HTTPS page. Use a Tailscale MagicDNS name with a
certificate from `clusto cert`, a domain with its own certificate, or
[Clusto Tunnel](/clusto-tunnel), which relays the web app without TLS setup on
the node. There is no offline mode: the web client needs a live daemon
connection.

## Terminal sessions or chats

Clusto offers two ways to talk to an agent.

**Terminal sessions** run the real Claude Code CLI in a terminal on the node. This
is the full interface you know, rendered in the app, with split panes,
scrollback and a key bar for phones. Sessions persist on the daemon, so you can
close the app and reattach later. See [Terminal Workspace](/terminal-workspace)
and [Terminal History](/terminal-history).

**Chats** are a conversation view with a durable transcript. Pick Claude, Codex,
OpenCode or OpenRouter as the provider when you create a chat. A chat shows:

* Markdown replies with syntax-highlighted code blocks, tables and Mermaid
  diagrams, with a **Copy** button on each code block.
* A **Permission needed** card when Claude wants to use a tool, so you can review
  the full input and approve it. Claude's questions render as selectable options.
* A message queue and a steer option, so you can line up follow-ups or interrupt
  a reply.
* Pasted images and files, with limits of 10 MiB per file and 16 files per
  message.
* Model, effort and permission chips under the message box, a workspace per chat,
  and a pin to a specific cluster node.

Chats suit a phone, where a conversation is easier to read than a terminal. See
[Chats](/chats).

## Files, git, notes and tasks

Beside the agent, the app has the tools you reach for while reviewing its work:

* A [file explorer](/file-explorer) in the sidebar for the active project, and a
  [Files view](/files-view) for browsing any path on a node, with preview,
  upload and download.
* A [built-in editor](/editor) with conflict detection when a file changes on
  disk.
* A [git panel](/git-panel) with status, diffs, commit, pull and push.
* A [Run panel](/run-panel) for project commands.
* A [Notes vault](/notes) of Markdown files that agents can read and write.
* Scheduled [Tasks](/tasks) that run commands, including `claude -p`, on a
  cron or interval schedule.

The `F1` command palette reaches every action from the keyboard. On the desktop
app you can also move a terminal, note or chat into its own window; see
[Separate Desktop Windows](/desktop-windows).

## Alerts when an agent needs you

A `?` marks sessions where an agent is waiting for an answer, and you can get a
notification with a **Copy** button for the prompt. The desktop and Android apps
raise popups when a session goes idle, and Android can check for missed alerts
about every 15 minutes while closed. See
[Agent Waiting Marker](/agent-attention) and
[Background Notifications](/background-notifications).

## FAQ

### Is this the same as Claude Code on the web?

No. Anthropic's hosted offerings run in Anthropic's environment or relay your
session through their service. Clusto runs the agents on machines you install the
daemon on and connects your devices to them. If you do not want to install
anything on a server, Anthropic's own options may suit you better.

### Does it work with Codex and OpenCode?

Yes. Chats support Claude, Codex, OpenCode and OpenRouter, and terminal sessions
can run any CLI, including GitHub Copilot CLI.

### Do I need an account?

You need a Clusto license. The Personal plan is free for one user on up to three
native devices, and it is claimed at [clusto.app/pricing](https://clusto.app/pricing).
The web client checks your license when you sign in and does not use a device
slot. See [Accounts and Licensing](/accounts-licensing).

### Does the desktop app bundle the daemon?

No. The app connects to a daemon you install separately, on the same machine or
another one. It does not install or manage a local service.

### Is it open source?

No. Clusto is proprietary software.

## Get started

1. Download the desktop or Android app from
   [clusto.app/download](https://clusto.app/download), or open
   [clusto.app/app](https://clusto.app/app).
2. Install the daemon with the commands in [Downloads and Installation](/downloads).
3. Add the node under **Connection**, then start a session or a chat.
