-
-
Notifications
You must be signed in to change notification settings - Fork 1
Features
This project is more than just text storage; it is a "brain" system for AI agents designed for long-term stability and project consistency.
The system blends four signals to find the most relevant memories:
-
Semantic similarity (40%) —
all-MiniLM-L6-v2embeddings computed locally via Transformers.js. - Keyword match (30%) — exact token matches via SQLite FTS.
- Recency (15%) — newer entries rank higher (exponential decay, ~30-day half-life).
- Domain / workspace affinity (15%) — a boost when the memory's repository or folder matches your current working context.
The threshold is adaptive: small result sets use a lenient cutoff (0.10 for memories) so a fresh project still returns results; larger sets use a stricter one (0.40). If every candidate falls below the threshold, the single best match is still returned (guarantee-at-least-1). Full detail: Hybrid Search.
Case: you have knowledge about Filament in Project A. When you start Project B (also using Filament), your Agent can automatically pull those best practices by passing current_tags: ["filament"] when searching — or because the memory is tagged filament.
- Memories can be scoped per-repo, shared across tags (affinity), or Global (
is_global: true).
One of the main issues with AI Agents is "matching" irrelevant information.
-
Conflict Rejection: storing a memory that semantically overlaps an existing one by more than 0.85 cosine similarity is rejected with a
MEMORY_CONFLICTerror. The response tells the Agent to passid/codeto update,acknowledgeit, orsupersedesif the new entry replaces the old one. - Adaptive Relevance Threshold: search filters weak matches (small-set threshold 0.10, large-set 0.40) instead of returning noise.
Every time an Agent uses a memory, it reports feedback via memory-write with acknowledge (e.g. "acknowledge": "used").
- We track the Utility Rate (how often a memory was actually helpful).
- Memories with zero recalls despite many hits (
hit_count > 10andrecall_count = 0) are archived as low-value.
Just like humans, not everything needs to be remembered forever.
-
Expired Memories: memories with a TTL (
ttlDays) are automatically archived onceexpires_atpasses. -
Low-Score Memories: memories unused for 90 days with
importance < 3are moved to the archive to keep the Agent's context clean.
Structured entity-relationship storage that maps complex domain knowledge:
- Entities with types (person, place, organization, concept) and descriptions
- Relations with typed connections between entities
- Observations linking context to entities
- Auto-extraction: offline NLP (compromise.js) extracts named entities when memories, standards, and tasks are stored and when the codebase index runs
- Auto-populated from the memory | standard | task | codebase domains — codebase KG entities derive from the indexed symbol/reference data (no separate symbol API)
- Dashboard: interactive force-directed graph visualization with add/edit/delete — the only manual editing surface (see Dashboard Guide)
-
Edge confidence labels: every relation carries a confidence (0..1) and the KG tab labels edges
relation_type · NN%with dimming by bucket — all-auto NLP extraction defaults to 0.55, semantic metadata 0.8, parser codebase edges 0.9, manual relations 1.0 (first-write-wins underINSERT OR IGNORE)
Decision: NO KG MCP tools. KG is auto-populated infrastructure (ADR-006): entities/relations are written by the embedding outbox from memory/standard/task writes and codebase index runs, and read via the embedded
kgfield in memory-read/task-read/standard-read. There are no MCP tools for direct graph CRUD; graph management happens in the dashboard's Knowledge Graph tab (API CRUD).
Filter memory searches by natural-language time phrases — just add one to your query:
-
today,yesterday -
this week,last week last month-
last N days/past N days,last N weeks/past N weeks -
last_hour/past_hour
Seamlessly integrates with existing search — the temporal phrase is stripped from the query and applied as a date window.
Biological-style memory lifecycle management:
-
Decay: memories unused for 7+ days (default
decayAfterDays) lose importance at a fixed rate per cycle (floored, minimum 1). - Immunization: memories tagged with immune tags never decay.
- Archiving: memories whose decayed importance drops below the threshold are archived.
- Startup sweep: runs on server start with a 24-hour dedup guard (expired + low-score + decayed).
-
agent-context— one-call session context (relevant memories + active tasks + recent decisions) -
memory-write(type: "decision") — structured decision persistence with context/rationale/alternatives -
memory-write(type: "task_archive") — searchable session summaries viakey_decisions/next_steps -
synthesize— ask questions grounded in local memories using your own LLM -
repo-summarize— keep a short per-repo project summary
Index, search, and trace source code symbols across 15+ languages — see Codebase Index.
All features are provided "AS IS" without any warranty of performance or accuracy.
- Hybrid Search — ranking logic in detail
- Tool Reference & Usage Guide — all tools with examples
- Web Dashboard Guide — visual management
- Codebase Index — symbol indexing and search
- Fitur Inti — Bahasa Indonesia
MCP Local Memory Service — local-first long-term memory (SQLite + semantic search), a web dashboard, and a codebase index for AI agents. Back to Home
Provided "AS IS", without warranty of any kind.
Home
English
- Getting Started
- Tools Reference
- MCP Concepts
- Features
- Hybrid Search
- Dashboard Guide
- Troubleshooting
- Auto-Start Dashboard
- Claude Code Integration
- Codex Integration
- Kiro Integration
Bahasa Indonesia
- Memulai
- Referensi Alat
- Referensi Protokol MCP
- Fitur Inti
- Pencarian Hibrida
- Panduan Dasbor
- Pemecahan Masalah
- Auto-Start Dasbor
- Integrasi Claude Code
- Integrasi Codex
- Integrasi Kiro
Features