Intrinsic Labs

OpenLoom

A protocol for loom interfaces

Current Version: 2.0 (draft)

← Aspen Grove

Contents

3. Document container

The top-level value is a JSON object:

{
  "format": "open-loom",
  "version": "2.0",
  "exportedAt": "2026-07-08T21:14:00Z",
  "generator": { "name": "Aspen Grove", "version": "0.9.0" },
  "trees": [ /* one or more Tree objects, § 4 */ ],
  "agents": { /* optional shared agent registry, § 4.5 */ },
  "extensions": {}
}
Field Type Req Notes
format string MUST Literal "open-loom". Primary detection signal.
version string MUST "<major>.<minor>". See § 3.1.
exportedAt timestamp SHOULD See § 3.2.
generator object SHOULD name + optional version, free-form.
trees Tree[] MUST One or more. A single-tree export is a one-element array.
agents map MAY Document-level agent registry shared across trees.
extensions object MAY § 7.

3.1 Versioning policy

  • Minor bumps add optional fields only. An importer for 2.0 MUST accept any 2.x document, ignoring fields it doesn't know.
  • Major bumps may change structure. Importers SHOULD refuse majors they don't understand, with a clear message.
  • Exporters MUST write the lowest version that expresses their content.

3.2 Timestamps, IDs, and text

  • Timestamps are ISO-8601 strings with timezone (UTC Z preferred), millisecond precision allowed: "2026-07-08T21:14:00.123Z".
  • IDs are opaque non-empty strings, unique within their scope (nodes and edges share a tree-wide scope; trees and agents are document-scoped). ULIDs are RECOMMENDED for new IDs. Importers MUST treat IDs as opaque — no format may be assumed — and MUST remap on collision with local data.
  • All text is UTF-8. Node text SHOULD be treated as Markdown-compatible plain text; importers MUST NOT require it to parse as Markdown.