SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor

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, який зберігає пам’ять кожного проєкту між сеансами. Він записує два Markdown-файли в папку .recall/ у вашому проєкті: журнал, доступний лише для додавання, із записом виконаних дій і короткий підсумок поточного стану. Обидва файли створює локальний Python-сумаризатор на машині, за якою ви працюєте, тому сама пам’ять не витрачає API-токени.

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

Версія Recall 0.4.0, випущена 18 July 2026, станом на October 2026 залишається останнім релізом, а проєкт поширюється за ліцензією 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-скрипт із каталогу plugin.

  • SessionStart спрацьовує під час запуску, відновлення та очищення. Він показує context.md, щоб під час відкриття сесії перед очима був ваш summary.
  • Stop спрацьовує щоразу, коли Claude завершує відповідь. Він додає цей turn до log.
  • SessionEnd спрацьовує під час завершення сесії та може повторно згенерувати summary.

У результаті створюються два файли, обидва в .recall/.

  • history.md — це append-only запис: prompts, responses, файли, до яких вносилися зміни, і виконані commands.
  • context.md — це згенерований digest: goal, summary, next steps, файли, до яких вносилися зміни, виконані commands і git context.

Після однієї реальної сесії перегляньте каталог.

ls -la .recall/

Якщо capture увімкнено, pause marker відсутній, а transcript доступний, у history.md має бути вміст. context.md може бути відсутнім, і це стандартна поведінка, а не помилка. auto_save_context дорівнює off, якщо ви не встановили інше значення, тому summary записується лише після явного запиту:

/recall:save

Ця команда запускає локальний summarizer для history.md і перезаписує context.md. Алгоритм використовує оцінювання TF-IDF (term frequency, inverse document frequency), яке передає дані до ранжування речень TextRank. Він детермінований та extractive, тобто вибирає речення, які вже є у вашому log. Model не викликається, тому цей крок безкоштовний і працює на машині в offline-режимі.

Налаштування 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, який summarizer читає за один прохід.

Для проєкту на VPS корисно ввімкнути автоматичне збереження, оскільки сеанс на сервері часто завершується, коли закривається термінал, а не коли ви вирішуєте його зупинити.

{
  "auto_save_context": "on_end",
  "summary_sentences": 12
}

Щоб тимчасово зупинити запис без зміни конфігурації, створіть маркер паузи. Видаліть його, щоб знову почати запис.

touch .recall/.capture-paused

Зробіть це перед сеансом, у якому працюватимете з production-обліковими даними, оскільки redaction є фільтром, а не гарантією. З цієї ж причини загалом важливо не передавати секрети AI-агентам: безпечний секрет — це той, якого агент ніколи не бачить.

Скільки Recall заощаджує токенів?

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

ГрафікTypical cost of resuming work, per session
Дані, на яких побудовано графік
[
  {
    "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"
  }
]

Це типові показники для проєкту середнього розміру, а не вимірювання вашого проєкту. Summary Recall завантажується приблизно на 1,200 токенів. Це відповідає опублікованій розробниками оцінці в одну-дві тисячі токенів для resume. Повторне відтворення повної попередньої transcript завантажує всю розмову — приблизно 85,000 токенів. Якщо модель повторно вивчає проєкт, читаючи файли, витрати займають проміжне значення — близько 30,000 токенів. Це число зростає разом із repository. Рядок CLAUDE.md наведено для масштабу: він дешевший, оскільки короткий і статичний, та повідомляє моделі ваші постійні правила, а не те, що відбулося минулої ночі.

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

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

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

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

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

Якщо ви клонували репозиторій, 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/. Перевірте, чи не вимкнено capture, чи не налаштовано інший вихідний каталог і чи не було знайдено transcript, перш ніж робити висновок, що hooks не запускалися. Введіть /recall:show, щоб підтвердити завантаження plugin, а потім виконайте python3 -V. Команда hook спочатку намагається виконати python3, а потім python, тому система без обох компонентів завершує роботу з stderr і кодом завершення 127. Claude Code показує неблокувальне повідомлення про помилку hook із першим рядком stderr.

history.md збільшується, але context.md не змінюється. Типове значення auto_save_context — off. Виконайте /recall:save або задайте для ключа значення on_end і дозвольте hook SessionEnd виконати цю дію.

Файли з’являються в неправильному проєкті. Recall записує файли відносно каталогу, з якого запущено Claude Code, тому запуск сесії з домашнього каталогу зберігає memory саме там. Запускайте сесію з кореня проєкту, а за допомогою ls -la .recall/ визначте, де фактично опинилися файли.

Capture припинився, але попередження не було. Перевірте наявність pause marker за допомогою ls -a .recall/. Файл .capture-paused, який ви створили минулого тижня, досі виконує свою функцію.

Після тривалої сесії summary містить мало інформації. max_input_chars обмежує вхідні дані summarizer до 200000 символів, тому дуже довгий log обрізається. Виконайте його ротацію.

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/ у репозиторії — це місце, де будь-хто з правом на commit може записати текст, який прочитає ваш агент. Те, як часто агент запитує підтвердження щодо прочитаного, визначається режимом дозволів, у якому запускається сесія. Починаючи з Claude Code v2.1.283, auto mode уже є вбудованим початковим режимом для інтерактивних сесій у терміналі та VS Code на всіх планах і в усіх провайдерів, тому більшість дій перевіряє класифікатор, а не ви; організації з конфігурацією HIPAA все ще запускаються в Manual mode. Один раз визначте, чи .recall/ призначений для особистого або спільного використання: додайте його до .gitignore для особистої пам’яті або закомітьте його й перевіряйте як будь-який інший внесок. Якщо агент працює без нагляду, у матеріалі безпечний запуск Claude Code на VPS описано ширші межі безпеки.

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

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

FAQ

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

Ні. Скрипти capture hooks і summarizer запускаються на вашому комп’ютері, плагін не містить API key і не виконує мережевих викликів. Для створення підсумку використовуються 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 і наявність транскрипту сеансу: у таких випадках running hooks пропускають запис історії. Переконайтеся, що плагін завантажено, за допомогою /recall:show, а потім перевірте, чи відповідає python3 -V на цьому сервері, оскільки hooks є Python scripts.

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

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

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

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

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

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

Чи була ця стаття корисною?