By default, a Buttress server runs in public mode — any client on the LAN can connect, no auth required. Binding the server pairs it with one BRICKS workspace and switches it into a mode where every WebSocket and file-transfer request must carry a valid workspace-scoped JWT.Documentation Index
Fetch the complete documentation index at: https://docs.bricks.tools/llms.txt
Use this file to discover all available pages before exploring further.
| State | Discovery announcement | WebSocket auth | HTTP file transfer |
|---|---|---|---|
| Unbound | authentication.required = false | Open | Open |
| Bound | authentication.required = true (with kid) | JWT verified, workspace must match | JWT verified, workspace must match |
1008.
Prerequisites
- The Buttress server is installed locally (see Installation)
- BRICKS CLI is installed
- You are signed in to your workspace:
bricks auth login <passcode>
Bind a server
Run the binding command from the same machine that runs the Buttress server. The CLI auto-detects the local server id and writes a smallstate.json that the server reads at startup.
What gets written
The state file lives at~/.bricks-cli/buttress/state.json by default. Override the directory with --state-dir <path>.
workspace.issuerPublicKeyis the Ed25519 public key for your workspace — the server uses it to verify every incoming access token.serverKeyPairis a per-server Ed25519 announce keypair generated locally on everybind. The public half is registered with the cloud (so launchers can verify signed UDP discovery packets) and the private half stays on disk; signed announcements are described in LAN auto-discovery.
bricks buttress bind mints a new announce keypair and rotates the registered public key. Any stale launcher cache pointing at the old key stops trusting the server until it picks up the new key from the cloud.
Inspect bindings
bricks buttress status prints the local state file alongside the workspace-side list of bound servers.
--json for machine-readable output:
{ "local": <state.json or null>, "remote": <[{ serverId, name, boundAt, lastSeenAt }, …]> }.
Unbind
Removing the binding clears the workspace’s record of the server and deletes the local state file.Issue a long-lived access token
Foundation launchers obtain short-lived tokens automatically through the BRICKS cloud. For headless callers — CI scripts, CTOR agents, ACP bridges — mint a long-lived access token once and reuse it.Authorization: Bearer <token> header or as ?access_token=<token> on the WebSocket URL.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Could not detect a local server id. | Machine ID detection failed (sandboxed/container without identifying info) | Pass --server-id <id> explicitly |
Not logged in. Use bricks auth login first. | No active CLI profile | Run bricks auth login <passcode> |
Server still accepts unauthenticated connections after bind | Server was not restarted | Restart bricks-buttress |
<serverId> was not bound to this workspace. on unbind | Server was already unbound, or bound to a different workspace | Run bricks buttress status to see the actual binding |
| Foundation devices show “no LAN provider is registered” | Server is bound to a workspace different from the device | Re-bind the server to the device’s workspace, or move the device |
Next steps
LAN auto-discovery
How Foundation devices locate bound servers on the LAN.
Use from Foundation
Configure offloading on individual LLM/STT bricks.