An index is stateless; a shopper is not. Memory is written by you, scoped to one end user, and returned only to that namespace.
| Field | Type | Notes |
|---|---|---|
| memory_id ·always | string | Stable. |
| namespace ·always | string | Your scope for one end user or agent. Nothing crosses namespaces. |
| kind ·always | enum | preference | constraint | purchase | rejection | intent. |
| body ·always | string | The fact, in plain language. |
| subject | object | null | Optional product_id, brand or category it attaches to. |
| expires_at | timestamp | null | Constraints outlive intents. Set deliberately. |
{
"memory_id": "mem_0c81a",
"namespace": "user_9f21",
"kind": "constraint",
"body": "never recommend anything with a subscription attached",
"expires_at": "2027-09-08T00:00:00Z"
}The most under-used kind. An agent that recommends the same rejected product twice loses trust permanently, and recording it costs one call.