Як це працює
┌────────────────────────────────────────────────────────────┐
│ Агент (Claude Code / Cursor / Codex / …) │
└──────────────────────────────┬─────────────────────────────┘
│ MCP (stdio)
┌──────────────────────────────▼─────────────────────────────┐
│ engram MCP server │
│ tools: remember · recall · why · check · context · … │
│ prompts: вбудовані skills · resources: engram://… │
├───────────────┬──────────────────┬─────────────────────────┤
│ Сховище │ Граф │ Компресор контексту │
│ CRUD, дедуп, │ сусіди, лінія, │ пакети під бюджет, │
│ пошук FTS5 │ why, граблі │ огляд проєкту │
├───────────────┴──────────────────┴─────────────────────────┤
│ Індексатор: ADR → рішення · git → hotspots і відкати │
└──────────────────────────────┬─────────────────────────────┘
│
┌─────────────────┴──────────────────┐
▼ ▼
.engram/engram.db .engram/memories.jsonl
SQLite + FTS5 (локальний індекс) відсортований JSONL (у git)Зберігання
engram використовує вбудований у Node node:sqlite, тому компілювати нічого не потрібно, а npx працює всюди, де є Node 22.13 або новіший. Таблиці: memories, memories_fts (FTS5 з токенізатором Porter та Unicode), links, sessions, tombstones і meta. Міграції лише додаються й відстежуються в meta.schema_version.
Ранжування
score = bm25(title×6, tags×3, content×1, files×1.5)
× вага виду (decision, pitfall 1.25 · principle 1.2 · … · session 0.8)
× важливість (1 + 0.15 × (importance − 3))
× статус (active 1 · rejected 0.85 · superseded 0.6 · archived 0.4)
× свіжість (втрачає до 30% за рік)Слабкі часткові збіги, оцінка яких нижча за 20% від найкращого, відкидаються.
Індексатор
engram index запускається й під час init. Його можна запускати повторно:
- ADR у
docs/adr,docs/decisions,adrта схожих теках (список налаштовується) розбираються за стилями Nygard і MADR, з front matter і рядками на кшталтSuperseded by ADR-0007. Кожен ADR стає записомdecision, а якщо ADR посилаються один на одного, додаються ребраsupersedes. - Історія git, за замовчуванням останні 500 комітів, дає факт «Code hotspots» зі списком файлів, що змінюються найчастіше. Відкати й коміти на кшталт «fix … again» стають кандидатами в граблі з низькою важливістю, які агент підтверджує або відкидає.
Конфігурація
.engram/config.json:
json
{
"project": "shop",
"sync": { "jsonl": true },
"context": { "budget": 2000 },
"indexer": {
"adrDirs": ["docs/adr", "docs/adrs", "docs/decisions", "doc/adr", "adr", "decisions"],
"gitDepth": 500,
"hotspotThreshold": 8
}
}