Code Memory · memory_code_active

Кодовая
память

Локальный граф вашей кодовой базы, который Claude держит перед глазами при правке кода. Не текстовый поиск вслепую, а карта: где определён символ, кто его вызывает, что сломается при изменении. Tree-sitter → граф → инструменты, всё на машине.

Движок один на машину MCP · read-only · stdio Граф течёт вживую Ноль обращений в сеть
↓ листай — данные придут в движение
00 / Линейка

Третий слой памяти

Память проекта — это несколько слоёв. Кратко- и долгосрочная помнят разговор и знание; кодовая помнит структуру кода.

memory-layers short · long · code
слой 1 · контекст Краткосрочная memory_short_active — дистиллят диалога, что происходит сейчас .claude/memory_short/
слой 2 · знание Долгосрочная memory_long_active — курируемое знание-вики, граф [[ссылок]] .claude/memory_long/
слой 3 · код Кодовая memory_code_active — граф структуры кода (символы и связи) .ontoindex/
Слои не конкурируют: каждый помнит своё. Кодовая память — про то, как устроен код, чтобы правки шли не вслепую.

Простыми словами. Когда Claude правит код, он легко может изменить функцию, не зная, кто её вызывает и что из-за этого сломается. Кодовая память решает это: специальный движок заранее разбирает весь проект в граф — узлы (функции, классы, методы) и связи (кто кого вызывает, кто что импортирует). Перед правкой Claude спрашивает граф: «покажи радиус изменения» — и видит последствия до, а не после.

Технически это вендоренный индексатор ontoindex: парсер Tree-sitter под десяток языков → граф в базе LadybugDB внутри .ontoindex/ → набор инструментов MCP (Model Context Protocol), которыми Claude и пользуется. Всё работает локально, без обращения в сеть.

Две части системы

Движок — один на машину

  • живёт в ~/.claude/tools/ontoindex/; ставится один раз, нативные парсеры собираются один раз;
  • тяжёлый (парсеры + граф-движок), поэтому переиспользуется всеми проектами;
  • от исходного репозитория ontoindex не зависит — это локальный срез.

Артефакты в проекте — лёгкие

  • граф .ontoindex/.gitignore);
  • регистрация MCP-сервера в .mcp.json (только чтение);
  • хуки в .claude/settings.json и инструкции в CLAUDE.md;
  • что не индексировать — в .ontoindexignore.
01 / Конвейер

Как строится граф

Исходный код проходит через парсер и превращается в граф символов и связей, который отдаётся Claude через инструменты.

index-pipeline source → graph → tools
parse extract store исходный код файлы проекта Tree-sitter парсеры языков символы + связи узлы · CALLS · IMPORTS граф LadybugDB .ontoindex/ MCP · stdio · read-only Claude
analyze обходит файлы (минус .ontoindexignore), Tree-sitter разбирает каждый в дерево, из него — узлы и рёбра; граф ложится в LadybugDB. Дальше MCP-сервер по stdio отдаёт его Claude только на чтение. ~3000 файлов → десятки тысяч узлов за 1–2 минуты.
02 / Цикл правки

Спросить граф до изменения

Перед правкой символа Claude обращается к графу за радиусом изменения — и видит, что сломается, до правки.

safe-edit-loop impact → edit → verify
намерение править impact · context правка с учётом риска новый виток Claude хочет менять код граф (MCP) impact / context радиус + риск кто сломается · LOW…CRIT безопасная правка по факту
Инструменты (read-only): search — найти символ, inspect — контекст (кто вызывает/кого вызывает), impact — радиус и уровень риска, audit — архитектурные проверки. Записи через MCP отключены: правки Claude делает сам, граф — только чтение.
03 / Хуки

Живые подсказки в сессии

Три хука встраиваются в сессию и сосуществуют с хуками других памятей, не затирая их.

session-hooks augment · stale · auto-reindex
Grep / Glob + граф-контекст PreToolUse · augment поиск текстом хук augment подмешивает граф ответ Claude + кто вызывает символ commit / merge HEAD ≠ индекс PostToolUse · stale-детект git-мутация сравнить HEAD с отметкой индекса напомнить /…update проверка HEAD stale → detached SessionStart · авто-reindex новая сессия HEAD ≠ индекс → запустить фоном фоновый reindex → к след. сессии
augment мягко направляет к графу: когда Claude всё же ищет текстом, к результату подмешивается граф-контекст. stale-детект после commit/merge и серии правок сверяет состояние с индексом и напоминает переиндексировать. авто-reindex на старте сессии сам сверяет HEAD с индексом и при устаревании запускает переиндексацию в отвязанном фоновом процессе (старт не блокируется) — свежий граф готов к следующей сессии. В той же сессии reindex невозможен (write-lock БД), поэтому остаётся и инструкционный lazy-reindex: сверять свежесть через gn_ensure_fresh.
04 / Режимы

Управление: /memory_code_active

Все файловые операции выполняет детерминированный скрипт memory_code.ps1 — не «промпт-правки».

режимчто делаетэффект
on строит индекс, регистрирует MCP, ставит хуки + инструкции, правит .gitignore и .ontoindexignore активирует
update переиндексация до текущего состояния кода (по напоминанию stale-хука) обновляет
reapply обновляет регистрацию (хуки/инструкции/.mcp.json) без переиндексации — донести апдейт скила в активный проект обновляет
status показывает, что активно: индекс / MCP / хуки / инструкции читает
off снимает MCP, хуки и инструкции; индекс сохраняется (повторный on дёшев) деактивирует
clear убирает индекс в .trash — восстановимо мягко чистит
clear --hard удаляет индекс окончательно (с подтверждением) + чистит запись в глобальном реестре удаляет
MCP-инструменты и инструкции из CLAUDE.md подхватываются при старте сессии — после on нужна новая сессия Claude.
05 / Хранилища

Где что лежит

Тяжёлый движок — один на машину; в проекте — только индекс и настройки.

storage-map engine · project
~/.claude/tools/ontoindex/ движок: парсеры, dist, skill/, VERSION.txt один на машину ~/.claude/skills/memory_code_active/ скил Claude Code (диспетчер режимов) машина ~/.ontoindex/registry.json реестр проиндексированных проектов (JSON-массив) <проект>/ ├─ .ontoindex/ граф проекта (LadybugDB) gitignore ├─ .mcp.json регистрация MCP-сервера ontoindex (read-only) ├─ .claude/settings.json хуки augment + stale-детект (рядом с чужими — не конфликтуют) ├─ CLAUDE.md блок инструкций MEMORY_CODE └─ .ontoindexignore что не индексировать (node_modules, dist, build…)
Граф проекта в gitignore (не в репозиторий). Глобальный реестр — JSON-массив записей о проектах. Движок и индексы разделены: обновление движка не трогает индексы проектов.
06 / Барьеры

Локально-первая по умолчанию

Несколько гейтов закрывают утечки и опасные операции. Env-гейты ставит режим on в .mcp.json.

Только чтение

MCP без --confirm-writes — код через инструменты не меняется. Правки Claude делает своими обычными средствами.

Без эмбеддингов

ONTOINDEX_DISABLE_SEMANTIC=1: иначе движок скачал бы модель с huggingface. Гейт бросает ошибку до сети (+ HF_HUB_OFFLINE).

Без телеметрии

ONTOINDEX_TOOL_TELEMETRY=0 и ONTOINDEX_QUERY_LOG=0 — локальные лог-файлы запросов выключены.

Только доверенный код

Индекс читает весь код, и вывод инструментов попадает в контекст. Он трактуется как данные, не инструкции (защита от prompt-injection).

Ноль исходящих

При analyze и работе MCP — никаких сетевых соединений (проверено: ноль исходящих).

Независимость

Движок — локальный срез; от исходного репозитория ontoindex и его обновлений не зависит.

— / Легенда

Как читать схемы

Узлы

граф / индекс (зелёный контур)
процесс / данные
результат (пунктир)

Поток

пакет данных в движении
сигнал stale / обновление

Режим

активирует / обновляет
деактивирует / мягко чистит
удаляет окончательно

Хранилище

движок (один на машину)
в gitignore (не в репо)
Кодовая память · memory_code_active · описание системы (на базе вендоренного ontoindex)
дизайн-язык портирован из лендинга Wexus · JetBrains Mono · #00ff41 · самодостаточная страница
← Все кейсы