.curt

Adopt the format — [email protected] · MIT · 27 vectors in CI

Make your app speak .curt.

The format is free — the move is yours. One afternoon of work buys your users a conversation file that never loses anything and never goes stale.

Why implement it

The path

Four steps. Conformance is testable at every one.

  1. Install. npm i curt-format — serializeCurt, parseCurt, curtFilename.
  2. Round-trip. Serialize a conversation, parse it back, confirm unknown fields survive. That's the L1 bar.
  3. Prove it. Run the conformance vectors — L1 CORE, L2 NAMED, L3 BULK, L4 per-extension. 27 vectors, plain fixtures, CI-runnable.
  4. Get listed. PR against capabilities.json + CAPABILITIES.md: who you are, what you read/write, which extensions, conformance level. Public and checkable.

Registry status

Consumers, from capabilities.json (lastAudited 2026-10-17):

idrolereadwriteconformance
curtisObsidian plugin — import, export, full-backup zipyesyesnone
curtis-ai-chat-porterConverter (CLI + Obsidian plugin + web)yesyesnone
curtis-webChat app — export single .curt + bulk zipnoyesnone
curtis-cloudShared library — import/export serializationyesyesnone
curtis-ai-techDocs/marketing + Porter web app with inline previewyesyesnone
tractumPython SDK + MCP server — signed consensus decisionsyesyesnone

Six entries, one author. That's the honest score — the launch post doesn't pretend otherwise. First outside consumer sets the tone.

Extensions:

extensionstatuswhat it carries
images-inlinestablebase64 images in content, verbatim
usage-metadatastabletokens / usage per message
tool-linkagedrafttool calls linked to their results
agent-contextdraftagent/system context alongside the thread
consensus-receiptdraftsigned consensus decisions (tractum, sole impl)

Draft → stable requires two independent implementations. consensus-receipt needs one more.

Questions, answered