Intrinsic Labs

OpenLoom

A protocol for loom interfaces

Current Version: 2.0 (draft)

← Aspen Grove

Contents

1. Purpose & design goals

Media type: application/vnd.openloom+json · Extension: .openloom (plain JSON also accepted as .json)

OpenLoom is a JSON interchange format for loom trees — branching, multi-author explorations of language-model output. It exists so a tree created in one loom (Aspen Grove, socketteer loom, Loomsidian, MiniLoom, ExoLoom, …) can be opened in another without losing structure, attribution, or provenance.

Design goals, in priority order:

  1. Lossless for structure. Branching topology — including hypergraph edges, multi-root trees, and edit lineage — survives round-trips.
  2. Provenance-capable, provenance-optional. The format can carry full cryptographic provenance (content hashes, hash chains, raw API response evidence), but a minimal exporter can omit all of it.
  3. Readable and writable by small tools. A conforming minimal file is a few dozen lines of obvious JSON. Complexity is opt-in.
  4. Forward-compatible. Versioned, with explicit rules for unknown fields and a namespaced extension mechanism.

1.1 Lessons from the ecosystem

The format normalizes divergences observed across community looms:

Concern Community reality OpenLoom answer
Topology encoding Nested children objects (socketteer), flat map + parent pointer (Loomsidian), flat map + both pointers (MiniLoom) Flat node map + explicit edge list (§ 4.4)
Multi-root Faked with immutable empty roots, or unsupported rootNodeIds array (§ 4.2)
Authorship type: user|gen, meta.source: AI|prompt|mixed, or absent author.role enum incl. mixed (§ 4.3)
Content Full text, chat messages, or diff-patches against parent Content block union; importers materialize diffs (§ 4.3, § 8)
Provenance Rich (socketteer model_responses) to none (Loomsidian) Optional generation object (§ 5)
UI state Mixed into data (collapsed/unread/hoisted) Excluded from core; extensions only (§ 7)
Versioning None anywhere Required version field (§ 3)