Как добавить память для Claude Code на VPS через Recall
Используйте плагин Recall для сохранения контекста сессий Claude Code. Инструмент создает локальные markdown-файлы, исключая лишние расходы токенов при повторном запуске.
Что Recall делает для памяти Claude Code
Recall — это плагин для Claude Code, который обеспечивает каждому проекту память между сессиями. Он записывает два markdown-файла в папку .recall/ внутри вашего проекта: лог всех событий, доступный только для добавления, и краткое резюме того, на чем вы остановились. Оба файла создаются на машине, где вы работаете, с помощью локального Python-скрипта для суммаризации, поэтому сама память не расходует API-токены.
Проблема, которую он решает, невелика, но постоянна. Вы завершаете сессию на своем VPS во вторник. В среду новая сессия не загружает автоматически разговор вторника, хотя встроенная функция автоматической памяти Claude Code может сохранять заметки между сессиями. Если эти заметки не содержат информации о том, на чем вы остановились, вам приходится объяснять суть проекта заново вручную или позволять модели снова читать половину репозитория, чтобы разобраться. Оба варианта расходуют токены, причем второй — в значительном объеме.
Версия Recall 0.4.0, выпущенная 18 июля 2026 года, по состоянию на октябрь 2026 года остается последним релизом, проект распространяется по лицензии 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.
Что записывают хуки и когда
Recall регистрирует три хука Claude Code. Каждый из них запускает Python-скрипт из каталога плагина.
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Эта команда запускает локальный суммаризатор для 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Выполняйте это перед сессией, в которой вы работаете с производственными учетными данными, так как фильтрация — это лишь вспомогательный инструмент, а не гарантия безопасности. Тот же принцип лежит в основе защиты секретов от AI-агентов в целом: самый безопасный секрет — тот, который агент никогда не видит.
Сколько токенов экономит Recall?
Это зависит от того, что использовалось в качестве альтернативы. Загрузка сводки при запуске сессии обходится дешево. То, что она заменяет, может стоить дорого, так как модель без памяти о вашем проекте заново изучает его, считывая файлы.
Данные, на которых построен график
[
{
"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 приведена для масштаба: она дешевле, так как коротка и статична, и сообщает модели ваши постоянные правила, а не события прошлой ночи.
Измерьте свои собственные показатели. Один токен — это примерно четыре символа английского текста, для кода — чуть меньше. Если вы также подаете сводку в локальную модель на том же VPS, проверьте размер окна, в которое она попадает, прежде чем доверять возобновлению сессии, так как стандартная длина контекста Ollama зависит от доступной VRAM.
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/ после завершения сессии. Проверьте, не отключена ли запись, не настроен ли вывод в другой каталог и был ли найден транскрипт, прежде чем делать вывод, что хуки не сработали. Введите /recall:show, чтобы убедиться, что плагин загружен, а затем выполните python3 -V. Команда хука сначала пытается использовать python3, а затем python, поэтому если в системе нет ни того, ни другого, команда завершится с ошибкой в stderr и кодом выхода 127. Claude Code отображает неблокирующее уведомление об ошибке хука, содержащее первую строку вывода stderr.
history.md растёт, но context.md не меняется. По умолчанию auto_save_context имеет значение off. Выполните /recall:save или установите ключ в on_end и позвольте хуку SessionEnd выполнить эту задачу.
Файлы появляются не в том проекте. Recall записывает данные относительно каталога, из которого был запущен 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 не передает новые записи лога в контекст другой сессии. Если одной сессии нужно узнать, что делает другая, сессии могут передавать текст друг другу напрямую во время работы.
Recall не помогает внутри сессии. Переполнение окна контекста в процессе работы — это отдельная проблема, требующая иных решений, и управление окном контекста внутри одной сессии является дополнением к данному руководству.
Сводка по своей архитектуре считается недоверенным вводом. context.md вставляется в контекст сессии в виде выделенного блока с меткой, и Claude запрашивает подтверждение перед тем, как использовать эти данные. Такое решение принято потому, что закоммиченная директория .recall/ — это место, куда любой пользователь с правами на коммит может записать текст, который прочитает ваш агент. То, насколько часто агент будет запрашивать подтверждение при чтении, определяется режимом доступа, с которым запускается сессия. Начиная с Claude Code v2.1.283 и более поздних версий, автоматический режим является встроенным режимом по умолчанию для интерактивного терминала и сессий VS Code на всех тарифных планах и у всех провайдеров, поэтому большинство действий проверяется классификатором, а не вами; организации с конфигурацией HIPAA по-прежнему начинают работу в ручном режиме. Заранее определите, является ли .recall/ личным или общим: добавьте его в .gitignore для личного использования или закоммитьте и проверяйте его как любой другой вклад в проект. Если агент работает без присмотра, безопасный запуск Claude Code на VPS описывает более широкие границы безопасности.
Редактирование конфиденциальных данных выполняется по мере возможности. Оно нацелено на типичные шаблоны, такие как API-ключи, токены, 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 также отсутствует, проверьте capture_history, маркер .capture-paused и наличие расшифровки сессии: в этих случаях хуки пропускают запись истории. Убедитесь, что плагин загружен с помощью /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 из корня проекта каждый раз, так как файлы привязаны к рабочей директории, а не к учётной записи пользователя.