Skip to content

No always-on machine? Use a small VPS

brnrd runs as a background daemon on hardware you own. If your laptop sleeps when you close the lid, the daemon sleeps with it — there is no “always on” without a machine that stays on. A Mac mini or a home server both work; so does the smallest tier of any VPS provider, usually $4–6/month (Hetzner, DigitalOcean, Vultr, and similar all sell one — check current pricing, it moves). This page is the same install as Install, run over SSH instead of a local terminal, plus the two steps that are specific to a headless box.

Nothing below is a brnrd-specific product — it’s a normal small Linux VPS running brnrd the same way it would run any other daemon.

Any small Ubuntu or Debian instance works. brnrd itself only needs git and Python 3.10+ (the npm and uv install routes provision Python for you if it’s missing — see Install → “The Python part”). A stock Ubuntu image already has both, or close enough that the installer’s fallback handles the gap.

Terminal window
ssh you@your-vps-ip

2. Install a coding-agent CLI, and authenticate it

Section titled “2. Install a coding-agent CLI, and authenticate it”

brnrd drives Claude Code, Codex, or Grok — it doesn’t replace them, so one has to be on the box first, authenticated with your own subscription or API key.

Terminal window
curl -LsSf https://hugimuni-labs.github.io/brnrd/install.sh | sh
# or: uv tool install brnrd
# or: npm install -g brnrd # if you have Node
brnrd --version
Terminal window
brnrd loom install # a systemd --user unit; ends with a receipt
brnrd setup --home ~/brnrd # pair a channel, e.g. Telegram

The unit runs python -m brr.loom.runtime loom --home ~/brnrd with the Python brnrd is installed in, under the PATH of the shell you installed it from. With body unset, install picks the first of claude and codex that answers with quota left and writes it to ~/brnrd/loom/config.toml. brnrd loom logs follows its output. On a box you log out of, keep the user manager alive past logout with sudo loginctl enable-linger $USER. uv tool upgrade brnrd upgrades it; the loom re-execs itself on the new files. More in Install → “Run the loom”.

Self-hosted Telegram polls Telegram for updates (getUpdates) instead of receiving a webhook, so it needs outbound internet access only — no inbound firewall rule or open port to configure for that gate. (Other gates may differ; this guide only checks the one most people reach for first.)

Send your first task — from the VPS this works exactly like it does anywhere else; the daemon doesn’t know or care that its machine happens to be rented by the hour.