Activity & SIEM

Two append-only ledgers: one for calls, one for changes to the rules themselves. Both are filterable in the dashboard and both export to your SIEM.

The call ledger

A row per call, allowed or not: the person, the agent and the host it came from, the connection, the tool, the outcome, and the reason. Filter by any of them.

Activityevery call, allowed or not
  • posthog__query_insightsAllowedby policy
  • linear__create_issueAllowedapproved once by morgan@acme.com
  • metabase__execute_sqlAskedwaiting for a person
  • github__delete_repoBlockedtool is set to Block
OutcomeMeaning
AllowedThe call ran. The row says whether by policy, approved once, or remembered.
AskedThe call is paused, waiting for a person.
DeniedA person said no, or nobody answered in time.
BlockedPolicy refused it before anything downstream was touched.

Every refusal carries a reason:

ReasonShown as
blockedtool is set to Block
no_policytool not offered
scope_unresolvedcouldn't scope the call
ask_pendingwaiting for a person
ask_denieda person said no
ask_expiredno one answered in time
connection_disabledconnection disabled

The governance ledger

Every change to the governance config: mode and preset changes, connections added or disabled, credentials rotated, approvals remembered or revoked, agents revoked. Each row names the human who made the change and carries a before/after diff.

Export to your SIEM

Configure a destination in Settings → Advanced. Two kinds are supported today:

  • HMAC-signed webhook: we POST batches to your URL with a signature header you verify the way you verify a Stripe webhook. Secrets rotate with an overlap window.
  • Splunk HEC: events go to your HTTP Event Collector with the token and index you configure.

Three versioned streams (decisions, governance, sessions) are delivered in order and at least once, on a cadence of about five minutes. Each destination keeps its own cursor per stream, so a receiver that was down catches up rather than skipping.

At least once means you will occasionally see a duplicate after a retry. Every event carries a stable id. Deduplicate on it rather than assuming exactly-once.

Test-send from the dashboard delivers a synthetic event of each stream so you can confirm your receiver before real traffic depends on it.