Layered Memory Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Layered Memory Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Extend AI agent memory beyond token limits with a 4-tier knowledge architecture.
AI agents have limited memory — typically 2-4KB of persistent context injected every turn. Once it's full, the agent forgets everything else. You can't store project configurations, user preferences, API conventions, or domain knowledge without constantly fighting the space limit.
Layered Memory organizes knowledge into 4 tiers, trading immediacy for capacity:
┌─────────────────────────────────────────────────────┐
│ L0 — Index Layer (2-4KB, injected every turn) │
│ Pure pointers: "what knowledge exists and where" │
├─────────────────────────────────────────────────────┤
│ L1 — Knowledge Files (unlimited, loaded on-demand) │
│ Structured markdown: configs, conventions, facts │
├─────────────────────────────────────────────────────┤
│ L2 — Skills Layer (loaded when needed) │
│ Procedures, workflows, tool-specific knowledge │
├─────────────────────────────────────────────────────┤
│ L3 — Raw Sessions (searched rarely) │
│ Full conversation history, searchable by keyword │
└─────────────────────────────────────────────────────┘L0 is your table of contents. L1 is your bookshelf. L2 is your cookbook. L3 is your diary.
get_l0_index tool lets any MCP agent retrieve the memory indexLAYERED_MEMORY_NAMESPACE while sharing common knowledge.bak backup before every file modificationfastmcp for MCP transportDesign Note: The hybrid search ranking is inspired by Semble, a fast code search library for agents. We adapted their RRF (Reciprocal Rank Fusion) approach — with multi-signal boosting and query-aware alpha detection — for markdown knowledge retrieval.
pip install layered-memory-mcpAdd to ~/.hermes/config.yaml:
mcp_servers:
layered-memory:
command: layered-memory-mcp
timeout: 30Install the MCP server, then register it:
pip install layered-memory-mcp
# Register as an MCP server
openclaw mcp set layered-memory --command layered-memory-mcpLayered Memory complements OpenClaw's built-in vector-based memory:
Add to your Claude Desktop MCP config:
{
"mcpServers": {
"layered-memory": {
"command": "layered-memory-mcp"
}
}
}# stdio mode (default)
layered-memory-mcp
# HTTP mode
layered-memory-mcp --transport http --port 8080
# Verbose logging
layered-memory-mcp --verbose| Variable | Description | Default |
|---|---|---|
LAYERED_MEMORY_HOME | Root directory for memory data | ~/.layered-memory/ |
LAYERED_MEMORY_SESSIONS_DIR | Agent sessions directory (auto-detected) | ~/.hermes/sessions/ |
LAYERED_MEMORY_AUTO_SYNC_L0 | Auto-sync L0 index after writes | true |
LAYERED_MEMORY_DEDUP_THRESHOLD | Similarity threshold for dedup (0.0-1.0) | 0.7 |
LAYERED_MEMORY_L0_FORMAT | L0 index format: hermes or generic | hermes |
LAYERED_MEMORY_NAMESPACE | Agent namespace for multi-agent isolation | shared |
The inject_knowledge tool is the primary write path for all agents. It handles deduplication, section targeting, and automatic L0 index sync in a single call.
Agent learns: "Production DB is PostgreSQL 15 on prod-db:5432"
→ inject_knowledge(
domain="infrastructure",
section="Database",
content="PostgreSQL 15 on prod-db:5432, connection pool: 20 max",
mode="upsert"
)
← Creates/updates infrastructure.md, auto-syncs L0 indexWrite modes:
| Mode | Behavior |
|---|---|
upsert (default) | Replace if similar content exists, append if new |
append | Always append, skip dedup check |
merge | Combine unique parts from new + existing |
Agent: "What's the database connection string?"
→ recall_knowledge(keyword="database")
← Returns relevant sections from infrastructure.md→ validate_knowledge()
← Checks L0↔L1 consistency, orphaned files, stale entries, file healthSet up a daily cron to extract new knowledge from conversations:
1. scan_recent_sessions → get session summaries
2. AI analyzes summaries → identifies stable facts
3. New facts → written via inject_knowledge (auto L0 sync)
4. L0 index → always up to dateFor direct file manipulation:
| Tool | Description |
|---|---|
create_knowledge_file | Create a new .md file (auto L0 sync) |
update_knowledge_file | Overwrite an existing file (auto L0 sync) |
delete_knowledge_file | Delete a file (auto L0 sync) |
| Tool | Description |
|---|---|
recall_knowledge | Search L1 knowledge files by keyword with relevance scoring |
get_knowledge_file | Read a specific knowledge file by name |
list_memory_stats | Get space statistics, file sizes, and optimization suggestions |
scan_recent_sessions | Scan recent sessions for knowledge extraction candidates |
search_sessions_by_keyword | Search session content by keyword |
get_l0_index | Retrieve the full L0 index (agent-agnostic) |
| Tool | Description |
|---|---|
| `inject_knowledge` | Primary write path — smart injection with dedup, section targeting, auto L0 sync |
create_knowledge_file | Create a new .md file (auto L0 sync) |
update_knowledge_file | Overwrite an existing file (auto L0 sync) |
delete_knowledge_file | Delete a file (auto L0 sync) |
| Tool | Description |
|---|---|
sync_l0_index | Manually rebuild L0 index from L1 files (supports dry_run) |
validate_knowledge | Health check: L0↔L1 consistency, file quality, duplicates |
manage_l0_entry | Add / remove / replace individual L0 entries |
| Resource | Description |
|---|---|
memory://status | Overall system status and configuration |
knowledge://files | List all knowledge files with metadata |
| Prompt | Description |
|---|---|
knowledge_compression_prompt | Template for AI-driven knowledge extraction from sessions |
cognitive_decision_prompt | Decision framework for disciplined memory usage |
| Tier | Cost | Capacity | Use Case |
|---|---|---|---|
| L0 (Index) | Tokens per turn | ~2KB | Quick lookup table |
| L1 (Knowledge) | 1 file read | Unlimited | Structured facts |
| L2 (Skills) | 1 skill load | Unlimited | Procedures |
| L3 (Sessions) | Full search | Unlimited | Historical recall |
The key innovation in v0.5.0 is that every write path automatically syncs the L0 index:
Agent calls inject_knowledge(domain="infra", section="Proxy", content="...")
│
├─ 1. Dedup check (SequenceMatcher, threshold=0.7)
├─ 2. Resolve action: upsert / append / merge / skip
├─ 3. Section targeting (finds or creates ## heading)
├─ 4. File write (with fcntl.flock for concurrency safety)
└─ 5. Auto L0 index sync
│
↓
L0 index updated → Agent sees it next turnThis eliminates the "write-but-invisible" problem where agents write L1 files but the L0 index (injected into every turn) doesn't update, causing future sessions to ignore the new knowledge.
When you call recall_knowledge, files are scored by:
## headingResults are sorted by score, and only matching ## sections are returned (not entire files).
Set LAYERED_MEMORY_NAMESPACE to isolate knowledge per agent:
knowledge/
├── shared/ ← Common knowledge, visible to all agents
│ ├── infrastructure.md
│ └── coding-standards.md
├── claude/ ← Claude Desktop's private knowledge
│ └── claude-specific.md
├── cursor/ ← Cursor IDE's private knowledge
│ └── cursor-config.md
└── hermes/ ← Hermes Agent's private knowledge
└── hermes-setup.mdEach agent sees its own namespace first, then falls back to shared/. File name collisions resolve in favor of the namespace. All read/search/inject tools automatically merge both directories.
# Claude Desktop config
LAYERED_MEMORY_NAMESPACE=claude layered-memory-mcp
# Backward compatible: default "shared" = no isolation
layered-memory-mcpTwo index formats are supported:
| Format | Example | Best For |
|---|---|---|
hermes | [L0索引] infra: servers, DB → knowledge/infra.md | Hermes Agent memory injection |
generic | [infra.md] Server Configuration → proxy, db, deploy | Standalone / other agents |
Configure via LAYERED_MEMORY_L0_FORMAT env var or the l0_format constructor argument.
The scan_recent_sessions tool is designed for cron-job automation:
inject_knowledgeThis creates a self-improving memory system — the agent gets smarter over time as more knowledge is distilled from conversations.
Layered Memory is an MCP server — it works with any MCP-compatible agent.
| Agent | Config Method | Notes |
|---|---|---|
| Hermes Agent | config.yaml → mcp_servers | Native MCP client, L0 auto-injection via memory |
| OpenClaw | openclaw mcp set | Complements built-in vector memory |
| Claude Desktop | claude_desktop_config.json | Full MCP support, L0 via tool calls |
| Cursor | Settings → MCP | Full MCP support |
| Codex CLI | Codex MCP config | Full MCP support |
| Any MCP client | stdio or HTTP transport | Standard MCP protocol |
Most agents have limited persistent memory (2-4KB per turn). Layered Memory solves this by:
Agent (2KB memory limit)
└── L0 index (injected every turn, ~500 bytes)
├── [L0] infrastructure: servers, DB → knowledge/infrastructure.md
├── [L0] api: REST conventions → knowledge/api-conventions.md
└── [L0] dev: code style, testing → knowledge/development.md
│
↓ (on demand via recall_knowledge)
L1 knowledge files (unlimited, loaded by keyword)The 4-tier architecture only works if the agent follows a disciplined decision process. This framework should be injected into the agent's system prompt (or loaded via the cognitive_decision_prompt MCP prompt) to ensure consistent behavior.
Agent encounters a problem or receives a request
│
├─ Step 1: Scan L0 index for relevant domains
│
├─ Step 2: Match found?
│ ├─ YES → Load the corresponding L1 knowledge file / L2 skill
│ │ │
│ │ ├─ Knowledge solves it → Use it. Do NOT bypass with guessing.
│ │ ├─ Knowledge partially covers it → Use it, then enhance the entry.
│ │ └─ Knowledge insufficient → Treat as new problem (Step 3).
│ │
│ └─ NO → Treat as new problem (Step 3).
│
├─ Step 3: Handle as new problem/requirement
│ Use standard tools and reasoning to solve.
│
└─ Step 4: Post-solution evaluation
Is this worth preserving?
├─ YES → Write to L1 (via inject_knowledge) or L2 (skill) for future reuse.
└─ NO → Done.Without this decision framework, agents tend to:
The framework turns the memory system from a passive storage into an active cognitive loop: consult → act → learn → improve.
Add this to your agent's system prompt:
You use a 4-tier layered memory system. Before tackling any problem:
1. Check L0 index for matching domains
2. If matched, load and follow L1/L2 before acting
3. If unmatched, solve normally
4. After solving, use inject_knowledge to preserve new knowledgeOr use the built-in MCP prompt cognitive_decision_prompt to get the full decision framework at runtime.
# Clone
git clone https://github.com/LAIguapi/layered-memory-mcp.git
cd layered-memory-mcp
# Install in dev mode
pip install -e ".[dev]"
# Run tests
pytest
# Run locally
python -m layered_memory_mcp.serversearch_mode: "bm25")LAYERED_MEMORY_NAMESPACE to isolate per-agent knowledge with shared fallbackinject_knowledge or update_knowledge_filerecall_knowledge detects stale L0 index and warns with l0_staleness_warningMIT License — see LICENSE for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.