CLI
raxit run
raxit run -- govern an agent process in-line.
raxit run executes an agent command under governance with zero code changes — it auto-patches
the detected framework's tool-dispatch path so every tool call routes through a decision
before it executes.
Usage
$ RAXIT_AGENT_ID=default-agent raxit run --addr localhost:8181 -- python agent.py
raxit run: using existing daemon at http://localhost:8181
raxit run: posture — identity=adopted daemon (identity posture owned by that daemon) · credential-broker=off · ambient=present (NOT stripped) · enforce=enforce
[raxit] waiting for human approval (up to 120s)… approval id dt_1373bb3e0bcf139d
[raxit PENDING] 'post_to_webhook' deferred — waiting for human approval (up to 120s).
Token: dt_1373bb3e0bcf139d
Approve: raxit approvals approve dt_1373bb3e0bcf139d
Deny: raxit approvals deny dt_1373bb3e0bcf139d
[raxit] approval expired (id dt_1373bb3e0bcf139d)
>>> agent calls calc({'expression': '21 * 2'})
<<< result: 42
>>> agent calls read_customer_db({'query': 'select * from customers limit 1'})
<<< result: row1: name=Jane Doe, email=jane@example.com, ssn=123-45-6789
>>> agent calls post_to_webhook({'url': 'https://example.com/hook', 'payload': 'hi'})
<<< [raxit BLOCKED] 'post_to_webhook' denied (reason: deny.approval_expired). The operation was not executed. Details: raxit explain d867c63661454e8497369a08ebaec35dcalc and read_customer_db permit and execute normally. post_to_webhook matched a review
rule, deferred for human approval, and — unapproved within the timeout — was denied with
deny.approval_expired. The denial carries a raxit explain <call_id> follow-up so you can go
straight from a blocked call to its full decision trace.
If a human runs raxit approvals approve dt_1373bb3e0bcf139d while the call is pending, the
same run permits instead:
[raxit] approval approved (id dt_28930b3bf7da664a)
>>> agent calls post_to_webhook({'url': 'https://example.com/hook', 'payload': 'hi'})
[webhook] would POST to https://example.com/hook: hi
<<< result: okFlags
--agent-id <id>(orRAXIT_AGENT_ID) — the identity bound to every governed call.--addr <host:port>— daemon to attach to; if none is reachable,runstarts its own in-process engine instead of failing.--strip-ambient(orRAXIT_STRIP_AMBIENT=1) — strip ambient cloud/secret env vars (AWS_*,VAULT_*,GOOGLE_*,GITHUB_TOKEN, …) from the spawned agent's environment before exec. Off by default because the agent commonly needs its own credential (e.g. its own LLM API key) just to run.-- <command...>— the agent process to launch, unmodified.
Gotchas
- The posture line (
identity=… · credential-broker=off · ambient=present (NOT stripped) · enforce=…) is printed unprompted on every run — read it before assuming ambient credentials are being stripped or a broker is active. - Framework autopatch can self-report a degraded confidence state without failing open, e.g.:
raxit: live-wire canary INCONCLUSIVE for langchain (could not drive a sentinel through the public dispatch path); destructive-only drift detection remains active for it.The canary is a startup self-check that drives a test call — the "sentinel" — through the framework's real dispatch path to prove interception is live; this message means that self-check couldn't fully verify the patched dispatch path, not that governance failed. - A denied tool call raises
RaxitDeniedin the SDK; the harness process itself still exits 0 if your agent code catches it. Denial stopping a tool from executing is not the same as the agent process crashing.

