extensions-registry
id: "extensions-registry" slug: "extensions-registry" title: "Extension registry — full text" description: "The full EXTENSIONS.md registry text: entry process, status rules, and the five registered extensions."
Extensions are named, optional capability sets a writer declares in the
top-level extensions array (see SPEC.md, "Extensions"). Core v1 parsing is
never affected: a reader that doesn't know an extension ignores it.
Adding an entry
Open a PR adding a section below. Each entry: name (lowercase, hyphenated,
unique), status (draft → stable; deprecated retires it), purpose, the
exact fields it reads/writes and where, and any conformance vectors
(conformance/vectors/extensions.json). Status moves draft → stable when
at least two independent implementations round-trip it. Exception: the two seed entries (images-inline, usage-metadata) entered the registry already stable — they predate the rule and are round-tripped across the ecosystem; the criterion governs entries that enter as draft.
Registry
| Name | Status | Emitted by | Purpose |
|---|---|---|---|
images-inline | stable | curtis plugin, porter, curtis-web, curtis-cloud, curtis-ai-tech | Image payloads ride inside content |
usage-metadata | stable | porter, curtis-web, curtis-ai-tech | Per-message cost/token/provider fields |
tool-linkage | draft | porter, curtis-ai-tech, curt-convert (same author — does not count toward stability) | Tool-call requests and their results |
agent-context | draft | curtis plugin, porter, curtis-cloud, curtis-ai-tech | Agent/swarm provenance on conversations and messages |
consensus-receipt | draft | tractum | Signed k-of-n consensus decision bound to the transcript evidence |
Full per-consumer emit/accept data: capabilities.json.
images-inline — stable
The convention this extension declares: images are not a separate field — a
message whose content is a data URI (data:image/...;base64,...) or raw
base64 carries an image inline. Declaring it tells other readers what to
expect; it adds no fields and changes no behavior.
- Fields: none beyond core —
contentcarries the payload;kind: "image"is a common optional marker. - Readers never decode or transform
content, and files never carry a byte-order mark (see SPEC.md, "File shape").
usage-metadata — stable
Optional extra fields recording economics and provenance:
- Message-level:
tokens(object, e.g.{ "input": 12, "output": 340 }),cost(number, writer's currency),provider(string). - Readers must preserve these verbatim on round-trip; they never affect validation.
tool-linkage — draft
Links assistant tool calls to their tool-role results:
- Assistant message:
toolCalls(array of objects withid(string),name(string),arguments(writer's JSON value)). - Tool message:
toolCallId(string) referencing thetoolCalls[].id. - Round-trip is verbatim; readers must not reorder or drop entries.
- Status
draft. Second emitter added 2026-11-01 (curt-convert, same author as the reference) — stability still requires two independent implementations.
agent-context — draft
Multi-agent provenance:
- Conversation-level:
agentId(string),skillIds(array of strings),swarmRole(string),leaderId(string). - Semantics are writer-defined; the extension guarantees only preservation.
consensus-receipt — draft
A verifiable multi-agent consensus decision carried alongside the evidence it
was drawn from. The conversation's messages ARE the evidence transcript;
the decision rides in extension fields:
- Conversation-level:
consensusReceipt(object — the full signed receipt envelope:payload,algorithm,public_key,signature,payload_hash,signed_at,metadata) andconsensusTranscripts(array of{ "id": string, "sha256": string }— one entry per source transcript, wheresha256is the hex digest over that document's canonical JSON serialization). - The receipt's signed payload embeds its own copy of the
consensusTranscriptsrefs. Verifiers recompute the hashes and compare — the decision is bound to this exact evidence or the artifact is invalid. - Writers SHOULD declare
agent-contextalongside this extension (the receipt's per-agent statements reference agents thatagent-contextprovenance describes). - The extension guarantees only preservation. Signature and quorum
verification semantics are writer-defined (tractum: Ed25519 or ML-DSA
over canonical JSON, k-of-n quorum in
payload.quorum). - Status
draft: single implementation (tractum). Stable when a second independent implementation round-trips it.