Skip to content
Fuse
Esc
navigateopen⌘Jpreview
On this page

fuse host register

Register a new compute host

fuse host register <id> [flags]

Adds a compute host to the orchestrator’s scheduler. <id> is a free-form, operator-supplied string and is the host’s primary key, use a readable one (for example prod-east-1).

Flags

Flag Purpose
--url Host agent base URL. Required.
--region Region label.
--token The host agent token the orchestrator uses to call this host (its FC_AGENT_TOKEN). Required for the firecracker backend unless --no-verify.
--no-verify Allow an empty --token (for a genuinely unauthenticated dev agent).
--backend firecracker (default) or qemu.
--arch Host CPU architecture, amd64 or arm64, override. Empty (default) probes the host agent. A declared value that contradicts the probe is rejected.
--cpus CPU capacity override. 0 (default) probes the host agent.
--ram-mb RAM capacity in MB, override. 0 (default) probes the host agent.
--storage-gb Storage capacity in GB, override. 0 (default) probes the host agent.
--max-vms Max concurrent VMs. Always required, this is scheduling policy, not a hardware fact, so it is never probed.
--gpus GPU device count, override. 0 (default) probes the host agent. Requires --backend qemu.
--gpu-kind GPU model label, for example a100, override. Empty (default) probes the host agent.
--mig-profile MIG instance capacity as profile=count, for example 1g.10gb=4. Repeatable. Requires --backend qemu.
--label Placement label as key=value, for example disk=nvme. Repeatable. Declared, never probed.

Labels

--label key=value declares a label a Fusefile’s placement.labels selector can match on:

fuse host register build-3 --url https://build-3.internal:8080 \
  --max-vms 8 --label disk=nvme --label tier=build

Labels are operator-declared and never probed from the host agent, the same trust model as --gpu-kind: Fuse does not check that the box really has NVMe. Keys and values must be alphanumeric with ., -, and _ inside, up to 63 characters. See Scheduling and placement.

Token verification

The --token is the host agent’s own token (FC_AGENT_TOKEN), not the orchestrator token. It is required for the firecracker backend: an empty token is almost always a mistake that would otherwise only surface at the first environment create as an opaque 401. Pass --no-verify to register an unauthenticated dev agent with no token.

At registration the orchestrator makes its first call to the host agent (the same call that probes capacity). If the agent rejects the token, registration is refused rather than persisting a host that can never be scheduled onto:

unauthorized: host agent at http://10.0.0.5:8090 rejected the token. this must be its FC_AGENT_TOKEN, not the orchestrator token
  re-run `fuse connect <url> --token <token>` with a valid token

If the agent is merely unreachable but you declared full capacity, the host still registers, with a warning.

Capacity probing

--cpus, --ram-mb, --storage-gb, --gpus, and --gpu-kind are optional. Leave any of them at its zero value (0, or empty for --gpu-kind) and the orchestrator probes the host agent for the real value instead of trusting an operator-declared guess. Pass one explicitly to override the probe, for a deliberate overcommit or a carve-out reserving part of the host for something else, a declared value above what the probe reports still registers successfully, with a warning printed rather than a rejection. A declared --gpu-kind that disagrees with the probe warns the same way.

Two things are never probed. --max-vms is scheduling policy rather than a hardware fact, so you always declare it. --mig-profile is operator-declared because MIG instances must be created on the host ahead of time, the agent reports whole devices but not the slices you carved out of them.

Per-device GPU inventory is the reverse case: it is probe-only. The agent reports each GPU’s UUID, model, PCI address, memory, driver version, and MIG mode, and there is no flag to declare or override that list.

If a value was left at 0 and the probe itself fails, for example because nothing is listening at --url, registration is refused rather than persisting a host with made-up capacity. Declare the values explicitly in that case.

# probe cpus/ram/storage from the host agent; only declare what's policy
fuse host register prod-east-1 \
  --url http://10.0.0.5:8090 \
  --region us-east \
  --max-vms 20
# override the probe with an explicit overcommit
fuse host register prod-east-1 \
  --url http://10.0.0.5:8090 \
  --cpus 32 \
  --ram-mb 65536 \
  --storage-gb 500 \
  --max-vms 20

GPU hosts

fuse host register gpu-1 \
  --url http://gpu-host:8091 \
  --token "$QEMU_AGENT_TOKEN" \
  --backend qemu \
  --gpus 1 \
  --gpu-kind a100 \
  --max-vms 4

--gpus requires --backend qemu; registering with --gpus set on a firecracker-backend host is rejected with gpus > 0 requires backend "qemu". The same applies to --mig-profile.

To offer fractional GPUs, declare the MIG instances you created on the host:

fuse host register gpu-1 \
  --url http://gpu-host:8091 \
  --token "$QEMU_AGENT_TOKEN" \
  --backend qemu \
  --mig-profile 1g.10gb=4 \
  --mig-profile 2g.20gb=2 \
  --max-vms 8

Each profile is validated in two places, so a typo fails at registration rather than silently advertising capacity that can never be filled. The CLI checks only the profile=count shape and the count itself: a value with no = or an empty key is rejected with invalid --mig-profile "...": expected profile=count (e.g. 1g.10gb=4), and a non-numeric or non-positive count with invalid --mig-profile "...": count must be a positive number.

The mig-parted grammar is checked server-side, not by the CLI, so a well-formed-but-meaningless profile such as --mig-profile foo=4 passes the client and is refused by the orchestrator:

invalid argument: mig_profiles: invalid MIG profile "foo" (expected mig-parted form like "1g.10gb")

Profile keys are lowercased.

A host may declare both --gpus and --mig-profile; the two are separate inventories and a MIG placement never consumes a whole device. See GPU host setup for the full VFIO/IOMMU bring-up.

Interactive mode

Omit --url in an interactive terminal to fill in the required fields via a form instead of flags. The form marks --cpus/--ram-mb/--storage-gb as “0 = probe from host agent” and --max-vms as “required, not probed” to match the flag behavior above. It prompts for GPU count and kind, but not for MIG profiles, register a MIG host with --mig-profile on the command line.

Output

On success, prints the registered host’s full detail, including any capacity warnings:

$ fuse host register prod-east-1 --url http://10.0.0.5:8090 --max-vms 20
registered host "prod-east-1"
id            prod-east-1
url           http://10.0.0.5:8090
region        -
backend       firecracker
state         active
cpus          0 / 16
ram mb        0 / 65536
storage gb    0 / 500
vms           0 / 20
last seen     ... (just now)
created       2026-01-15 10:00
updated       2026-01-15 10:00
warning: declared cpus (32) exceeds probed host capacity (16)
note: last_seen is set at registration and not refreshed; it is not a liveness signal

(The warning line only appears when a declared value actually exceeded the probe; a plain probe-everything registration prints no warnings. The note: line is unconditional and prints on every registration.)

Was this page helpful?