Compartment: Verschlüsselter Agent-Memory-Speicher offline
Compartment verschlüsselt Agent-Memory lokal und arbeitet offline. Lesen Sie, was das Bedrohungsmodell schützt und warum der Verlust der Passphrase den Zugriff beendet.
Was Compartment anders macht
Compartment ist ein Agent-Memory-Speicher. Jeder Datensatz wird auf dem Rechner verschlüsselt, auf dem er erstellt wurde. Eine Verbindung zu einem Netzwerkdienst wird nie hergestellt. Zwei Eigenschaften unterscheiden Compartment vom übrigen Bereich der Agent-Memory-Systeme. Der Tresor ist eine einzige versiegelte Datei, die nur Ihre Passphrase öffnet. Der Embedding-Schritt läuft lokal. Der Text eines Memory-Eintrags wird daher nie an einen externen Dienst gesendet, um daraus einen Vektor zu erzeugen. Version 4.6.0 wurde am 10. August 2026 veröffentlicht. Die Lizenz ist Apache-2.0. Die Installation erfolgt über PyPI.
Das ist eine Aussage zum Bedrohungsmodell. Dieser Leitfaden behandelt sie entsprechend. Die Verschlüsselung ruhender Daten und das Offline-Design schützen eine bestimmte Gruppe von Daten und Abläufen. Andere bleiben ungeschützt. Genau dort entstehen die Probleme am zweiten Tag.
Dieser Leitfaden folgt der eigenen Dokumentation und den Release Notes des Projekts, die am 11. August 2026 gelesen wurden. Compartment stellt neben dem Kommandozeilenprogramm eine Desktop-Anwendung, ein Menüleisten-Element unter macOS und ein Symbol im Benachrichtigungsbereich unter Windows bereit. Eine Passphrase-Abfrage kann nicht aus einem automatisierten Container heraus bedient werden. Betrachten Sie die folgenden Angaben als dokumentiertes Verhalten, nicht als hier gemessenes Verhalten. Testen Sie Compartment auf einem Ersatzrechner, bevor Sie ihm echte Daten anvertrauen.
Was Verschlüsselung ruhender Daten tatsächlich schützt
Der Tresor ist mit XChaCha20-Poly1305 verschlüsselt, einer AEAD-Chiffre (Authenticated Encryption with Associated Data). Die Keyslots, die den Master-Key enthalten, werden mit Argon2id geschützt, einer Passwort-Hashfunktion, die absichtlich langsam ist und viel Arbeitsspeicher benötigt. Daraus folgen zwei Dinge. Eine Kopie der Datei auf einer gestohlenen Festplatte, in einem alten Backup oder als Anhang eines Support-Tickets besteht nur noch aus Bytes ohne verwertbaren Inhalt. Wird ein einzelnes Bit verändert, schlägt die Authentifizierung beim Öffnen der Datei fehl. Aus der Beschädigung wird dadurch ein klarer Fehler statt eines falschen Ergebnisses.
Auch die Embedding-Vektoren werden verschlüsselt. Das ist wichtiger, als es zunächst klingt. Ein Embedding ist kein Hash. Untersuchungen zur Inversion von Embeddings haben lesbare Fragmente des ursprünglichen Textes allein aus dessen Vektor rekonstruiert. Ein unverschlüsselter Vektorindex neben einer verschlüsselten Datenbank kommt daher fast dem Offenliegen der Datenbank gleich. Compartment schreibt keinen unverschlüsselten Index auf die Festplatte.
Das Löschen ist ein tatsächliches Löschen. Jeder Datensatz besitzt einen eigenen Schlüssel, und compartment forget --shred zerstört diesen Schlüssel. Die zurückbleibenden Chiffretextdaten können dann von niemandem mehr entschlüsselt werden, auch nicht von Ihnen. Bei einem aus einer Datenbankdatei gelöschten Datensatz bleiben die Daten dagegen normalerweise in freien Seiten lesbar, bis sie überschrieben werden.
Der Offline-Betrieb ist die andere Hälfte. Es wird nichts hochgeladen. Daher gibt es kein Herstellerkonto, in dem Ihre Erinnerungen gespeichert sind, und keinen API-Key, durch den sie offengelegt werden könnten.
Was Compartment nicht schützt
Der Schutz endet an der Tresorgrenze. Diese Grenze liegt näher, als es den Anschein hat.
Der Agent liest Klartext. Recall entschlüsselt einen Speicher und übergibt den Text an den Agenten. Wenn dieser Agent ein gehostetes Modell ist, wird der Speicher innerhalb des nächsten Prompts an den Modellanbieter übertragen, genau wie alle anderen Inhalte im Kontextfenster. Die Verschlüsselung im Ruhezustand schützt die Datei. Sie schützt nicht den Abruf. Daher gelten die Regeln zum Halten von Geheimnissen aus KI-Agenten heraus weiterhin unverändert, auch wenn der Speicher verschlüsselt ist: Ein als Speicher abgelegtes Passwort ist ein Passwort, das Sie automatisch in einen Prompt einfügen lassen.
Ein entsperrter Tresor auf einem laufenden Rechner ist offen. Die Sicherheitshinweise des Projekts stellen das klar fest. Solange der Tresor entsperrt ist, liegen der Hauptschlüssel und der Arbeitssatz im RAM. Python kann nicht garantieren, dass ein Puffer gelöscht wird. Außerdem können Swap oder ein Ruhezustandsabbild diesen Speicher auf die Festplatte schreiben. Malware, die unter Ihrem Benutzerkonto läuft, muss die Verschlüsselung nicht brechen. Sie kann den bereits entsperrten Tresor abfragen.
Die Identität des Aufrufers ist deklarativ. Namespaces können pro Aufrufer eingeschränkt werden. Der Name des Aufrufers stammt jedoch vom Hostprozess. Ein Host, der über seinen Namen lügt, erhält daher die Berechtigungen, die er für sich beansprucht. Namespace-Berechtigungen dienen der Organisation. Sie sind keine Sicherheitsgrenze gegen ein bösartiges lokales Programm.
Sicheres Löschen erreicht keine Kopien. forget --shred zerstört den Schlüssel in der aktuellen Datei. Ein vor dem sicheren Löschen erstelltes Backup enthält diesen Datensatz weiterhin. Es lässt sich weiterhin mit der Passphrase dieses Tages öffnen.
Eine schwache Passphrase beendet die Diskussion. Argon2id macht jeden Versuch aufwendig. Eine Passphrase, die in einer Wortliste vorkommt, schützt es jedoch nicht.
Compartment aus einem festgelegten Release installieren
Compartment benötigt Python 3.11 oder neuer. Das Projekt entwickelt sich schnell weiter. Bis zum 10. August 2026 gab es bereits dreißig Versionen auf PyPI. Legen Sie daher die Version fest, statt bei der Installation die an diesem Tag aktuelle Version zu übernehmen.
python3 --version
pip install "compartment==4.6.0"
compartment --version
compartment initcompartment --version sollte die festgelegte Version ausgeben. Wenn die Shell compartment: command not found meldet, befindet sich das Installationsverzeichnis nicht in Ihrem PATH. Auf den meisten Systemen ist dieses Verzeichnis ~/.local/bin. pipx install compartment==4.6.0 und uv tool install compartment==4.6.0 vermeiden dieses Problem, indem sie ihre Pfade selbst verwalten.
compartment init fordert zweimal zur Eingabe einer Passphrase auf und zeigt dabei keine Zeichen an. Diese Passphrase ist der einzige Schlüssel. Das Projekt erzeugt weder ein Passwort noch eine Wiederherstellungsphrase. Das ist beabsichtigt: Die Software verwaltet keine Zugangsdaten, die Ihnen nicht vorliegen.
Prüfen Sie das Ergebnis, bevor Sie etwas damit verbinden.
compartment statusEin intakter Tresor meldet, dass er entsperrt ist. Wenn er als gesperrt gemeldet wird, führen Sie compartment unlock aus und geben Sie die Passphrase ein. Ein Neustart sperrt den Tresor erneut, weil die Zugangsdaten für den offenen Zustand von einem bootbezogenen Geheimnis abhängen. Unter macOS aktiviert compartment unlock --keychain den Neustart übergreifend erhaltenen Zugriff, indem diese Zugangsdaten im Systemschlüsselbund gespeichert werden.
Wo sich die Daten tatsächlich befinden
Der Standard-Tresor ist ~/.compartment/memory.vault. Mit --vault PATH können Sie bei jedem Befehl einen anderen Speicherort angeben. Alternativ verwenden Sie dafür die Umgebungsvariable COMPARTMENT_VAULT.
Diese eine Datei enthält den gesamten Datenspeicher. Sie beginnt mit einem Header, der die Formatversion und die Argon2id-Keyslots enthält. Darauf folgen die versiegelten Nutzdaten und anschließend Journaleinträge, die beim Hinzufügen neuer Erinnerungen angehängt werden. Jeder Journaleintrag enthält seine Länge und eine CRC-Prüfsumme (cyclic redundancy check) dieser Länge. Dadurch wird ein durch einen Absturz unvollständig geschriebener Eintrag als abgeschnittener Eintrag erkannt und nicht als Daten gelesen. Bei der Komprimierung wird der Tresor serialisiert und in eine temporäre Datei geschrieben. Anschließend wird fsync ausgeführt und die Datei an die endgültige Position umbenannt. Dadurch sieht ein lesender Prozess niemals einen unvollständig geschriebenen Tresor.
Der praktische Vorteil: Ein Backup-Skript kopiert genau einen Pfad. Der Nachteil: Sie können die Datei nicht mit grep durchsuchen und nicht in einem Texteditor reparieren. Wenn Sie Erinnerungen in einer mit cat lesbaren Form speichern und in git versionieren möchten, sind Memmys einfache lokale Speicherdateien die entgegengesetzte Lösung. Beide Varianten sind sinnvoll. Entscheidend ist, ob Sie eher einen gestohlenen Laptop oder ein nicht mehr funktionierendes Tool befürchten.
compartment uninstall entfernt die Software und behält den Tresor. Verwenden Sie --purge nur, wenn Sie das ausdrücklich beabsichtigen.
Verknüpfen mit einem Agenten
Ein Befehl bindet einen unterstützten Client an.
compartment integrate --list
compartment integrate claudeFür Claude Code legt der Befehl einen MCP-Servereintrag und einen PostToolUse-Hook in ~/.claude/settings.json an. Dabei wird die Datei zuerst gesichert. Außerdem installiert er eine /compartmentalize-Skill unter ~/.claude/skills/ und fügt in ~/.claude/CLAUDE.md einen verwalteten Block ein. Dieser weist den Agenten darauf hin, dass Compartment den dateibasierten Speicher ersetzt, den er bisher verwendet hat. Bestätigen Sie beide Teile:
compartment hook status
compartment recentUm den Server stattdessen manuell zu registrieren:
claude mcp add --scope user compartment -- \
compartment --vault ~/.compartment/memory.vault --caller claude-code serveJeder andere MCP-fähige Host verwendet denselben Server mit seinem eigenen Aufrufernamen.
{ "mcpServers": { "compartment": {
"command": "compartment",
"args": ["--vault", "/path/to/memory.vault",
"--caller", "your-agent-name", "serve"] } } }Vergeben Sie für jeden Host einen anderen Wert für --caller. Dieser Wert ist das Label, das im Audit-Log protokolliert wird, und der Schlüssel, gegen den Namespace-Berechtigungen geschrieben werden. Ein gemeinsamer Name macht beides unbrauchbar.
Wenn Claude Code bereits Fakten in eigene Speicherdateien geschrieben hat, zeigt compartment import-claude --dry-run, welche Inhalte verschoben würden, bevor etwas verschoben wird. Lesen Sie zuerst was Claude Code in seinen Speicherdateien ablegt, denn der Import eines Jahres an Notizen in einen neuen Vault führt dazu, dass sich ein Speicher mit Inhalten füllt, die niemand aufbewahren wollte.
Wie schnell ist ein lokaler Tresor
Dies sind die vom Projekt veröffentlichten Werte für einen Tresor in persönlicher Größe. Sie stammen aus der Dokumentation und nicht aus einem Lauf auf diesem System.
The data behind this chart
[
{
"label": "Store one memory, end to end",
"latency_ms": 40
},
{
"label": "Embed one memory, bundled model",
"latency_ms": 25
},
{
"label": "Hybrid search, median",
"latency_ms": 11.6
},
{
"label": "Vector search at 20k records, p95",
"latency_ms": 0.68
}
]Das Speichern einer Erinnerung wird mit 40 ms angegeben. Eine Vektorsuche über zwanzigtausend Datensätze benötigt beim 95. Perzentil 0.68 ms. Das Argument des Projekts für lokal gespeicherte Erinnerungen ist eine einfache Rechnung: Ein einzelner Round Trip über das Netzwerk zu einer gehosteten Memory-API dauert häufig länger als der Median von 11.6 ms für eine vollständige hybride Suche hier.
Zwei Entwurfsdetails erklären diese Suchwerte. Bei weniger als zwanzigtausend Datensätzen vergleicht Compartment die Abfrage mit jedem Vektor. Dadurch ist der Recall konstruktionsbedingt exakt und nicht approximativ. Oberhalb dieses Werts wechselt Compartment zu HNSW (hierarchical navigable small world), einem approximativen Index, der etwas Recall zugunsten höherer Geschwindigkeit aufgibt. Der Tresor speichert außerdem den SHA-256-Hash des Embedding-Modells und verweigert das Öffnen bei Verwendung eines anderen Modells. Vektoren aus zwei verschiedenen Modellen können ohne sichtbaren Fehler miteinander verglichen werden. Die zurückgegebenen Scores sind dann jedoch bedeutungslos.
Backups und die Kopie, die Sie nächstes Jahr noch öffnen können
Ein gesperrter Vault ist eine einzelne portable Datei. Für den Umzug genügt daher eine Kopie.
compartment lock
scp ~/.compartment/memory.vault other-machine:
compartment --vault memory.vault unlockSperren Sie den Vault zuerst. Wenn Sie ihn kopieren, während der Agent schreibt, kann der Kopiervorgang einen Journaleintrag mitten beim Anhängen erfassen. Die CRC-Rahmung ermöglicht es einem Leser zwar, dieses unvollständige Fragment am Ende zu überspringen. Der darin enthaltene Speicherinhalt ist dann jedoch verloren. compartment lock --sign versieht die Datei mit einem Ed25519-Manifest. Das Zielsystem kann dadurch prüfen, ob die Kopie vollständig angekommen ist, ohne die Passphrase zu benötigen.
Da die Datei bereits gesperrt ist, eignet sich gewöhnlicher Cloud-Speicher dafür. Genau hier zahlt sich die Verschlüsselung ruhender Daten unmittelbar aus: Das Backup-Ziel erhält keinen Speicherinhalt.
Beachten Sie zwei Punkte. Shredding erfasst keine Backups. Ein heute kryptografisch gelöschter Datensatz bleibt daher in der Kopie der letzten Woche für jeden lesbar, der die Passphrase der letzten Woche besitzt. Außerdem schreibt compartment export --plaintext den gesamten Vault unverschlüsselt. Das ist das richtige Werkzeug für die Migration zu einer anderen Lösung, aber die falsche Datei für ~/Downloads.
Bewahren Sie wenige Kopien auf und versehen Sie sie mit dem Datum. Ein Memory-Store wird zur Belastung, wenn ihn niemand bereinigt. Das ist der Grund, warum veraltete Agent-Memories die Retrieval-Ergebnisse unbemerkt verfälschen.
Schlüsselverwaltung, Rotation und der zweite Faktor
compartment rekey
compartment 2fa enable
compartment 2fa statusrekey ändert die Passphrase, indem der Master-Schlüssel im Keyslot der aktuellen Datei neu verpackt wird. Alte Kopien behalten die alte Passphrase, weil diese Bytes vor der Änderung versiegelt wurden und nichts zurückreicht, um sie nachträglich zu ändern. Rotieren Sie auch die Kopien, oder akzeptieren Sie, dass eine ausgemusterte Passphrase weiterhin etwas öffnet.
2fa enable fügt eine Keyfile als zweiten Faktor hinzu. Sie wird bei der Schlüsselableitung mit der Passphrase kombiniert, sodass beide zum Öffnen des Tresors erforderlich sind. Dadurch verdoppelt sich auch die Anzahl der Dinge, die Sie verlieren können. Bewahren Sie die Keyfile nicht auf dem Rechner auf, der den Tresor enthält.
Für Skripte und CI (continuous integration) kann die Passphrase über die Umgebungsvariable COMPARTMENT_PASSPHRASE übergeben werden. unlock --passphrase-stdin liest sie aus einer Pipe. Bevorzugen Sie die Pipe. Eine Umgebungsvariable ist für andere Prozesse desselben Benutzers lesbar und landet häufig in Job-Logs.
Die Audit-Historie ist per Hash verkettet. compartment audit verify durchläuft sie und meldet das erste unterbrochene Glied. Führen Sie den Befehl nach jeder Wiederherstellung aus, weil sich dabei eine unbemerkt gekürzte Datei zeigt.
Was passiert, wenn Sie die Passphrase verlieren
Es passiert nichts. Das ist so vorgesehen. Es gibt keine Zurücksetzung, keine Wiederherstellungsphrase und keine Adresse, an die Sie etwas schreiben können, weil außerhalb Ihres Gedächtnisses und Ihrer optionalen Schlüsseldatei keine Kopie des Schlüssels existiert. Der Tresor bleibt eine Datei mit zufällig wirkenden Bytes.
Der Wiederherstellungsplan gilt daher nicht für den Tresor. Er gilt für die Passphrase. Speichern Sie sie an dem Tag, an dem Sie compartment init ausführen, in einem Passwortmanager. Testen Sie sie anschließend: Sperren Sie den Tresor, entsperren Sie ihn ausschließlich mit den notierten Informationen und lassen Sie erst danach einen Agenten mit dem Befüllen beginnen.
Compartment oder ein Memory-Server
Compartment ist grundsätzlich für eine einzelne Maschine ausgelegt. Die gemeinsame Nutzung bedeutet, die gesperrte Datei zu kopieren oder Daten zu exportieren und zu importieren. Es gibt keinen gleichzeitigen Schreibzugriff. Ein Laptop und eine Workstation, die auf dieselbe Datei zugreifen, überschreiben daher jeweils die Änderungen des anderen.
Wenn mehrere Maschinen gleichzeitig auf denselben Memory-Bestand zugreifen müssen, ist das ein Serverproblem. Ein selbst gehosteter Mem0-Memory-Server auf einem VPS löst dieses Problem: ein Endpunkt, viele Clients und ein Memory-Bestand, der den Laptop überdauert. Die Kosten sollten klar benannt werden. Auf diesem Server läuft ein Prozess, der die darin gespeicherten Daten lesen kann. Ihr Bedrohungsmodell umfasst daher nun den VPS und alle Personen, die dessen API erreichen können.
Treffen Sie die Entscheidung anhand des tatsächlichen Verlusts, den Sie vermeiden möchten. Geht es um einen gestohlenen Laptop oder darum, dass ein Anbieter Ihre Notizen liest, ist ein verschlüsselter lokaler Datentresor die bessere Lösung. Geht es darum, dass ein Agent beim Wechsel der Maschine alles vergisst, ist der Server die bessere Lösung.
FAQ
Was schützt die Verschlüsselung von Compartment tatsächlich?
Sie schützt die Datei. Der Tresor ist mit XChaCha20-Poly1305 versiegelt, seine Keyslots sind mit Argon2id geschützt, und auch die Embedding-Vektoren sind verschlüsselt. Dadurch enthält eine gestohlene Festplatte oder ein älteres Backup nur Bytes, die nichts Lesbares ergeben. Ein entsperrter Tresor auf einem laufenden System ist nicht geschützt, weil der Master-Key geöffnet im RAM liegt. Außerdem steuert Compartment nicht, was ein Agent mit einem Speicher macht, nachdem dieser als Klartext zurückgegeben wurde.
Sind meine Erinnerungen vor meinem Model-Anbieter geschützt, wenn Compartment offline ist?
Nur bis sie abgerufen werden. Speicherung und Suche erfolgen ohne Netzwerk, und das Embedding-Modell läuft lokal. Beim Schreiben verlässt daher nichts das System. Beim Lesen erhält der Agent Klartext. Wenn dieser Agent ein gehostetes Modell verwendet, gelangt die Erinnerung in den Prompt und wird wie der übrige Inhalt des Kontextfensters an den Anbieter übertragen. Speichern Sie niemals ein Zugangsdaten als Erinnerung.
Was passiert, wenn ich meine Compartment-Passphrase verliere?
Der Tresor ist absichtlich nicht wiederherstellbar. Compartment erzeugt weder einen Seed noch eine Recovery-Phrase und verwahrt keine Zugangsdaten, die nicht bereits in Ihrem Besitz sind. Daher kann nichts zurückgesetzt werden. Bewahren Sie die Passphrase in einem Passwortmanager auf. Halten Sie jede 2FA-Schlüsseldatei von dem System fern, auf dem der Tresor gespeichert ist. Bestätigen Sie außerdem, dass Sie eine Kopie entsperren können, bevor der Tresor Daten enthält, deren Verlust problematisch wäre.
Können zwei Systeme denselben Compartment-Tresor verwenden?
Nicht gleichzeitig. Ein gesperrter Tresor ist eine einzelne portable Datei. Der dokumentierte Ablauf besteht darin, den Tresor zu sperren, ihn zu kopieren und anschließend auf dem anderen System mit --vault zu entsperren. Es gibt keinen gleichzeitigen Zugriff. Wenn zwei Systeme in dieselbe Datei schreiben, gehen Erinnerungen verloren. Verwenden Sie einen Memory-Server, wenn Sie das benötigen.