dev.bastienrobert.memory.record
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.
Repository
@bastienrobert.spaces-alpha.bsky.network did:plc:b3m4nj3hvdeqg5csp7qhlcjs
namespace authority
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | memory.bastienrobert.dev |
| Indexed |
Checks
Validunlimited-stringdefs.main.record.properties.kindNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.occurrence.properties.precisionNo maxLength, maxGraphemes or format limits this string.
{
"$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
}