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 or Codex — 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”Same three routes as any machine:
npm install -g brnrd # if you have Node# or: uv tool install brnrd# or: pipx install brnrdbrnrd --version4. Run it
Section titled “4. Run it”brnrdThe guided setup pairs this VPS with your brnrd account and prints a pairing link. Open that link on your phone or laptop — it’s a link you approve, not a localhost callback, so it doesn’t need a browser on the VPS itself. From there it installs and starts the background service (a systemd unit on Linux) the same way it would on a desktop.
Prefer no account at all? brnrd gate setup telegram && brnrd daemon install
wires a self-hosted Telegram gate directly, with no brnrd account or payment
involved (see Connect).
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.