memory_supersede
Explicitly supersede an existing memory by providing its full UUID and new content. The old memory stays archived, and the new one becomes current, enabling precise corrections without losing history.
Instructions
Explicitly supersede an existing memory with a new one. Use this to record an intentional update — 'this fact replaces that specific memory' — when you know the old memory's id. Unlike memory_write's automatic contradiction detection (a cosine + title heuristic that may link the wrong prior memory or none at all), this targets the given old_id deterministically. Non-destructive: the old memory is retained, its validity interval is closed (is_deleted=1, valid_to set), and a 'supersedes' edge is recorded new -> old. The old memory stays retrievable by id and via memory_history, and as_of-filtered search still sees it valid before the supersession point — it is only dropped from default search. Fields you omit (type, title, importance, scope) are inherited from the old memory, so pass only what changed. To hard-delete instead, that is a separate gated tool (memory_delete). old_id MUST be the full UUID — a prefix is rejected (full UUID required for mutation safety; memory_get accepts a prefix, this does not). Note: each supersede creates a NEW successor memory; call it once with the full id, do not chain supersedes.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| embed | No | ||
| scope | No | ||
| title | No | ||
| old_id | Yes | ||
| source | No | agent | |
| content | Yes | ||
| timeout | No | ||
| user_id | No | ||
| variant | No | ||
| agent_id | No | ||
| database | No | ||
| metadata | No | {} | |
| model_id | No | ||
| embed_text | No | ||
| importance | No | ||
| valid_from | No | ||
| change_agent | No |