once ist ein in Go geschriebenes Kommandozeilenwerkzeug für macOS und Linux, das die Standardausgabe (stdout) von Befehlen in einem lokalen Hintergrund-Daemon zwischenspeichert, um wiederholte Ausführungen zu vermeiden. Typische Anwendungsfälle umfassen das Abrufen von Passwörtern oder Tokens aus Managern wie 1Password, ohne für jeden Lesevorgang eine erneute biometrische Authentifizierung per Fingerabdruck zu erfordern. Die Zwischenspeicherung erfolgt im Arbeitsspeicher mit konfigurierbarer Gültigkeitsdauer (TTL) und wird über Unix-Sockets sowie HMAC-SHA256-Schlüssel abgesichert.
Wichtigste Punkte
Technologie-Stack: Entwickelt in Go (Version 1.27+) und nutzt ausschliesslich die Standardbibliothek ohne externe Abhängigkeiten.
Plattformunterstützung: Speziell für macOS und Linux konzipiert, basierend auf lokalen Unix-Sockets.
Daemon-Architektur: Ein ressourcenschonender, per-User-Hintergrund-Daemon speichert Ergebnisse nur im Arbeitsspeicher und beendet sich automatisch, sobald alle Cache-Einträge abgelaufen sind.
Sicherheitsmodell: Verwendet Unix-Sockets mit restriktiven Dateiberechtigungen (Modus 0700 für Verzeichnisse, 0600 für Sockets) und deaktiviert Core-Dumps (RLIMIT_CORE 0, PR_SET_DUMPABLE 0), um das Auslesen von Cache-Werten aus Speicherabbildern zu verhindern.
Cache-Schlüssel: Generierung über HMAC-SHA256(tenant, Arbeitsverzeichnis ‖ Befehl ‖ Argumente); das Verzeichnis kann mit dem Flag --no-dir ignoriert werden, um verzeichnisunabhängige Caches zu erzeugen.
Einschränkungen: Ausgaben grösser als 64 MiB werden durchgereicht, aber nicht gecached; Befehle mit Nicht-Null-Exit-Codes werden grundsätzlich nicht zwischengespeichert.
Alternative Werkzeuge: Nutzer verwiesen auf ähnliche Projekte wie bkt (ein ähnliches Tool von dimo414, das seit einem Jahr inaktiv ist), memo (ein Shell-Skript von aktau, das komprimiert mit zstd unter /tmp speichert) sowie Fnox (von jdx/mise, das Secrets verschlüsselt oder in einem In-Memory-Daemon hält).
Sicherheitsdebatte um KI-Agenten: Es gab kontroverse Diskussionen über das Caching von Geheimnissen für langlebige Hintergrundprozesse oder KI-Agenten. Kritiker befürchten, dass kompromittierte Agenten Zugriff auf freigegebene Sitzungen erhalten, während der Autor entgegnet, dass ein einmalig freigegebener Befehl ohnehin das gleiche Risikoprofil aufweist.
Benutzerfreundlichkeit und Shell-Integration: Mehrere Kommentatoren wünschten sich eine transparente Integration, bei der Befehle nicht explizit mit once präfixiert werden müssen, oder schlugen Shell-Hooks vor (z. B. in Fish Shell), obwohl Hooks standardmässig keinen Zugriff auf den stdout-Pufferspeicher bieten.
Nicht-sensitive Praxisszenarien: Abseits von Passwörtern wird das Konzept von Nutzern für unkritische Daten verwendet, wie etwa das Caching von GitHub-Repository-Labels mit einer TTL von einer Woche zur Beschleunigung von Skripten via fzf.
Glossar
Daemon: Ein im Hintergrund laufendes Computerprogramm, das ohne direkte Benutzerinteraktion systemnahe Dienste bereitstellt.
TTL (Time to Live): Ein Konfigurationsparameter, der festlegt, nach welcher Zeit ein Cache-Eintrag veraltet und ungültig wird.
stdout (Standard Output): Der standardmässige Datenstrom, über den Kommandozeilenprogramme Textausgaben an das Terminal übermitteln.
Unix-Socket: Ein Interprozesskommunikations-Mechanismus (IPC), der es Prozessen auf demselben Betriebssystem ermöglicht, sicher und lokal Daten auszutauschen.
HMAC-SHA256: Ein kryptografischer MAC-Algorithmus (Keyed-Hash Message Authentication Code), der einen geheimen Schlüssel verwendet, um die Integrität und Authentizität von Daten zu gewährleisten.
Core-Dump: Ein Abbild des Hauptspeichers eines Prozesses zum Zeitpunkt eines abnormalen Programmabbruchs oder Fehlers, das zur Fehleranalyse dient.
zstd (Zstandard): Ein moderner, verlustfreier Datenkomprimierungsalgorithmus mit hoher Komprimierungsgeschwindigkeit.
XDG_RUNTIME_DIR: Eine standardisierte Umgebungsvariable für Unix-artige Betriebssysteme, die den Pfad zu einem Verzeichnis für temporäre, benutzerspezifische Laufzeitdateien definiert.