Skip to content

Events and evidence

Requires @openlatch/client 0.10.0 or later

Use this page to read the two records OpenLatch keeps as evidence: the audit trail of every change and action in your organization, and the execution events the client sends for each agent action.

Export the audit trail from the Audit Trail page, as CSV or JSON; see Review the audit trail. Each exported event carries these fields, in this order.

FieldMeaning
timestampWhen the event occurred
actor_nameThe name of the person who acted, empty for an event the system wrote
actor_emailThat person’s email address
sourceWhere the action came from: console, api, system or auth_sidecar
actionWhat was done, such as policy.updated
target_typeThe kind of object acted on
target_labelThe name of that object
statusThe outcome: success, failure or denied
changesThe fields that changed, as JSON
siteThe OpenLatch site that recorded the event

The export itself is recorded in the audit trail. The hash chain that links each event to the one before it is not part of the export: check it under Settings › Audit Trail.

The console’s live events page reads every hook event the client sends with these fields.

FieldMeaning
event_idThe event’s evt_ identifier, assigned by the client; the platform stores an event once per identifier and drops a repeat
timeWhen the agent fired the hook, as the agent reported it
ingested_atWhen the platform received and stored the event
typeThe hook event, under the agent’s own name for it
platformThe agent product that fired the hook, such as claude-code or codex-cli
host_idThe host the agent runs on, a hst_ identifier
agent_idThe agent that sent the event, an agt_ identifier
session_idThe session the event belongs to, a ses_ identifier
agentversionThe agent’s version
clientversionThe client’s version
osThe machine’s operating system
archThe machine’s processor architecture
localipv4The machine’s local IPv4 address
localipv6The machine’s local IPv6 address
publicipv4The machine’s public IPv4 address
publicipv6The machine’s public IPv6 address
tool_nameThe tool the agent invoked, on a tool event, under one name shared by every agent
tool_inputThe tool’s input, as the arguments of that shared tool
tool_responseThe tool’s response, on the event after the tool ran
olverdictThe verdict recorded for the event
olverdictshadowThe verdict a policy in Monitor mode would have produced
olpolicyruleidThe policy rule that decided the action, or would have in Monitor mode
olpolicybundlerevThe revision of the policy bundle the decision was made against
olpolicyofflineTrue when the client decided from its cached bundle because its last bundle update failed
raw_eventThe event as OpenLatch stores it, in the event model described below

Open an event on the live events page and its Raw event section shows the event as OpenLatch stores it. Every event is stored in one event model, the same for every agent. The events already stored in your organization in the earlier format were converted to this model, and a client that sends that format now has its events refused. The audit trail records the conversion as Event History Conversion Started and Event History Converted, with the number of events converted and the number that could not be. Each event that could not be converted is in the audit trail as Unconvertible Events Exported, one per event, and its changes hold the original event and the reason it could not be converted, so the CSV and JSON exports carry it whole.

FieldMeaning
dataschemaThe event model the event follows, https://openlatch.ai/schemas/events/v3. It is an identifier, not a page to open
typeThe hook event, such as a tool call before or after it runs
idThe event’s evt_ identifier
sourceThe agent product that sent the event
subjectThe session, as a ses_ identifier
hostidThe host, as a hst_ identifier
agentidThe agent, as an agt_ identifier
dataThe action itself, in the fields below for an agent action
Field in dataMeaning
harness_nameThe agent product, such as claude-code or codex-cli
action_typeThe kind of action, such as a tool call or an MCP call
tool_nameThe shared tool name, the same for every agent: a shell command is bash whichever agent ran it
payload_llm_toolThe tool call’s arguments and, once it has run, its result
payload_llm_mcpAn MCP call’s server, tool, arguments and result
payload_rawThe agent’s own payload, as the client sent it, kept for audit

Because tool names are shared, the console shows one label per tool for every agent: a shell command shows as Bash and a file edit as Edit, whichever agent made it.

Inside data, the agent’s own identifiers keep their names: session_id there is the session identifier the agent itself gave, never a ses_ identifier. An event stored before the current identifiers keeps its earlier ones in its raw event, and the console shows it under the current ones. Identifiers describes each identifier.

The platform answers each batch of events from a client event by event. An event that fails its checks is refused on its own, with a reason, and the other events of the batch are stored.

ReasonWhat happenedWhat to do
missing_requiredA field the event model requires is absentUpdate the client on that machine
schema_invalidThe event does not match the event modelUpdate the client on that machine
unknown_dataschemaThe event names an event model the platform does not acceptUpdate the client on that machine to a published release
client_too_oldThe event comes from a client older than the current identifiersReinstall the client on that machine; see Install the client
server_errorThe platform could not store the eventNothing: the client sends the batch again, and an event already stored is never stored twice

The SIEM export channel is not shipped. Neither record is sent to a SIEM; export the audit trail from the console instead.