Agent observability platform. See everything your AI agents do.
A transparent proxy + interceptor that captures every LLM call, shell command, and HTTP request from your AI agents. Auto-detects PII, credentials, and crypto wallet addresses.
βββββββββββββββ ββββββββββββββββββββββββββββββββββββββββ βββββββββββββββ
β AI Agent ββββββΆβ wiretaps ββββββΆβ LLM API β
β (any agent) β β β β (OpenAI,..) β
βββββββββββββββ β ββββββββββ βββββββββββ ββββββββ β βββββββββββββββ
β β Proxy β β Storage β β API β β
β β :8080 β β SQLite β β :8899β β
β ββββββββββ βββββββββββ ββββ¬ββββ β
β βββββββββββββββββββββββ β β
β β sitecustomize β β β
β β (interceptor) βββββββ β
β βββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β Web Dashboard β
β Next.js :3000 β
β β
β Sessions list β
β Event timeline β
β Stats & charts β
βββββββββββββββββββ
- MitM Proxy (
localhost:8080) β sits between your agent and the LLM API, logging every request/response - sitecustomize interceptor β automatically hooks into Python subprocess calls and HTTP clients
- REST API (
localhost:8899) β serves captured data (agents, sessions, events, stats) - Web Dashboard (
localhost:3000) β Next.js frontend to explore sessions, timelines, and stats
ββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Sessions β
β π‘ Sess β β
β π Stats β ββββββββββββββββββββββββββββββββββββββββββββββ β
β β β claude-agent 2m 30s PII β β
β β β π€ 12 LLM π» 5 shell π 3 HTTP β β
β β ββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β β gpt-worker 45s β β
β β β π€ 8 LLM π» 2 shell β β
β β ββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β v2.0.0 β β
ββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββ
- π Full Visibility β Log every prompt, response, shell command, and HTTP request
- π¨ PII Detection β Auto-detect emails, phone numbers, SSNs, credit cards, crypto addresses
- π‘οΈ Redact Mode β Mask PII before it reaches the LLM
- π« Block Mode β Reject requests that contain PII
- π Web Dashboard β Browse sessions, event timelines, and stats
- π Zero Code Changes β Just set
OPENAI_BASE_URLor usewiretaps run - π Self-Hosted β Your data never leaves your machine
- π¦ SQLite Default β Zero dependencies, instant setup
# Install
pip install wiretaps
# Start wiretaps (proxy + API + interceptor)
wiretaps run -- python my_agent.py
# Or start the daemon separately
wiretaps start
# Point your agent to the proxy
export OPENAI_BASE_URL=http://localhost:8080/v1
python my_agent.pycd frontend
npm install
npm run dev
# Open http://localhost:3000Browse all captured agent sessions with event counts by type and PII alerts.
Chronological timeline of every event in a session. Click any event to see the full payload β request/response for LLM calls, stdout/stderr for shell commands.
Dashboard with total sessions, events, tokens, PII alerts. Bar charts for events by day and breakdown by type.
wiretaps automatically scans for sensitive data:
| Pattern | Example |
|---|---|
user@example.com |
|
| Phone | +1 (555) 123-4567 |
| SSN | 123-45-6789 |
| Credit Card | 4111-1111-1111-1111 |
| CPF (Brazil) | 123.456.789-00 |
| BTC Address | bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh |
| ETH Address | 0x71C7656EC7ab88b098defB751B7401B5f6d8976F |
| Private Key | 0x... (64 hex chars) |
| Seed Phrase | 12/24 BIP-39 words |
The API runs on port 8899 by default.
| Endpoint | Description |
|---|---|
GET /health |
Health check |
GET /agents |
List agents |
GET /sessions |
List sessions (filter by agent_id) |
GET /sessions/:id |
Session details |
GET /sessions/:id/events |
Events for a session |
GET /events |
List events (filter by type, session_id, pii_only) |
GET /events/:id |
Event details |
GET /stats |
Overall statistics |
GET /stats/by-day |
Stats grouped by day |
GET /stats/by-type |
Stats grouped by event type |
| Variable | Default | Description |
|---|---|---|
WIRETAPS_URL |
http://127.0.0.1:8899 |
Backend API URL (used by interceptors) |
WIRETAPS_SESSION_ID |
(auto) | Session ID for the current run |
WIRETAPS_API_PORT |
8899 |
API server port |
WIRETAPS_PROXY_PORT |
8080 |
Proxy server port |
WIRETAPS_HOST |
127.0.0.1 |
Host to bind to |
WIRETAPS_TARGET |
https://api.openai.com |
LLM API to forward requests to |
NEXT_PUBLIC_API_URL |
http://localhost:8899 |
Frontend: API URL for the dashboard |
# Redact: mask PII before sending to LLM
wiretaps start --redact
# Block: reject requests with PII entirely
wiretaps start --block- OpenAI (
api.openai.com) - Anthropic (
api.anthropic.com) - Azure OpenAI
- Google AI (Gemini)
- Local models (Ollama, vLLM, etc.)
- Any OpenAI-compatible API
wiretaps/
βββ frontend/ # Next.js web dashboard
β βββ src/app/ # App Router pages
β β βββ sessions/ # Sessions list + timeline
β β βββ stats/ # Stats dashboard
β βββ src/lib/ # API client & types
βββ src/wiretaps/
β βββ api/ # FastAPI REST API
β β βββ app.py # App factory + CORS
β β βββ schemas.py # Pydantic models
β β βββ routes/ # Endpoint handlers
β βββ interceptors/ # sitecustomize hook
β βββ proxy.py # MitM proxy server
β βββ pii.py # PII detection engine
β βββ storage.py # SQLite storage layer
β βββ cli.py # CLI commands
β βββ daemon.py # Daemon process
βββ tests/ # Test suite
βββ patterns/ # PII pattern definitions
βββ pyproject.toml
git clone https://github.com/marcosgabbardo/wiretaps
cd wiretaps
pip install -e ".[dev]"
pytest
ruff check .MIT β use it however you want.
Built with π by @marcosgabbardo