SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-08-28

Recall: пам’ять для Claude Code на VPS

Налаштуйте локальний Recall для Claude Code на VPS: він зберігає сесії у Markdown без API-викликів і стискає контекст для продовження роботи.

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

Що Recall робить для пам’яті Claude Code

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

Recall усуває невелику, але постійну проблему. У вівторок ви завершуєте сеанс на VPS. У середу Claude Code нічого не знає про вівторок. Ви вручну повторно пояснюєте проєкт або дозволяєте моделі знову прочитати половину репозиторію, щоб відновити контекст. Обидва варіанти витрачають токени, а другий — багато токенів.

Станом на July 2026 актуальною є версія Recall 0.4.0. Проєкт ліцензовано за MIT. Це плагін. Він не виконує мережевих викликів.

Що потрібно на VPS

Capture hooks Recall — це Python-скрипти, які постачаються разом із plugin. Сторонні залежності не потрібні, тому єдина фактична вимога — interpreter.

python3 -V

Ubuntu 24.04 відповідає Python 3.12.3. Recall підтримує Python 3.9 і новіші версії. У мінімальних container images інколи взагалі немає interpreter, і тоді shell відповідає python3: command not found. Установіть його, перш ніж продовжувати.

sudo apt update && sudo apt install -y python3

NumPy — необов’язковий accelerator для одного кроку summarizer. Він вам не потрібен.

python3 -c "import numpy"

ModuleNotFoundError: No module named 'numpy' — прийнятна відповідь у цьому випадку. Summarizer має шлях на чистому Python, а test suite проєкту перевіряє, що обидва шляхи вибирають ті самі речення.

Пам’ять сесії важливіша на сервері, ніж на laptop, оскільки робота на сервері виконується під час коротких підключень, розподілених на кілька днів. Якщо у вас уже запущено Claude Code у tmux на VPS, Recall переносить учорашню сесію в сьогоднішню.

Установлення Recall із marketplace плагінів

Дві команди, введені в сеансі Claude Code:

/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall

Друга команда читає plugin@marketplace. Тут обидві назви — recall, що виглядає як помилка копіювання та вставлення, але це не так.

Перевірте встановлення, виконавши одну з власних команд плагіна:

/recall:show

/recall:show виводить поточний підсумок. У щойно створеному проєкті ще немає даних для виведення, тому фактично ви перевіряєте, чи існує команда. Якщо Claude Code не розпізнає /recall:show, плагін не завантажено, і жоден hook не спрацює.

Щоб запускати плагін із локальної копії, клонуйте репозиторій і спочатку перевірте його:

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-скрипт із каталогу плагіна.

  • 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?

Це залежить від того, що саме було альтернативою. Завантажити підсумок на початку сеансу недорого. Те, що він замінює, може коштувати дорожче, оскільки модель без відомостей про ваш проєкт повторно вивчає його, читаючи файли.

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 наведено для масштабу: він дешевший, оскільки короткий і статичний, та повідомляє моделі ваші постійні правила, а не те, що відбулося минулої ночі.

Виміряйте власні показники. Один токен — це приблизно 4 символи англомовного тексту і трохи менше для коду. Якщо ви також передаєте підсумок локальній моделі на тому самому VPS, перевірте, у яке контекстне вікно він потрапляє, перш ніж покладатися на відновлення сеансу, оскільки Ollama обрізає довгі запити за малого стандартного розміру контексту, а не повідомляє, що відкинула їхній кінець.

wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))

У межах сеансу /context показує, що саме зараз завантажено до контекстного вікна, а /cost — загальні показники сеансу. Запустіть один сеанс без попереднього контексту, а наступний — із готовим підсумком, і порівняйте результати. Щоб отримати повну картину розподілу токенів у сеансі, перегляньте як Claude Code витрачає токени.

Є один нюанс, який допомагає коректно оцінити це твердження. Підсумок завантажується на початку кожного сеансу, тому підсумок, який ви не використовуєте, є невеликою додатковою витратою, а не заощадженням. Залишайте summary_sentences близьким до стандартного значення, якщо ваші сеанси не тривають довго. Коротший журнал сеансу також допомагає з іншого боку, оскільки агент, якого спрямовують до найменшої працездатної зміни, залишає сумаризатору коротший журнал для аналізу.

Перебудова підсумку без сесії

Якщо ви клонували репозиторій, summarizer має власну точку входу командного рядка. Це зручно на 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 у переданий каталог. Якщо ви встановили plugin через 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 виконати цю дію.

Файли з’являються в неправильному проєкті. 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-файл, і ніщо не заважає вам його редагувати.

Пошуку немає. Для кожного проєкту ви отримуєте один поточний підсумок і один журнал, що постійно доповнюється, а не пам’ять із запитами між проєктами. Якщо потрібно дізнатися, що ви вирішили щодо бази даних три тижні тому, виконайте пошук у history.md за допомогою grep. Recall також не передає дані між сесіями: дві сесії, одночасно відкриті на одному VPS, не бачать журналів одна одної. Тому, коли одній сесії потрібно дізнатися, що робить інша, сесії можуть безпосередньо передавати текст одна одній під час роботи.

Усередині сесії Recall не допомагає. Переповнення контекстного вікна під час сесії — це інша проблема з іншими способами розв’язання, а керування контекстним вікном в одній сесії — супутній матеріал до цього посібника.

За задумом, підсумок обробляється як ненадійний вхід. context.md вставляється в огородженому блоці з міткою, а Claude запитує підтвердження перед тим, як покладатися на нього. Це потрібно тому, що каталог .recall/, доданий до репозиторію, є місцем, де будь-хто з правами на commit може записати текст, який прочитає ваш агент. Те, як часто агент запитує про прочитане, визначається режимом дозволів, у якому запускається сесія, а автоматичний режим стане режимом за замовчуванням у Claude Code 14 August 2026. Одразу вирішіть, чи є .recall/ особистими або спільними даними: додайте його до .gitignore для особистої пам’яті або додайте до репозиторію та перевіряйте як будь-який інший внесок. Якщо агент працює без нагляду, у матеріалі безпечний запуск Claude Code на VPS описано ширший контур безпеки.

Редагування конфіденційних даних працює за принципом best effort. Воно виявляє поширені шаблони, зокрема API keys, tokens, PEM blocks і присвоєння .env. Прочитайте .recall/ перед додаванням його до репозиторію.

Номер версії чесно відображає рівень зрілості. У версії 0.4.0 у July 2026 ключі конфігурації та структура файлів ще можуть змінюватися між релізами, тому перед оновленням системи, від якої ви залежите, прочитайте changelog.

FAQ

Чи надсилає Recall мій код або транскрипти кудись?

Ні. Capture hooks і summarizer — це Python-скрипти, які виконуються на вашій машині. Плагін не містить API key і не виконує мережевих викликів. Для створення summary використовуються TF-IDF і TextRank, а не модель, тому цей етап нічого не коштує і працює в offline-режимі. Компроміс полягає в тому, що summary є extractive: він вибирає речення з вашого log, а не створює нові.

Чому мій .recall/context.md відсутній або застарілий?

auto_save_context за замовчуванням має значення off, тому summary генерується повторно лише після запуску /recall:save. Установіть "auto_save_context": "on_end" у recall.config.json, щоб summary переписувався після завершення кожної сесії. Якщо history.md також відсутній, hooks взагалі не виконуються: перевірте, чи завантажено plugin, за допомогою /recall:show, а потім перевірте, чи відповідає python3 -V на цьому сервері, оскільки hooks є Python-скриптами.

Скільки Recall заощаджує за сесію?

Завантаження summary коштує приблизно 1,200 tokens, тоді як типовій 30,000 кількості tokens потрібно моделі, яка повторно читає ваш repository, щоб визначити поточний стан. Це типові значення. Виміряйте власні показники за допомогою wc -c .recall/context.md і команди /context у сесії, порівнявши cold start із запуском, який продовжується з summary.

Чи потрібен мені файл CLAUDE.md?

Так, і ці два файли виконують різні завдання. CLAUDE.md — це те, що ви створюєте навмисно: постійні правила та команди для build. context.md генерується на основі того, що фактично відбулося під час попередньої сесії, тому містить незавершену міграцію, яку ви ніколи не додумалися б записати. Зберігайте обидва файли.

Чи може один VPS зберігати memory для кількох проектів?

Так. Recall зберігає memory у .recall/ в межах кожного project directory, тому два проекти на одному сервері мають окремі logs і окремі summaries. Щоразу запускайте Claude Code з project root, оскільки файли прив’язані до робочого каталогу, а не до облікового запису користувача.