Help Your server

Put Natro on a server

About 45 minutes · Updated 23 October 2026

You need

  • A Linux server (2 vCPU and 4 GB are enough)
  • Tailscale on the server, PC and phone, one account
  • Root or sudo on the server

Join your tailnet

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4

The address it prints (100.x.y.z) is where Natro will listen.

Get the code

Natro gets its own user and folder:

sudo useradd -m natro && sudo -iu natro
git clone https://github.com/tuxa4life/Natro.git ~/natro
cd ~/natro
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.13 .venv
uv pip install --python .venv/bin/python -e voice -e agent

Add your secrets

Copy .env and google-key.json into ~/natro with scp, then chmod 600 .env google-key.json. In .env:

NATRO_LISTEN=100.x.y.z:8700
NATRO_DEVICE_TOKEN=a-long-random-secret

Make the token with python -c "import secrets; print(secrets.token_urlsafe(32))" and use the same one on every device.

Check that it answers:

cd agent && ../.venv/bin/python -m natro_agent.chat --once "hi"

Run it as a service

Use deploy/natro.service; the steps are inside it. From the PC, curl http://100.x.y.z:8700/health answers ok.

Close the firewall

Natro listens only on its Tailscale address, so the internet can’t reach it. Closing everything but SSH is still good:

ufw default deny incoming
ufw allow OpenSSH
ufw enable

Check first with ss -tlnp that nothing else on the server needs a public port. Use SSH keys only, and turn on automatic security updates.

Connect the PC

In the PC’s .env, set NATRO_SERVER=ws://100.x.y.z:8700 and the same NATRO_DEVICE_TOKEN, then start the app with --wake.

Keep .env, keys and tokens private. Never commit them.