From m3 Memory
Guides on m3 memory usage: search-first protocol, write vs supersede, chatlog store-topology trap, and verifying capture is live. Use when working with m3 memory tools.
How this skill is triggered — by the user, by Claude, or both
Slash command
/m3:m3-guideThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Tool names and signatures come from the MCP tool list. This is the part that
Tool names and signatures come from the MCP tool list. This is the part that isn't in a tool description: the protocol, and the traps.
m3 memory > artifacts (git, handoff files) > session context. When m3 contradicts what you think you remember, trust m3 — context degrades across session boundaries, memory does not.
Registered ≠ working. The server can be connected while chatlog capture is
silently dead. Call chatlog_status once early in a substantive session. If
hooks are off or last_write is null/stale, say so loudly and don't proceed
silently — a dead chatlog means this session's decisions vanish at the next
session boundary. Never degrade quietly to flat files.
memory_search before re-deriving anything about this user,
project, or machine. A settled decision re-litigated is a bug reintroduced.memory_write it — decisions, corrections, runbooks, preferences.memory_update or
memory_supersede (retires the old claim with a supersedes edge, keeps
history) over a near-duplicate. Duplicates degrade later retrieval.[[name]] so memory_graph traversal
stays useful.Captured turns from host agents live in a store separate from curated memory.
Reach them with chatlog_search, chatlog_list_conversations, and
chatlog_promote (promotes turns into curated memory).
The chat store and main store may be two databases, one unified database, or PostgreSQL — a deployment choice only the tools know.
Querying agent_memory.db for type='chat_log' returns zero rows on a split
deployment even when capture is perfectly healthy — a false emergency. On a
PostgreSQL primary there's no local file at all. Use chatlog_status;
m3 chatlog status --json reports unified: true|false if you need the
topology.
Passing conversation_id, agent_filter, user_id, or scope enforces the
filter strictly: an empty result means nothing matched in that scope, not that
the store is empty.
Only some tools load at startup — tools_list_domains / tools_load_domain
reach the rest (100+ in total). Health: m3 doctor, m3 chatlog doctor.
Full reference: docs/AGENT_INSTRUCTIONS.md
npx claudepluginhub skynetcmd/m3-memory --plugin m3Invoked via /memsy slash command; classifies intent (search, store, switch profile, list, doctor, setup) and runs the matching Memsy workflow for context memory.