Retrieval and Scopes
Scope hierarchy
aCMF works with three storage scopes:userglobal- optional
container
Read scope levels
The API supports:useruser_globaluser_global_container
Read modes
simple
- smallest candidate pool
- shallow graph expansion from already relevant memory seeds
- lowest latency
balanced
- default path
- hybrid vector, metadata, snapshot, and graph retrieval
- strict query-relevance gating before anything is exposed publicly
deep
- largest candidate pool
- broader seeded graph expansion
- stronger abstention behavior
Retrieval sources
The read engine can pull from:- latest snapshot references
- pgvector similarity search
- high-signal metadata retrieval
- Neo4j graph traversal
- contradiction summaries
- lineage summaries
- gather raw scoped candidates
- score each candidate against the current query
- drop unrelated candidates before prompt construction
- expand graph context only from relevant memory seeds
- rerank the remaining relevant candidates
- either call the LLM or abstain directly if nothing relevant remains
Public diagnostics
/v1/context and /v1/deep-memory diagnostics are relevance-gated:
candidate_countis the number of post-filter relevant memoriesused_memory_countis the number of memories actually used in synthesissource_breakdownonly counts sources that contributed relevant memories
Why snapshots matter
Snapshots are not the only read source. They are just one retrieval input. The full memory corpus can still be searched at read time, especially inbalanced and deep modes.