Metadata-Version: 2.4
Name: agent-audit-logger
Version: 0.1.0
Summary: Lightweight Python middleware that wraps any agent framework and logs every tool call. SOC 2 audit trail for small teams.
Home-page: https://audit-logger.pages.dev
Author: Agent Audit Logger Team
License: MIT
Project-URL: Homepage, https://theaisuite.pages.dev/audit-logger
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: reportlab>=4.0
Provides-Extra: sheets
Requires-Dist: gspread>=6.0; extra == "sheets"
Requires-Dist: google-auth>=2.0; extra == "sheets"
Provides-Extra: all
Requires-Dist: gspread>=6.0; extra == "all"
Requires-Dist: google-auth>=2.0; extra == "all"
Dynamic: home-page
Dynamic: requires-python

[View the live site](https://audit-logger.pages.dev)

# Agent Audit Logger

**Every agent call logged. SOC 2 ready.**

A lightweight Python middleware that wraps any agent framework (LangChain, CrewAI, AutoGen, n8n, Hermes) and logs every tool call — what was invoked, what data passed through, what changed. Output as JSON to file or Google Sheets. Exportable PDF reports for compliance.

Target: startups that need SOC 2 prep but can't afford $10K/mo enterprise stacks.

## Features

- **Framework-agnostic middleware** — wrap any Python callable or agent tool function
- **JSON log rotation** — daily rolling files with optional gzip compression
- **Google Sheets export** — real-time audit trail in a shared sheet
- **PDF compliance reports** — cover page, executive summary, detailed entry table, checksums
- **Tamper-evident** — each entry includes a SHA-256 checksum
- **Session tracking** — correlate all calls from a single agent run

## Quick Start

```bash
pip install agent-audit-logger
```

### Basic usage

```python
from agent_audit_logger import AuditLogger, AuditEntry, AuditMiddleware
from agent_audit_logger.exporters.json_logger import JsonLogExporter

# Create logger and add JSON output
logger = AuditLogger()
logger.add_exporter(JsonLogExporter("audit_logs/"))

# Create middleware
middleware = AuditMiddleware(logger, agent_name="my_agent")

# Use as a decorator
@middleware(tool_name="search_web", tags=["search"])
def search_web(query: str) -> str:
    return f"Results for {query}"

# Or wrap existing functions
wrapped_func = middleware.wrap(
    my_existing_tool,
    agent_name="worker",
    tool_name="my_tool",
)

# Log manually
entry = AuditEntry(
    agent_name="my_agent",
    tool_name="web_search",
    tool_input={"query": "SOC 2 compliance"},
    tool_output="Results...",
    duration_ms=1200.5,
)
logger.log(entry)
```

### LangChain integration

```python
from langchain.tools import Tool
from agent_audit_logger import AuditLogger, AuditMiddleware

logger = AuditLogger()
logger.add_exporter(JsonLogExporter("audit_logs/"))

middleware = AuditMiddleware(logger, agent_name="langchain-agent")
wrapped_tools = AuditMiddleware.wrap_langchain_tools(middleware, tools_list)
```

### CrewAI integration

```python
middleware = AuditMiddleware(logger, agent_name="crewai-agent")
AuditMiddleware.wrap_crewai_tools(middleware, crew_tools_list)
```

### Generate PDF report

```python
report_path = logger.generate_report(
    "compliance_report.pdf",
    title="Q3 SOC 2 Audit Log",
    date_range=("2025-01-01", "2025-03-31"),
)
```

### Log rotation

```python
# Manual rotation (happens automatically on file size threshold)
summary = logger.rotate(archive=True)
```

## Configuration

| Setting | Default | Description |
|---------|---------|-------------|
| `AGENT_AUDIT_LOG_DIR` | `audit_logs/` | Directory for JSON log files |
| `AGENT_AUDIT_MAX_FILE_MB` | `10` | Rotate when log file exceeds this size |
| `AGENT_AUDIT_COMPRESS` | `False` | Gzip old rotated files |
| `GOOGLE_SERVICE_ACCOUNT_PATH` | `~/.hermes/secrets/client_secret.json` | Path to Google service account JSON |

## Pricing

- **$49/mo** — Up to 3 agents, 10K logs/month
- **$99/mo** — Unlimited agents, 50K logs/month, PDF exports

## License

MIT
