Run Your First Node
Go from a bare machine to a working local B3IQ node — install, claim, pick a model the machine can serve, smoke test, then earn.
This guide takes a brand-new operator from nothing to a working local node. You install the host agent, claim the machine in the local wizard, pick a runtime and a model the hardware can actually serve, run one prompt to prove it works, and then — optionally — claim the machine to your B3 account so the dashboard, your gateway keys, and the CLI can reach it.
Local inference works on its own — nothing here requires an account. Claiming connects the machine to your B3 account; earning on top of that is a further, optional step with its own gates.
The host agent manages local runtime state and can expose local inference APIs. Install it only on hardware you are allowed to administer, and treat setup tokens, owner sessions, and local API keys as powerful local credentials.
Steps
Install the host agent
Run the public installer for your OS. Each one downloads the host-agent
binary, verifies it against published release checksum metadata, registers
the local service, and binds setup plus local inference to
http://127.0.0.1:8831.
bashcurl -fsSL https://b3iq.org/install/linux | sudo bash
Installs a systemd service.
bashcurl -fsSL https://b3iq.org/install/macos | bash
Installs a launchd agent. Desktop operators can instead use the
signed, notarized B3IQ Companion app.
powershellirm https://b3iq.org/install/windows.ps1 | iex
Registers a Task Scheduler service.
The curl/irm scripts are fully supported and are the headless /
server / appliance path. Linux package trust is still closing — see
Installation for current GUI package status.
Open the local wizard and claim the node
The installer opens the local command panel for you. If you need a fresh tokenized URL from the machine itself, ask the host agent:
bashb3iq-host wizard url --with-token
In the wizard, create the first local owner account. From then on, setup access uses owner auth instead of relying on the bootstrap token. Then review the inventory the host agent reports — CPU, RAM, GPU, disk, OS, runtime, and network posture. Browser GPU checks are advisory; the host agent is the source of truth.
Leave the machine in Local Mode for now. Managed Mode is a deliberate opt-in covered in the last step.
Pick a runtime and a model the machine can serve
Choose a runtime the host agent detected, then pick a model profile sized to your hardware. The wizard recommends profiles your machine can realistically serve first; larger models demand more RAM, VRAM, and a stronger runtime and benchmark posture.
Don't hardcode an artifact name. List what your node can actually run and pick a returned id:
bashcurl --fail --silent --show-error http://127.0.0.1:8831/v1/models
Use a representative id like qwen3-8b only as a placeholder — the live set
changes with your runtime and installed models, so always pick from the list
above.
Start small. A model that loads and answers quickly is worth more than a large model that swaps to disk and times out. You can install a bigger profile once the small one is proven.
Create a local API key
Create a scoped b3iq_local_ key in the wizard for local inference clients.
Keep it out of shell history and process argv by writing it to a file with
tight permissions:
bashumask 077mkdir -p .secrets# Paste the local key, then press Ctrl-D.cat > .secrets/b3iq-local-key
Run the one-prompt smoke test
Confirm the runtime answers end to end. This reads the key from a file and a
temporary curl config so the secret never lands in argv. Replace the model
value with an id from GET /v1/models.
bash: "${B3IQ_LOCAL_KEY_FILE:=.secrets/b3iq-local-key}"B3IQ_LOCAL_BASE_URL="${B3IQ_LOCAL_BASE_URL:-http://127.0.0.1:8831}"cfg="$(mktemp)"chmod 600 "$cfg"trap 'rm -f "$cfg"' EXIT{ printf 'url = "%s/v1/chat/completions"\n' "${B3IQ_LOCAL_BASE_URL%/}" printf 'request = "POST"\n' printf 'header = "Authorization: Bearer %s"\n' "$(sed -n '1p' "$B3IQ_LOCAL_KEY_FILE")" printf 'header = "Content-Type: application/json"\n'} > "$cfg"curl --fail --silent --show-error --config "$cfg" --data-binary @- <<'JSON'{ "model": "qwen3-8b", "messages": [{ "role": "user", "content": "Run a local B3IQ smoke reply." }], "stream": false}JSON
javascriptimport { readFileSync } from "node:fs";const baseURL = process.env.B3IQ_LOCAL_BASE_URL ?? "http://127.0.0.1:8831";const token = readFileSync( process.env.B3IQ_LOCAL_KEY_FILE ?? ".secrets/b3iq-local-key", "utf8").trim();const response = await fetch(`${baseURL}/v1/chat/completions`, { method: "POST", headers: { authorization: `Bearer ${token}`, "content-type": "application/json" }, body: JSON.stringify({ model: "qwen3-8b", messages: [{ role: "user", content: "Run a local B3IQ smoke reply." }], stream: false })});console.log(await response.json());
A JSON completion with a non-empty choices[0].message.content means your
node serves local inference. That is a complete, working local node.
(Optional) Claim the machine to your account
Switch the wizard to Managed Mode to generate an 8-character claim code (and QR). Redeem it from the B3IQ dashboard, signed in as the account you want to own the machine. Claiming is what makes the machine reachable — the dashboard, your gateway keys, and the CLI can only see a claimed machine.
A brand-new machine also needs an onboarding code from the B3IQ team to join the fleet; a purchased machine arrives pre-onboarded and only needs the claim step. Claiming also turns on health alerts, so B3IQ emails you if the machine goes offline or its GPU or disk needs attention.
Once claimed, confirm the account can see the machine from a terminal
instead of the dashboard: install the b3iq CLI, sign in, then run
b3iq status or b3iq doctor. See CLI for install
options and the full command set.
Earning is a further, optional step on top of claiming — not automatic and not a one-time approval. A claimed machine earns only once it clears route and model readiness, from B3IQ-directed work or from switching it to Earn mode. Start with Start Earning when you are ready.
Common Blockers
Check the service is up and the local listener is healthy:
bashcurl --fail http://127.0.0.1:8831/healthb3iq-host status
The default bind is loopback. If you intended a LAN/appliance deployment, that requires an explicit non-loopback listener and your own network controls — see Installation.
The profile is likely too large for the machine and is swapping. Pick a
smaller model id from GET /v1/models, prove it with the smoke test, then
size up. Larger models need more RAM, VRAM, and a stronger runtime posture.
The local key is missing, malformed, or revoked. Create a fresh
b3iq_local_ key in the wizard and rewrite the key file. Local keys are not
hosted gateway keys.
That's expected until you claim the machine and it clears route and model readiness — Local Mode alone never earns. See Start Earning and Route readiness for the exact gate that is blocking you.
Prove local inference before enrolling
Get one clean smoke reply in Local Mode first. A node that can't answer locally won't earn once routed.
Jump straight to a giant model
A model that swaps to disk times out; right-size the profile to the hardware, then grow.

