Install Reemoat

Install the app on the device you hold, then run one command on each Linux or macOS machine your agents should run on: no sudo, no Docker and nothing open to the internet. Reemoat is open-source, self-hosted software: its repository also holds the control plane, the server side, if you want to run that too.

Latest release

Download the app

Every build is on the latest release. Its files, with the release's number where <version> stands:

ForFileWhat you get
macOS, Apple siliconReemoat-<version>-macos-arm64.app.zipThe app, plus a daemon for this Mac
macOS, IntelReemoat-<version>-macos-x64.app.zipThe same
AndroidReemoat-<version>-android.apkThe app
WindowsReemoat-<version>-windows-x64-setup.exeThe app
LinuxReemoat-<version>-linux-x64.AppImage, Reemoat-<version>-linux-x64.debThe app. Agents run through the installer
A serverinstall.shThe daemon installer, below

The macOS and Windows builds are not signed yet, so the system warns the first time. On a Mac, move Reemoat to Applications and run xattr -dr com.apple.quarantine /Applications/Reemoat.app once, or allow it under System Settings → Privacy & Security. On Windows, choose More info → Run anyway.

The app has no updater. A new version is a new download.

First run

You need an account on a control plane — the hosted one or your own.

  1. Open the app. Its first screen offers the hosted control plane at app.reemoat.com; the pencil beside it points the app at your own.
  2. Sign in. On a Mac, the app then sets that computer up as a machine.
  3. For any other machine, add a server.
  4. Set up an agent and start a session.
A demonstration of the Reemoat app on a computer, with invented sessions: two machines on the left, a list of eight sessions from Claude Code, Codex, OpenCode and Kimi Code, and a Claude Code session open in the middle of a task, running its tests. A demonstration of the Reemoat app on a computer, with invented sessions: two machines on the left, a list of eight sessions from Claude Code, Codex, OpenCode and Kimi Code, and a Claude Code session open in the middle of a task, running its tests.

Add a server

On a Linux server, a box under the desk or a Mac without the app:

curl -fsSL https://github.com/rends-east/reemoat/releases/latest/download/install.sh | sh

Piping a script into sh runs code from the network as your user. The script is plain text, so read it first: https://github.com/rends-east/reemoat/releases/latest/download/install.sh.

It needs Linux with systemd, or macOS; x86_64 or arm64; and git. It writes nothing to your shell profile.

On Linux a user service stops at your last logout unless lingering is on. If the installer cannot switch it on, it prints the sudo loginctl enable-linger command. A headless Mac needs automatic login, or nothing comes back after a reboot.

What it installs

InstalledWhat it is
~/.reemoatSettings, the SQLite database, session worktrees and a toolchain directory. Without Node 24 or newer on the machine, the installer puts its own there: a download of about 55 MB from nodejs.org, checksum-verified, that unpacks to about 200 MB
~/srv/reemoatA checkout of the version your control plane runs, with about 220 MB of dependencies
A user serviceA launchd agent on macOS, a systemd user unit on Linux
No agent CLI yetThe docs put those at about 700 MB

Updating

To update, run ~/srv/reemoat/deploy/deploy.sh. With no argument it moves the checkout to the repository's main; --ref takes a tag or a commit. A daemon restart interrupts every live session.

Join a control plane

The installer asks up to three things:

  1. Which control plane?

    Your own, by address, or app.reemoat.com. Nothing is joined until you name one.

  2. Who are you on it?

    Sign in, an API key, or a setup code. Where sign-ups are open, it also offers to create an account.

  3. A name for the machine

    The default is its hostname.

Pass an API key as REEMOAT_API_KEY, because --api-key is visible in ps.

Setup codes and API keys

A setup code comes from Settings → Machines in the app: single-use, valid one hour, worth one machine, no account credential needed. An API key is used to mint one code and then dropped: it is never saved to the machine's settings.

Installer flags

Flags go after sh -s --:

FlagWhat it does
--urlNames the control plane and skips the first question
--enroll-codeTakes a setup code
--install-agents claude,codexInstalls those agent CLIs on the way in
--ref v0.13.0Checks out that tag or commit instead of the version your control plane runs. The pin does not last: updating with no --ref moves to main
--agent-source npmMakes npm the source of Claude Code, Codex and OpenCode: the npm registry, or a mirror you point npm at, for a machine that cannot reach their vendors' sites. Kimi Code and Grok Build come from npm either way, and Cursor only from its own installer
--yesSkips the confirmations: the machine's name, enrolling this machine a second time and --purge. It does not answer the first two questions: which control plane and who you are
--helpPrints every flag

With no terminal, the script must be given the control plane and a credential: --url, and REEMOAT_API_KEY or --enroll-code. Without a credential it prints the non-interactive command and exits. deploy/README.md lists the other flags.

Set up an agent

No agent is installed with the daemon. In the app, open Settings → Machines → your machine → Agents and choose Set up from an agent's menu. The app installs the CLI on that machine, then walks you through signing in with the account or key you already have:

AgentSign-in commandOr a key
Claude Codeclaude auth loginCLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY
Codexcodex login --device-authCODEX_API_KEY
OpenCodenone neededOPENROUTER_API_KEY, OPENCODE_API_KEY
Kimi Codekimi loginKIMI_API_KEY
Grok Buildgrok --no-auto-update login --device-authXAI_API_KEY
Cursorcursor-agent --disable-auto-update loginCURSOR_API_KEY

A key is pasted under Settings → Machines → your machine.

For Codex a pasted key is not enough by itself: its adapter still wants a login written to disk.

On a Mac that runs the agents, Claude Code is signed in by hand: the app cannot walk it through, so run claude setup-token in a terminal on that Mac and paste the token into the app.

Run your own control plane

The control plane and its relay are two containers from one image, typically on a Linux box with a public address, Docker with the compose plugin, git and node.

  1. Clone the repository there.
  2. Run deploy/install.sh control-plane.
  3. Point the app at it with the pencil on its first screen.

The steps, the TLS proxy you put in front and backups are in deploy/README.md.

Uninstall

curl -fsSL https://github.com/rends-east/reemoat/releases/latest/download/install.sh | sh -s -- --uninstall

This stops the service and removes its unit and the toolchain the installer created, with any agent CLIs installed from npm. Add --purge after --uninstall to delete ~/.reemoat and the checkout too. It asks first, and refuses while the daemon may still be running. Neither removes the app.

What it leaves

  • ~/.reemoat: the settings file, the database with your sessions, and worktrees, which may hold uncommitted work;
  • the checkout in ~/srv/reemoat;
  • vendor-installed agent CLIs and every agent sign-in;
  • the machine's row in your fleet. Retire it under Settings → Machines.

When this is the wrong tool

  • You want a sandbox. There is none: the agent runs as your own OS user.
  • You need to be told when a session finishes or blocks. Nothing notifies you.
  • You want to work from a browser. There is no browser client.
  • The machine for the agents is not Linux with systemd or macOS, on x86_64 or arm64.
  • You want nothing new on the server. tmux over SSH is the do-it-yourself route; see the comparison.

Next

Updated . This page as Markdown.