dev.bastienrobert.memory.record

bastienrobert.spaces-alpha.bsky.network

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A single durable memory belonging to the user. Deliberately one generic type: specialising into fact/preference/project/event types is premature until real requirements demand it. Retrieval-specific state (BM25 scores, vector ids, index cursors, caches) MUST NOT be stored here — it is derived data owned by whichever memory engine indexes this record. Consumers MUST preserve properties they do not recognise: an implementation that rewrites a record after dropping unknown fields destroys data written by a newer one.",
      "key": "tid",
      "record": {
        "properties": {
          "content": {
            "description": "The memory itself: one self-contained statement that still makes sense months from now.",
            "maxGraphemes": 2500,
            "maxLength": 10000,
            "type": "string"
          },
          "createdAt": {
            "description": "When the memory was first stated.",
            "format": "datetime",
            "type": "string"
          },
          "kind": {
            "description": "Coarse classification. Open vocabulary: an unknown value is legal and must not be dropped by a consumer.",
            "knownValues": [
              "fact",
              "preference",
              "decision",
              "context"
            ],
            "type": "string"
          },
          "occurredAt": {
            "description": "When the remembered event happened, independent of createdAt. Omit when unknown.",
            "ref": "#occurrence",
            "type": "ref"
          },
          "provenance": {
            "description": "Where this memory came from. Advisory: consumers must tolerate its absence.",
            "ref": "#provenance",
            "type": "ref"
          },
          "scope": {
            "description": "Application label within a Space, never an access boundary. Use separate Spaces for different trust boundaries.",
            "maxLength": 512,
            "type": "string"
          },
          "supersedes": {
            "description": "Older memories replaced by this statement, several when it merges them into one. Keep history; consumers only mask replacements within the same authorized Space and repo.",
            "items": {
              "format": "at-uri",
              "type": "string"
            },
            "maxLength": 20,
            "type": "array"
          },
          "updatedAt": {
            "description": "When the memory was last revised, if ever.",
            "format": "datetime",
            "type": "string"
          }
        },
        "required": [
          "content",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "occurrence": {
      "properties": {
        "from": {
          "format": "datetime",
          "type": "string"
        },
        "precision": {
          "description": "Precision of the source statement; year and month dates are anchors, not exact event dates.",
          "enum": [
            "year",
            "month",
            "day",
            "instant"
          ],
          "type": "string"
        },
        "to": {
          "format": "datetime",
          "type": "string"
        }
      },
      "required": [
        "from"
      ],
      "type": "object"
    },
    "provenance": {
      "properties": {
        "agent": {
          "description": "The agent that wrote the memory, e.g. 'claude-code', 'codex'.",
          "maxLength": 256,
          "type": "string"
        },
        "client": {
          "description": "OAuth client id of the application that wrote it.",
          "format": "uri",
          "type": "string"
        },
        "sourceUri": {
          "description": "What the memory was derived from, if anything.",
          "format": "uri",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "id": "dev.bastienrobert.memory.record",
  "lexicon": 1
}

Validate Record

Validate a record against dev.bastienrobert.memory.record

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:b3m4nj3hvdeqg5csp7qhlcjs
CID
bafyreify7srhighvy7i5zvatgjhamhy3enjihepshdoiy7o5orexhz6r4q
Indexed At
2026-09-14 08:09 UTC
AT-URI
at://did:plc:b3m4nj3hvdeqg5csp7qhlcjs/com.atproto.lexicon.schema/dev.bastienrobert.memory.record

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • AI memory snapshot. Each record is a versioned snapshot of accumulated knowledge.

  • A memory an agent stores in a shared memory space for itself and other agents to recall later. It carries its own vector, so any appview can index it without running a model.

  • systems.witchcraft.memory recordnot from the namespace authority

    A public memory - an event or experience worth recording.

Lexicon Garden

@