SSD Nodes Learn 8GB RAM — $66/rok
Przewodniki Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-08-01

Recall: pamięć Claude Code na VPS

Recall lokalnie zapisuje sesje Claude Code i tworzy podsumowanie do wznowienia pracy. Sprawdź konfigurację na VPS oraz rzeczywistą oszczędność tokenów.

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

Jak Recall obsługuje pamięć Claude Code

Recall to wtyczka Claude Code, która zapewnia każdemu projektowi pamięć między sesjami. Zapisuje dwa pliki markdown w folderze .recall/ znajdującym się w projekcie: dziennik tylko do dopisywania zawierający informacje o wykonanych działaniach oraz krótkie podsumowanie miejsca, w którym przerwano pracę. Oba pliki są tworzone na używanym komputerze przez lokalny moduł podsumowujący w języku Python, dlatego sama pamięć nie zużywa tokenów API.

Recall rozwiązuje niewielki, ale stały problem. We wtorek kończy się sesję na VPS. W środę Claude Code nie ma żadnych informacji o wtorkowych działaniach. Informacje o projekcie trzeba ponownie przekazać ręcznie albo pozwolić modelowi ponownie odczytać połowę repozytorium, aby je odtworzył. Oba rozwiązania zużywają tokeny, przy czym drugie zużywa ich znacznie więcej.

Wersja Recall 0.4.0 jest aktualna w lipcu 2026, a projekt jest objęty licencją MIT. Jest to wtyczka. Nie wykonuje żadnych połączeń sieciowych.

Wymagania dotyczące VPS

Haki przechwytywania Recall to skrypty Python dostarczane z wtyczką. Nie mają zależności zewnętrznych, dlatego jedynym rzeczywistym wymaganiem jest interpreter.

python3 -V

Ubuntu 24.04 zwraca Python 3.12.3. Recall obsługuje Python 3.9 i nowsze wersje. Minimalne obrazy kontenerów czasami nie zawierają żadnego interpretera. Wtedy powłoka zwraca python3: command not found. Zainstaluj interpreter przed kontynuowaniem.

sudo apt update && sudo apt install -y python3

NumPy jest opcjonalnym akceleratorem jednego z etapów działania podsumowywacza. Nie jest wymagany.

python3 -c "import numpy"

ModuleNotFoundError: No module named 'numpy' jest tutaj prawidłową odpowiedzią. Podsumowywacz ma ścieżkę opartą wyłącznie na Pythonie, a zestaw testów projektu sprawdza, czy obie ścieżki wybierają te same zdania.

Pamięć sesji ma większe znaczenie na serwerze niż na laptopie, ponieważ praca administracyjna odbywa się podczas krótkich wizyt rozłożonych na wiele dni. Jeśli korzystasz już z Claude Code działającego w tmux na VPS, Recall przenosi wczorajszą sesję do dzisiejszej.

Instalowanie Recall z marketplace wtyczek

Dwie komendy należy wprowadzić w sesji Claude Code:

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

Druga komenda odczytuje plugin@marketplace. Obie nazwy to tutaj recall, co wygląda jak błąd podczas kopiowania i wklejania, ale nim nie jest.

Instalację należy sprawdzić za pomocą jednej z własnych komend wtyczki:

/recall:show

/recall:show wyświetla bieżące podsumowanie. W całkowicie nowym projekcie nie ma jeszcze nic do wyświetlenia, dlatego sprawdzane jest w rzeczywistości to, czy komenda w ogóle istnieje. Jeśli Claude Code nie rozpoznaje /recall:show, wtyczka nie została załadowana i żaden hook nie zostanie uruchomiony.

Aby uruchomić wtyczkę ze sklonowanego repozytorium, należy najpierw sklonować repozytorium i przeprowadzić jego walidację:

git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .

claude plugin validate . odczytuje manifest w .claude-plugin/ i informuje, czy wtyczka ma prawidłową strukturę. Następnie należy uruchomić Claude Code z katalogu projektu za pomocą claude --plugin-dir ~/recall.

Co zapisywane jest przez hooki i kiedy

Recall rejestruje trzy hooki Claude Code. Każdy z nich uruchamia skrypt Python z katalogu pluginu.

  • SessionStart jest uruchamiany podczas uruchamiania, wznawiania i czyszczenia sesji. Wyświetla context.md, aby sesja otwierała się z podsumowaniem widocznym na ekranie.
  • Stop jest uruchamiany za każdym razem, gdy Claude kończy odpowiedź. Dopisuje tę turę do dziennika.
  • SessionEnd jest uruchamiany po zamknięciu sesji i może ponownie wygenerować podsumowanie.

Wynikiem działania są dwa pliki, oba zapisane w .recall/.

  • history.md to rekord przeznaczony wyłącznie do dopisywania: prompty, odpowiedzi, zmodyfikowane pliki i wykonane polecenia.
  • context.md to wygenerowane podsumowanie: cel, podsumowanie, następne kroki, zmodyfikowane pliki, wykonane polecenia i kontekst git.

Po jednej rzeczywistej sesji należy wyświetlić zawartość katalogu.

ls -la .recall/

Powinien być widoczny history.md zawierający dane. context.md może w ogóle nie występować. Jest to domyślne działanie, a nie błąd. auto_save_context ma wartość off, chyba że zostanie ona ustawiona, dlatego podsumowanie jest zapisywane tylko na żądanie:

/recall:save

To polecenie uruchamia lokalny moduł podsumowujący dla history.md i ponownie zapisuje context.md. Algorytm wykorzystuje ocenę TF-IDF (częstość terminów, odwrotna częstość dokumentu), a następnie klasyfikuje zdania za pomocą TextRank. Jest deterministyczny i ekstrakcyjny, co oznacza, że wybiera zdania już obecne w dzienniku. Nie jest wywoływany żaden model, dlatego ten krok jest bezpłatny i działa bez połączenia maszyny z siecią.

Konfigurowanie Recall dla jednego projektu

Konfiguracja znajduje się w pliku recall.config.json w katalogu głównym projektu. Oto domyślne wartości dostarczane z aplikacją:

{
  "output_dir": ".recall",
  "capture_history": true,
  "summary_sentences": 8,
  "redact": true,
  "include_git": true,
  "max_input_chars": 200000
}
  • output_dir określa lokalizację obu plików. Należy przechowywać je w projekcie.
  • capture_history włącza lub wyłącza dziennik history.md.
  • auto_save_context przyjmuje wartość off lub on_end, a domyślnie ma wartość off.
  • summary_sentences określa liczbę zdań zachowywanych w context.md. Zwiększenie tej wartości tworzy dłuższe podsumowanie i nieznacznie zwiększa obciążenie podczas uruchamiania sesji.
  • redact usuwa typowe wzorce sekretów, zanim jakiekolwiek dane zostaną zapisane na dysku.
  • include_git dodaje do podsumowania bieżący diff i ostatnie commity.
  • max_input_chars ogranicza ilość danych z history.md odczytywanych przez moduł podsumowujący podczas jednego przebiegu.

W projekcie uruchomionym na VPS przydatna jest automatyczna archiwizacja, ponieważ sesja na serwerze często kończy się po zamknięciu terminala, a nie w momencie podjęcia decyzji o jej zakończeniu.

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

Aby tymczasowo zatrzymać przechwytywanie bez modyfikowania konfiguracji, należy utworzyć znacznik wstrzymania. Usunięcie go ponownie uruchamia przechwytywanie.

touch .recall/.capture-paused

Należy wykonać tę czynność przed sesją, podczas której będą używane dane uwierzytelniające środowiska produkcyjnego, ponieważ redakcja jest filtrem, a nie gwarancją. Z tego samego powodu należy ogólnie nie udostępniać sekretów agentom AI: bezpieczny sekret to taki, którego agent nigdy nie widzi.

Ile tokenów oszczędza Recall?

Zależy to od tego, jakie było rozwiązanie alternatywne. Wczytanie podsumowania na początku sesji jest tanie. Zastępowana przez nie czynność może być kosztowna, ponieważ model, który nie zna projektu, poznaje go ponownie podczas odczytywania plików.

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"
  }
]

Są to typowe wartości dla projektu średniej wielkości, a nie pomiar konkretnego projektu. Podsumowanie Recall jest wczytywane przy użyciu około 1,200 tokenów. Jest to zgodne z opublikowaną przez projekt wartością od jednego do dwóch tysięcy tokenów dla wznowienia sesji. Odtworzenie pełnego wcześniejszego transkryptu wczytuje całą rozmowę, czyli około 85,000 tokenów. Ponowne poznawanie projektu przez model podczas odczytywania plików mieści się między tymi wartościami i wynosi około 30,000 tokenów. Wartość ta rośnie wraz z rozmiarem repozytorium. Wiersz CLAUDE.md służy jako punkt odniesienia. Jest tańszy, ponieważ jest krótki i statyczny. Informuje model o stałych zasadach, a nie o tym, co wydarzyło się poprzedniego wieczoru.

Należy zmierzyć własne wartości. Jeden token to około czterech znaków angielskiego tekstu prozatorskiego i nieco mniej w przypadku kodu.

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

W trakcie sesji /context pokazuje, co jest obecnie wczytane do okna kontekstu, a /cost przedstawia sumy dla sesji. Należy uruchomić jedną sesję bez wcześniejszego kontekstu, a następną z wczytanym podsumowaniem, a następnie porównać wyniki. Pełne omówienie sposobu wykorzystania tokenów przez sesję znajduje się w artykule jak Claude Code wykorzystuje tokeny.

Należy uwzględnić jedno zastrzeżenie. Podsumowanie jest wczytywane na początku każdej sesji. Podsumowanie, na podstawie którego nie są wykonywane żadne działania, stanowi więc niewielki koszt zamiast oszczędności. Należy pozostawić summary_sentences blisko wartości domyślnej, chyba że sesje trwają długo.

Ponowne generowanie podsumowania bez sesji

Jeśli sklonowano repozytorium, generator podsumowań ma własny punkt wejścia wiersza poleceń. Jest to przydatne na VPS, gdy sesja zakończyła się razem z terminalem, a podsumowanie jest nadal potrzebne.

python3 ~/recall/scripts/make_context.py --help

Dane wyjściowe pomocy zawierają listę obsługiwanych flag: --cwd określa katalog główny projektu, --transcript jawnie wskazuje plik transkryptu, --quiet wyłącza dane wyjściowe, a --harness służy do wyboru między claude i opencode. Należy wskazać projekt:

python3 ~/recall/scripts/make_context.py --cwd /srv/projects/api

Narzędzie odczytuje transkrypt sesji i history.md, a następnie zapisuje context.md w przekazanym katalogu. Jeśli instalację wykonano za pośrednictwem marketplace, plugin znajduje się w katalogu zarządzanym przez Claude Code, a /recall:save jest obsługiwanym sposobem wykonania tego samego zadania.

Dlaczego nic nie jest zapisywane

Brak katalogu .recall/ po zakończeniu pełnej sesji. Haki nigdy się nie uruchomiły. Wpisz /recall:show, aby potwierdzić załadowanie wtyczki, a następnie uruchom python3 -V. Polecenie haka najpierw próbuje użyć python3, a następnie python. Jeśli system nie zawiera żadnego z nich, nic nie zostanie zapisane i nie pojawi się żaden komunikat.

history.md rośnie, ale context.md się nie zmienia. Domyślnie auto_save_context ma wartość off. Uruchom /recall:save albo ustaw klucz na on_end i pozwól, aby wykonał to hak SessionEnd.

Pliki są zapisywane w niewłaściwym projekcie. Claude Code zapisuje ścieżki względne względem katalogu, z którego został uruchomiony. Uruchomienie sesji z katalogu domowego powoduje zapisanie pamięci właśnie tam. Uruchamiaj sesję z katalogu głównego projektu i użyj ls -la .recall/, aby sprawdzić, gdzie faktycznie zapisano pliki.

Przechwytywanie zostało zatrzymane i nie wyświetlono żadnego ostrzeżenia. Sprawdź znacznik wstrzymania za pomocą ls -a .recall/. Utworzony w ubiegłym tygodniu plik .capture-paused nadal działa.

Podsumowanie jest zbyt krótkie po długiej sesji. max_input_chars ogranicza dane wejściowe modułu podsumowującego do 200000 znaków, dlatego bardzo długi dziennik zostaje obcięty. Wykonaj jego rotację.

mv .recall/history.md .recall/history-2026-07-30.md

Następnie uruchom jedną krótką sesję i ponownie sprawdź ls -la .recall/, aby potwierdzić pojawienie się nowego history.md.

Gdzie Recall przestaje działać

Recall to dziennik i moduł podsumowujący. Należy jasno określić, czego nie obejmuje.

Moduł podsumowujący działa ekstrakcyjnie. TextRank wybiera zdania, które już znajdują się w history.md, więc nie ocenia, czy decyzja była prawidłowa. Błędna decyzja zapisana we wtorek wygląda dokładnie tak samo jak dobra decyzja podjęta w środę. Gdy stawka jest wysoka, należy przeczytać context.md i poprawić je ręcznie. Jest to plik markdown, który można dowolnie edytować.

Nie ma wyszukiwania. Dla każdego projektu dostępne jest jedno bieżące podsumowanie i jeden rozrastający się dziennik. Nie jest to pamięć z możliwością wykonywania zapytań między projektami. Jeśli trzeba sprawdzić, co zdecydowano w sprawie bazy danych trzy tygodnie temu, należy przeszukać history.md za pomocą grep.

Nie pomaga w trakcie sesji. Zapełnienie okna kontekstu w połowie sesji to inny problem, wymagający innych rozwiązań. Powiązany artykuł zarządzanie oknem kontekstu w ramach jednej sesji omawia ten temat.

Podsumowanie jest celowo traktowane jako niezaufane dane wejściowe. context.md jest wstrzykiwane w ogrodzonym i oznaczonym bloku, a Claude pyta przed wykorzystaniem tych danych. Takie rozwiązanie jest konieczne, ponieważ katalog .recall/ objęty kontrolą wersji umożliwia każdej osobie z uprawnieniami do zapisu umieszczanie tekstu, który odczyta agent. Należy jednorazowo zdecydować, czy .recall/ ma charakter osobisty, czy współdzielony: w przypadku pamięci osobistej należy dodać je do .gitignore, a w przypadku pamięci współdzielonej zatwierdzić je i przeglądać jak każdą inną zmianę. Jeśli agent działa bez nadzoru, temat bezpieczne uruchamianie Claude Code na VPS omawia szerszy zakres zagadnień.

Redagowanie zapewnia jedynie podstawowy poziom ochrony. Wykrywane są typowe wzorce, takie jak klucze API, tokeny, bloki PEM i przypisania .env. Przed zatwierdzeniem .recall/ należy je przeczytać.

Numer wersji odzwierciedla rzeczywisty stopień dojrzałości. W wersji 0.4.0, w lipcu 2026, klucze konfiguracji i układ plików mogą nadal zmieniać się między wydaniami, dlatego przed aktualizacją używanej konfiguracji należy przeczytać dziennik zmian.

FAQ

Czy Recall wysyła gdziekolwiek mój kod lub transkrypcje?

Nie. Haki przechwytujące i moduł tworzący podsumowania to skrypty Python uruchamiane na własnym komputerze. Wtyczka nie zawiera klucza API i nie wykonuje żadnych połączeń sieciowych. Podsumowania są tworzone za pomocą TF-IDF i TextRank, a nie modelu, dlatego ten etap nic nie kosztuje i działa w trybie offline. Kompromisem jest ekstrakcyjny charakter podsumowania: wybierane są zdania z dziennika zamiast tworzenia nowych.

Dlaczego brakuje mojego .recall/context.md lub jest ono nieaktualne?

auto_save_context ma domyślnie wartość off, dlatego podsumowanie jest generowane ponownie tylko po uruchomieniu /recall:save. Ustaw "auto_save_context": "on_end" w recall.config.json, aby podsumowanie było przepisywane po zakończeniu każdej sesji. Jeśli brakuje również history.md, haki w ogóle nie są uruchamiane: należy potwierdzić załadowanie wtyczki za pomocą /recall:show, a następnie sprawdzić, czy python3 -V zwraca odpowiedź na tym serwerze, ponieważ haki są skryptami Python.

Ile Recall zapisuje podczas jednej sesji?

Wczytanie podsumowania kosztuje około 1,200 tokenów, w porównaniu z typową wartością 30,000 tokenów w przypadku modelu, który musi ponownie odczytać repozytorium, aby ustalić bieżący stan pracy. Są to wartości typowe. Własne wyniki należy zmierzyć za pomocą wc -c .recall/context.md i polecenia /context uruchomionego w sesji, porównując uruchomienie od początku z sesją wznowioną na podstawie podsumowania.

Czy nadal potrzebny jest plik CLAUDE.md?

Tak, ponieważ oba pliki pełnią różne funkcje. CLAUDE.md zawiera informacje zapisane celowo: stałe reguły i polecenia kompilacji. context.md jest generowany na podstawie rzeczywistego przebiegu ostatniej sesji, dlatego zawiera na przykład niedokończoną migrację, której nie przyszłoby do głowy zapisać. Należy zachować oba pliki.

Czy jeden VPS może przechowywać pamięć dla kilku projektów?

Tak. Recall przechowuje pamięć w .recall/ w każdym katalogu projektu, dlatego dwa projekty na tym samym serwerze mają oddzielne dzienniki i oddzielne podsumowania. Claude Code należy za każdym razem uruchamiać z katalogu głównego projektu, ponieważ pliki są powiązane z katalogiem roboczym, a nie z kontem użytkownika.