Secret Boundary
- The OpenClaw plugin does not hold signing secrets
- The Decision daemon process holds sensitive material:
SUPABASE_SERVICE_KEYMASTER_MNEMONIC/ signer contextAXON_DECISION_API_KEY(when static operator auth is enabled)AXON_API_KEY_HASH_PEPPERAXON_SECRETS_KEYAXON_PROVIDER_SEARCH_FEEDBACK_SIGNING_KEY(when feedback publishing is enabled)
Deterministic Policy Gates
Before settlement, AXON enforces:- Wallet active check
- Mandate presence
- Idempotency duplicate check
- Host/path allow/block checks
- Task metadata requirement (
require_task_metadata) - Per-transaction / daily / monthly spend limits (
mandate.monthly_limit_usdc) - Per-minute rate limits (
mandate.max_requests_per_minute) - Per-minute spend caps (
mandate.max_spend_per_minute_usdc) - Network validation (
mandate.networkswhitelist) - Per-task/per-host 402 retry budget
LLM Alignment Scoring
WhenAXON_ALIGNMENT_LLM_ENABLED=true, alignment evaluation uses an external LLM for semantic scoring instead of the default structural (Jaccard) scorer. The LLM scorer falls back to Jaccard on failure or timeout. LLM calls are subject to AXON_ALIGNMENT_LLM_TIMEOUT_MS.
Provider Identity Controls
- Provider registry match on host + path (+ optional network/asset)
- Challenge attestation checks for destination/network/asset consistency
- Strict mode via
AXON_REQUIRE_PROVIDER_REGISTRY=true - Default posture is soft mode
Risk & Approval Controls
- Risk scoring with escalation thresholds
- Human approval required for escalated requests
- Approval tokens are:
- Short-lived (default 5 minutes)
- Request-scoped (wallet/host/path/method/idempotency)
- Single-consume (
consumed_atguard)
Runtime Abuse Controls
Current Launch Constraints
- Rate limiting state is process-local. Horizontal scale increases total effective throughput unless you add an external limiter.
- Circuit-breaker state is process-local. One instance opening a circuit does not pause peer instances.
- The public launch docs assume USDC on Base. Other networks should be treated as non-GA.
Forensic Integrity
- Canonical spend request + decision + receipt persistence
- Signed webhook delivery (
X-AXON-SIGNATURE, HMAC-SHA256) - Claim/lease outbox dispatch (no duplicate delivery)
- Dead-letter status after max webhook attempts
Hardening Checklist
Restrict Decision daemon network exposure
Rotate
AXON_DECISION_API_KEY and infrastructure secretsKeep
SUPABASE_SERVICE_KEY and signer material out of logs/transcriptsSet
AXON_MCP_PUBLIC_URL in live deployments so onboarding snippets never derive from caller-controlled Host headersMonitor denial/escalation reason-code trends
Enable and monitor webhook dead-letter queue
Verify
user_organizations isolation with a second test accountEnsure
SUPABASE_SERVICE_KEY is never used in the frontendVerify the daemon refuses to start when both static operator auth and platform auth are absent