Update Memory
vault_update_memoryAppend a dated entry to a section of a memory file in About Me/, safely retrying timeouts since exact duplicates write nothing. Reuse existing file and section names to keep preferences and facts grouped.
Instructions
Append a dated entry to a section of a memory file in About Me/. An exact duplicate (same date + text in the same section) is a no-op, so retrying a timed-out call is safe. Memory files are append-only by default: when a preference changes, append the new state (newest wins) rather than deleting the old one. A file may declare entry-policy: living in its properties (surfaced by vault_list_memory_files) — a current-state file where pruning expired entries with vault_delete_memory is expected maintenance.
Example: vault_update_memory({ file: "Opinions", section: "Code patterns (newest first)", entry: "Prefer immutable data structures" }) Example: vault_update_memory({ file: "Routines", section: "Daily/weekly rhythm (newest first)", entry: "Gym Mon/Wed at 6am", options: { date: "2026-10-01", position: "bottom" } }) — a backdated entry placed below the existing ones
When to use: Recording a new preference, principle, opinion, or fact about the user. Call vault_list_memory_files first and reuse existing file and section names so entries stay grouped. Prefer vault_write_note for creating non-memory notes. A missing file or section is created automatically.
Parameters:
options.date only sets the bullet's date; placement follows options.position, never the date.
Obsidian syntax: Entry text is Obsidian Flavored Markdown. Watch for: #word = tag, [[ = wikilink. Escape with # or backticks when unintentional.
Errors:
"entry must be a single line" / "section must be a single line" — the message names the fix.
"date must be a real ISO calendar date" — pass options.date as an existing calendar date in bare YYYY-MM-DD form, not a timestamp.
"entry contains a control character" / "section contains a control character" — remove the character the message names.
"memory file must not start with a dot" / "… must be a bare name without path separators" / "… must be named without .md" — each message names the part of the name to drop
"section not created: … is nearly identical to existing section …" — pass the exact existing heading (listed in the error) to append there, or choose a clearly different name for a new section.
"cannot read memory file …" — the file can't be read: check file against vault_list_memory_files and shorten an over-long name; otherwise ask the vault's owner to fix its permissions
"cannot write memory file …: that path is not a file" — a folder already has this name; choose another file name
"ENAMETOOLONG: …" or another filesystem error — the message says what to do
"cannot create memory folder …" — a file sits where the memory folder belongs; ask the vault's owner to move it
"memory file …: the note would open with a properties block …" — saving would turn the file's opening lines into a properties block the server can't keep; the error says how to avoid it
Returns: "Added entry to About Me/.md → ## ", plus a note to fill in the placeholder scope callout when the file is new; an exact duplicate returns "Entry already exists in About Me/.md → ## — nothing was written."
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"file": "<file>",
"section": "<section>",
"entry": "<entry>"
},
"name": "vault_update_memory"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Memory file name without .md (e.g. "Principles"). Use the exact letter case; a different case can create a second file. | |
| entry | Yes | Raw entry text — a single line, without the "- **YYYY-MM-DD**: " prefix, which the server prepends. | |
| options | No | Optional date and position overrides | |
| section | Yes | H2 section heading (e.g. "Decision heuristics (newest first)"). Matched case-insensitively, with or without the "(newest first)" suffix. |