Export and verify a tenant

Tenant export format

Look up export files, manifest fields and table inclusion rules.

For: cluster and tenant administrators.

Look up export files, manifest fields and table inclusion rules.

The format

The format is oz0-tenant-export/1. Within it files are only added: a new column appears in its table's file and in the manifest, so read columns by name and allow ones you do not know. A renamed or removed column, or a changed meaning, is a new format version, never a patch release's change.

PathWhat it holds
README.txtWhat the export holds and how to check it
manifest.json, manifest.sigThe manifest below, and the audit key's signature over "oz0-tenant-export/1\n" + sha256(manifest.json)
keys/audit.json, keys/gateway.jsonThe public keys that sign the manifests (id, kind, public_key in base64, fingerprint, created_at, retired_at)
tables/<table>.jsonlOne JSON object per row: the table's columns by name (text as strings, integers as numbers, bytes in base64); times are UTC milliseconds in integer columns; text columns that hold JSON stay JSON text
plugins/<name>/<version>.tar.gzEach installed plugin's files, the gzipped tar the cluster installed
audit/log.jsonlThe tenant's audit chain as oz0 audit export writes it, ending with the head line
evidence/The evidence bundle for the period, with its own manifest.json and signature; made without the content permission, whoever exports, since audit/log.jsonl carries the private parts
usage/usage.jsonlThe usage export's rows (schema version 1)
inventory/inventory.jsonThe inventory export as JSON
recipients/recipients.jsonThe recipient map of every agent and flow as oz0 inventory recipients --format json writes it (format oz0-recipients/1), computed when the export is made
purposes/purposes.jsonThe tenant's purposes and legal bases, each agent's declared purposes and the findings (format oz0-purposes/1)
content/manifest.json, content/manifest.sigWith --content: the jobs an edge exported, signed with its gateway key over "oz0-tenant-export-content/1\n" + sha256(content/manifest.json)
content/jobs/<job>.jsonEach job as oz0 job export --content writes it (format oz0.job-export/v1)

manifest.json:

FieldWhat it holds
formatoz0-tenant-export/1
tenant, created_at, created_byWhose export, when, and who made it
clusterid, name, version (the server's) and schema_version (the database's)
sinceThe start of the period, when --since was given
contentWhether content is in it
key_idThe audit key that signs it
tablesPer exported table: name, rule, file, rows, sha256, columns (name and type: text, integer, real, bytes, boolean), redacted and sealed (never in the rows), withheld (content columns, null without content), since (the column --since filtered on), erased_rows (rows left out as an erased subject's), private_rows (rows whose content columns are null as someone else's private chat's), walled_rows (rows whose content columns are null because a wall closes them to the exporter)
skippedEvery table not in tables/, with its rule and reason: carried by a part, transient, or the cluster's
partsThe parts (audit, evidence, usage, inventory, recipients, purposes, content), each with its path and format
pluginsEach installed plugin: name, version, artifact (its digest) and file
content_manifestWith content: the content manifest's sha256, the gateway key that signed it and the number of jobs
private_chatsWith content: withheld and read_with_reason (other people's private chats), and the rows and audit_entries whose content was withheld
wallsWith content, when the tenant's walls apply to the exporter: the rows and audit_entries whose content a wall withheld, and a note on how it was decided
filesEvery other file's path, size and sha256, but the content part's files, which the content manifest lists

content/manifest.json has format (oz0-tenant-export-content/1), tenant, created_at, created_by, since, key_id, jobs (each id, file, content, redactions and a note), left (jobs left out with the reason, such as an erased subject), truncated and files.

Tables

Every table of the database has one rule, and a test fails when a new table has none, so this list is complete for the version you run. export exports every column but those named; part means another part carries the table; skip and cluster tables are not in the export, for the reason given. The third column is the column --since filters on.

TableRule--since
tenantsexport
pluginsexport
plugin_versionsexport
plugin_contract_changesexportcreated_at
plugin_uses_grantsexport
plugin_uses_pendingexport
plugin_optional_secretsexport
plugin_providesexport
tool_policiesexport
tool_rule_shadowexportlast_at
llm_providersexport
model_aliasesexport
model_alias_seedsexport
model_map_rulesexport
agent_budgetsexport
agent_changesexportproposed_at
plugin_change_budgetsexport
model_canariesexport
teamsexport
team_membersexport
quotasexport
routinesexport
routine_versionsexport
plugin_hidden_skillsexport
channel_bindingsexport
channel_membersexport
channel_roomsexport
connectionsexport; redacted nonce, nonce_expires_at (the one-time nonce of a flow under way)
credential_bindingsexport
tenant_settingsexport
tenant_retentionexport
mfa_policiesexport
notification_rulesexport
kill_switchesexportcreated_at
inventoryexport
membershipsexport
provisioner_tenantsexport
api_keysexport; redacted secret_hash (a key's hash is a credential)
join_tokensexport; redacted secret_hash (a token's hash is a credential)
nodesexport
rolloutsexportcreated_at
tenant_backend_movesexportstarted_at
change_requestsexport; content diff, payload, error only with --content; digests delta_sha256 keyed without --contentrequested_at
tenant_region_movesexportstarted_at
workspace_foldersexport
workspace_revisionsexport
workspace_revision_filesexport
workspace_blobsexport
workspace_draftsexport
workspace_draft_filesexport
tenant_secretsexport; sealed sealed left out
tenant_payload_keysexport; sealed sealed left out
subject_keysexport; sealed sealed left out
job_summariesexport; content error, findings only with --contentstarted_at
job_ownersexportstarted_at
job_startersexportstarted_at
job_runsexportstarted_at
job_tagsexportadded_at
job_step_summariesexportstarted_at
job_errorsexport; content message, example only with --contentlast_at
harness_sessionsexportrecorded_at
job_budgetsexportcreated_at
job_boardexport; redacted dedupe; content body only with --contentcreated_at
job_conversationsexportstarted_at
event_waitsexportcreated_at
routine_outputsexport; content output, arguments, result, answer only with --contentcreated_at
budget_requestsexportcreated_at
loop_eventsexport
chatsexport
chat_peopleexport
chat_sharesexport
chat_textsexport; sealed sealed left outstarted_at
channel_threadsexport; redacted reply_token, reply_until; content request only with --content (a chat message's reply token lasts minutes)created_at
subject_jobsexportstarted_at
erasuresexportrequested_at
held_historiesexport; sealed data left out, its digest keyed without content (a held history's copy is the history itself: read it with oz0 retention held --out)copied_at
eval_runsexportstarted_at
eval_findingsexportopened_at
eval_keptexportkept_at
audit_logpart auditrecorded_at
audit_chainpart audit
gateway_recordspart evidencerecorded_at
gateway_chainpart evidence
llm_usagepart usageat
outside_spendpart usageimported_at
payloadsskip: content stored apart from the histories, sealed with the tenant's payload key: each job's export (--content) carries it decrypted
quota_usageskip: per-person spend figures (R6): the usage part holds the tenant's spend, by team where works-council mode shows it
job_summary_cursorsskip: internal: the summarizer's place
channel_handledskip: transient: chat messages acted on, kept a day for deduplication
channel_link_codesskip: transient: codes that link a chat identity, for ten minutes
connection_tokensskip: transient: rebuilt by use
eval_keep_callsskip: transient: a kept case's model calls, sealed, while it is kept
event_deliveriesskip: transient: events, kept a day for deduplication
feedsskip: transient: browser tabs' feeds
job_replay_callsskip: transient: the test bench's recorded model calls
job_replaysskip: transient: the test bench's recordings
notification_deliveriesskip: transient: notifications' tries, kept 30 days
plugin_candidatesskip: transient: private candidates their developers renew
plugin_uploadsskip: transient: bundles waiting to be installed, a day at most
provider_key_hashesskip: transient: hashes of provider keys, rebuilt by use
provider_pool_stateskip: transient: what edges saw of pool members, rebuilt by use
quota_pending_chargesskip: transient: charges an edge buffered
stream_ticketsskip: transient: one-time stream tickets, for a minute
blobscluster: plugin artifacts by digest, shared; the export carries each installed plugin's artifact under plugins/
temporal_retentioncluster: each backend namespace's retention as the edge found it; the tenant's retention is in tenant_retention
clustercluster: the cluster's identity and its CA keys
operatorscluster: the cluster's operators
userscluster: the cluster's accounts and their password hashes; the tenant's members are in memberships
user_identitiescluster: accounts' sign-in identities
user_mfacluster: accounts' second factors
recovery_codescluster: accounts' recovery codes
pending_linkscluster: accounts waiting to link a sign-in identity
notification_addressescluster: accounts' own addresses
removed_accountscluster: accounts removed from the cluster
directory_groupscluster: a directory's groups of accounts
provisionerscluster: the cluster's provisioners
oidc_providerscluster: the cluster's sign-in providers
plugin_indexescluster: the cluster's plugin indexes
signing_keyscluster: the cluster's signing keys; the public ones are in keys/
audit_key_sealscluster: the audit keys' sealed halves
key_backupscluster: what operators confirmed of the cluster's key copies
serverscluster: servers' heartbeats
node_statuscluster: nodes' connections
sessionscluster: sign-in sessions
signin_failurescluster: failed sign-ins of the last minutes, by keyed hash
leasescluster: servers' leases
edge_registrycluster: what edges applied of the registry
registry_confirmationscluster: registry confirmations
registry_versioncluster: the registry's version
edge_appliedcluster: writes edges buffered
edge_sealingcluster: the cluster's record that the edges re-sealed every key of a kind
feed_bellscluster: the feeds' doorbell
authority_envelopesexport; a block's digest of its input keyed and its MAC left out without contentcreated_at
authority_epochsexport
authority_revocationsexportcreated_at
receiptsexportcreated_at
revocation_fencescluster: which servers fenced a receipt's epoch
file_labelsexport; digests keyed without content
file_scopesexport; digests keyed without content
tenant_mailexport
appsexport
erasure_deferralsexport
erasure_policiesexport
agent_keep_forexport
subject_rulesexport
job_keysexport
job_key_wrapsexport; sealed wrapped left out
tenant_secret_historyskip: previous secret values, sealed and kept 24 hours: never exported
secret_ref_stateskip: transient: what a secret store last answered
secret_storescluster: the secret stores each edge reaches
key_sourcescluster: where each server's keys come from
role_setscluster: the cluster's role sets; a member's roles are in memberships
budget_reservationsexport; redacted budgets (a call's budget keys name the person whose quota it charged (R6))created_at
budget_holdsskip: transient: per-budget counters recomputed from llm_usage; quota: rows are per-person spend figures (R6)
tree_admissionsexportcreated_at
comparisonsexportcreated_at
comparison_runsexportfinished_at
incidentsexport
incident_linksexport
incident_stagesexport
incident_notesexport; content body only with --content
incident_remindersexport
incident_settingsexport
tenant_legal_basesexport
tenant_purposesexport
agent_legal_basesexport
inventory_assessmentexport
purpose_countsexport
plugin_readsexport
plugin_read_targetsexport
results_seenskip: edges' claims of the results source's routed events, kept a week
inventory_seenskip: edges' change-detection state, rebuilt quietly on the next look
tool_sequence_factsskip: transient: the sequence rules that fired in a running job tree, which the edge prunes
plugin_vuln_scansexport
plugin_vuln_findingsexport
advisoriescluster: the cluster's imported advisories, which every tenant's scans read
advisory_sourcescluster: where the cluster's advisories came from, and who imported them
spend_root_kindsskip: derived: the kind of each root job that spent money, read again from its workflow
spend_anomaly_daysexport
governance_replaysexportcreated_at
governance_replay_jobsexportat
oidc_issuersexport
mcp_grantsexport; redacted code_hash, code_challenge, refresh_hash, refresh_prev_hash, last_used_atcreated_at
mcp_client_policiesexport
plugin_recordsexport; redacted dedupe; content body only with --contentcreated_at
tenant_memoryexport
agent_memoryexport
test_approvalsexport
approval_asksskip: transient: the ladder's first steps, kept a day for the flood finding
judge_anchor_runsexportstarted_at
sampled_judgmentsexportsampled_at
subject_restrictionsexport
decision_recordsexportstarted_at
decision_contestsexport; content reason only with --contentcreated_at
agent_tombstonesexport
team_orphansexport
idempotency_keysskip: transient: the admin API's answers to calls made with an Idempotency-Key, kept a day
plugin_set_membersexport
plugin_version_provenanceexport
agent_startsskip: transient: the running jobs of agents with limits.concurrent, which each start counts again
tool_snapshot_checksskip: a queue: node listings management has still to check against the tool policy; the snapshots are exported with the plugins
job_outcomesexport; content detail only with --contentreported_at
plugin_rollout_qualityexport
candidate_checksskip: transient: the candidate checks of agent-made changesets, each for its job's changes approval, holding code no person has read yet; a job asks again
model_vettingsexport
held_history_headsexport; current and published retained-history generations
held_history_capturesexport; private source, checkpoint and manifest internals left out
held_history_objectsexport; source identities left out, payload digests only with content permission
held_history_chunksexport; chunk bytes left out, payload digests only with content permission
held_history_discoveryexport; private scan and source checkpoint internals left out
held_history_erased_treesexport; erasure markers that prevent capture from bringing erased jobs back
On this page
Copyright © 2026