Memory exists because an index is stateless and a shopper is not. Without it every conversation re-asks about budget, brands they refuse and what they already bought.
One namespace per person, chosen by you. Nothing crosses namespaces, and you can drop one entirely when a user leaves.
POST /v1/memory
{ "namespace": "user_9f21", "kind": "constraint",
"body": "never recommend anything with a subscription attached",
"ttl_days": 365 }| kind | Lifetime | Example |
|---|---|---|
| constraint | Long | Won't buy leather. |
| preference | Long | Prefers matte black. |
| purchase | Permanent | Bought a Baratza grinder in Feb. |
| rejection | Medium | Rejected the Ninja — too loud. |
| intent | Short | Looking for a coffee machine this week. |
Ask what is relevant to what you are about to recommend. Replaying an entire history into context is expensive and makes the recommendation harder to explain, not easier.
POST /v1/memory/query
{ "namespace": "user_9f21", "about": "recommending a coffee machine", "limit": 5 }The most under-used kind. An agent that recommends the same rejected product twice loses trust permanently, and recording the rejection costs one call.