What a scope is
A scope is a string inkind:id form — two parts separated by a colon. The kind describes the category of context; the id names the specific instance within that category.
slowave_activate, slowave_remember, slowave_recall, slowave_feedback, slowave_commit) require a scope, and remember and recall must use the same scope as the active session opened by activate. The scope is validated: both parts must be non-blank.
Scopes are not an authorization system. They reduce accidental context leakage during ordinary work, but they do not enforce hard access control. For hard isolation between sensitive projects, users, or tenants, use separate Slowave database files.
Why scopes exist
Without scopes, every memory competes for retrieval priority regardless of context. A decision recorded during a client engagement would surface during a personal project; a constraint from one codebase would show up for a completely different stack. Scopes solve this by making the retrieval boundary explicit. When an agent callsslowave_activate with scope: "project:my-api", the default strict_scope retrieval mode returns only memories that originated in — or have generalized to cover — that scope. Memories from project:another-repo stay out of the result unless they have earned cross-scope visibility through the generalization ladder.
Choosing scope names
A good scope name is stable, specific, and consistent across all the sessions that belong to it. Changing a scope name mid-project creates a new, empty scope and leaves the old memories stranded.Be consistent
Use the same string every time for the same context.
project:slowave and project:Slowave are different scopes — pick one and stick with it.Be specific
Prefer
project:my-api over project:work. The more specific the scope, the less noise you pull in on unrelated tasks.Match the kind to reality
Use
project: for repositories, domain: for subject areas, workflow: for recurring processes. Consistent kinds enable kind-level generalization.Avoid generic ids
Avoid
project:main, domain:general, or workflow:misc. These will accumulate unrelated memories quickly and make retrieval noisy.Generalization stages
Memories start life confined to the scope they were recorded in. As they accumulate evidence across multiple distinct scopes and sessions, they can earn broader visibility through four generalization stages.
This mechanism is designed for knowledge that genuinely applies everywhere — a universal architectural principle, a recurring team convention, or a workflow step that works regardless of project. It is not the right path for project-specific decisions.
How does a memory earn a higher generalization stage?
How does a memory earn a higher generalization stage?
A memory is promoted when consolidation observes it being recalled and assessed as useful across a sufficient number of distinct scopes and sessions. The promotion ladder is deterministic and local — no LLM is involved. You can inspect a memory’s current stage in the dashboard under Memory → schema detail, or via
slowave show sch_N.Strict scope vs broad retrieval
The default MCP retrieval mode isstrict_scope. This mode returns only memories that belong to the requested scope or have generalized to cover it. It is the correct mode for normal agent work.
The CLI also supports broad, default, and debug retrieval modes for manual inspection and experimentation. These are not part of the MCP contract and should not be used in agent integrations.
Scope fragmentation warning
If activation returns ascope_fragmentation warning, it means memories relevant to the current task were recorded under a different scope string. This typically happens when a scope name changes mid-project (for example, renaming a repository), when a coding agent resolves the scope differently from its normal working directory, or when two team members use slightly different naming conventions.
Separate databases for hard isolation
Scope boundaries are a convenience, not a security boundary. If two projects, users, or tenants must never share memory under any circumstance, run them against separate Slowave database files.Both
SLOWAVE_HOME and SLOWAVE_DB can be used to isolate tenants or sensitive projects. Do not set both at the same time. All Slowave databases are plaintext by default — protect them with filesystem permissions or an encrypted volume.