The registry tells producers how to derive identity for each agent (ASR-052), records what each agent’s native format can and cannot supply, and says where each native fact without a standard field goes (ASR-618). It is maintained with the specification; adding or correcting an entry does not change formatVersion. The first four entries are the priority tools that the 0.1 draft is fitted to: Claude Code, T3 Code, Codex and OpenClaw. Each has a table of native facts without a standard field. Evidence labels. Labels attach to individual formats and mappings, not whole agents:
  • source@rev: the named source revision of the native writer.
  • docs: pinned vendor documentation where available.
  • observed: observed storage structure, with its stated version and limits.
  • capture@version: a sanitized real session; only exercised behavior qualifies.
  • probe@version: synthetic input passed through the native writer; persistence only.
  • third-party@rev: a reader or parser, not the native writer.
  • authored: converter tests only.
  • unverified: no established evidence.
A label is not conformance certification. ASR-652 requires a real capture for a version claim. Entries for proprietary agents without source or capture evidence document identity and destinations; their semantic links remain unqualified. Reverse-DNS names are provisional until the agent’s maintainer confirms or replaces them. Producers MAY use them now; a confirmed name will be added as the canonical name and the provisional one kept as an alias. Native file locations are defaults and may be overridden by configuration.

Summary

The last column counts structured format and destination claims without source or capture evidence. It does not count unspecified behavior. Source evidence alone does not qualify an agent version under ASR-652.

Entry fields

Each entry below covers, where known:
  • Native format: the producer.source.format name and where the agent stores sessions.
  • Session ID: which native value is sessionId, and when a namespace is needed.
  • Entity keys: native sources of messageId, callId, inferenceId and turnId.
  • Lineage: subagents, forks, continuations, copies, and when root may be claimed.
  • Tree: for sources that store records in a tree, the native parent, response key, active leaf and injected records used by the mechanical-sibling rule.
  • Notes: compaction, usage, retention and known losses.
  • Native facts without a standard field: each fact the source records that no standard field or record holds, with its native name and its destination: a _meta key on the nearest record (or object), or a vendor record type.

Destinations for native facts

A destination table has three columns: the fact, the native name, and where it goes. _meta keys use the agent’s reverse-DNS name (ASR-600). Values are the native values, verbatim, unless the table says otherwise. A destination on an object inside a record (a participant identity, a review) is that object’s _meta. For a row with several native names and one destination, the value is an object keyed by those exact native names, unless the row specifies another shape. When a row lists the same number of native names as output keys, they map in the order listed. A single native name maps verbatim. Dotted names are literal keys in grouped objects. A wildcard such as guardian_* expands to the actual native member names present; it is never a literal output key. Pull one entity’s entry out of a native map only where a row says so; when it is unclear which entry belongs to the record, do not pick one. Every other transformation below states its output shape. Unsafe numbers follow the single core rule in ASR-035. Each agent reserves jsonText for that rule. Whole native rows use native.record or native.blob. Oversized safe metadata may use an application/json BlobRef at its destination. Native payloads may contain members that are not listed. Explicit destinations take precedence. Every unlisted native field goes in <reverse-DNS>/remainingFields, an object keyed by exact native field name. Every entry reserves this key with that one shape. Grouped payloads retain their own fields and are not recursively flattened. ASR-052 and ASR-618 apply to every mapping here. A mapping that creates a link requires an exact native field or a documented, testable structural contract at a pinned source version. Each entry’s rules apply only to its stated source version or fixture revision; separately pinned supplements state their own scope. The test fixtures that qualify a mapping record the version, the native input and the expected link. Proximity, matching text, reused IDs and an adapter’s strength label never establish a link. When the evidence below is absent, retain the native fields in _meta, leave the normalized link absent, and declare the applicable lineage, copies, call_ids, branches or vendor loss. A matching native ID must be unique in the same scope and have documented correspondence. Source versions without such evidence are not qualified by this registry. Unlisted native fields go in <agent-namespace>/remainingFields, keyed by exact native name. This avoids collisions with reserved destinations. Whole native rows that are not mapped to standard ASR records use vendor records with native.record or native.blob. Redaction and secret exclusions apply to every destination. The entries below distinguish source review, native persistence captures and authored fixtures. A source pin applies only to the native fields and structural contracts described for that revision. A fixture-only rule describes the tested dialect at the stated fixture revision; it does not establish a vendor release contract. A structural link without a pinned native contract remains unqualified, even when an adapter emits it. Preserve the evidence and declare the relevant loss. The entries make no version-level conformance claim for proprietary harnesses. More generally, a source pin, a passing validator run or a persistence probe that makes no model calls does not by itself satisfy ASR-650 to ASR-652. A claim needs a sanitized native fixture for the claimed version and coverage of every applicable requirement. Do not substitute the converter’s version for a missing package version. Names in section headings identify providers for navigation. Where the Names field says no short name is assigned, producers use the reverse-DNS name. Existing short-name aliases stay unchanged.

Shared mapping limits

  • Preserve native entity IDs. Derived IDs use native keys, positions and projection slots under ASR-068/069. Stable keys remain stable across independent captures; positions that the source rewrites use idScope: capture. A hash may encode an allowed tuple, but never supply session identity from content or a path.
  • Preserve each store’s native order. Document deterministic order between stores and declare order; do not merge by timestamps. Mutable current-state records use snapshot assembly at the tail. New source positions after a snapshot tail require a new capture. Do not fabricate revisions from differences between captures.
  • A tool result joins only a unique native invocation under the entry’s named field or contract. Reused call IDs stay on every call; an ambiguous result omits callId and retains the literal ID at its destination. Missing results and unknown outcomes stay missing or unknown. A selected model is not proof of a served model, and aggregate usage is not one inference.
  • A parent pointer whose meaning is unknown supports at most relatedUnknown, and only after its field, identity scope and source contract are qualified. No entry below authorizes a root claim from absent lineage. Child-only evidence does not identify a delegating call. Copies need the named native copy contract, including on usage and other projections of copied entries.
  • Preserve unknown enum values in native evidence. Do not manufacture vendor enums by adding _. The few vendor operations named below are explicit mappings. File snippets do not prove whole-file contents, add versus overwrite, or successful application.
  • Whole native objects in destination tables are grouped values. Keep their native member names; do not move those members into separate keys outside the object. If a structured SQL BLOB cell is retained in such an object, use {encoding: "base64", data: <base64>} unless the entry specifies another encoding. Converter-only helpers, counts and locators do not replace native values.
  • All entries use the existing jsonText contract for unsafe numbers. A jsonText member is a string, never a BlobRef or an object containing a string. An oversized native payload can use native.blob; an oversized metadata value can be an application/json BlobRef at its documented destination when the row permits it. Raw results use capture.raw. No fixed metadata-size threshold is required by the registry.
  • An unknown native row uses the default vendor-record rule. If its type is not a legal vendor type suffix, use <reverse-DNS>/record and keep the original type in native.record. Exclude secrets and apply redaction before producing any normalized records, native records, metadata or blobs. Retained metadata does not imply complete normalized coverage or safe sharing.

claude-code

claude-code Claude Code link contracts

Claude Code: native facts without a standard field

Claude Code: native facts without a standard field

t3-code

t3-code T3 Code link contracts

T3 Code: native facts without a standard field

T3 Code: native facts without a standard field

codex

codex Codex link contracts

Codex: native facts without a standard field

Codex: native facts without a standard field

openclaw

openclaw OpenClaw link contracts

OpenClaw: native facts without a standard field

OpenClaw: native facts without a standard field

OpenClaw SQLite converter supplement

OpenClaw SQLite converter supplement

OpenClaw supplement: native facts without a standard field

OpenClaw supplement: native facts without a standard field

cursor

cursor

cursor: native facts without a standard field

cursor: native facts without a standard field

copilot-cli

copilot-cli

copilot-cli: native facts without a standard field

copilot-cli: native facts without a standard field

gemini-cli

gemini-cli

gemini-cli: native facts without a standard field

gemini-cli: native facts without a standard field

opencode

opencode

opencode: native facts without a standard field

opencode: native facts without a standard field

pi

pi

pi: native facts without a standard field

pi: native facts without a standard field

droid

droid

droid: native facts without a standard field

droid: native facts without a standard field

goose

goose

goose: native facts without a standard field

goose: native facts without a standard field

openhands

openhands

openhands: native facts without a standard field

openhands: native facts without a standard field

cline

cline

cline: native facts without a standard field

cline: native facts without a standard field

roo-code

roo-code

roo-code: native facts without a standard field

roo-code: native facts without a standard field

kilo

kilo

kilo: native facts without a standard field

kilo: native facts without a standard field

zed

zed

zed: native facts without a standard field

zed: native facts without a standard field

warp

warp

warp: native facts without a standard field

warp: native facts without a standard field

kiro

kiro

kiro: native facts without a standard field

kiro: native facts without a standard field

qwen-code

qwen-code

qwen-code: native facts without a standard field

qwen-code: native facts without a standard field

crush

crush

crush: native facts without a standard field

crush: native facts without a standard field

grok-build

grok-build

grok-build: native facts without a standard field

grok-build: native facts without a standard field

antigravity

antigravity

antigravity: native facts without a standard field

antigravity: native facts without a standard field

junie

junie

junie: native facts without a standard field

junie: native facts without a standard field

auggie

auggie

auggie: native facts without a standard field

auggie: native facts without a standard field

amp

amp

astrbot

astrbot

astrbot: native facts without a standard field

astrbot: native facts without a standard field

codebuddy

codebuddy

codebuddy: native facts without a standard field

codebuddy: native facts without a standard field

continue

continue

continue: native facts without a standard field

continue: native facts without a standard field

deepagents

deepagents

deepagents: native facts without a standard field

deepagents: native facts without a standard field

deepseek-harness

deepseek-harness

deepseek-harness: native facts without a standard field

deepseek-harness: native facts without a standard field

devin

devin

devin: native facts without a standard field

devin: native facts without a standard field

firebender

firebender

firebender: native facts without a standard field

firebender: native facts without a standard field

forgecode

forgecode

forgecode: native facts without a standard field

forgecode: native facts without a standard field

fx

fx

fx: native facts without a standard field

fx: native facts without a standard field

hermes

hermes

hermes: native facts without a standard field

hermes: native facts without a standard field

kimi-code

kimi-code

kimi-code: native facts without a standard field

kimi-code: native facts without a standard field

lingma

lingma

lingma: native facts without a standard field

lingma: native facts without a standard field

mimocode

mimocode

mimocode: native facts without a standard field

mimocode: native facts without a standard field

mistral-vibe

mistral-vibe

mistral-vibe: native facts without a standard field

mistral-vibe: native facts without a standard field

mux

mux

mux: native facts without a standard field

mux: native facts without a standard field

nanoclaw

nanoclaw

nanoclaw: native facts without a standard field

nanoclaw: native facts without a standard field

qoder

qoder

qoder: native facts without a standard field

qoder: native facts without a standard field

rovodev

rovodev

rovodev: native facts without a standard field

rovodev: native facts without a standard field

shelley

shelley

shelley: native facts without a standard field

shelley: native facts without a standard field

tabnine

tabnine

tabnine: native facts without a standard field

tabnine: native facts without a standard field

Unassigned facts

The one manifest destination is _meta["<agent-namespace>/unassigned"]. Its value is an array. Each member has source: {table?, key?}, optional namespace and lane, and exactly one of record or blob. record preserves the whole native value; blob is an application/json BlobRef for that value. namespace is the source installation or container scope, not an inferred owner. lane is the verbatim native lane ID. No member assigns a session owner. ASR-035 can route an affected value using the exact JSON Pointer to the value’s original location. Include these facts independently of session selection and describe the policy in the export report. Do not repeat the same fact on every selected session. Unknown ownership alone is not a loss. There is no core unassigned, unattributed or unassigned_facts member or loss in v3.2.

Nested containers

A single native container ID is the namespace verbatim. If installation scope is also required, encode the ordered tuple as compact JSON text [installation, container]; deeper containers append a component. JSON escaping is the only transformation of each native value. Percent-encode that entire namespace when constructing a SessionRef. Parent references use the parent’s own identity scope. A lane alone never qualifies as a distinct conversation.

Shared mapping guidance

The OpenCode entry defines the shared store mechanics used by Kilo and MiMoCode. The Cline entry describes the shared task-array mechanics used by Roo Code. The Gemini entry describes the transcript mechanics also used by Qwen Code. Each agent retains its own identity, source pins, differences and qualification limits. Family membership supplies no evidence.

Deferred mappings

OpenCode part-addressed reverts and Devin context splices remain native evidence with declared branches loss when needed. Ordered context snapshots, external context entries and cross-capture positional references remain deferred. Unassigned lane facts use the registry destination; there is no core unassigned or unattributed manifest container.

Registry data

The registry-data block alongside each entry is the authoritative machine-readable source. tools/validator/scripts/build-registry.mjs generates the committed registry.json; never edit generated JSON. Family guidance is referenced and never transfers evidence between agents. Optional mappings entries name the native field, destination, scope and evidence indexes for mappings into core fields or native envelopes. The destinations member defines reserved metadata shapes. ASR-620 Registry data MUST have unique canonical names and aliases, valid entry and evidence references, and consistent destination shapes. CI MUST reject any difference between the regenerated registry and the committed file. Validators MUST read the generated registry, reject unknown reserved destination keys and incorrect shapes, and allow unknown members inside native payloads. Unlisted native fields use remainingFields. Shared reserved destinations have the same shape for every agent.