SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-26

Как добавить память для Claude Code на VPS через Recall

Используйте плагин Recall для сохранения контекста сессий Claude Code. Инструмент создает локальные markdown-файлы, исключая лишние расходы токенов при повторном запуске.

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

Что Recall делает для памяти Claude Code

Recall — это плагин для Claude Code, который обеспечивает каждому проекту память, сохраняющуюся между сессиями. Он записывает два markdown-файла в папку .recall/ внутри вашего проекта: лог всех событий, доступный только для добавления записей, и краткое резюме того, на чем вы остановились. Оба файла создаются на машине, где вы работаете, с помощью локального Python-скрипта для суммаризации, поэтому сама память не расходует API-токены.

Проблема, которую он решает, невелика, но постоянна. Вы закрываете сессию на своем VPS во вторник. В среду Claude Code ничего не знает о событиях вторника. Вы либо объясняете проект заново вручную, либо позволяете модели прочитать половину репозитория, чтобы она разобралась в ситуации. Оба варианта расходуют токены, причем второй — в значительном объеме.

Версия Recall 0.4.0 является актуальной по состоянию на июль 2026 года, проект распространяется по лицензии MIT. Это плагин. В нем нет функций, выполняющих сетевые вызовы.

Что необходимо на VPS

Хуки захвата Recall — это Python-скрипты, которые поставляются вместе с плагином. Сторонние зависимости отсутствуют, поэтому единственное реальное требование — наличие интерпретатора.

python3 -V

Ubuntu 24.04 отвечает Python 3.12.3. Recall поддерживает Python 3.9 и новее. В минимальных образах контейнеров интерпретатор может отсутствовать вовсе, тогда оболочка отвечает python3: command not found. Установите его перед тем, как продолжить.

sudo apt update && sudo apt install -y python3

NumPy является опциональным ускорителем для одного из этапов работы суммаризатора. Он не обязателен.

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?

Это зависит от того, что использовалось в качестве альтернативы. Загрузка сводки при запуске сессии обходится дешево. То, что она заменяет, может стоить дорого, так как модель без памяти о вашем проекте каждый раз «заново открывает» его, читая файлы.

ChartTypical cost of resuming work, per session
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 приведена для масштаба: она дешевле, так как короче и статична, и сообщает модели ваши постоянные правила, а не события прошедшей ночи.

Измеряйте свои показатели самостоятельно. Один токен — это примерно четыре символа английского текста и чуть меньше для кода. Если вы также передаете сводку локальной модели на том же VPS, проверьте размер окна контекста, прежде чем доверять возобновлению сессии, так как Ollama обрезает длинные промпты при небольшом значении контекста по умолчанию, не уведомляя о том, что часть данных была отброшена.

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, поэтому если в системе нет ни того, ни другого, запись не производится, а ошибок не выводится.

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. Данные не передаются между сессиями: две сессии, открытые одновременно на одном VPS, не видят журналы друг друга. Если одной сессии нужно узнать, что делает другая, сессии могут передавать текст напрямую друг другу во время работы.

Recall не помогает внутри сессии. Переполнение контекстного окна в процессе работы — это другая проблема с другими методами решения, и управление контекстным окном внутри одной сессии является дополнением к данному руководству.

Сводка по дизайну считается недоверенным вводом. context.md внедряется в виде размеченного блока, и Claude запрашивает подтверждение, прежде чем полагаться на него. Это сделано потому, что закоммиченная директория .recall/ — это место, куда любой пользователь с доступом на запись может добавить текст, который прочитает ваш агент. То, насколько часто агент запрашивает подтверждение прочитанного, определяется режимом разрешений при запуске сессии, а автоматический режим станет стандартом для Claude Code 14 августа 2026 года. Решите заранее, является ли .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 также отсутствует, значит, хуки не работают: убедитесь, что плагин загружен с помощью /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 из корневой директории проекта каждый раз, так как файлы привязаны к рабочей директории, а не к учетной записи пользователя.