A lightweight telemetry collector for agentic systems. It stores events in SQLite and lets you inspect activity by run or agent. It uses only the Python standard library.
python3 server.py
By default, the service listens on http://127.0.0.1:8000 and creates telemetry.db in the current working directory. Configure TELEMETRY_HOST, TELEMETRY_PORT, or TELEMETRY_DB to change these defaults.
Open http://127.0.0.1:8000/ to view the dashboard. It summarizes runs, agents, errors, activity over the last 24 hours, and activity by agent from the latest 1,000 events. Filter the event stream by run, event type, or text. The dashboard refreshes every 10 seconds.
curl -X POST http://127.0.0.1:8000/v1/events \
-H 'Content-Type: application/json' \
-d '{
"event_type": "tool_call.completed",
"run_id": "run-123",
"agent_id": "researcher",
"parent_agent_id": "orchestrator",
"task_id": "task-7",
"status": "success",
"attributes": {"tool": "web_search", "duration_ms": 240}
}'
The endpoint accepts one event or a JSON array of up to 100 events. event_type and run_id are required. If omitted, id and timestamp are generated by the service. Event names are up to the sender; examples include agent.started, agent.handoff, tool_call.completed, and llm.response.
curl 'http://127.0.0.1:8000/v1/events?run_id=run-123&limit=100'
Combine any of these filters: run_id, agent_id, event_type, task_id, and status. The default limit is 100 and the maximum is 1,000. Use GET /health for a health check.
An event can include id, timestamp, event_type, run_id, agent_id, parent_agent_id, task_id, status, and attributes. For agent handoffs, use the same run_id and record the source agent or handoff details in parent_agent_id and attributes.
This is a minimal alpha release. Authentication, retention policies, distributed deployment, and metric aggregation are not included. The service listens on the loopback address by default for local development.