Scope before similarity
Ownership filters run before semantic, keyword, graph, temporal, and fallback candidates.
scope → candidates
Self-hosted memory for AI agentsv0.2.18
Luminary gives agents durable context with visible scope, evidence, and a safe way to say there is not enough support.
pip install luminary-memory
A memory, under inspection
01 Local by default
02 Scope before similarity
03 Abstention is a valid result
Every candidate passes through ownership, evidence, and bounded delivery. The final answer can still be empty.
A direct write or completed turn enters as an observation. Curation keeps durable facts, drops chatter, and can reconcile a correction against the current scoped store.
ingest / whitelist / evidence / reviewUser, workspace, agent, and session ownership are applied before candidates are generated. Similar does not mean yours.
user / workspace / agent / sessionSemantic, keyword, temporal, and entity-graph candidates merge into one ranked result with weighted Reciprocal Rank Fusion.
semantic / keyword / graph / temporalStatus, validity, evidence grounding, conservative confidence, duplicate removal, and token budget run before serialization.
supported / ranked / boundedRelevant context crosses into the agent with provenance. Weak or ambiguous support becomes an observable empty result.
recall / context / abstainDurability is not a hidden importance score. It is a set of boundaries you can inspect, explain, and change.
Ownership filters run before semantic, keyword, graph, temporal, and fallback candidates.
scope → candidates
A confident guess is not promoted into a durable fact. Evidence stays attached to the claim.
claim → evidence
Durable rules are declared and loaded every session, while ordinary memories remain query-bound.
core ≠ query
Different values remain versioned and auditable until explicit supersession and evidence arrive.
conflict ≠ replacement
SQLite is the default. The first useful loop is simple: write one fact, ask for it, and inspect what came back.
Open the full quickstartpip install luminary-memoryluminary-memory add "deploy target is staging" --tags deployluminary-memory recall "where do we deploy?" --jsonfrom luminary_memory import MemoryClient
client = MemoryClient(db_path="memory.db")
client.ingest("The deploy target is the staging cluster", tags=["deploy"])
result = client.recall("where do we deploy?")
print(result.status, result.confidence)
luminary-memory add "The deploy target is staging" --tags deploy
luminary-memory recall "where do we deploy?" --json
luminary-memory lifecycle
Local storage, multiple retrieval strategies, and lifecycle maintenance work together without hiding the path between a claim and a response.
Facts enter with source, tags, scope, and optional evidence.
write / curateSQLite keeps the default path local, searchable, and inspectable.
sqlite / fts5Semantic, keyword, temporal, and graph candidates are fused and scoped.
rrf / evidencePost-turn review catches grounded corrections; TTL cleanup, consolidation, pruning, and health keep the store useful.
review / clean / reportLuminary connects through Hermes’ public memory-provider entry point. It retains and reconciles turns on its own queue while the installer uses existing config keys and leaves Hermes’ source tree alone.
Read the integration notememory:
provider: luminary
memory_enabled: false
user_profile_enabled: falseCapability-based compatibility. Setup stops visibly when the public contract is unavailable.
Tracked source notes for builders, operators, and integration work. Search by behavior, surface, or task.
No field note matches that search.
Local by default. Strict where it matters. Explicit about the boundary between a durable rule, a recalled fact, and a guess.