SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor · Aktualisiert 2026-08-25

Claude Code auf dem VPS mit Recall merken lassen

Recall speichert Claude-Code-Sitzungen lokal als Markdown und fasst sie zusammen. Erfahren Sie, wie Sie das Plugin auf einem VPS einrichten und Tokens sparen.

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

Was Recall für das Gedächtnis von Claude Code leistet

Recall ist ein Claude-Code-Plugin, das jedem Projekt ein sitzungsübergreifendes Gedächtnis gibt. Es schreibt zwei Markdown-Dateien in einen Ordner .recall/ innerhalb Ihres Projekts: ein Protokoll, das nur erweitert wird, und eine kurze Zusammenfassung des aktuellen Stands. Beide Dateien erzeugt ein lokaler Python-Summarizer auf dem Rechner, auf dem Sie arbeiten. Das Gedächtnis selbst verbraucht daher keine API-Tokens.

Es schließt eine kleine, aber ständige Lücke. Sie beenden am Dienstag eine Sitzung auf Ihrem VPS. Am Mittwoch weiß Claude Code nichts über den Dienstag. Sie erklären das Projekt erneut von Hand oder lassen das Modell erneut die Hälfte des Repositorys lesen, um den Kontext zu ermitteln. Beides verbraucht Tokens. Die zweite Variante verbraucht deutlich mehr.

Recall version 0.4.0 ist im Juli 2026 aktuell, und das Projekt steht unter der MIT-Lizenz. Es handelt sich um ein Plugin. Das Plugin führt keine Netzwerkaufrufe aus.

Was Sie auf dem VPS benötigen

Die Capture-Hooks von Recall sind Python-Skripte, die mit dem Plugin ausgeliefert werden. Es gibt keine Abhängigkeiten von Drittanbietern. Die einzige tatsächliche Voraussetzung ist daher ein Interpreter.

python3 -V

Ubuntu 24.04 erfüllt Python 3.12.3. Recall unterstützt Python 3.9 und neuer. Minimale Container-Images enthalten manchmal überhaupt keinen Interpreter. Dann antwortet die Shell mit python3: command not found. Installieren Sie einen Interpreter, bevor Sie fortfahren.

sudo apt update && sudo apt install -y python3

NumPy ist eine optionale Beschleunigung für einen Schritt des Summarizers. Sie benötigen NumPy nicht.

python3 -c "import numpy"

ModuleNotFoundError: No module named 'numpy' ist hier eine akzeptable Antwort. Der Summarizer verfügt über einen reinen Python-Pfad. Die Testsuite des Projekts prüft, dass beide Pfade dieselben Sätze auswählen.

Der Sitzungsstatus ist auf einem Server wichtiger als auf einem Laptop, weil Serveraufgaben über mehrere Tage verteilt in kurzen Sitzungen anfallen. Wenn Claude Code bereits in tmux auf einem VPS läuft, überträgt Recall die Sitzung vom Vortag in den heutigen Arbeitstag.

Recall aus dem Plugin-Marktplatz installieren

Zwei Befehle werden innerhalb einer Claude-Code-Sitzung eingegeben:

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

Der zweite Befehl liest plugin@marketplace. Beide Namen sind hier recall. Das sieht wie ein Fehler beim Kopieren und Einfügen aus, ist aber keiner.

Prüfen Sie die Installation, indem Sie einen eigenen Befehl des Plugins ausführen:

/recall:show

/recall:show gibt die aktuelle Zusammenfassung aus. In einem ganz neuen Projekt gibt es noch nichts auszugeben. Tatsächlich prüfen Sie daher nur, ob der Befehl überhaupt vorhanden ist. Erkennt Claude Code /recall:show nicht, ist das Plugin nicht geladen und kein Hook wird ausgeführt.

Wenn Sie das Plugin aus einem Checkout ausführen möchten, klonen Sie zunächst das Repository und validieren Sie es:

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

claude plugin validate . liest das Manifest in .claude-plugin/ und meldet, ob das Plugin korrekt aufgebaut ist. Starten Sie Claude Code anschließend mit claude --plugin-dir ~/recall aus Ihrem Projektverzeichnis.

Was die Hooks schreiben und wann

Recall registriert drei Claude Code-Hooks. Jeder Hook führt ein Python-Skript aus dem Plugin-Verzeichnis aus.

  • SessionStart wird beim Start, Fortsetzen und Leeren ausgelöst. Er zeigt context.md an, damit die Sitzung mit Ihrer Zusammenfassung geöffnet wird.
  • Stop wird jedes Mal ausgelöst, wenn Claude eine Antwort beendet. Er hängt diesen Durchlauf an das Protokoll an.
  • SessionEnd wird beim Schließen der Sitzung ausgelöst und kann die Zusammenfassung neu erzeugen.

Dabei entstehen zwei Dateien, beide innerhalb von .recall/.

  • history.md ist der Datensatz, in den ausschließlich angehängt wird: Prompts, Antworten, berührte Dateien und ausgeführte Befehle.
  • context.md ist die erzeugte Zusammenfassung: Ziel, Zusammenfassung, nächste Schritte, berührte Dateien, ausgeführte Befehle und Git-Kontext.

Prüfen Sie das Verzeichnis nach einer echten Sitzung.

ls -la .recall/

history.md sollte Inhalte enthalten. context.md ist möglicherweise überhaupt nicht vorhanden. Das ist das Standardverhalten und kein Fehler. auto_save_context ist off, sofern Sie es nicht setzen. Die Zusammenfassung wird daher nur auf Anforderung geschrieben:

/recall:save

Dieser Befehl führt den lokalen Summarizer über history.md aus und schreibt context.md neu. Der Algorithmus verwendet eine TF-IDF-Bewertung (term frequency, inverse document frequency) und darauf aufbauend ein TextRank-Ranking für Sätze. Das Verfahren ist deterministisch und extraktiv. Es wählt also Sätze aus, die bereits in Ihrem Protokoll enthalten sind. Es wird kein Modell aufgerufen. Daher ist dieser Schritt kostenlos und funktioniert auch offline auf dem Rechner.

Recall für ein Projekt konfigurieren

Die Konfiguration befindet sich in einer recall.config.json-Datei im Projektverzeichnis. Dies sind die mitgelieferten Standardwerte:

{
  "output_dir": ".recall",
  "capture_history": true,
  "summary_sentences": 8,
  "redact": true,
  "include_git": true,
  "max_input_chars": 200000
}
  • output_dir legt fest, wo die beiden Dateien gespeichert werden. Belassen Sie sie im Projektverzeichnis.
  • capture_history aktiviert und deaktiviert das history.md-Log.
  • auto_save_context akzeptiert off oder on_end und verwendet standardmäßig off.
  • summary_sentences legt fest, wie viele Sätze in context.md übernommen werden. Ein höherer Wert erzeugt eine längere Zusammenfassung und erhöht die Last beim Sitzungsstart geringfügig.
  • redact entfernt gängige Muster für Geheimnisse, bevor Daten auf die Festplatte geschrieben werden.
  • include_git fügt den aktuellen Diff und die letzten Commits zur Zusammenfassung hinzu.
  • max_input_chars begrenzt, wie viel von history.md der Zusammenfassungsprozess in einem Durchlauf liest.

Für ein Projekt auf einem VPS ist das automatische Speichern die wichtigste Anpassung, weil eine Sitzung auf einem Server häufig endet, sobald das Terminal getrennt wird, und nicht erst dann, wenn Sie sie beenden.

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

Um die Aufzeichnung vorübergehend zu deaktivieren, ohne die Konfiguration zu ändern, erstellen Sie die Pausenmarkierung. Löschen Sie sie, um die Aufzeichnung wieder zu starten.

touch .recall/.capture-paused

Führen Sie dies vor einer Sitzung aus, in der Sie Produktionszugangsdaten verarbeiten, weil die Schwärzung ein Filter und keine Garantie ist. Aus demselben Grund sollten Sie Geheimnisse grundsätzlich von AI-Agenten fernhalten: Ein Geheimnis ist sicher, wenn der Agent es nie sieht.

Wie viele Tokens spart Recall?

Das hängt davon ab, welche Alternative verwendet wurde. Das Laden einer Zusammenfassung zum Sitzungsbeginn ist kostengünstig. Was dadurch ersetzt wird, kann teuer sein, weil ein Modell ohne Kenntnis Ihres Projekts die erforderlichen Informationen durch das Lesen von Dateien erneut ermittelt.

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

Dies sind typische Werte für ein mittelgroßes Projekt und keine Messung Ihres Projekts. Eine Recall-Zusammenfassung wird mit ungefähr 1,200 Tokens geladen. Das entspricht der veröffentlichten Angabe des Projekts von ein- bis zweitausend Tokens für eine Fortsetzung. Beim erneuten Laden eines vollständigen vorherigen Transkripts wird die gesamte Unterhaltung geladen. Das sind etwa 85,000 Tokens. Wenn das Modell das Projekt durch das Lesen von Dateien erneut ermittelt, liegt der Wert dazwischen, bei ungefähr 30,000 Tokens. Dieser Wert steigt mit der Größe des Repositorys. Die Zeile CLAUDE.md dient als Größenvergleich: Sie ist kürzer und statisch und daher günstiger. Außerdem teilt sie dem Modell Ihre dauerhaften Regeln mit und nicht, was in der letzten Sitzung passiert ist.

Messen Sie Ihre eigenen Werte. Ein Token entspricht bei englischer Prosa ungefähr vier Zeichen, bei Code etwas weniger. Wenn Sie die Zusammenfassung zusätzlich an ein lokales Modell auf demselben VPS übergeben, prüfen Sie vor der Verwendung der Fortsetzung, in welchem Kontextfenster sie landet. Ollama kürzt lange Prompts bei einer kleinen Standardlänge des Kontextfensters, statt mitzuteilen, dass das Ende verworfen wurde.

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

Innerhalb einer Sitzung zeigt /context, was momentan in das Kontextfenster geladen ist. /cost meldet die Sitzungsstatistiken. Starten Sie zunächst eine Sitzung ohne vorhandene Zusammenfassung und anschließend eine weitere Sitzung mit einer Zusammenfassung. Vergleichen Sie die Werte. Einen vollständigen Überblick darüber, wofür die Tokens einer Sitzung tatsächlich verwendet werden, finden Sie unter wie Claude Code Tokens verwendet.

Eine Einschränkung ist für eine korrekte Einordnung wichtig. Die Zusammenfassung wird bei jedem Sitzungsbeginn geladen. Eine Zusammenfassung, die Sie nicht verwenden, verursacht daher nur einen kleinen zusätzlichen Aufwand und keine Einsparung. Lassen Sie summary_sentences möglichst auf dem Standardwert, sofern Ihre Sitzungen nicht sehr lang laufen. Eine ruhigere Sitzung reduziert auch die andere Seite der Bilanz, weil ein Agent, der auf die kleinste funktionierende Änderung ausgerichtet ist, ein kürzeres Protokoll für die Priorisierung durch den Zusammenfasser hinterlässt.

Zusammenfassung ohne Sitzung neu erstellen

Wenn Sie das Repository geklont haben, verfügt der Summarizer über einen eigenen Kommandozeilen-Einstiegspunkt. Das ist auf einem VPS nützlich, wenn eine Sitzung zusammen mit dem Terminal beendet wurde, Sie die Zusammenfassung aber trotzdem benötigen.

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

Die Hilfeausgabe listet die unterstützten Flags auf: --cwd für das Projektverzeichnis, --transcript für eine angegebene Transkriptdatei, --quiet zum Unterdrücken der Ausgabe und --harness zur Auswahl zwischen claude und opencode. Verweisen Sie auf ein Projekt:

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

Das Tool liest das Sitzungstranskript und history.md. Anschließend schreibt es context.md in das von Ihnen angegebene Verzeichnis. Wenn Sie die Installation über den Marketplace vorgenommen haben, befindet sich das Plugin in einem von Claude Code verwalteten Verzeichnis. /recall:save ist dann die unterstützte Methode für dieselbe Aufgabe.

Warum nichts geschrieben wird

Kein .recall/-Verzeichnis nach einer vollständigen Sitzung. Die Hooks wurden nie ausgeführt. Geben Sie /recall:show ein, um zu bestätigen, dass das Plugin geladen ist, und führen Sie anschließend python3 -V aus. Der Hook-Befehl versucht zuerst python3 und danach python. Ein System ohne beides schreibt daher nichts und meldet den fehlenden Befehl nicht.

history.md wächst, aber context.md ändert sich nie. auto_save_context ist standardmäßig off. Führen Sie /recall:save aus oder setzen Sie den Schlüssel auf on_end und überlassen Sie die Ausführung dem SessionEnd-Hook.

Die Dateien erscheinen unter dem falschen Projekt. Claude Code schreibt relative Pfade bezogen auf das Verzeichnis, aus dem es gestartet wurde. Wenn Sie eine Sitzung aus Ihrem Home-Verzeichnis starten, wird der Speicher dort abgelegt. Starten Sie die Sitzung aus dem Projektstammverzeichnis und verwenden Sie ls -la .recall/, um den tatsächlichen Ablageort der Dateien zu ermitteln.

Die Erfassung wurde beendet, ohne dass eine Warnung angezeigt wurde. Prüfen Sie mit ls -a .recall/, ob der Pausenmarker vorhanden ist. Eine von Ihnen in der letzten Woche erstellte Datei .capture-paused erfüllt weiterhin ihre Funktion.

Die Zusammenfassung ist nach einer langen Sitzung zu knapp. max_input_chars begrenzt die Eingabe des Summarizers auf 200000 Zeichen. Ein sehr langes Log wird daher abgeschnitten. Rotieren Sie das Log.

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

Führen Sie anschließend eine kurze Sitzung aus und prüfen Sie erneut ls -la .recall/, um zu bestätigen, dass ein neues history.md erstellt wurde.

Wo Recall aufhört

Recall besteht aus einem Log und einer Zusammenfassung. Es ist wichtig zu wissen, was dadurch nicht abgedeckt wird.

Die Zusammenfassung ist extraktiv. TextRank wählt Sätze aus, die bereits in history.md stehen. Daher bewertet es nicht, ob eine Entscheidung richtig war. Eine falsche Entscheidung vom Dienstag liest sich am Mittwoch genauso wie eine gute Entscheidung. Wenn viel davon abhängt, lesen Sie context.md und korrigieren Sie die Datei manuell. Es handelt sich um eine Markdown-Datei. Sie können sie jederzeit bearbeiten.

Es gibt keine Suche. Pro Projekt erhalten Sie eine aktuelle Zusammenfassung und ein wachsendes Log. Einen projektübergreifend durchsuchbaren Speicher gibt es nicht. Wenn Sie wissen möchten, was Sie vor drei Wochen zur Datenbank entschieden haben, müssen Sie in history.md mit grep suchen. Die Logs werden auch nicht zwischen Sitzungen übertragen: Zwei Sitzungen, die gleichzeitig auf demselben VPS geöffnet sind, können die Logs der jeweils anderen nicht sehen. Wenn eine Sitzung wissen muss, was die andere gerade tut, können Sitzungen während des Betriebs Text direkt untereinander austauschen.

Innerhalb einer Sitzung hilft Recall nicht. Wenn sich das Kontextfenster während einer Sitzung füllt, liegt ein anderes Problem mit anderen Lösungen vor. Die Verwaltung des Kontextfensters innerhalb einer Sitzung ist der ergänzende Beitrag zu diesem Leitfaden.

Die Zusammenfassung wird absichtlich als nicht vertrauenswürdige Eingabe behandelt. context.md wird eingefügt, mit einem Codeblock versehen und gekennzeichnet. Claude fragt nach, bevor es sich darauf verlässt. Dieses Design ist erforderlich, weil ein versioniertes Verzeichnis .recall/ ein Ort ist, an dem jeder mit Commit-Zugriff Text schreiben kann, den Ihr Agent liest. Wie oft der Agent nachfragt, bevor er das Gelesene verwendet, wird durch den Berechtigungsmodus festgelegt, mit dem die Sitzung startet. Der automatische Modus wird am 14. August 2026 zum Standardmodus von Claude Code. Entscheiden Sie einmal, ob .recall/ persönlich oder gemeinsam genutzt wird: Für persönlichen Speicher fügen Sie es zu .gitignore hinzu. Alternativ committen Sie es und prüfen es wie jeden anderen Beitrag. Wenn der Agent unbeaufsichtigt läuft, behandelt Claude Code sicher auf einem VPS ausführen die weiter gefassten Sicherheitsgrenzen.

Die Schwärzung erfolgt nach bestem Bemühen. Sie zielt auf gängige Muster wie API-Schlüssel, Token, PEM-Blöcke und .env-Zuweisungen. Lesen Sie .recall/, bevor Sie die Datei committen.

Die Versionsnummer gibt den Reifegrad realistisch wieder. Bei 0.4.0 im Juli 2026 können sich Konfigurationsschlüssel und Dateistruktur zwischen Releases noch ändern. Lesen Sie daher vor dem Upgrade einer benötigten Installation das Changelog.

FAQ

Sendet Recall meinen Code oder meine Transkripte irgendwohin?

Nein. Die Capture-Hooks und der Summarizer sind Python-Skripte, die auf Ihrem eigenen Rechner ausgeführt werden. Das Plugin enthält keinen API-Key und führt keine Netzwerkaufrufe aus. Die Zusammenfassung verwendet TF-IDF und TextRank anstelle eines Modells. Dieser Schritt verursacht daher keine Kosten und funktioniert auch ohne Netzwerkverbindung. Der Nachteil ist, dass die Zusammenfassung extraktiv ist: Sie wählt Sätze aus Ihrem Log aus, anstatt neue zu formulieren.

Warum fehlt mein .recall/context.md oder ist nicht aktuell?

auto_save_context verwendet standardmäßig off. Die Zusammenfassung wird daher nur neu erzeugt, wenn Sie /recall:save ausführen. Setzen Sie "auto_save_context": "on_end" in recall.config.json, damit sie nach jeder Sitzung neu geschrieben wird. Wenn auch history.md fehlt, werden die Hooks überhaupt nicht ausgeführt. Prüfen Sie mit /recall:show, ob das Plugin geladen ist. Prüfen Sie anschließend, ob python3 -V auf diesem Rechner antwortet, da die Hooks Python-Skripte sind.

Wie viel spart Recall pro Sitzung?

Das Laden einer Zusammenfassung kostet ungefähr 1,200 Token. Bei einem Modell, das Ihr Repository erneut lesen muss, um den aktuellen Stand zu ermitteln, sind es typischerweise 30,000 Token. Das sind typische Werte. Messen Sie Ihre eigenen Werte mit wc -c .recall/context.md und dem Befehl /context innerhalb einer Sitzung. Vergleichen Sie dabei einen Kaltstart mit einer Sitzung, die aus einer Zusammenfassung fortgesetzt wird.

Benötige ich weiterhin eine CLAUDE.md-Datei?

Ja. Beide Dateien erfüllen unterschiedliche Aufgaben. CLAUDE.md schreiben Sie bewusst selbst. Sie enthält die dauerhaft geltenden Regeln und die Build-Befehle. context.md wird aus den tatsächlichen Ereignissen der letzten Sitzung erzeugt. Daher kann sie beispielsweise die unvollständige Migration enthalten, die Sie nie selbst dokumentiert hätten. Behalten Sie beide Dateien.

Kann ein VPS den Speicher für mehrere Projekte enthalten?

Ja. Recall speichert den Speicher in .recall/ innerhalb des jeweiligen Projektverzeichnisses. Dadurch behalten zwei Projekte auf demselben Server separate Logs und separate Zusammenfassungen. Starten Sie Claude Code jedes Mal aus dem Projektstammverzeichnis, da die Dateien dem Arbeitsverzeichnis und nicht dem Benutzerkonto folgen.