Skip to content

Як це працює ​

┌────────────────────────────────────────────────────────────┐
│          Агент (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
  }
}

Released under the MIT License.