Skip to content

Nodes

A node is one of your servers running brig-agent. You bring the machines; Brig schedules workloads onto them. There are two ways to add a node — bootstrap an existing server over SSH, or have Brig provision a brand-new cloud VM — plus labels to steer placement.

Terminal window
brig nodes # id, hostname, CPU, memory, health, workload count, last heartbeat
brig status # fleet-wide summary, including cordoned / dead nodes

If you already have a VPS, bootstrap it over SSH:

Terminal window
brig node add [email protected]

Brig mints a one-shot join token, fetches the install script from the control plane, SSHes in, and runs it under sudo. The script installs Docker if needed, drops in brig-agent, and registers the node — Brig then waits for the agent to call home and prints the new node id. You can add several at once; they install in parallel.

FlagDefaultMeaning
-i, --identityssh-agent, then ~/.ssh/id_ed25519/id_rsaSSH private key.
-p, --port22SSH port.
--labelFriendly label for the node (single host).
--ttl900Join-token lifetime in seconds (max 900).
--sudo-passwordSudo password, if the SSH user needs one.
--concurrency5Max parallel installs across multiple hosts.
--insecure-host-keyfalseSkip SSH host-key verification (first-touch only; not recommended).
--printfalseDon’t SSH — just print the one-liner to paste manually (air-gapped / jump-host).

--print gives you the same command the dashboard shows under Nodes → Add node:

Terminal window
curl -fsSL https://cp.brig.run/install/agent.sh | sudo bash -s -- --token 'brig_join_xxx'

To create a new machine and join it in one step:

Terminal window
brig node provision --provider hetzner --size cx22 --region fsn1

Brig mints a join token, renders a cloud-init payload that runs the install script on first boot, creates the instance, waits for the agent to register, and prints the node id. On failure it cleans up the VM and revokes the token (unless --keep-on-failure).

Supported providers: hetzner, ec2, digitalocean, azure, gcp, linode. Credentials come from ~/.brig/clouds.toml or BRIG_CLOUD_<PROVIDER>_<KEY> environment variables.

FlagDefaultMeaning
--providerrequiredOne of the providers above.
--sizeExact provider size id (e.g. cx22, t3.medium).
--vcpus + --memory-gibOr specify minimums and let Brig pick the cheapest match.
--archamd64 or arm64 filter for spec-based picks.
--region / --zoneprovider defaultWhere to place the VM.
--imageprovider’s Ubuntu 24.04OS image.
--label / --nameNode label / cloud-console VM name.
--ttl1800Join-token lifetime (cloud-init needs a few minutes).
--join-timeout10mHow long to wait for the agent to register.
--keep-on-failurefalseLeave the VM + token for debugging on failure.
--list-regions / --list-sizesPrint what’s available for --provider and exit.
--dry-runfalsePrint the cloud-init payload (token redacted) and exit.

Either give an exact --size, or a --vcpus/--memory-gib spec and let Brig choose. Probe a provider before committing:

Terminal window
brig node provision --provider hetzner --list-sizes --region fsn1
  • 1 vCPU / 1 GiB RAM is enough to run the agent plus a couple of small workloads.
  • Linux with systemd. We test against Ubuntu 22.04, 24.04, and Debian 12.

Labels are arbitrary tags on a node that workloads match against with placement.requires_labels. Setting labels is PUT semantics — pass the complete set you want, not just additions:

Terminal window
brig node labels node-7 # print current labels
brig node labels node-7 us-east ssd # replace the label set with exactly these two
brig node labels node-7 # pass none again to clear

Then a workload can demand them:

[placement]
requires_labels = ["us-east", "ssd"]

See Placement for how the scheduler uses them.