Skip to main content
Glama

Engram — Persistent Memory for Claude Code

An engram is a unit of cognitive information imprinted in neural tissue — the physical trace of a memory.

Why Engram?

Claude Code forgets everything when the context window compacts. Your decisions, your debugging breakthroughs, your "always use X instead of Y" — gone. You repeat the same mistakes, re-explain the same architecture, re-discover the same solutions.

Engram fixes this. After compaction, Claude continues working like it never happened — with your decisions, pitfalls, and project context intact.

You Don't Need Memory MCP

If you're using Memory MCP or similar knowledge-graph memory servers, Engram replaces them entirely:

Memory MCP

Engram

Encoding

Manual — Claude must decide to call create_entities

Automatic — hooks capture errors, corrections, decisions without tool calls

Recall

Manual — Claude must call search_nodes

Automatic — pitfalls injected before writes, corrections on session start

After compaction

Nothing — Claude doesn't know the memory server exists

Full recovery — briefing auto-injected with task, files, decisions, pitfalls

Context cost

Every tool call burns tokens

Zero-token hooks — hooks run outside the context window

Learning

Store and retrieve

Encode, decay, and surface — confidence scoring, relevance matching, natural forgetting

Noise

Grows forever, no curation

Self-maintaining — confidence decay, dedup, stale detection

Error prevention

None

Pitfall surfacing — warns before you repeat known mistakes

The Compaction Problem (and Why Hooks Solve It)

When Claude Code's context window fills up, it compacts — summarizing the conversation to free space. This destroys:

  • What you were doing and why

  • Decisions you made and their rationale

  • Errors you hit and how you fixed them

  • Files you were working on

Tool-based memory servers can't help because after compaction, Claude doesn't remember the server exists until something reminds it to call a tool. There's no automatic trigger.

Engram's hooks fire automatically:

  • SessionStart hook injects a briefing with your active plan, recent pitfalls, and project context — Claude picks up exactly where it left off

  • PreCompact hook saves a snapshot of what you were doing before compaction happens

  • UserPromptSubmit hook surfaces relevant memories on every prompt — no tool call needed

  • PreToolUse hook warns about known pitfalls before every Write/Edit/Bash

The result: compaction becomes invisible. Claude continues working with full context of your decisions, your mistakes, and your project's pitfalls.

How Much Context Does Engram Use?

Engram's post-compaction injection is ~180 tokens — just task, domain, files, and critical decisions. Everything else is pulled on-demand per prompt. Compare this to the 2000+ tokens that narrative-style memory systems inject, displacing space you need for actual work.

How It Works

┌─────────────────────────────────────────────────────┐
│                   Claude Code                        │
│                                                      │
│  Hooks (automatic, zero-token):                      │
│    SessionStart  → inject briefing + pitfalls        │
│    PreCompact    → save snapshot before compaction    │
│    PreToolUse    → warn on known pitfalls             │
│    UserPrompt    → surface relevant memories          │
│    PostToolFail  → learn from errors automatically    │
│    PostToolUse   → boost pitfalls you avoided         │
│    SessionEnd    → close session, promote pitfalls    │
│                                                      │
│  MCP Tools (discretionary):                          │
│    engram_recall    → search memories                 │
│    engram_learn     → store a lesson                  │
│    engram_plan      → track multi-step tasks          │
│    engram_remind    → "when X, remind me Y"           │
│    + correct, forget, strengthen, weaken              │
│                                                      │
│  StatusLine:                                         │
│    Engram: normal | 42 mem 3 rem                     │
└────────────────────┬────────────────────────────────┘
                     │
              ┌──────┴──────┐
              │  SQLite DB  │
              │  + FTS5     │
              │  ~/.engram/ │
              └─────────────┘

Quick Start

1. Clone and build

git clone https://github.com/vedtechsolutions/engram-mcp.git
cd engram-mcp
pnpm install
npx tsup

2. Configure MCP server

Add to your project's .mcp.json:

{
  "mcpServers": {
    "engram": {
      "command": "node",
      "args": ["/path/to/engram-mcp/dist/server.js"]
    }
  }
}

3. Configure hooks

Add to your project's .claude/settings.json:

{
  "hooks": {
    "SessionStart": [{
      "hooks": [{ "type": "command", "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/session-start.js" }]
    }],
    "PreCompact": [{
      "hooks": [{ "type": "command", "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/pre-compact.js" }]
    }],
    "SessionEnd": [{
      "hooks": [{ "type": "command", "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/session-end.js" }]
    }],
    "PostToolUseFailure": [{
      "hooks": [{ "type": "command", "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/error-learning.js" }]
    }],
    "PreToolUse": [{
      "matcher": "Write|Edit|Bash",
      "hooks": [{ "type": "command", "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/pitfall-check.js" }]
    }],
    "UserPromptSubmit": [{
      "hooks": [{ "type": "command", "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/prompt-check.js" }]
    }],
    "PostToolUse": [{
      "matcher": "Write|Edit",
      "hooks": [{ "type": "command", "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/success-tracker.js", "async": true }]
    }]
  },
  "statusLine": {
    "type": "command",
    "command": "NODE_PATH=/path/to/engram-mcp/node_modules node /path/to/engram-mcp/dist/hooks/statusline.js",
    "padding": 0
  }
}

4. Add LLM instructions

Create .claude/rules/engram.md in your project:

## Engram Memory
Briefing auto-injected at session start. Act on it immediately.
- Before non-trivial work: `engram_recall(query)` for relevant pitfalls.
- User corrects you: `engram_learn(kind:"correction", content: one sentence, project: null)`.
- Something fails unexpectedly: `engram_learn(kind:"pitfall", content: what+why+fix)`.
- Design choice: `engram_plan(decide, chose, why)`.
- Memory wrong: `engram_weaken(id)`. Memory useful: `engram_strengthen(id)`.
- User says "always do X when Y": `engram_remind(trigger, action)`.

That's it. Engram starts learning from your first session.

Tools (9)

Tool

Description

engram_recall

Search memories by query, filtered by project/kind

engram_learn

Store a lesson (pitfall, decision, correction, fact)

engram_correct

Update or invalidate a wrong memory

engram_forget

Hard-delete a memory

engram_strengthen

Boost confidence of a useful memory

engram_weaken

Lower confidence of a wrong memory

engram_plan

Create/track multi-step plans with decisions

engram_remind

Set trigger-action reminders ("when X, do Y")

engram_list_reminders

List active reminders

Hooks (8)

Hook

Event

What Happens

session-start

Session begin

Injects briefing: plan status, pitfalls, interrupted session recovery

pre-compact

Before compaction

Saves snapshot: modified files, read files, commands, goal, context, approach

session-end

Session end

Closes session, promotes cross-project pitfalls to global

error-learning

Tool failure

Classifies error, encodes as pitfall, boosts on repeat

pitfall-check

Before Write/Edit/Bash

Surfaces relevant pitfalls for the file/command

prompt-check

User prompt

Detects corrections, surfaces relevant memories and reminders

success-tracker

After Write/Edit

Boosts pitfalls you successfully avoided

statusline

After response

Shows context mode, memory count, reminder count

Context-Adaptive Modes

Engram monitors context window pressure and adjusts automatically:

Mode

Context Free

MCP Recall

Hook Injection

normal

> 50%

Full (5 results)

3 prompt pitfalls, 2 file pitfalls, 1 bash pitfall, 3 reminders

compact

25–50%

Reduced (3 results)

1 prompt pitfall, 1 file pitfall, 0 bash, 1 reminder (~200 tokens max)

minimal

10–25%

Minimal (2 results)

Zero — all hook injection disabled

critical

< 10%

Silent

Zero — preserves remaining context

Memory Types

Kind

Purpose

Example

pitfall

Known mistakes to avoid

"Never use store=False computed fields in search domains"

decision

Architectural choices

"Chose SQLite over Postgres for single-user local storage"

correction

User corrections

"No, always use strict equality in TypeScript"

fact

Knowledge and conventions

"In Odoo 19, use <list> not <tree> in views"

Self-Maintaining

Engram maintains itself automatically:

  • Confidence decay: Memories not recalled in 30 days decay by 10%. Below 0.1 confidence, they're auto-deleted (corrections are exempt)

  • Deduplication: New memories with >80% token overlap to existing ones are merged

  • Stale project detection: Projects with no recall in 90 days are flagged

  • Plan archival: Completed plans older than 6 months are cleaned up

  • FTS5 integrity: Automatic index rebuild on corruption detection

  • Cross-project promotion: Pitfalls recalled in 3+ sessions are promoted from project-scoped to global

Security

  • All SQL queries use parameterized statements

  • FTS5 input sanitized with allowlist pattern ([^a-zA-Z0-9\s] → strip)

  • File extension sanitization prevents LIKE injection

  • Transcript path validation prevents path traversal

  • 1MB stdin cap on all hook inputs

  • State file mode validation

  • Shell metacharacter stripping in error distillation

  • Atomic confidence updates prevent race conditions

Development

pnpm install         # Install dependencies
npx tsup             # Build (ESM, node20 target)
npx vitest run       # Run tests (271 tests across 15 files)

Technology Stack

Component

Technology

Runtime

Node.js 20+ / TypeScript (strict mode)

Storage

SQLite (better-sqlite3) + WAL mode

Search

FTS5 (built into SQLite)

Interface

MCP Server (@modelcontextprotocol/sdk)

Validation

Zod schemas

Build

tsup (ESM output)

Testing

Vitest

Status

v2.2.1 — Schema migration fix for existing databases. 271 tests, 9 tools, 8 hooks.

License

MIT

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vedtechsolutions/engram-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server