Session-Temp-Dateien sprengen nicht mehr deine RAM-Disk: terminal.temp_dir und 72-Stunden-Auto-Cleanup

Es ist Samstagabend und du lässt Hermes einen Batch-Job laufen: Hintergrundprozesse schreiben Logs, eine Code-Execution-Sandbox spuckt Zwischenergebnisse aus, mehrere Tool-Calls legen zwischendurch Dateien auf der Platte ab. Um 3 Uhr nachts weckt dich eine „Disk full“-Warnung – und der Übeltäter ist nicht dein Projektverzeichnis, sondern /tmp, das Verzeichnis, an das du nie denkst. Das ist kein Randfall: Viele Distributionen (vor allem Arch-basierte Setups) mounten /tmp als tmpfs-RAM-Disk, deren Kapazität nur einen Bruchteil deines physischen Speichers ausmacht. Sobald Hermes ein paar Hintergrundprozesse startet, ist die RAM-Disk voll – gefolgt von rätselhaften Schreibfehlern, abgestürzten Prozessen und abgebrochenen Aufgaben. Der am 28. August gemergte Fix (PR #97205) räumt das mit einem Schlag aus dem Weg: Session-Temp-Dateien landen jetzt standardmäßig auf der echten Platte, und ein Config-Key erlaubt dir, sie jederzeit zu verlegen.
Ursache: Temp-Dateien auf einer tmpfs
Hermes erzeugt während der Arbeit einen ganzen Stapel „Session-Temp-Artefakte“: Log-, PID- und Exit-Dateien von Hintergrundprozessen (das hermes_bg_*-Triplett), Code-Execution-Sandboxes und auf die Platte gespiegelte Tool-Ergebnisse. Vor dieser Änderung landeten diese Dateien standardmäßig in /tmp.
Auf vielen Linux-Distributionen ist /tmp kein echtes Plattenverzeichnis, sondern eine tmpfs: Die Daten liegen im RAM, Lesen und Schreiben sind schnell, aber die Kapazität ist klein (typischerweise die Hälfte des physischen Speichers oder weniger), und beim Reboot ist alles weg. Läuft Hermes heiß, türmen sich die Hintergrundprozesse, und die RAM-Disk ist in Minuten leer. Schlimmer noch: Schreibfehler schlagen selten sofort fehl – sie tauchen mitten in der Aufgabe auf verwirrende Weise auf.
Die Beschreibung des Maintainers ist unverblümt: „Viele Distributionen (Arch-basierte Setups und unsere eigenen Maschinen) mounten /tmp als kleine RAM-gestützte tmpfs, und Hermes füllt sie unter Last.“ Selbst die Rechner des offiziellen Teams laufen da hinein.
Der Fix: Temp-Dateien standardmäßig auf echtem Speicher
Die Auflösungsreihenfolge nach der Änderung:
terminal.temp_dir-Config-Key (explizit, höchste Priorität)TMPDIR/TMP/TEMP-Umgebungsvariablen~/.hermes/cache/terminal(neuer Standard)/tmp(letzter Notfall-Fallback)
Solange du also nichts konfigurierst, landen Session-Temp-Dateien jetzt im eigenen Cache-Verzeichnis von Hermes – echter Speicher, Kapazität kein Thema mehr. Der Windows-Zweig spiegelt denselben Standard, das Verhalten ist also plattformübergreifend konsistent.
72-Stunden-Auto-Cleanup
Die Änderung bringt auch einen cleanup_terminal_temp_cache()-Pruner mit: Temp-Dateien, die älter als 72 Stunden sind, werden automatisch gelöscht. Dabei steckt ein durchdachtes Detail dahinter – das hermes_bg_*-Triplett (log / pid / exit) altert als Gruppe: Die frische .log-Datei eines laufenden Hintergrund-Dienstes „beschützt“ ihre alt aussehenden .pid- und .exit-Dateien vor dem Löschen. So verliert ein noch laufender Dienst nie seine PID-Datei und wird unauffindbar.
Anderer Speicherort? Zwei Wege
Wenn du Session-Temp-Dateien lieber woanders behältst (eine dedizierte SSD, ein großes Daten-Volume), hast du die Wahl.
Option 1: der terminal.temp_dir-Config-Key
# config.yaml
terminal:
temp_dir: /var/hermes-tmp
Option 2: die Umgebungsvariable TERMINAL_TEMP_DIR
export TERMINAL_TEMP_DIR=/var/hermes-tmp
Der Config-Key schlägt die Umgebungsvariable, und beide schlagen den Standard. Eine Einschränkung: Wenn du Temp-Dateien explizit woanders hinzeigst, gehört dir dieses Verzeichnis – das Auto-Cleanup gilt nur für den verwalteten Standard ~/.hermes/cache/terminal, niemals für deinen eigenen Pfad (der Kommentar im Quellcode ist eindeutig: „selbst gesetzte terminal.temp_dir-Pfade verwaltet der User selbst“).
Was das für dich bedeutet
- Arch- und andere tmpfs-Nutzer: Du profitierst sofort nach dem Upgrade – der Standard liegt bereits auf der echten Platte, keine Config nötig;
- Leute, die feingranulare Kontrolle wollen: Es gibt jetzt einen Config-Key und eine Umgebungsvariable, du entscheidest also, wo Temp-Dateien leben;
- Leute, die sich vor Platten-Müll sorgen: Das 72-Stunden-Auto-Cleanup mit gruppenbasiertem Altern sorgt dafür, dass Dateien nie ewig liegen bleiben.
Die Änderung behebt nebenbei auch einen alten Schmerzpunkt: Wenn /tmp früher voll lief, scheiterten Sandboxes in einer Session still – diese „rätselhaften Schreibfehler“ sind jetzt deutlich seltener. Läuft dein Hermes noch auf einer älteren Version, holt dich hermes update auf den neuesten Build mit dieser Änderung.
Weiterlesen
- Neugierig auf die anderen Stellschrauben der Terminal-Backends von Hermes? Wirf einen Blick in unsere Befehlsreferenz hermes-config;
- Interessiert an Hintergrundprozessen und Sandbox-Management? Lies den Guide zu Terminal-Backend-Plugins;
- Du willst einen systematischen Blick auf die Hermes-Konfiguration? Schau in den Tuning-Guide für lange Aufgaben.