Skip to content

Self-host OpenMausBot, the open-source Grok Bot alternative

A team of AI bots, each with a computer that isn't your laptop.

Deploy on exe.dev

Shelley handles the setup. About 20 minutes.

Prefer a terminal?
curl -fsSL https://exe.dev/deploy/openmausbot/prompt.txt | ssh exe.dev new --prompt=/dev/stdin

OpenMausBot is a chat app where every chat is an AI agent. Bots browse, use a Linux desktop, run routines on a schedule, and pass work to each other, with a Chief of Staff keeping track. On exe.dev, they get a computer of their own instead of yours: the server runs on a VM behind your exe.dev login, Claude comes through the LLM integration, and the disk keeps their memory.

OpenMausBot is new and ships almost daily. These steps pin version 0.1.138, which we ran end to end on 2 November 2026.

What you get#

  • The OpenMausBot web app at https://<vm>.exe.xyz/, behind your exe.dev login, with this browser paired as the owner.
  • Claude bots through exe.dev's LLM integration, with no API key to paste.
  • A server that stays on when you disconnect and starts again after a reboot, so routines keep running.
  • The bots' built-in browser, installed and checked.
  • Docker ready for the bots' private Linux desktop.
What's running, and where
Private https://my-openmausbot.exe.xyz/ The OpenMausBot web app, behind your exe.dev login and a per-device pairing
my-openmausbot.exe.xyz exe.dev VM
OpenMausBot server openmausbot 0.1.138 on Node.js 24, managed by systemd :8799~/.openmausbot
nginx Private web app proxy :8000
Claude Code The bots' engine, connected through exe.dev's LLM integration
Private desktop Optional Cua Linux desktop in Docker, for computer use

Deploy with Shelley#

Click Deploy and Shelley will set up OpenMausBot on a new VM, then check that it works. No config-file wrangling required.

Prefer a terminal?
curl -fsSL \
  https://exe.dev/deploy/openmausbot/prompt.txt \
  | ssh exe.dev new --prompt=/dev/stdin
What Shelley is told
Set up OpenMausBot on this VM by following the exe.dev recipe at https://exe.dev/deploy/openmausbot.md from top to bottom.

The recipe's example VM name is my-openmausbot. This VM's name is the output of `hostname`: use it wherever the recipe writes my-openmausbot. Skip the step that creates the VM; you are on it.

You are done when all of these are true. Check each one yourself:
- The OpenMausBot web app at `https://<vm>.exe.xyz/`, behind your exe.dev login, with this browser paired as the owner.
- Claude bots through exe.dev's LLM integration, with no API key to paste.
- A server that stays on when you disconnect and starts again after a reboot, so routines keep running.
- The bots' built-in browser, installed and checked.
- Docker ready for the bots' private Linux desktop.

Read the whole recipe, including the closed details. For initial setup,
follow "Install by hand" first, skipping VM creation and SSH. The
opening walkthrough is for the owner. Install exactly the pinned
version. Do not run the restore or update instructions, and don't set
up a second VM unless the owner asks.
Keep the VM private. Never run share set-public, change the server's
loopback address, or set OMB_LOOPBACK_TRUST. On an existing VM, ask
before replacing configuration or a service on port 8000.
Verify `openmausbot doctor` says ready with the browser installed, a
`pong` from `openmausbot run`, the service enabled and active, and the
health check through nginx. Do not reboot.
Generate the pairing link last, after the owner has signed in to
https://<vm>.exe.xyz/. Give only the https://<vm>.exe.xyz/pair link and
explain that it works once and expires in five minutes; reissue on
request. The private desktop is prepared in the web app's settings:
point the owner to "Give it a desktop".

Finish with the URLs I should open.

Also at /deploy/openmausbot/prompt.txt. The recipe it follows is /deploy/openmausbot.md.

Say hello#

When Shelley finishes, open https://my-openmausbot.exe.xyz/ and sign in to exe.dev. Then ask Shelley for a pairing link and open it in the same browser. It works once and expires in five minutes, so ask again if it does.

Click Connect, meet MausBot, and create your Chief of Staff. Then try:

Use your browser to open https://exe.dev/docs and tell me in one line what it's about.

A second device, say your phone's browser, needs its own pairing link.

Warning

Keep this VM private. Bots run commands on the VM as exedev, who can use sudo. Don't make the web app public or put unrelated secrets on this VM, and keep pairing links to yourself.

Give it a desktop#

The browser covers most web tasks. For apps that need a screen, bots get a private Linux desktop in Docker on the same VM:

  1. Click your avatar, then Settings → Computer.
  2. Under Private desktops, click Prepare Cua desktop, then Start the private desktop. The first run builds a 2 GB image.
  3. In a bot's chat, open the screen panel (the monitor icon) and choose Private desktop.

Ask the bot to open a terminal on its desktop. Take control in the screen panel lets you drive it yourself until you hand it back.

OpenMausBot chat where MausBot reports what exe.dev's docs say, with a screenshot of Firefox on its Linux desktop and the live screen in the side panel
MausBot reads exe.dev's docs in Firefox on its own desktop. The side panel shows the screen live.

Give a bot its own VM#

One desktop per VM is tidier when bots shouldn't share. OpenMausBot's Self-hosted VPS option runs a bot's desktop on any Linux server it can reach over SSH, and another exe.dev VM fits: its own disk, its own CPU, and nothing on it but the bot's container. The server stays on my-openmausbot; only the desktop moves.

The steps are in Give a bot its own VM by hand. You run one command on your computer to give the server a key for that VM alone.

A bot's Access settings in OpenMausBot with the Cloud backend set to Self-hosted VPS and a Server (SSH alias) field
Each bot can name its own server.

Keep the memories#

Bots, chats, memory and settings live in ~/.openmausbot, on the VM's persistent disk. Ask Shelley for a backup before an update; see Back up and restore. Copy backups off the VM, too. On your computer:

rsync -av my-openmausbot.exe.xyz:backups/openmausbot/ ./openmausbot-backups/

They hold your conversations, so keep them private.

Setup and upkeep#

No need to read on unless you're curious—or doing it yourself.

Install by hand

On your computer (pick another name if my-openmausbot is taken):

ssh exe.dev new --name=my-openmausbot
ssh my-openmausbot.exe.xyz

All remaining installation commands run on the VM, as exedev.

Install Node.js 24 and OpenMausBot#

OpenMausBot needs Node.js 24 or newer. Install it from NodeSource, then the pinned release into ~/.local:

curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
npm install --global --prefix "$HOME/.local" openmausbot@0.1.138
export PATH="$HOME/.local/bin:$PATH"
node --version
claude --version

Expect Node 24 and a Claude Code version. Claude Code comes with the VM's image; OpenMausBot drives it.

Run the server#

openmausbot service install writes a systemd unit for the server on 127.0.0.1:8799. The drop-in sends every Claude bot through exe.dev's LLM integration; the key is a placeholder, since exe.dev adds the real credentials outside the VM. OMB_PUBLIC_URL makes pairing links use the VM's address.

openmausbot service install --port 8799
sudo install -m 644 ~/.openmausbot/openmausbot.service /etc/systemd/system/openmausbot.service
sudo mkdir -p /etc/systemd/system/openmausbot.service.d
sudo tee /etc/systemd/system/openmausbot.service.d/exe-dev.conf >/dev/null <<EOF
[Service]
Environment=OMB_PUBLIC_URL=https://$(hostname).exe.xyz
Environment=OMB_ANTHROPIC_API_KEY=exe-llm-integration
Environment=OMB_ANTHROPIC_API_URL=https://llm.int.exe.xyz
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now openmausbot
sleep 15
openmausbot doctor

Expect ready and claude among the engines. Then try a bot:

openmausbot run MausBot "Reply with exactly: pong"

Install the bots' browser#

The first command installs Chrome's libraries as root, the second the browser itself for exedev:

sudo -H env PATH="$PATH" openmausbot browser install --with-deps
openmausbot browser install
sudo systemctl restart openmausbot
sleep 15
openmausbot doctor

Expect Bots' browser: installed.

Turn on Docker#

For the private desktop. The VM's image has Docker but leaves it off:

sudo systemctl enable --now docker.service
docker info --format '{{.ServerVersion}}'

Set up the web app proxy#

The exe.dev proxy handles HTTPS and login. nginx passes requests and the live desktop's WebSockets to the loopback-only server, and hands it the visitor's address, which the exe.dev proxy appends last. Every request from outside still needs a paired device. This replaces the image's default site:

sudo tee /etc/nginx/sites-available/openmausbot >/dev/null <<'EOF'
map $http_upgrade $omb_connection {
    default upgrade;
    ""      close;
}
# The exe.dev proxy appends the client's address last.
map $http_x_forwarded_for $omb_client {
    "~(?<last>[^,\s]+)\s*$" $last;
    default                 $remote_addr;
}
server {
    listen 8000 default_server;
    listen [::]:8000 default_server;
    server_name _;
    location / {
        proxy_pass http://127.0.0.1:8799;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $omb_connection;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $omb_client;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host $host;
        proxy_buffering off;
        proxy_read_timeout 1d;
        proxy_send_timeout 1d;
        client_max_body_size 100m;
    }
}
EOF
sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -sf /etc/nginx/sites-available/openmausbot /etc/nginx/sites-enabled/openmausbot
sudo nginx -t && sudo systemctl enable --now nginx && sudo systemctl reload nginx
curl -fsS http://127.0.0.1:8000/api/health

Expect "app":"openmausbot" through nginx.

Pair your browser#

Open https://my-openmausbot.exe.xyz/ and sign in to exe.dev first. Then, on the VM:

openmausbot pair --label Browser

Open the printed https://…/pair#code=… link in that browser within five minutes and click Connect. List or sign out devices with openmausbot sessions.

Give a bot its own VM by hand

On your computer, create the desktop VM and turn on its Docker (my-mausbot-desk is an example name):

ssh exe.dev new --name=my-mausbot-desk
ssh my-mausbot-desk.exe.xyz sudo systemctl enable --now docker.service

On my-openmausbot, make a key for it:

ssh-keygen -q -t ed25519 -N "" -C "openmausbot@$(hostname)" -f ~/.ssh/mausbot_desk

On your computer, let that key into the new VM, and only that one, as a VM-scoped SSH key:

ssh my-openmausbot.exe.xyz cat .ssh/mausbot_desk.pub | ssh exe.dev ssh-key add --vm=my-mausbot-desk

Back on my-openmausbot, give it an SSH alias and check that Docker answers through it:

cat >> ~/.ssh/config <<'EOF'
Host mausbot-desk
  HostName my-mausbot-desk.exe.xyz
  User exedev
  IdentityFile ~/.ssh/mausbot_desk
  IdentitiesOnly yes
  ControlMaster auto
  ControlPath ~/.ssh/cm-%r@%h-%p
  ControlPersist 60m
  ServerAliveInterval 15
  ServerAliveCountMax 3
  ConnectTimeout 10
EOF
chmod 600 ~/.ssh/config
ssh -o StrictHostKeyChecking=accept-new mausbot-desk true
docker -H ssh://mausbot-desk info --format '{{.ServerVersion}}'

In the web app:

  1. Settings → AI → API keys → Computers and browser: enter mausbot-desk under Self-hosted VPS and save.
  2. Settings → General: turn on Advanced mode.
  3. In the bot's screen panel, choose Cloud desktop, then Self-hosted VPS under Cloud provider.

The bot's desktop starts on my-mausbot-desk; the first start builds its image there. For more bots, repeat with a new VM, key and alias, and set the alias in the panel's gear → Access → Server (SSH alias). More in OpenMausBot's Bring Your Own VPS guide.

The key lets OpenMausBot run anything on that VM, which is the point: keep only the bot's work there.

Back up and restore

On the VM, stop the server for a consistent copy:

mkdir -p ~/backups/openmausbot && chmod 700 ~/backups ~/backups/openmausbot
sudo systemctl stop openmausbot &&
(umask 077; tar czf ~/backups/openmausbot/openmausbot-$(date +%F).tar.gz -C "$HOME" .openmausbot)
sudo systemctl start openmausbot

To restore, replace BACKUP.tar.gz with the archive's filename:

test ! -e ~/.openmausbot.before-restore &&
tar tzf ~/backups/openmausbot/BACKUP.tar.gz >/dev/null &&
sudo systemctl stop openmausbot &&
mv ~/.openmausbot ~/.openmausbot.before-restore &&
tar xzf ~/backups/openmausbot/BACKUP.tar.gz -C "$HOME" &&
sudo systemctl start openmausbot &&
sleep 15 && openmausbot bots

Try a chat before removing ~/.openmausbot.before-restore. Paired devices come back with the backup. OpenMausBot also has an encrypted in-app backup under Settings → Backups (in Advanced mode).

Update

Read the releases first; it changes quickly. Take a backup, then on the VM, with the version you chose:

sudo systemctl stop openmausbot
npm install --global --prefix "$HOME/.local" openmausbot@0.1.138
sudo systemctl start openmausbot
sleep 15
openmausbot status
Something stuck?

Ask Shelley, or check on the VM:

openmausbot doctor
systemctl status openmausbot --no-pager
journalctl -u openmausbot -n 50 --no-pager

If the app asks you to pair this device, the browser isn't paired yet or its session was revoked. Run openmausbot pair for a fresh link.

Frequently asked questions#

What is OpenMausBot?

An open-source app for a team of AI bots, formerly OpenGrokBot. Each chat is an agent (Claude Code, Codex, OpenCode, pi and others) that can use a browser and a desktop, run routines on a schedule, and hand work to other bots. It pitches itself as an open alternative to Grok Bot.

What does it cost?

Your VM plan plus model usage through the LLM integration. Each turn carries the bot's instructions and tools: in our test, a one-word reply used about 58,000 input tokens ($0.16 by OpenMausBot's own ledger). Routines and the Chief of Staff use tokens too.

Can I use Codex or another model?

OpenMausBot runs other engines from Settings → AI, each with its own sign-in: on a VM, use codex login --device-auth for Codex. We only tested Claude through exe.dev; the setting below sends every Claude bot through it.

Can I use it from my phone?

Yes, in the phone's browser: sign in to exe.dev, then open a pairing link made for that phone. OpenMausBot's iOS and Android apps talk to the server directly, and the exe.dev login stands in front of it, so we didn't set them up.

Can the bots talk in Slack or Telegram?

Not in the self-hosted version we tested. Its chats live in its own app; Slack, Gmail and other apps are tools the bots can use through Composio, with your own Composio key.

Is it stable?

It's young and moves fast, with a release most days. This page pins and was tested with 0.1.138 (2 November 2026). Back up before you update, and update on purpose.

Updated Nov 2, 2026 · tested end to end Nov 2, 2026 · Markdown · manifest.json · Something wrong? Tell us