dev & serve
raxit dev and raxit serve -- local iteration and daemon mode.
raxit dev runs a local demo runtime for iterating on a policy — it streams decisions and
prints an operator token, but exposes no /v1/reload route (restart to pick up changes).
raxit serve runs the out-of-process decision daemon that run/apply/status/plan/
approvals/agent all attach to — this is what a real deployment runs.
raxit serve
serve refuses to start with the approvals API enabled on a non-loopback-only listener unless a
token is supplied:
$ raxit serve --source .raxit/security.yaml
raxit serve: --approvals-token or RAXIT_APPROVALS_TOKEN must be set (approvals API is enabled and the listener is not loopback-only)Correct startup, token via env, addr aligned to the client default:
$ RAXIT_APPROVALS_TOKEN=my-token raxit serve --source .raxit/security.yaml --addr localhost:8181
raxit: WARNING: audit log .raxit/var/daemon-audit.jsonl is UNSIGNED (no Ed25519 key found at --sign-key). Records are still hash-chained but carry no signature. Run `raxit keys init` for tamper-evident R5 evidence.
raxit serve: decision daemon on localhost:8181 (policy .raxit/security.yaml ve1096c1fd92d9c5f)Both lines print to stderr. The "UNSIGNED audit log" warning is unconditional unless
--sign-key is set (or raxit keys init has been run beforehand) — audit records are always
hash-chained, but per-record Ed25519 signing is opt-in.
raxit serve's own --addr flag defaults to :8080, while every client command that talks
to a daemon (apply, status, plan, agent, approvals) defaults its --addr to
localhost:8181. raxit dev's --listen flag defaults to localhost:8181, matching the
clients. If you start raxit serve bare, the default-addr client commands will not find it —
either start serve --addr localhost:8181, or pass --addr :8080 to every client command.
raxit dev
$ raxit dev --listen localhost:8282
operator token: bd8744f561f4817b8cc304bb43bcfa393d446150
raxit: WARNING: audit log .raxit/var/dev-audit.jsonl is UNSIGNED (no Ed25519 key found at --sign-key). Records are still hash-chained but carry no signature. Run `raxit keys init` for tamper-evident R5 evidence.
✓ Loaded .raxit/security.yaml
✓ Policy compiled in memory
✓ Watching payments-bot
✓ Listening localhost:8282dev prints a freshly-generated operator token on every start — it is not the same value
across runs; capture your own rather than reusing one from a doc or a previous session.
Flags
--source <path>—security.yamlto load.--addr/--listen <host:port>— listener address (serveuses--addr, defaulting to:8080;devuses--listen, defaulting tolocalhost:8181).--approvals-token <token>(orRAXIT_APPROVALS_TOKEN) — required byservewhen the listener is not loopback-only and the approvals API is enabled.--sign-key <path>— enable Ed25519 signing of audit records (seeraxit keys init).
Gotchas
devexposes no/v1/reloadendpoint —raxit applyagainst adevdaemon compiles, tests, and records the policy locally but prints an honest "restart to activate" message rather than claiming a live swap happened.- Neither
devnorservewrites a compiled.cedarfile to disk by default in daemon-attached mode — the compiled policy lives in the daemon's memory;raxit status's local-file check can still show[--]even with a policy actively enforced (see status).

