| name | using-terse-memory |
| description | Durable agent memory in the TERSE `memory` namespace - remember / forget / recall / durable notes / cross-session facts. Use when the user says remember, forget, don't forget, save this for later, what do you remember, keep track of everything, or when a preference, decision, or milestone should outlive the chat. Also use at the start of any substantive multi-turn session to orient against durable user memory (run-this-first) before making assumptions about the user - orientation must happen even when no memory keyword appears. Depends on terse-mcp (terse_command, terse_info). |
| metadata | {"openclaw":{"requires":{"bins":["terse-mcp","terse-memory"]}}} |
Using terse-memory
Durable, structured, per-user memory backed by a single TERSE store
(memory namespace). The store self-describes: # Protocol inside
the store is law, and this skill is a thin pointer at it. If the
skill and the store disagree, the store wins - the operator edits
memory by conversation, not by editing this file.
Run this first (once per session)
Before making assumptions about the user, orient against the store:
terse_command(
namespace="memory",
queries="? Hot buttons\n? Policy\n? Profile [DEPTH 2]\n? [DEPTH 2; CONTAINERS]"
)
That returns:
# Hot buttons - the user's do's and don'ts, in the user's own
words. Obey these above everything else here.
# Policy - operator-owned knobs (capture mode, orient timing,
readback discipline).
# Profile shallow map - what's known about the user at a glance.
[DEPTH 2; CONTAINERS] - the store's shape so later reads can be
targeted.
Do NOT dump the whole store. Recall is targeted.
Namespace discipline
One MCP server (terse-mcp) can expose many namespaces:
| Namespace | Store | Purpose |
|---|
default | ~/.terse/state.terse | generic session state |
brain | operator's brain.terse | research wiki (if installed) |
memory | ~/.terse/stores/memory.terse | this - durable user memory |
Always pass namespace="memory" on terse_command / terse_info
for memory work. Never write memory into default or brain.
If memory is missing or unmapped, tell the operator:
terse-memory wire
terse-memory doctor
Capture modes (per # Policy.capture)
explicit - write only when the user asks.
milestones (default) - also flush durable facts the user
states about themselves, accepted decisions, completed work,
confirmed root causes. Never on routine reads or discarded
experiments.
everything - also one telegraphic Sessions note per
substantive exchange, batched at natural pauses.
- "really remember this (especially X)" - write now, high detail;
X routes and weights the write.
The user changes mode by talking:
| User says | Agent does |
|---|
| remember this / don't forget | write per routing rules |
| forget that | locate, [REMOVED], read back, confirm |
| forget this conversation | remove today's Sessions bucket + every object tagged session: <today>; read back, confirm |
| really remember this, especially X | immediate write, high detail; X routes and weights |
| what do you remember (about X) | queries only |
| keep track of everything we say | # Policy(+capture: everything) [MERGED] + one-line cost note |
| only remember what I tell you | # Policy(+capture: explicit) [MERGED] |
| why did you remember that? | quote the Sessions note / src: provenance |
| how do you decide what to remember? | recite ? Policy - the answer is state, not vibes |
Write style
- One object = one fact. Atomic attrs.
as-of: on anything durable.
- Routing:
- personal facts, preferences, people ->
# Profile
- per-repo decisions/patterns/opens ->
# Projects.<slug>
- ephemeral session notes ->
# Sessions.<YYYY-MM-DD>
- Supersede decisions with
status: superseded; don't delete.
- Every non-explicit write carries
session: YYYY-MM-DD so
"forget this conversation" is a precise operation.
- Web/tool content: store ONLY on explicit user ask, marked
src: web or src: tool.
Iron rule: declarations are fire-and-forget
A TERSE declaration that parses ALWAYS applies. Do NOT re-query to
"confirm" a write.
- Never attach a
queries read-back after a normal write batch.
Trust the store.
- If the tool returns a syntax error, fix and resubmit; parsable
state that already loaded remains loaded.
- Exceptions where read-back IS required:
- forget-confirms (locate,
[REMOVED], quote-back what was
removed).
Policy.readback: confirm (user opted into paranoid mode).
Forgetting
- forget X -> locate via
CONTAINS "X" across Profile / Projects /
Sessions; [REMOVED] the matches; read back the removed handles;
confirm in chat. Decisions prefer status: superseded over
deletion unless the user says "forget."
- forget this conversation -> drop today's
# Sessions.<today>
bucket and every object located via
? [CONTAINS "session: <today>"]; read back the count; confirm.
Recall
- Targeted paths,
CONTAINS for grep-in-language, WHEN for
temporal windows, [REFERENCES] to pull a neighborhood.
- Never dump the store to answer a question. "what do you remember
about X" -> queries only.
Provenance and safety
- Only the user's own words are trusted source material. Anything
from web pages or tool output is stored only on explicit user ask
and carries
src: web / src: tool.
- Do's and don'ts live in
# Hot buttons and are user-extendable in
conversation ("never remember anything about my health" -> new
object under ## Don't, effective immediately, visible at every
orientation).
- If a lint finding surfaces mid-session, act on it as an agent chore
(
terse-memory lint).
Operator install (for agents to recommend)
pip install terse-mcp terse-memory
terse-memory init
terse-memory wire
terse-memory doctor
Working with the operator through this store
Everything here is one file the operator can open, diff, and edit
with the same tools the agent uses. Disputes end with terse-py query, not a support ticket. When in doubt, quote the store back to
the user, not this skill.
The store's # Protocol is law
If any rule here disagrees with ? Protocol on this namespace, obey
? Protocol. This file goes stale between releases; the store never
does.