Recall для Claude Code: память проекта на VPS
Узнайте, как Recall 0.4.0 сохраняет сеансы Claude Code локально на VPS, создаёт журнал и резюме без сетевых вызовов и экономит API-токены.
Что Recall делает с памятью Claude Code
Recall — это плагин Claude Code, который сохраняет память каждого проекта между сеансами. Он записывает в папку .recall/ внутри проекта два markdown-файла: журнал только для добавления новых записей о произошедшем и краткое резюме текущего состояния проекта. Оба файла создаются локальным средством суммаризации на Python на рабочей машине, поэтому сама память не расходует API-токены.
Recall устраняет небольшую, но постоянную проблему. Во вторник вы завершаете сеанс на VPS. В среду Claude Code ничего не знает о событиях вторника. Вы вручную заново объясняете проект или позволяете модели снова прочитать половину репозитория, чтобы разобраться в нём. Оба варианта расходуют токены, а второй — значительное их количество.
По состоянию на July 2026 актуальна версия Recall 0.4.0. Проект распространяется по лицензии MIT. Это плагин. Он не выполняет сетевых вызовов.
Что требуется на VPS
Скрипты перехвата Recall входят в состав плагина и написаны на Python. Сторонние зависимости отсутствуют, поэтому единственное обязательное условие — наличие интерпретатора.
python3 -VUbuntu 24.04 отвечает Python 3.12.3. Recall поддерживает Python 3.9 и более новые версии. В минимальных образах контейнеров интерпретатор иногда отсутствует, и тогда оболочка отвечает python3: command not found. Установите его, прежде чем продолжить.
sudo apt update && sudo apt install -y python3NumPy — необязательное ускорение для одного этапа создания сводки. Он не требуется.
python3 -c "import numpy"ModuleNotFoundError: No module named 'numpy' — приемлемый ответ в этом случае. В модуле создания сводки есть реализация на чистом Python, а набор тестов проекта проверяет, что обе реализации выбирают одни и те же предложения.
Память сеанса важнее на сервере, чем на ноутбуке, поскольку работа на сервере выполняется короткими визитами с перерывами в несколько дней. Если у вас уже запущен Claude Code в tmux на VPS, Recall переносит сеанс со вчерашнего дня в сегодняшний.
Установка Recall из каталога плагинов
Две команды, которые вводятся в сеансе Claude Code:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallВторая команда читает plugin@marketplace. Здесь оба имени имеют значение recall. Это выглядит как ошибка при копировании, но ошибкой не является.
Проверьте установку, выполнив одну из собственных команд плагина:
/recall:show/recall:show выводит текущую сводку. В новом проекте выводить пока нечего, поэтому фактически проверяется только наличие самой команды. Если Claude Code не распознаёт /recall:show, плагин не загружен и ни один хук не сработает.
Чтобы запускать плагин из клонированного репозитория, сначала клонируйте репозиторий и проверьте его:
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate . читает манифест в .claude-plugin/ и сообщает, корректно ли оформлен плагин. Затем запустите Claude Code из каталога проекта с помощью claude --plugin-dir ~/recall.
Что записывают hooks и когда
Recall регистрирует три hooks для Claude Code. Каждый из них запускает Python-скрипт из каталога plugin.
SessionStartсрабатывает при запуске, возобновлении и очистке. Он выводитcontext.md, чтобы при открытии сессии сводка была перед глазами.Stopсрабатывает каждый раз после завершения ответа Claude. Он добавляет этот обмен в журнал.SessionEndсрабатывает при закрытии сессии и может заново создать сводку.
В результате создаются два файла. Оба находятся внутри .recall/.
history.md— это журнал только для добавления: запросы, ответы, изменённые файлы и выполненные команды.context.md— это сгенерированная выжимка: цель, сводка, следующие шаги, изменённые файлы, выполненные команды и контекст git.
После одной реальной сессии проверьте каталог.
ls -la .recall/Вы должны увидеть history.md с данными. Возможно, context.md не будет вообще. Это поведение по умолчанию, а не ошибка. auto_save_context имеет значение off, если вы не задали его явно, поэтому сводка записывается только по вашему запросу:
/recall:saveЭта команда запускает локальный summarizer для history.md и перезаписывает context.md. Алгоритм использует оценку TF-IDF (частота термина, обратная частота документа), которая передаёт результаты ранжированию предложений методом TextRank. Алгоритм детерминированный и экстрактивный. Это означает, что он выбирает предложения, уже присутствующие в журнале. Модель не вызывается, поэтому этот этап бесплатен и работает без подключения машины к сети.
Настройка Recall для одного проекта
Конфигурация хранится в файле recall.config.json в корне проекта. Ниже приведены значения по умолчанию:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirзадает расположение двух файлов. Храните их внутри проекта.capture_historyвключает и отключает журналhistory.md.auto_save_contextпринимает значенияoffилиon_end. По умолчанию используетсяoff.summary_sentencesзадает количество предложений, сохраняемых вcontext.md. При увеличении этого значения сводка становится длиннее, а нагрузка при запуске сеанса немного возрастает.redactудаляет распространенные шаблоны секретов до записи любых данных на диск.include_gitдобавляет в сводку текущий diff и последние коммиты.max_input_charsограничивает объемhistory.md, который суммаризатор читает за один проход.
Для проекта на VPS полезно включить автоматическое сохранение. Сеанс на сервере часто завершается, когда закрывается терминал, а не когда вы решаете его остановить.
{
"auto_save_context": "on_end",
"summary_sentences": 12
}Чтобы временно остановить сбор данных без изменения конфигурации, создайте маркер паузы. Удалите его, чтобы снова начать сбор данных.
touch .recall/.capture-pausedСделайте это перед сеансом, в котором вы работаете с учетными данными для production. Редактирование — это фильтр, а не гарантия. По той же причине в целом следует не передавать секреты AI-агентам: безопасен тот секрет, который агент никогда не видит.
Сколько токенов экономит Recall?
Это зависит от того, какой был альтернативный вариант. Загрузка сводки при запуске сеанса требует мало ресурсов. Заменяемая ею операция может быть затратной, поскольку модель без сведений о проекте заново изучает его, читая файлы.
The data behind this chart
[
{
"label": "Recall context.md",
"char_count": "4,800",
"est_tokens": "1,200"
},
{
"label": "Hand-written CLAUDE.md",
"char_count": "3,200",
"est_tokens": "800"
},
{
"label": "Re-reading the repo",
"char_count": "120,000",
"est_tokens": "30,000"
},
{
"label": "Full transcript replay",
"char_count": "340,000",
"est_tokens": "85,000"
}
]Это типичные значения для проекта среднего размера, а не измерения для вашего проекта. Сводка Recall загружается примерно за 1,200 токенов. Это соответствует опубликованной оценке проекта: от одной до двух тысяч токенов для возобновления работы. Повторное воспроизведение полной предыдущей расшифровки заново загружает весь диалог — примерно 85,000 токенов. Если модель заново изучает проект, читая файлы, результат находится между этими значениями и составляет около 30,000 токенов. Это число увеличивается вместе с размером репозитория. Строка CLAUDE.md приведена для сравнения: она требует меньше токенов, поскольку является короткой и статичной, и сообщает модели постоянные правила, а не содержание прошлой работы.
Измерьте свои значения. Один токен — это примерно четыре символа английского текста и немного меньше для кода.
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))В рамках сеанса /context показывает, что сейчас загружено в контекстное окно, а /cost сообщает общие значения для сеанса. Запустите один сеанс без предварительно загруженных данных, а следующий — с готовой сводкой, затем сравните результаты. Подробное описание распределения токенов сеанса приведено в разделе как Claude Code расходует токены.
Есть одно ограничение, которое необходимо учитывать. Сводка загружается при каждом запуске сеанса. Поэтому сводка, которую вы не используете, становится небольшими дополнительными затратами, а не экономией. Оставьте summary_sentences близким к значению по умолчанию, если только ваши сеансы не являются длительными.
Пересоздание сводки без сеанса
Если вы клонировали репозиторий, у суммаризатора есть собственная точка входа командной строки. Это удобно на VPS, если сеанс завершился вместе с терминалом, а сводка всё равно нужна.
python3 ~/recall/scripts/make_context.py --helpВ справке перечислены поддерживаемые флаги: --cwd для корня проекта, --transcript для явного указания файла стенограммы, --quiet для подавления вывода и --harness для выбора между claude и opencode. Укажите проект:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiСуммаризатор читает стенограмму сеанса и history.md, затем записывает context.md в переданный каталог. Если вы установили плагин через marketplace, он находится в каталоге, которым управляет Claude Code, а /recall:save является поддерживаемым способом выполнить ту же задачу.
Почему ничего не записывается
После завершения сеанса нет каталога .recall/. Hooks не запускались. Введите /recall:show, чтобы проверить, загружен ли плагин, затем выполните python3 -V. Команда hook сначала проверяет python3, а затем python. Поэтому в системе, где нет ни одного из них, ничего не записывается, и об этом не сообщается.
history.md увеличивается, но context.md не меняется. По умолчанию auto_save_context имеет значение off. Выполните /recall:save или задайте для ключа значение on_end и передайте это действие hook SessionEnd.
Файлы появляются не в том проекте. Claude Code записывает файлы относительно каталога, из которого была запущена программа. Поэтому запуск сеанса из домашнего каталога сохраняет память там. Запускайте программу из корневого каталога проекта и используйте ls -la .recall/, чтобы определить фактическое расположение файлов.
Сбор данных прекратился, но предупреждение не появилось. Проверьте наличие маркера паузы с помощью ls -a .recall/. Файл .capture-paused, созданный вами на прошлой неделе, по-прежнему выполняет эту функцию.
После длительного сеанса сводка содержит мало данных. max_input_chars ограничивает входные данные суммаризатора значением 200000 символов, поэтому очень длинный журнал обрезается. Выполните его ротацию.
mv .recall/history.md .recall/history-2026-07-30.mdПосле этого проведите короткий сеанс и снова проверьте ls -la .recall/, чтобы убедиться, что появился новый history.md.
Где заканчивается Recall
Recall объединяет журнал и средство создания сводки. Важно понимать, что при этом остаётся за его пределами.
Средство создания сводки использует извлекающий подход. TextRank выбирает предложения, которые уже есть в history.md, поэтому не оценивает правильность решения. Ошибочное решение, записанное во вторник, выглядит так же, как правильное решение, записанное в среду. Если последствия важны, прочитайте context.md и исправьте его вручную. Это markdown-файл, и ничто не мешает вам его редактировать.
Поиска нет. Для каждого проекта вы получаете одну текущую сводку и один постоянно растущий журнал, а не память с возможностью выполнять запросы между проектами. Если нужно узнать, что вы решили по поводу базы данных три недели назад, выполните поиск через grep в history.md.
Recall не помогает внутри сеанса. Заполнение контекстного окна в середине сеанса — это другая проблема с другими способами решения, а управление контекстным окном в одном сеансе рассматривается в сопутствующем материале к этому руководству.
По замыслу сводка обрабатывается как ненадёжный ввод. context.md вставляется в fenced-блок с меткой, и Claude запрашивает подтверждение перед тем, как полагаться на его содержимое. Это необходимо, поскольку каталог .recall/, зафиксированный в репозитории, позволяет любому пользователю с правом внесения изменений записать текст, который прочитает ваш агент. Один раз решите, является ли .recall/ личным или общим: добавьте его в .gitignore для личной памяти либо зафиксируйте в репозитории и проверяйте как любое другое изменение. Если агент работает без присмотра, материал безопасный запуск Claude Code на VPS охватывает более широкую границу безопасности.
Редакция выполняется по принципу разумной достаточности. Она обрабатывает распространённые шаблоны, например API keys, tokens, блоки PEM и присваивания .env. Прочитайте .recall/ перед фиксацией изменений в репозитории.
Номер версии честно отражает степень зрелости проекта. В версии 0.4.0, выпущенной в июле 2026 года, ключи конфигурации и структура файлов всё ещё могут измениться между релизами, поэтому перед обновлением используемой конфигурации прочитайте журнал изменений.
FAQ
Отправляет ли Recall мой код или расшифровки куда-либо?
Нет. Перехватывающие хуки и суммаризатор — это скрипты Python, которые работают на вашем компьютере. Плагин не содержит API-ключа и не выполняет сетевых вызовов. Для составления сводки используются TF-IDF и TextRank, а не модель, поэтому этот этап ничего не стоит и работает без подключения компьютера к сети. Компромисс заключается в том, что сводка является экстрактивной: из журнала выбираются существующие предложения, а новые не создаются.
Почему мой .recall/context.md отсутствует или устарел?
По умолчанию auto_save_context имеет значение off, поэтому сводка создается заново только при запуске /recall:save. Задайте "auto_save_context": "on_end" в recall.config.json, чтобы файл переписывался после завершения каждого сеанса. Если также отсутствует history.md, хуки вообще не выполняются. Убедитесь, что плагин загружен, с помощью /recall:show, затем проверьте, что на этом сервере команда python3 -V возвращает ответ, поскольку хуки являются скриптами Python.
Сколько Recall сохраняет для каждого сеанса?
Загрузка сводки требует около 1,200 токенов, тогда как модели обычно требуется 30,000 токенов, чтобы снова прочитать репозиторий и определить текущее состояние. Это типичные значения. Измерьте свои показатели с помощью wc -c .recall/context.md и команды /context внутри сеанса, сравнив холодный запуск с запуском, который возобновляется из сводки.
Нужен ли мне файл CLAUDE.md?
Да, эти два файла выполняют разные задачи. CLAUDE.md — это файл, который вы создаете намеренно: в нем указаны постоянные правила и команды сборки. context.md создается на основе фактических событий предыдущего сеанса, поэтому в нем сохраняется незавершенная миграция, которую вы никогда не догадались бы записать вручную. Храните оба файла.
Может ли один VPS хранить память для нескольких проектов?
Да. Recall хранит память в .recall/ внутри каталога каждого проекта, поэтому два проекта на одном сервере используют отдельные журналы и отдельные сводки. Каждый раз запускайте Claude Code из корня проекта, поскольку файлы определяются рабочим каталогом, а не учетной записью пользователя.