IAGA Sentinel
Docs

Reference

The complete surface of the open build: Cargo features, the CLI at a glance, every environment variable, the HTTP API, and API key scopes. Mirrors the repository; GitHub stays the authoritative copy.

Cargo features (iaga-sentinel-core)

FeatureDefaultAdds
sqliteonSQLite backend for audit + receipts.
postgresoffPostgres backend.
receiptsonEd25519-signed Merkle-chained receipts.
dictumonDictum policy parser + evaluator + iaga policy …
reasoningonReasoning plane scaffold + iaga reasoning info.
mlofftract-onnx ML backend; opt-in, +~5 MB binary, +~2 min cold compile.
kernelonEnforcement kernel + iaga run + iaga kernel status.
linux-bpfoffLinux eBPF/LSM scaffold + ringbuf API. The real Aya-rs loader lives in IAGA Sentinel Enterprise.
cost-controloffLocal LLM spend metering, /v1/cost/*, iaga cost, session budgets, MCP response cache. The default build is byte-identical without it.
plugin-attestationoffOffline Sigstore bundle + CycloneDX SBOM verify + iaga plugins verify.
dictum-wasmoffDictum to WASM codegen MVP + iaga policy compile. The Hindley-Milner type checker (iaga policy check) is always on, no feature needed.
otel-receiptsoffEmit each signed receipt as an OpenTelemetry span on /v1/telemetry/spans and /v1/telemetry/export, with iaga.receipt.id, iaga.chain.head, iaga.policy.verdict, and iaga.is_authoritative. No new dependency.
plugin-manifest-signingoffEd25519-signed plugin manifests verified at load against trusted keys, plus iaga plugins sign-manifest and verify-manifest. Orthogonal to plugin-attestation.

default = ["demo", "sqlite", "receipts", "dictum", "reasoning", "kernel"]

The standalone verifier iaga-verify (crate iaga-sentinel-verify) is a separate, dependency-light binary and the artifact you hand an auditor. Build it reproducibly:

cargo build --release -p iaga-sentinel-verify --no-default-features --features verify-only

CLI at a glance

CommandWhat it does
iaga serve [--seed-demo] [--port N] [--policy file.dictum]Run the sidecar: API, dashboard, signer, audit store.
iaga inspect <payload.json>One-shot pipeline verdict from the CLI.
iaga run --agent-id <id> -- <cmd> [args…]Launch a child process under governance, with env scrubbing.
iaga replay [--list] [<run_id>] [--verify-only] [--re-execute] [--export f.json]Verify or replay signed receipt chains.
iaga policy check/lint/test/compile <file.dictum>Type-check, validate, dry-run, or compile Dictum.
iaga gen-key --label <name> [--scope agent]Mint an API key (admin by default).
iaga audit [--limit N] [--format json]Show the audit trail.
iaga cost [summary|by-model|by-agent|by-tool|budget]Spend views (requires cost-control).
iaga proxy --agent-id <id> --command <cmd> [args…]Transparent MCP governance proxy.
iaga mcp-serverExpose governance tools over MCP stdio.
iaga plugins list/validate/verify/sign-manifest/verify-manifestWASM plugin lifecycle.
iaga kernel status / iaga reasoning infoHonest posture reports.
iaga import/export/migrate/validatePolicy config and database management.
iaga-verify <chain.json> [--key <hex>]Standalone offline receipt verification.

Environment variables

VariableEffect
IAGA_SENTINEL_OPEN_MODEtrue disables auth (walkthroughs only).
PORTListen port (default 4010); --port overrides.
DATABASE_URLpostgres://… switches the backend (with --features postgres).
IAGA_SENTINEL_SIGNER_KEY_PATHBYOK: path to a 32-byte Ed25519 signer key file.
IAGA_SENTINEL_RECEIPT_CAPTURE1 captures pipeline inputs for replay --re-execute.
IAGA_SENTINEL_ENV_DENYLISTTOML file extending the secret-scrub denylist for iaga run.
IAGA_SENTINEL_ENV_DENYLIST_STRICT1 fails launches closed when the denylist TOML is unreadable or malformed (default: warn and use built-ins).
IAGA_SENTINEL_PLUGIN_DIRWASM plugin directory (default ./plugins).
IAGA_SENTINEL_REASONING_MODELSONNX model paths for the ml feature.
IAGA_SENTINEL_SESSION_BUDGET_USDPer-session spend cap (with cost-control).
IAGA_SENTINEL_PRICING_FILEOverride the built-in pricing table.
IAGA_SENTINEL_LOG_LEVEL / _LOG_FORMATTracing filter and text/json output.
IAGA_SENTINEL_DEFAULT_MODEDefault governance mode for unmatched workspaces.
IAGA_SENTINEL_NHI_MASTER_SEEDDeterministic seed for NHI identity keys.
IAGA_SENTINEL_HOSTInterface the server binds to (default 0.0.0.0).
IAGA_SENTINEL_CORS_ORIGINSComma-separated CORS allowlist (unset = permissive Any, the pre-1.5.2 behavior).
IAGA_SENTINEL_AUTH_CACHE_TTL_MSVerified-API-key cache TTL (default 60000; 0 disables and verifies every request).
IAGA_SENTINEL_MAX_SESSIONS / _SESSION_TTL_MSSession-graph store cap (default 10000) and TTL (default 30 min).
IAGA_SENTINEL_BLOCK_COOLDOWN_MS / _MAX_BLOCK_COUNTBlocked-session cooldown (default 60 s) and strikes before a permanent block (default 3).
IAGA_SENTINEL_CLEANUP_INTERVAL_SECS / _CLEANUP_TTL_SECSBackground TTL-cleanup cadence (default 300) and age threshold (default 3600).
IAGA_SENTINEL_COST_CACHE_TTL_MS / _COST_CACHE_MAX_ENTRIESResponse-cache TTL (default 5 min) and size cap (default 4096), with cost-control.

HTTP surface

Everything below speaks the camelCase wire contract (agentId, toolName, actionType) and, outside open mode, requires Authorization: Bearer <key>.

EndpointWhat it does
POST /v1/inspectGovernance verdict for one action; the single endpoint everything integrates against.
GET|POST /v1/auth/keys · DELETE /v1/auth/keys/{id}API key management (admin scope).
GET /v1/reviews · POST /v1/reviews/{id}Review queue: list items, approve or reject.
GET /v1/sandbox/pendingSandboxed dry-runs with impact analysis, awaiting an operator.
GET /v1/receipts · GET /v1/receipts/{run_id}List runs; read one run's signed receipt chain.
GET /v1/cost/summary · /by-model · /by-agent · /by-tool · /over-time?bucket=Spend aggregation (cost-control).
POST /v1/webhooks · GET /v1/webhooks/dlqRegister webhook endpoints; inspect and retry the dead-letter queue.
GET /v1/events/streamServer-sent-events live feed of every verdict, review creation, and resolution.
GET /v1/policy/overlayLoaded Dictum bundle hash and policy count.
POST /v1/plugins/reloadReload the WASM plugin registry (admin scope).
GET /v1/telemetry/spans · /v1/telemetry/exportSigned receipts as OpenTelemetry spans (otel-receipts).
POST /v1/risk/feedback · POST /v1/risk/weights/resetAdaptive risk weights: feedback shifts them; reset restores defaults (admin).
GET /healthLiveness; returns 200 within about 10 seconds of first Docker boot.

API key scopes

API keys carry a scope since 1.5.2: admin (default — full access, identical to pre-1.5.2 keys) or agent (iaga gen-key --scope agent), which can drive the governance surface but not manage keys, webhooks, rate-limit config, threat intel, or plugin reloads.

Note that the adaptive-risk weights are process-global across all agents: feedback posted to /v1/risk/feedback shifts them for every agent on the instance, and POST /v1/risk/weights/reset (admin) restores the defaults.

Where to go next