Zum Artikel springen
HB CodeDocsApp herunterladen

HandbuchArchitektur

Speichereigentum

Wem bei Codex und bei Claude welche Datenbank und welcher Ordner gehört, warum HB Code die Dateien eines Agenten nie selbst öffnet, welche Tabellen eine Session mit ihrem Agenten verknüpfen, was das Löschen einer Session entfernt und wie die atomare Identitätsreservierung hinter der Outbox arbeitet.

Gegen den Quellcode geprüft am 5. Oktober 2026

Auf dieser Seite

Trennen Sie die Speicher nach Inhaber

Jeder Agent speichert seine Unterhaltungen selbst. HB Code speichert die Verknüpfung von einer Session zur Unterhaltung des Agenten, die Outbox und den Live-Zustand. Eine Unterhaltung liest HB Code nur über die Schnittstelle des Agenten: das Protokoll des Codex-App-Servers oder das Claude Agent SDK im Agent-Host.

FrageCodexClaude
Wo liegt das Transkript?Im Profil-Home codex/profiles/<uuid>/home unter den App-Daten von HB Code oder unter dem Pfad eines angehängten Rollouts.Im Claude-Hauptordner unter projects. Der Hauptordner ist CLAUDE_CONFIG_DIR, wenn der Desktop diese Variable hat, sonst ~/.claude.
Welche Identität verknüpft die Session?codex_session_links: profile_id, codex_thread_id und ein optionaler rollout_path.claude_sessions: native_session_id, eindeutig.
Wer liest den Verlauf?Der Codex-App-Server-Kindprozess des Profils, bei thread/items/list.Ein Agent-Host-Prozess, der für eine Anfrage startet. Er ruft getSessionMessages des SDK auf und schneidet die Seite zu.
storageFormat in der Übertragungindexednative
Wo liegt die Befehlsausgabe?Der Desktop hängt den Live-Stream an eine Datei in codex-command-outputs an und katalogisiert sie in codex_command_outputs. Ausgabe, die Codex aufbewahrt, wird über den App-Server gelesen.Nur im Transkript. HB Code speichert kein Byte der Ausgabe. Jeder Lesevorgang eines Bash-Ergebnisses sendet die Host-Anfrage toolOutput.
Was speichert HB Code selbst?codex_profiles, codex_session_links, codex_command_outputs, codex_command_output_pending_appends und die Ausgabedateien.claude_sessions, claude_operations, die Ordner hinzugefügter Konten und die ID des aktiven Kontos in app_settings.
Jeder Agent bewahrt seine Transkripte selbst auf, und HB Code erreicht sie nur über diesen Agenten
Jeder Agent bewahrt seine Transkripte selbst auf, und HB Code erreicht sie nur über diesen AgentenEin Computer mit drei Prozessen links und den Ordnern, die sie öffnen, rechts. Der App-Daten-Ordner von HB Code enthält appdata.db, die Dateien für Befehlsausgabe und Anhänge, einen Home-Ordner je Codex-Profil und einen Ordner je hinzugefügtem Claude-Konto. Die Desktop-Laufzeit öffnet ihre eigene Datenbank und ihre Dateien. Sie legt den Codex-Profilordner an, löscht ihn und öffnet nie eine Datei im Home. Nur der Codex-App-Server öffnet das Home, und er öffnet einen angehängten Rollout unter einem beliebigen anderen Pfad, wenn eine Anfrage ihn nennt. Ein Claude-Kontoordner behält die Anmeldeeinträge seines Kontos, und jeder andere Eintrag ist eine Verknüpfung, die den App-Daten-Ordner verlässt und in den Claude-Hauptordner zeigt. Der Claude-Agent-Host läuft mit dem Ordner des aktiven Kontos, und jeder Verlaufslesevorgang läuft mit dem Hauptordner.
Ihr Computer
ai.hbcode · App-Daten
Codex app-serverein Kindprozess pro Profilpaar
HB Code DesktopRust-Laufzeit
Claude-Agent-Hostein Run nutzt den Ordner des aktiven Kontos, ein Verlaufs­lesevorgang den Hauptordner
JSON-RPC über stdio
JSON-Zeilen über stdio
angehängter Rolloutbeliebiger Pfad · Codex öffnet ihn, wenn eine Anfrage ihn nennt
~/.codexein separates Codex-Home, nie durchsucht
codex/profiles/<uuid>/ · von HB Code angelegt und gelöscht
home/ · nur von Codex geöffnet
sessions/ · archived_sessions/ · .jsonl · .jsonl.zstprivate SQLite · auth.json
appdata.dbSession-Links, Outbox, Live-Overlay
Befehlsausgaben und Anhängecodex-command-outputs/ · pasted-images/
claude/accounts/<uuid>/ · von HB Code angelegt und entfernt
bleibt in diesem Ordner
.claude.json.credentials.jsonbackupsstatsig
Verknüpfungen in den Hauptordner
projects/settings.jsonjeder andere Eintrag
symbolische Links
Claude-Hauptordner · gehört Claude Code~/.claude oder CLAUDE_CONFIG_DIR · projects/<project>/<session>.jsonl
jedes Lesen des Verlaufs
  • HB-Code-Datenappdata.db · codex-command-outputs/ · pasted-images/

    Die Desktop-Laufzeit öffnet diese selbst: SQLx für die Datenbank, einfache Dateizugriffe für Codex-Befehlsausgabe und Chat-Anhänge.

  • Codex-Homecodex/profiles/<uuid>/home/

    HB Code legt den Ordner an, startet Codex mit ihm als CODEX_HOME und löscht den ganzen Profilordner, wenn Sie das Profil entfernen, außer eine Session verknüpft noch einen Rollout darin. HB Code öffnet nie eine Datei darin. Der Verlauf kommt über thread/items/list zurück.

  • Startprüfung--allowed-storage-root = CODEX_HOME = sqlite_home

    Der gebündelte app-server startet nur, wenn alle drei auf denselben Ordner zeigen, sodass Codex seine Datenbanken nirgendwo sonst ablegen kann.

  • Claude-Kontoordnerclaude/accounts/<uuid>/

    Ein Ordner für jedes Konto, das Sie hinzufügen. Er behält .claude.json, die zugehörige Sperrdatei, .credentials.json, backups und statsig. HB Code verknüpft jeden anderen Eintrag der obersten Ebene des Hauptordners hinein und ersetzt nie einen Eintrag, den der Ordner schon hat.

  • Claude-Hauptordner~/.claude · CLAUDE_CONFIG_DIR

    Er gehört Claude Code. Alle Konten speichern ihre Transkripte über die Verknüpfung projects hier. Der Agent-Host liest sie mit dem Claude Agent SDK, und jeder Verlaufslesevorgang startet den Host mit diesem Ordner, egal welches Konto aktiv ist.

Die Abbildung zeigt nur den Desktop-Computer. Zwei Speicher liegen außerhalb des Desktops: die Serverdatenbank und das Telefon. Die letzten zwei Zeilen der folgenden Tabelle nennen, was jeder enthält. Keiner enthält ein Transkript.

SpeicherInhaber und InhaltZugriffsregel
HB Code appdata.dbProduktmetadaten des Desktops, Session-Verknüpfungen für beide Agenten, Outbox-Operationen, Remote-Idempotenz, Live-Overlay-Zustand und Messwerte der Tariflimits.HB-Code-Rust-Repositories verwenden SQLx und SQLite.
App-eigenes Codex-ProfilverzeichnisDer Codex-Kindprozess besitzt seine privaten Datenbanken, Auth/Konfiguration und den normalen zugehörigen Session-Speicher.Verwenden Sie das App-Server-Protokoll. HB Code darf das private SQLite-Schema des Kindprozesses nicht abfragen.
Eine ausdrücklich gewählte Codex-UnterhaltungsquelleDer exakte verknüpfte Transkriptpfad und die Thread-Identität definieren die Quelle.Greifen Sie über pfadbezogene App-Server-Methoden auf die ausgewählte Quelle zu. Suchen Sie in anderen Verzeichnissen nicht nach einem Ersatz.
Claude-Hauptordner (~/.claude oder CLAUDE_CONFIG_DIR, wenn gesetzt)Claude Code gehören die gespeicherten Transkripte, die Einstellungen und die Anmeldung.Die Desktop-Laufzeit parst nie ein Transkript. Der Agent-Host liest Transkripte über das Claude Agent SDK.
Claude-Kontoordner (claude/accounts/<uuid> in den App-Daten)Die Anmeldung eines hinzugefügten Kontos: .claude.json, die zugehörige Sperrdatei, .credentials.json, backups und statsig. Alle anderen Einträge, auch projects, sind Verknüpfungen in den Hauptordner.HB Code legt den Ordner und die Verknüpfungen an und entfernt den Ordner zusammen mit dem Konto. Das Entfernen löscht die Verknüpfungen und folgt ihnen nie.
Server PostgreSQLKonto- und Dienstdaten, die von Server-Repositories und Datenbankrollen gesteuert werden.Trennen Sie Migrations-, System-Laufzeit- und Mandanten-Laufzeit-Prinzipale.
TelefonzustandAnsichtszustand, lokale Kopien ungesendeter Nachrichten sowie Vorschau- und Ausgabe-Caches.Betrachten Sie den Desktop als Autorität für Projekte, Ausführung, Outbox und Dateien.

Jeder Lesevorgang eines Claude-Transkripts läuft mit dem Hauptordner, egal welches Konto aktiv ist. Ein gespeichertes Transkript braucht keine Anmeldung, und jedes Konto speichert in denselben Ordner projects. HB Code legt diesen Ordner im Hauptordner an, bevor es ein Konto verknüpft. Schlägt die Verknüpfung projects fehl, schlägt die Einrichtung des Kontos mit einem Fehler fehl. Eine fehlgeschlagene Verknüpfung für einen anderen Eintrag schreibt nur eine Warnung ins Protokoll.

Der Agent-Host öffnet drei Arten von Claude-Dateien direkt, weil das SDK sie nicht liefert: die Datei meta.json neben einem Subagenten-Transkript, den Run-Datensatz eines Workflows und das Feld effort im ersten gespeicherten Assistenten-Turn eines Subagenten. Er liest sie und schreibt sie nie.

Das Asset-Protokoll der WebView ist auf Medienvorschauen unter dem App-Cache beschränkt, sodass keine private Laufzeitdatei von der Seite erreichbar ist.

Speicheridentität und Ausführungsidentität unterscheiden sich

Die Spalte sessions.chat_agent enthält codex oder claude. Sie wird beim Anlegen der Session gesetzt, und eine Session-Aktualisierung behält sie bei. Sie entscheidet, welche Identitätstabellen eine Session nutzt.

Eine Session-Zeile verweist auf die Identitätstabellen genau eines Agenten
Eine Session-Zeile verweist auf die Identitätstabellen genau eines AgentenZwei Sessions nebeneinander in appdata.db. Die Codex-Session hat eine Zeile in codex_session_links, die ein Profil, einen Thread und einen optionalen Rollout-Pfad nennt, und die Profilzeile zeigt auf das Profil-Home auf der Festplatte. Die Claude-Session hat eine Zeile in claude_sessions, die die Claude-Session-ID nennt, und je gesendeter Nachricht eine Zeile in claude_operations, die die UUID dieser Benutzernachricht im Transkript nennt. Eine Session hat nie Zeilen auf beiden Seiten.
Eine Codex-Session
sessionschat_agent = codex
codex_session_linksprofile_id · codex_thread_id · rollout_path · status
Codex-Threadgelesen mit thread/items/list
codex_profilesprofile_id · status
Profil-Homecodex/profiles/<profile_id>/home/
Eine Verknüpfung mit Status available je Profil und Thread. Eine Profilzeile, die eine Verknüpfung nennt, kann nicht gelöscht werden.
Eine Claude-Session
sessionschat_agent = claude
claude_sessionsnative_session_id, eindeutig
Claude-Unterhaltungprojects/<project>/<native_session_id>.jsonl
claude_operationsoperation_id → native_message_id · run_id
Benutzernachricht in diesem Transkriptuuid = native_message_id
Eine Claude-Unterhaltung gehört zu einer Session. Eine zweite Session, die sie fortsetzt, erhält einen Konflikt.
  • sessions.chat_agentcodex · claude

    Wird beim Anlegen der Session gesetzt und von einer späteren Aktualisierung nicht geändert. Sie entscheidet, welche Seite eine Session hat. Der Standardwert der Spalte ist codex.

  • codex_session_linksapp_session_id → profile_id, codex_thread_id, rollout_path, status

    Ein partieller eindeutiger Index erlaubt eine Verknüpfung mit dem Status available je Profil und Thread. Der Status ist available, profile_required oder unavailable. Der Fremdschlüssel profile_id verhindert das Löschen einer Profilzeile, die eine Verknüpfung noch nennt.

  • claude_sessionsapp_session_id → native_session_id (eindeutig)

    Einer App-Session gehört eine Claude-Unterhaltung. Eine zweite Session, die dieselbe Unterhaltung fortsetzen will, scheitert mit „This Claude conversation is already open in another session.“

  • claude_operations(app_session_id, operation_id) → native_message_id, run_id, display_text, attachments

    Wird vor dem Senden geschrieben. Eine Wiederholung derselben Operation behält die erste UUID und die erste Run-ID. Eine Wiederholung mit anderem Text oder anderen Anhängen scheitert mit einem Konflikt.

Ein App-eigenes Codex-Profil hat eine stabile, opake UUID in kanonischer Kleinschreibung. Eine E-Mail-Adresse und ein Dateisystempfad sind keine Profilidentität. Die Tabelle codex_profiles enthält eine Zeile je Profil mit dem Status signed_out, authenticated oder unavailable und den Kontospalten, die der App-Server gemeldet hat.

Indexed und Exact sind Entwurfsnamen für die zwei Leserouten von Codex. Im Code entscheidet ein Prädikat: Eine Verknüpfung, deren Rollout-Pfad außerhalb des Laufzeit-Homes liegt, ist eine externe exakte Quelle. Beide Routen rufen thread/items/list auf dem Codex-App-Server auf. Ein exakter Lesevorgang fügt path und historySources hinzu. Das übertragene storageFormat einer Codex-Session bleibt auf beiden Routen indexed. Eine Operation löst ihre Route einmal auf und behält sie.

Eine Claude-Session hat keine Profilverknüpfung, weil jedes Claude-Konto dieselben Transkripte liest. HB Code speichert nicht, ob ein Transkript existiert. Der Host antwortet mit missing, wenn Claude die Unterhaltung noch nicht gespeichert hat, und der Desktop zeigt dann eine leere Timeline. Die UUID in claude_operations ist die UUID der Benutzernachricht, die der Desktop sendet. Über sie findet der Desktop diese Nachricht im Transkript. Die Zeile enthält auch den Nachrichtentext und die Anhänge.

Der exakte Quellzugriff hat bewusste Grenzen

Ein exakter Lesezugriff setzt den Verlauf aus Bytebereichen der Dateien zusammen, die der Desktop nennt
Ein exakter Lesezugriff setzt den Verlauf aus Bytebereichen der Dateien zusammen, die der Desktop nenntFür eine exakte Quelle sendet der Desktop den Rollout-Pfad und die anderen Rollouts der Session als historySources. Der Codex app-server spielt die Bytes des Eltern-Rollouts bis zu dem Offset ab, den das Kind vermerkt hat, dann die eigenen Bytes des Kinds, und bindet den Cursor an einen Digest genau dieser Bytes. Anhängen an das Kind lässt den Cursor gültig, und das Umschreiben gelesener Bytes erzwingt ein Neuladen. Ein Eltern-Rollout, der nicht aufgeführt ist, lässt den Lesezugriff scheitern, auch wenn seine Datei im selben Ordner liegt. Die Größen sind Beispiele.
Codex app-serverthread/items/list · threadId · path · historySources · cursor
Eltern-Rollout in historySources aufgeführt
parent.jsonl
geerbtes Präfix
nicht gelesen
history_base.end_byte_offset
child.jsonl · path
eigene Bytes
umgeschrieben oder gekürzt: reloadRequired
später angehängt: gültig
ein Replay
Eltern-Präfix
Kind
der Digest des Cursors deckt diese Bytes ab
Eltern-Rollout nicht aufgeführt
child.jsonl · path
history_base
parent.jsonlim Ordner, in historySources fehlt es
missingHistorySource: Der Lesezugriff scheitert. Kein Ordner und kein Codex-Home wird durchsucht.
  • historySources[{ rolloutId, path }]

    Vom Desktop aus den absoluten Pfaden der anderen verknüpften Rollouts der Session gebaut, die er aufzeichnet, sobald Codex ein Kind meldet. Nur hier sucht der app-server nach einem Vorfahren.

  • history_basethread_id · end_byte_offset

    Session-Metadaten am Anfang der Datei des Kinds: der Vorfahren-Rollout und das Byte, an dem der geerbte Teil endet. Der app-server folgt bis zu 256 Vorfahren und lehnt einen Zyklus ab oder einen Vorfahren, der kürzer als dieser Offset ist.

  • reloadRequiredFehler data.code

    Der Cursor trägt einen Digest aller Bytes, die er abdeckt. Anhängen lässt ihn gültig. Ändern sich diese Bytes, scheitert die nächste Seite, und der Desktop zeigt einen gewöhnlichen Ladefehler. Nur sourceUnavailable bietet an, die Quelldatei neu zu wählen.

BedingungVertrag
Erforderliche Ancestor-Quelle ist nicht vorhandenDer app-server lässt den Lesezugriff mit missingHistorySource scheitern, auch wenn die Datei neben dem Kind liegt. Der Desktop zeigt einen allgemeinen Ladefehler. Nur sourceUnavailable wird zu CODEX_SOURCE_ERROR, das anbietet, die Quelldatei neu zu wählen.
Quelle wird ersetzt oder gekürztDer app-server bindet jeden Cursor an einen Digest der gelesenen Bytes. Anhängen lässt Cursor gültig. Kürzen oder Umschreiben lässt die nächste Seite mit reloadRequired scheitern, angezeigt als allgemeiner Ladefehler. „Timeline source changed; reload the timeline“ ist der Fehler des Desktops, wenn sich die verknüpfte Quelle selbst geändert hat.
Die aktuelle Methode nimmt nur eine Thread-ID entgegenBieten Sie diese Mutation für eine exakte externe Quelle nicht an, wenn sie den ausgewählten Pfad nicht adressieren kann. Dies gilt für die Operationen aktuelles Ziel, Rollback und persistierte Thread-Settings.
Ein anderes mitgeliefertes Sidecar besitzt den WriterGeben Sie die Thread-Ownership frei, bevor eine andere Runtime sie wiederaufnimmt.

Vor einem Versand oder Anhängen gibt der Desktop den Thread von jedem anderen Profilserver frei, den er betreibt. Das koordiniert die mitgelieferten Sidecars dieses Prozesses. Es hindert keinen fremden externen Codex-Prozess daran, dieselbe Quelle zu schreiben. Stoppen Sie einen externen Schreiber, bevor Sie diese Unterhaltung in HB Code fortsetzen.

Die Outbox verwendet einen atomaren Identitätsanspruch

Wichtige Beziehungen in der Produktdatenbank (schematisch, kein Migrations-SQL)
workspace_chat_outbox
  session_id → entries_json, updated_at

workspace_chat_outbox_operation_identity
  (session_id, operation_id) → request_fingerprint

remote_rpc_idempotency
  scope_key → request_fingerprint, state, response_json, lease, expiry

chat_operation_ledger
  (app_session_id, operation_id) → status, result_json

chat_session_messages
  operation_id → recipient, sender, sender_call_id, sender_run_id, sender_thread_id, chain_id, hop, delivery

chat_live_timeline_overlays
  (app_session_id, timeline_target_id) → revision, snapshot_json

chat_live_timeline_overlay_revisions
  singleton → one global revision sequence

chat_pending_terminal_overlay_cleanups
  (app_session_id, run_id)

agent_usage_samples
  agent, account_key, window_kind → used_percent, resets_at, sampled_at

Fünf Tabellen tragen das Präfix chat_ und dienen Codex- und Claude-Sessions gleichermaßen. Vier davon hatten bis zu einer Umbenennungsmigration das Präfix codex_. chat_session_messages ist neuer. Tabellen, die nur Codex nutzt, behalten das Präfix codex_, zum Beispiel codex_session_links und codex_command_outputs.

TabelleInhaltRegel
chat_operation_ledgerDer Status und das gespeicherte Ergebnis einer Chat-Operation.Schlüssel: App-Session-ID und Operations-ID. Das Löschen einer Session entfernt die Zeilen der Basis-Session, ihres Alias ::skills-agent und der Nachfahren dieses Alias.
chat_session_messagesDer Datensatz einer Nachricht, die ein Agent in einer Session an eine andere Session gesendet hat.Schlüssel: Operations-ID. Das Paar aus Absender-Session und Absender-Aufruf-ID ist eindeutig, und hop ist mindestens 1. delivery ist sent, needs-approval oder declined.
chat_live_timeline_overlaysDas gespeicherte Live-Overlay einer Timeline als JSON.Schlüssel: App-Session-ID und Timeline-Ziel-ID. Bei Claude ist das Ziel die App-Session-ID für die Unterhaltung und die Subagenten-ID für einen Subagenten.
chat_live_timeline_overlay_revisionsEine Zeile mit einem Revisionszähler für alle Overlays.Der Zähler wächst nur, bis 2^53 − 1. Ein neues Ziel kann die Revision eines gelöschten Ziels nicht wiederverwenden.
chat_pending_terminal_overlay_cleanupsDie beendeten Runs, deren Live-Zeilen noch nicht vollständig durch gespeicherten Verlauf ersetzt sind.Schlüssel: App-Session-ID und Run-ID. Die Zeile wird geschrieben, bevor der Desktop den aktiven Run vergisst, und bleibt, bis jede Timeline dieses Runs abgeglichen ist.

save_workspace_chat_outbox_with_operation_identity öffnet eine Transaktion. Ihr INSERT … ON CONFLICT aktualisiert die Identitätszeile nur, wenn der vorhandene Fingerabdruck dem übermittelten gleicht. Betrifft diese Anweisung nicht genau eine Zeile, wird die Transaktion zurückgerollt. Danach schreibt sie das JSON der Outbox-Einträge per Upsert. Für eine Nachricht aus einer anderen Session fügt sie außerdem die Zeile in chat_session_messages ein, und eine Zeile mit derselben Operations-ID bleibt unverändert. Dann folgt der Commit. Eine Session-Nachricht wird nie ohne ihren Datensatz eingereiht und nie ohne ihren Warteschlangeneintrag aufgezeichnet. Die Identitätszeile hat die Basis-Session als Schlüssel, während das Outbox-JSON unter der Alias-Session gespeichert wird. So lässt sich dieselbe Operation von jedem Alias im Geltungsbereich finden.

Die Tabelle remote_rpc_idempotency ist das zweite Register. Sie behält das Ergebnis jeder gelisteten Remote-Mutation 48 Stunden lang über Desktop-Neustarts hinweg, sodass ein Telefon, das nach der Rückkehr des Desktops erneut versucht, weiterhin die gespeicherte Antwort erhält.

agent_usage_samples enthält Messwerte der Tariflimits für beide Agenten. Der Kontoschlüssel ist die ID des aktiven Codex-Profils oder die Claude-Konto-ID, also default oder eine UUID. Ein Messwert wird übersprungen, wenn der neueste Messwert desselben Fensters jünger als 10 Minuten ist, dieselbe Rücksetzzeit hat und um weniger als 0,5 Prozent abweicht. Messwerte, die älter als 35 Tage sind, werden gelöscht.

Was das Löschen einer Session entfernt

delete_session_with_scoped_references entfernt die HB-Code-Zeilen einer Session in einer SQLite-Transaktion. Das Löschen sendet keine Anfrage an Codex und keine an Claude. Das Transkript des Agenten bleibt dort, wo der Agent es gespeichert hat.

DatenWirkung des Löschens
Zeilen der Session in codex_command_outputsIn der Transaktion gelöscht. Ihre Zeilen für ausstehende Anhängevorgänge verschwinden mit. Die Ausgabedateien werden nach dem Commit entfernt.
chat_operation_ledgerDie Zeilen der Basis-Session, ihres Alias ::skills-agent und der Nachfahren dieses Alias werden gelöscht.
codex_session_linksZeilen mit dieser Basis-Session werden gelöscht.
workspace_chat_outboxZeilen derselben drei Geltungsbereiche werden gelöscht.
project_workspace_stateactive_session_id wird NULL, wo es die Session nannte. Die Zeile bleibt.
sessionsDie Zeile wird zuletzt gelöscht.
claude_sessions, claude_operations, workspace_chat_outbox_operation_identity, chat_session_messages, chat_live_timeline_overlays, chat_pending_terminal_overlay_cleanupsDurch ON DELETE CASCADE von der Zeile in sessions gelöscht. Ein Datensatz einer Session-Nachricht verschwindet, wenn ihr Absender oder ihr Empfänger gelöscht wird.
Arbeitsspeicher des laufenden DesktopsNach dem Commit leert der Desktop die zwischengespeicherten Outbox-Einträge, die Einträge der Videoanalyse und das Operations-Ledger der Session im Arbeitsspeicher.
Codex-Thread und Rollout-DateienNie angefasst. Sie bleiben im Profil-Home oder unter dem angehängten Pfad.
Claude-TranskriptNie angefasst. Es bleibt im Claude-Hauptordner, und eine neue Session kann es fortsetzen.

Der Zugriff auf Projektdateien bildet eine eigene Grenze

Entfernte Dateizugriffe laufen mit dem Dateisystemzugriff des Desktop-Benutzers. resolve_desktop_file_read_path expandiert eine Home-Abkürzung, hängt einen relativen Pfad an das kanonische Projektverzeichnis und kanonisiert das Ergebnis. Die Funktion erzwingt keine Projekteinschließung, und die Entwurfsnotiz sagt das mit Absicht. allowExternalFile und allowExternalMedia entscheiden nur, welcher Auflöser zuerst versucht wird, sodass ein authentifizierter Companion so oder so Pfade außerhalb des gewählten Projekts öffnen kann. ensure_path_within_project, das Elternkomponenten zurückweist und die kanonische Wurzel prüft, existiert für desktop-lokale Operationen.

App-verwaltete Chat-Anhänge liegen in pasted-images unter dem App-Datenverzeichnis, und ein externer Medienlesezugriff für einen Anhang muss als Bild, Video, Audio oder Dokument klassifiziert sein. Das Telefon verwendet nie sein eigenes Home-Verzeichnis.