Operate
Secrets and networking
The family's networking posture is consistent: bind to loopback, require tokens for anything that mutates, and make you opt in explicitly before anything is reachable from elsewhere.
Default ports#
| Component | Default bind | Purpose |
|---|---|---|
| NullHub | nullhub.localhost:19800 |
Dashboard + API |
| NullClaw gateway | 127.0.0.1:3000 |
HTTP gateway, channels, scheduler |
| NullBoiler | :8080 (quickstart) |
Orchestrator REST API |
| NullTickets | :7700 |
Tracker REST API |
| NullWatch | 127.0.0.1:7710 |
Ingest + query API |
| NullPantry | 127.0.0.1:8765 |
Knowledge/memory API |
| nllclw WebSocket | ws://127.0.0.1:8765/ws |
Local UI channel |
Tokens#
Each service has its own token story; none of them shares a global credential.
| Component | Mechanism |
|---|---|
| NullHub | Optional bearer-token auth; per-proxy tokens via NULLBOILER_TOKEN, NULLTICKETS_TOKEN, NULLWATCH_TOKEN |
| NullClaw | NULLCLAW_GATEWAY_TOKEN and NULLCLAW_WEB_TOKEN; secrets in config encrypted with ChaCha20-Poly1305 |
| NullBoiler | api_token in config; per-worker tokens in the workers array |
| NullTickets | api_token, plus per-lease bearer tokens (stored server-side as SHA-256 hashes) |
| NullWatch | Optional api_token in ~/.nullwatch/config.json |
| NullPantry | NULLPANTRY_TOKEN / NULLPANTRY_TOKEN_PRINCIPALS — per-token actors with scoped capabilities |
| nllclw | WebSocket token required even on loopback |
NullPantry is the strictest of the set: it refuses to bind off-loopback without auth at all (there is a --allow-no-auth-non-loopback flag; its name is the warning), and requires HTTPS for remote backends.
Provider API keys#
Model-provider keys live in NullClaw's config (~/.nullclaw/config.json, written by nullclaw onboard) or nllclw's config/env. Two implications:
- Back these files up encrypted — see Backup and restore.
- Components downstream of NullClaw never need provider keys. NullBoiler dispatches to workers by URL and worker token; NullCap by design stores no provider keys and talks only to NullHub on
127.0.0.1:19800.
Exposing things deliberately#
CORS on the hub. If a browser app on another origin needs the hub API:
nullhub serve --allowed-origin https://your.originor set NULLHUB_ALLOWED_ORIGINS (comma-separated).
Reaching an agent from outside. Do not port-forward the gateway. NullClaw has first-class tunnel support — Cloudflare Tunnel, Tailscale, ngrok, or a custom tunnel — configured in its tunnel section, so the machine never accepts inbound connections directly.
Hub reverse proxies. The dashboard reaches NullBoiler, NullTickets and NullWatch through NULLBOILER_URL, NULLTICKETS_URL, NULLWATCH_URL — those services can stay bound to loopback while the hub fronts them.
Bind addresses. NULLCLAW_BIND / NULLCLAW_PORT control the gateway; NullWatch and NullPantry take --host/--port. Binding to 0.0.0.0 is a decision, not a default — set the relevant token first.
For sandboxing, pairing codes and the rest of the trust model, continue to Security.