Setup
Setting up the daemon
claweed is the session broker — it runs on every box that hosts sessions.
Install it, then run claweed setup once: a single first-run pass that repairs the
local install and bootstraps your own login as the box's first trusted tenant.
$ curl -fsSL https://release.clawee.org/claweed/install.sh | sh
$ claweed setup # first run: doctor --fix, then bootstrap YOUR tenant keys from ~/.ssh/authorized_keys (consent-gated, idempotent)
Under the hood that's two steps run back to back: doctor --fix repairs whatever it
can about the local install, then claweed reads the invoking user's own
~/.ssh/authorized_keys and offers to enroll each key it finds as that user's first
trusted device. Nothing is written without consent, and running it again is a no-op once the
tenant already exists.
Enrolling a different device's key — not this host's own login — is a separate step: see Devices & pairing.
Health checks
Doctor & status
Both sides speak the same two verbs. On the host, claweed doctor [--fix] [--yes]
diagnoses the deployment and repairs service-user-owned bits (--yes skips consent
prompts); claweed status is its read-only alias — same report, no --fix.
On the client, clawee doctor [--fix] [--yes] diagnoses the local setup and always
prints the clawee + claweed versions — even when nothing connects; clawee status
probes the chain hop-by-hop (socket → daemon → relay → claweed → auth) and shows exactly where
a connection stops.
claweed doctor, run on the session host, reports the installed daemon version
alongside the version actually running — if they differ, restart the service.
Maintenance
Update
Both components self-update in place from the signed release channel:
$ clawee update # shows the version gap; skips if current $ clawee update --auto # install the update, unattended $ clawee update --dry # report only $ clawee update --force # reinstall the latest regardless $ claweed update # same, for the daemon $ claweed update --auto # apply unattended; restarts the service only if changed $ claweed setup # first run: doctor --fix, then bootstrap YOUR tenant keys (see Setup)
update sees nothing to do):
$ curl -fsSL https://release.clawee.org/claweed/upgrade.sh | sh -s -- <version>
Operations
Service unit
The daemon installs itself as a managed boot unit — a launchd .plist on macOS, a
systemd .service on Linux. claweed service print renders that unit to
stdout, given the same paths and run-as identity the installer already resolved — useful for
inspecting what got installed, or for a manual install on a box the installer can't reach
directly.
Operations
Tenant management
claweed tenant manages your own tenant enrollment — the same enrollment
claweed setup bootstraps automatically from ~/.ssh/authorized_keys on
first run, and the same one claweed auth / claweed tenant add sugar
over for a second device (see Devices & pairing).
clawee writes config.json
or a session's meta.json in the multi-user schema, an older clawee binary
refuses the file outright rather than silently misreading it — there is no downgrade path.
Rolling a fleet back means rolling its config back with it. On the daemon side, the instance id
lives in the system config root (moved there by the v0.2.0 migration ladder) and is an
auth-challenge input: a regenerated value silently refuses every already-enrolled device.
claweed never generates one on its own — only the installer's migration adopts it —
so treat that file as load-bearing, not disposable.
Reference
Troubleshooting
Quick diagnostic rows, condensed from doctor/status on both sides:
clawee doctor [--fix] [--yes]Diagnoses the local setup and repairs what it can, and always prints the clawee + claweed versions — even when nothing connects.claweed doctorRun on the session host — reports the installed daemon version alongside the version actually running; if they differ, restart the service.clawee status / claweed statusRead-only aliases of doctor — same report, no --fix.clawee statusProbes the chain hop-by-hop (socket → daemon → relay → claweed → auth) and shows exactly where a connection stops.claweed setupBootstraps a first-time host: doctor --fix plus consent-gated tenant enrollment from the invoking user's own ~/.ssh/authorized_keys.Reference
CLI reference
Verbatim help pages for the daemon-operations verbs, generated by claweed docs from the binary's own help renderer.
claweed setup
first-time setup for the invoking user — doctor --fix, then bootstrap YOUR tenant keys
claweed setup — first-time setup for the invoking user — doctor --fix, then bootstrap YOUR tenant keys Usage: claweed setup
claweed doctor
diagnose the deployment; --fix repairs service-user-owned bits
claweed doctor — diagnose the deployment; --fix repairs service-user-owned bits
Usage:
claweed doctor [flags]
doctor
[--allowlist <path>] spawn-allow uid list path
[--data-dir <dir>] data dir (default: installed boot unit)
[--fix] repair failed checks (asks consent)
[--register-socket <path>] gateway register socket path (default: installed boot
unit)
[--service-home <dir>] service home dir (see --service-uid)
[--service-uid <uid>] service uid (default: the --data-dir owner; set by a
root re-read)
[--service-user <user>] service user (see --service-uid)
[--sessions-verdict <verdict>] relayed sessions verdict (root re-read; display only)
[--socket <path>] dev unix socket path (default: installed boot unit)
[--system-uid-allowlist <path>] system-uid opt-in path
[--yes] skip consent prompts (unattended --fix)
claweed status
alias of doctor (read-only) — same report, no --fix
claweed status — alias of doctor (read-only) — same report, no --fix
Usage:
claweed status [flags]
status
[--data-dir <dir>] service data dir (default: installed boot unit, then the
euid default (system root as root, ~/.clawee/data
otherwise))
[--register-socket <path>] gateway register socket path (default: installed boot unit)
[--socket <path>] dev unix socket path (default: installed boot unit)
claweed update
update claweed from release.clawee.org
claweed update — update claweed from release.clawee.org
Usage:
claweed update [flags]
update
[--auto] apply unattended; restart only if changed
[--dry] print the update plan only, then exit
[--force] reinstall everything (binary + spawn policy + boot-unit) + restart
claweed service print
render the boot unit — a launchd .plist / systemd .service — to stdout
claweed service print — render the boot unit — a launchd .plist / systemd .service — to stdout
Usage:
claweed service print [flags]
print
[--claweed <path>] claweed binary path (required)
[--group <group>] run-as group (optional)
[--home <dir>] service user's home dir — the unit's HOME (always required)
[--kind <kind>] unit kind: launchd | systemd (required)
[--log <path>] launchd stderr/stdout log path (optional)
[--register-socket <path>] claweed --register-socket path (production)
[--root-scheme] root daemon, no run-as user (excludes --user/--group; --home
still required)
[--socket <path>] claweed --socket path (dev)
[--user <user>] run-as user (required unless --root-scheme)
claweed tenant
manage YOUR OWN tenant enrollment
claweed tenant — manage YOUR OWN tenant enrollment
Usage:
claweed tenant <command>
Commands:
add enroll a trust key for YOURSELF
<pubkey> the public key line itself
@<file> read the public key from the named file
[--data-dir <dir>] claweed data dir (required; `claweed auth` resolves a default)
See the full generated references: clawee CLI reference · claweed CLI reference.
Docs synced 2026-08-21 against clawee v0.2.12 · claweed v0.2.4.