Skip to content

Events and Traces

Everything Omnodex captures is represented as a trace event. Events are the fundamental unit of the system - every other feature (detection, dashboards, reports) is built on top of the event stream.

Every event contains:

FieldDescription
idUnique identifier for this event
timestampWhen the event occurred (ISO 8601)
sessionIdWhich agent session produced this event
kindThe interceptor that captured it (e.g., claude-code-hook, codex-hook)
typeWhat type of event this is (e.g., tool.invoked, session.start)
payloadThe event-specific data (tool name, parameters, result, etc.)
TypeDescription
session.startAn agent session began
session.endAn agent session ended
tool.invokedA tool was called by the agent
tool.resultA tool returned a result

The tool.invoked type is the most common. Its payload includes the tool name, the parameters the agent passed, and (when available) the result.

Events are grouped into sessions. A session represents a single agent execution - from when the user starts the agent to when it finishes.

Sessions provide context for analysis: a tool call that looks suspicious in isolation might be perfectly normal in the context of what the agent was asked to do.

Events are stored in an append-only JSONL (JSON Lines) file. Each line is one complete event as JSON.

{"id":"evt_001","timestamp":"2026-05-16T10:00:00Z","sessionId":"sess_abc","kind":"claude-code-hook","type":"tool.invoked","payload":{"tool":"Read","params":{"file_path":"/etc/hosts"}}}

This format is:

  • Human-readable - You can inspect it with standard text tools (cat, grep, jq)
  • Appendable - New events are added to the end without modifying existing data
  • Streamable - Consumers can tail the file for real-time updates
  • Portable - Standard JSON, no proprietary format