Skip to content

Session archive format

The compaction job writes archived sessions to an object store (S3, GCS or Azure Blob) as Parquet files in a Hive-partitioned layout. Session retention explains when a session is archived. Query the session archive shows how to read the files with SQL engines.

Every object key starts with the prefix sessions/. The prefix is fixed; the compaction job has no flag or chart value for it.

sessions/
_manifest.json
year=2026/month=04/day=10/agent=my-agent/part-0000.parquet
year=2026/month=04/day=10/agent=my-agent/part-0001.parquet
year=2026/month=04/day=11/agent=another-agent/part-0000.parquet
ElementBehaviour
year=, month=, day=The session’s created_at date in UTC. year has four digits, month and day have two.
agent=The agent name with every character outside [a-zA-Z0-9_-] replaced by _.
part-NNNN.parquetEach write to a partition starts numbering at the number of objects already in it. A write splits into several files when its estimated size passes 128 MB.
CompressionSet by the chart value sessionRetention.compaction.compression: snappy (default), gzip, zstd or none. Parquet records the codec per column chunk, so files written with different codecs can share a bucket.
_manifest.jsonA JSON index Omnia uses to look up a session by ID and to list the dates that hold data. It is not Parquet.

Every file has this schema. Columns marked optional are null when the session has no value.

ColumnTypeNotes
idstringSession ID.
agent_namestringAgent that owned the session.
namespacestringKubernetes namespace of the agent.
workspace_namestring, optionalWorkspace.
virtual_user_idstring, optionalPseudonymous subject the session was recorded against.
statusstringSession status.
created_atint64Nanoseconds since the Unix epoch.
updated_atint64Nanoseconds since the Unix epoch.
expires_atint64Nanoseconds since the Unix epoch. 0 when unset.
ended_atint64Nanoseconds since the Unix epoch. 0 when unset.
message_countint32
tool_call_countint32
total_input_tokensint64
total_output_tokensint64
estimated_cost_usdfloat64
tagsstringJSON array of strings.
statestringJSON object of string values.
last_message_previewstring, optional
messages_jsonstringJSON array of the session’s messages.

Each element of messages_json has the keys id, role, content and timestamp. It adds metadata, inputTokens, outputTokens, costUsd, toolCallId, sequenceNum, hasMedia and mediaTypes when they are set.

The archive holds no rows from the tool_calls, provider_calls, runtime_events, runtime_event_batches and eval_results tables. The compaction job deletes those rows with the warm copy of the session.