Browse documentation

Happy Desktop docsStart here

How It Works

The runtime

Happy Agent is a headless daemon on your machine. Desktop starts it and talks to it over a private local socket. The daemon holds the agent loop, the tools, the sandbox, and a SQLite database of every session. Quit Desktop and sessions keep running; restart the daemon and they resume from disk.

The daemon authenticates to providers the way Claude Code, Codex, and the Grok CLI do: by reading the credentials those tools keep on the machine. The model catalog is built in. A provider without credentials shows as unavailable, with a reason.

Native per model, shared around it

Each provider gets its vendor's prompts and tools verbatim, close enough to the native request that prompt caching and native compaction keep working. Everything around inference is shared:

  • One permission model. Claude's Bash, Codex's exec_command, and Grok's run_terminal_command run the same sandboxed shell.
  • One session. Switching models keeps the transcript.
  • One set of Happy tools: subagents, waits, scheduling, messaging other agents, MCP.

Durable

Every change is written to the database before it is applied in memory. Subagents are sessions too. Waits and scheduled messages survive a restart.

Clients

ClientWhat it is
Happy DesktopProjects, workspaces, sessions, changed files, terminals, the Inbox (experimental), settings
Happy TerminalThe same client as a TUI, installed separately (@slopus/happy-terminal)
Happy mobileiOS and Android, attached to the same sessions through an encrypted relay

A message from any client enters the same session, queue, and permission boundary. There is no remote mode.

What leaves the machine

  • Model requests, to the provider you chose, with your credentials.
  • Session sync to your phone, through Happy's relay, as ciphertext. Your devices hold the keys.
  • Product analytics from the app to PostHog, tied to a random install ID: which features you use, the model, the OS, and the app version. PostHog also sees the IP address of each request. Never your messages, code, or files. Turn it off in Settings → General → Privacy.
  • No hosted account for the app, and no copy of your project.

Not yet

Forking a running provider session. The "add a remote machine by name" experience; the Tailcat transport exists, see Remote Agents.