Перейти к содержимому

Привязка к файлам и Stop-хук

Факт в памяти часто взят из файла: договора, заметки, конфигурации. Если файл потом исправили, а запись в памяти осталась прежней, агент будет уверенно повторять старое. Сервер MMW ваших файлов не видит, поэтому эту проверку делает локальный агент mmw-agent 0.1.4 и новее.

На этой странице:

  1. как привязать факт к файлу, ничего не вычисляя вручную;
  2. как поиск замечает, что файл изменился;
  3. как Stop-хук не даёт Claude Code закончить работу, не сохранив итог.

Укажите путь к файлу в source_id, и всё. Агент сам вычислит SHA-256 файла и передаст его в source_hash:

Запомни в MMW: оператор — физическое лицо. Источник: site-audit/RKN-NOTIFICATION.md
что уходит на сервер
{
"content": "оператор — физическое лицо",
"source_id": "site-audit/RKN-NOTIFICATION.md",
"source_hash": "sha256:5f1c…"
}
  • Путь считается относительно корней источников: по умолчанию это папка, в которой клиент запустил агента (для Claude Code — папка проекта). Свои корни задаёт переменная MMW_SOURCE_ROOTS (несколько путей через : в Linux и macOS, через ; в Windows).
  • Файлы вне корней не читаются и не хешируются. Абсолютный путь тоже подходит, если он внутри корня.
  • Идентификаторы, не похожие на путь (session:…, https://…, owner-note), не трогаются.
  • Если source_hash уже указан, агент его не меняет.
  • Содержимое файла с компьютера не уходит, отправляется только хеш.

При каждом поиске агент заново хеширует файлы-источники найденных записей и добавляет поле local_source:

local_sourceЧто значитstatus
unchangedфайл тот же, что при сохранениибез изменений
changedфайл изменился после сохраненияstale
missingфайла больше нетstale

Статус conflict важнее и не заменяется на stale. Записи без файла-источника остаются как есть.

Команда mmw-agent hook-stop — хук события Stop. Когда Claude Code собирается закончить ход, хук смотрит, менялись ли в этой сессии файлы рабочей копии git после последнего вызова remember. Если менялись, ход не завершается: Claude получает список файлов и просьбу сохранить решения и факты, указав путь в source_id, а для исправлений использовать прежний fact_key.

  1. Откройте ~/.claude/settings.json (для всех проектов) или .claude/settings.json в проекте.

  2. Добавьте хук:

    {
    "hooks": {
    "Stop": [
    {
    "hooks": [
    {
    "type": "command",
    "command": "uvx --from https://app.mmwhub.ru/downloads/mmw-agent/mmw_agent-0.1.4-py3-none-any.whl mmw-agent hook-stop"
    }
    ]
    }
    ]
    }
    }
  3. Перезапустите Claude Code.

Как ведёт себя хук:

  • Блокирует не больше одного раза подряд. Если Claude решил, что сохранять нечего, второй Stop проходит (флаг stop_hook_active), зацикливания нет.
  • Учитывает только эту сессию. Файлы, изменённые до начала сессии или до последнего remember, не считаются.
  • Вне git-репозитория ничего не делает.
  • Ничего не отправляет. Проверка локальная: git и файл истории сессии Claude Code.
  • Отключить на время: переменная окружения MMW_STOP_HOOK=off.
  • Не следит за файлами в фоне: изменение замечается при поиске или в конце хода, а не в момент сохранения файла.
  • Не исправляет запись само: хук просит агента сохранить новую версию, решение остаётся за агентом и человеком.
  • Не проверяет факты, сохранённые без source_id. Указывайте источник всегда, когда факт взят из файла.