# Multi-device: brain, hands, screen (English summary) Canonical document: [docs/multi-device.md](../multi-device.md) (Chinese). One AnyBot in your account is the **brain**: it stores every bot, chat, memory and schedule, and does the thinking. Other machines are its **hands** (screen, input, files, browser), phones are web clients. Everything talks through your **account server** (relay); each machine opens an outbound long connection, so nothing needs open ports or a static IP. | Role | What it is | How to set | |---|---|---| | Brain | stores and thinks; keep it always on | logging into the account makes it the brain (default) | | Screen | a machine with a window: shows and edits the brain's bots, and acts as hands | Settings › General › Phone & account › Brain › “use this as brain” | | Hands | lets the brain's bots drive this machine | the “Add a computer” one-liner, or `anybot setup` | | Phone | web app on the relay's URL | sign into the same account | ## Method A — server as relay + brain (recommended) A Linux host (≥2 GB RAM) plus one of: a **domain** (A record, 80/443; HTTPS certificates issued automatically), a **Tailscale** HTTPS URL (`https://host.tailnet.ts.net`, no ports opened at all), or a **LAN IP** (self-issued, auto-renewed certificate — trust it once on each device; instructions in the Chinese doc). ```sh curl -fsSL https://code.30cm.net/daniel.w/AnyBot/raw/branch/main/install.sh | sh -s -- server ``` It asks three questions (URL, account, password), installs Docker if needed, gets HTTPS, creates the account, starts the brain. Update later with `cd ~/AnyBot && make server` (“keep settings, update, restart”). Release archives (built by Gitea Actions on `v*` tags) avoid building on the server: download `AnyBot--server-.tar.gz`, unpack, `cd deploy/server && ./setup.sh`. ## Method B — a Mac as the brain (home, Tailscale) 1. `make relay`; install `anybot-relay` under `~/Library/Application Support/AnyBot/relay/` and load `deploy/mac/com.anybot.relay.plist` via `launchctl` (edit the URL inside first). 2. `tailscale serve --bg 8780` → you get `https://mac-mini.tailnet.ts.net`. 3. AnyBot › Settings › General › Phone & account → enter that URL, create the account, sign in. This Mac is now the brain; other devices pair to it like Method A. ## Pairing computers (hands) “⋯ › Add a computer” on the phone (or Settings on the brain) shows a one-time pairing line like: ```sh curl -fsSL https://your-domain/…/install.sh | sh -s -- hands https://your-domain 482913 ``` The 6-digit code lives 10 minutes, works once, carries no password. The machine installs itself, registers a host token, starts `anybot.service`, and runs at boot (enable `loginctl enable-linger $USER` to keep it running when logged out). ## When a device can't connect - “Brain offline” → the brain machine is off/asleep, AnyBot isn't running there, or it lost the relay connection (each side keeps an outbound connection; a network change recovers by itself in seconds). - A hands machine offline → check `systemctl --user status anybot`; re-run the pairing line to re-pair. - A screen machine keeps a read-only **brain copy** (`brain-copy.json`) so recent chats stay readable while the brain is away.