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.
1. Get a box and SSH in
Section titled “1. Get a box and SSH in”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.
ssh you@your-vps-ip2. 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.
3. Install brnrd
Section titled “3. Install brnrd”curl -LsSf https://hugimuni-labs.github.io/brnrd/install.sh | sh# or: uv tool install brnrd# or: npm install -g brnrd # if you have Nodebrnrd --version4. Run the loom
Section titled “4. Run the loom”brnrd loom install # a systemd --user unit; ends with a receiptbrnrd setup --home ~/brnrd # pair a channel, e.g. TelegramThe 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”.
What you don’t need to open
Section titled “What you don’t need to open”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.