Metadata-Version: 2.4
Name: auditant
Version: 0.1.0
Summary: Compliance system-of-record for AI agents — tamper-evident capture with auditant.init(), OpenInference/OTel auto-instrumentation, and real-time policy checks
License: Apache-2.0
Project-URL: Homepage, https://auditant.insightron.ai
Project-URL: Documentation, https://auditant.insightron.ai/docs
Keywords: ai-agents,audit-trail,tamper-evident,compliance,ai-governance,opentelemetry,eu-ai-act
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Security
Classifier: Topic :: System :: Logging
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: httpx>=0.27
Provides-Extra: gateway
Requires-Dist: litellm>=1.96; extra == "gateway"
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.25; extra == "otel"
Requires-Dist: opentelemetry-sdk>=1.25; extra == "otel"
Provides-Extra: openinference
Requires-Dist: opentelemetry-api>=1.25; extra == "openinference"
Requires-Dist: opentelemetry-sdk>=1.25; extra == "openinference"
Requires-Dist: openinference-instrumentation-langchain>=0.1; extra == "openinference"
Requires-Dist: openinference-instrumentation-openai>=0.1; extra == "openinference"
Requires-Dist: openinference-instrumentation-anthropic>=0.1; extra == "openinference"
Dynamic: license-file

# auditant

Compliance system-of-record for AI agents: every action your agents take,
hash-chained, policy-checked, externally countersigned — and verifiable
offline by someone who doesn't trust you.

## Two lines

```python
import auditant
auditant.init(api_key="ak_…", log_id="t_…/prod", agent_id="underwriter")
```

With OpenTelemetry present, `init()` registers a span processor and
activates whichever OpenInference instrumentors are installed (LangChain,
OpenAI, Anthropic) — LLM calls and tool executions become chained audit
events automatically: hashes, never payloads; token counts reported as
observed-not-priced, never as $0. Install the extras for full capture:

```sh
pip install "auditant[openinference]"
```

Without OpenTelemetry, `init()` still gives you a session on the chain
(lifecycle + heartbeats, so a quiet agent is distinguishable from a dead
emitter), the manual `record()` API, and the synchronous policy check:

```python
handle = auditant.init(api_key="ak_…", log_id="t_…/prod", agent_id="underwriter")
verdict = await handle.client.decide({
    "logId": "t_…/prod", "agentId": "underwriter",
    "action": "wire_transfer", "amount": 50_000, "sessionId": handle.session_id,
})
# {'effect': 'pending_approval', ...} → a human approves in the dashboard
# or from Slack, and the same call then returns 'allow'.
```

Evidence writes never block your agent (queued, batched, spilled to disk on
outage), and the policy service failing means a *recorded* enforcement gap,
never a silent allow.

## The examiner's side

Every exported bundle is self-verifying: it embeds a dependency-free
verifier (`node verify.mjs bundle.json`) that recomputes the chain and
validates every countersignature — no account, no network, nothing from us.

Docs: https://auditant.insightron.ai/docs
