Developers · 9 of 11

Tiers and profiles

4 min

Two independent axes describe what a given .mem carries. tier is which projection of the package this is. profile is where the bytes live. Both are top-level fields in mem.json.

Tier: portable or full

portable is the open tier, what a third party receives. It carries the values: description, themes, emotionalWeight, sensitivity, transcripts, focal coordinates, segments, narrativeSummary, a redacted roleGraph, involvedRoles (roles, never names or ids), and a redacted declaredEmotion (no free-text note, no sensitive contexts). Enough for any reader to narrate, summarize, sequence or lay out a book.

full is the owner’s own complete memory, what our player and the lockbox render from. It adds involvedPeople (persona ids), audioSpeaker, engagement (reactions, hearts), the sender block and caption tags under presentation, and the full declaredEmotion when the export is not redacted. An owner exporting their own memory gets the full tier; redaction is an explicit build flag, not derived from the tier.

Profile: bundled or linked

bundled embeds the bytes under media/: self-contained, works offline, hand it to any tool. linked carries the manifest only; every asset has a locator that says where to fetch the bytes: url, or lockbox://<deviceId>/<handle> when the bytes stay on hardware the owner holds and resolve over a session with that device. The two mix in one file: embed the photos, link a large video.

The linked profile, for a model

A linked file is about 3 KB, and it is the export built for an LLM. All the meaning is already in mem.json: the descriptions, the themes, the weights, the roles, the arc. A model can understand the memory and write from it with nothing downloaded. description is the highest-value field for that work. When a tool does need to see a photo, retrieval.instructions says how to fetch any asset’s locator.ref, and retrieval.manifestUrl points at the live manifest.

The rule for every asset

Read the locator, fetch by its kind, re-hash the bytes, and compare to contentHash before trusting them. Identity is the hash; the locator is one place to look, and moving the bytes never breaks provenance.