Audit trail for AI agents

Know exactly what your agents did.
Prove it to anyone.

Every prompt, tool call and approval is written to a hash-chained, tamper-evident log. Sensitive tools wait for a human. Hand your auditor an export they can verify themselves.

pip install oleus
 SDK — wrap your client
from openai import OpenAI
from oleus.llm import wrap_openai, OleusHeld

client = wrap_openai(OpenAI(), "gr_live_...",
                     agent_id="support-agent")
# "refund" is sensitive: raises OleusHeld until an admin approves
client.chat.completions.create(model="gpt-4o", messages=[...])
 Gateway — change the base URL
from oleus.llm import gateway

client = OpenAI(api_key="sk-...",
    **gateway("gr_live_...", "openai", "support-agent"))
# or: OPENAI_BASE_URL=https://api.oleus.io/gateway/openai/v1
# your provider key is forwarded, never stored
How it works

Record, gate, prove

Two ways in, one tamper-evident log, and evidence an auditor can check without trusting us.

1

Record

Wrap your OpenAI or Anthropic client, or point it at the Oleus gateway. Each call becomes a log entry: agent, model, tokens, tool calls, risk flags and SHA-256 hashes of the prompt and completion. Raw content is never stored.

2

Gate

Tools like refund, delete and execute_sql are held until an admin approves. Approvals are bound to one agent and tool, single-use, and expire after 15 minutes. The approver comes from the session, not the client.

3

Prove

Each entry commits to the one before it. /agent-audit/verify recomputes the chain, and a daily chain head is written to S3 Object Lock. Export CSV with sequence numbers and hashes for your auditor.

Append-only, hash-chained

Edits, deletions and gaps break the chain. Database triggers stop the application role from updating or deleting audit rows.

Externally anchored

Daily chain heads go to S3 Object Lock in compliance mode, so truncating the tail of the log is caught.

Hashes, not prompts

Only SHA-256 hashes leave your process. PII and secret flags are computed client-side and labelled client-asserted.

Fail closed when you need it

Pass strict=True to the SDK, or use the gateway: a call that cannot be recorded is not returned.

Team controls

SSO (OIDC), SCIM, enforced MFA, IP allowlist and custom roles for who can approve, export and administer.

Self-hostable

The backend needs only Postgres. Enterprise runs in your own infrastructure with Docker Compose.

SOC 2 evidence

Entries are mapped to the controls auditors ask about

Filter and export by control. Oleus Audit produces evidence for your audit; it does not make you SOC 2 compliant or certified.

ControlWhat it coversEvidence from Oleus
CC6.1Logical accessTool calls, who approved them, blocked attempts without approval
CC7.2MonitoringEvery recorded LLM call and tool call with risk score and flags
CC8.1Change managementPolicy changes and approval decisions, with timestamps and approver

"Every call" is true when agent traffic goes through the Oleus SDK wrappers or the gateway, with direct provider egress blocked. Tamper-evident is not tamper-proof: a database owner can still alter rows, and anchoring makes that detectable.

Pricing

Start free, pay when you need approvals and exports

Solo
$0 / mo
  • 1 agent
  • Hash-chained audit trail
  • Verify endpoint
  • Python SDK and gateway
Start free
Starter
$500 / mo
  • Approvals for sensitive tools
  • SOC 2 evidence export
  • Configurable retention
  • Email support
Get started
Enterprise
Custom
  • SSO and SCIM
  • IP allowlist, enforced MFA
  • Run on your infrastructure
  • Security review support
Talk to us
FAQ

Straight answers

Does this make us SOC 2 compliant?

No. It produces evidence mapped to CC6.1, CC7.2 and CC8.1. Compliance comes from your own audit.

Do you store our prompts?

No. SDK users send only SHA-256 hashes. Gateway traffic passes through memory to compute hashes and flags, then is discarded.

What does tamper-evident mean?

Each entry includes the hash of the previous one and chain heads are anchored to S3 Object Lock, so edits, deletions and gaps are detectable. It does not claim the data cannot be altered.

Is Oleus itself SOC 2 audited?

Not yet. A Type I audit is planned. See the security page for current status.

SDK or gateway?

The SDK keeps content in your process. The gateway needs no code changes beyond a base URL and covers any language. Both write to the same log.

Can we run it ourselves?

Yes, on Enterprise: Docker Compose on your own Postgres. Learn more.