ScopeShelf 1.1.0 Versionshinweise
In 1.1.0 geht es ums Terminal. Eine Terminal-App kann nicht in der Sandbox laufen (macOS verweigert das setuid-Programm /usr/bin/login, über das sie ihre Shell startet). Deshalb sandboxt ScopeShelf jetzt die Shell in deinem laufenden Terminal. Claude Code, Codex und alles andere, was du dort startest, erbt die Regeln des Launchers.
Neu in dieser Version
- Shell starten: ein Terminal-Launcher (iTerm, Terminal.app) bekommt statt „Starten“ den Button „Shell starten“. Ein Klick öffnet ein neues Terminalfenster mit einer Shell im Sandbox-Profil des Launchers. Beim ersten Klick fragt ScopeShelf, in welchem Projektordner die Shell arbeiten soll, und merkt sich die Antwort im Launcher.
- Der Arbeitsordner ist der Arbeitsbereich: die Shell startet dort und darf dort schreiben, auch wenn der Ordner nicht in den Freigaben steht. Den Benutzerordner und gesperrte Ordner lehnt ScopeShelf ab.
- Deine Einrichtung kommt mit: hak die Startdateien an (
.zshenv,.zshrc…), die Dateien, die sie selbst nachladen, und die Programm-Ordner aus deinem PATH (~/.local/bin,~/.bun/bin,~/.cargo/bin…), die die Sandbox sehen soll. Alles wird auf deinem Mac gemessen, nichts geraten. - Eigene Konfiguration und History: die gesandboxte Shell hält ihr Konfigurationsverzeichnis und ihre History unter
~/Library/Application Support/ScopeShelf/shells/. Deine echte~/.zsh_historybleibt unberührt. scopeshelf shell <launcher>auf der Kommandozeile, mit--cd,--shell,--envund--no-network;scopeshelf scopezeigt in der Shell, was gilt..scopeshelf-Projektdateien können den Arbeitsordner der Shell fürs ganze Team setzen.- Vorlagen für iTerm und Terminal.app und eine Schnellwahl installierter Apps im Dialog „Neuer Launcher“. Apples Terminal liegt unter
/System/Applications/Utilities; du musst es nicht mehr suchen. - Kommandozeilen-Werkzeug mit einem Klick: Einstellungen → Kommandozeilen-Werkzeug legt
scopeshelfin~/.local/binab, ohne Adminrechte. - Hilfeseiten: Terminal, iTerm und die gesandboxte Shell erklärt jede Einstellung, jeden Befehl und jede Fehlermeldung.
- Terminal-Launcher zählen nicht mehr als „läuft ungeschützt“, die Seitenleiste zeigt das echte App-Icon, und
scopeshelf doctorverweist bei Terminal-Launchern aufscopeshelf shell.
1.1.1 (12. September): Härtung gegen Ausbruch und Abschalten
Ein Prozess in der Sandbox darf sie weder verlassen noch abschalten können. 1.1.1 legt in jedes Profil Regeln, die ein Testskript im Repository prüft, indem es jeden Ausbruchsweg aus einer gesandboxten Shell heraus wirklich versucht:
- Kein Schreiben außerhalb deines Benutzerordners, außer in Temp-Ordner und ausdrückliche Freigaben. Vorher konnte ein Agent
/opt/homebrew/bin/gitaustauschen und auf dein nächstes ungeschütztesgitwarten. - Kein Start anderer Apps über LaunchServices (
open -a Terminal …): eine so gestartete App liefe ohne Sandbox. Links, die du in einer gesandboxten App anklickst, öffnen deshalb keinen Browser mehr. - Signale nur innerhalb der Sandbox: der ScopeShelf-Prozess mit dem Domain-Filter und deine anderen Apps lassen sich von innen nicht beenden.
- Der ssh-agent-Socket ist gesperrt; geladene Schlüssel lassen sich von innen nicht benutzen.
- ScopeShelfs eigenes App-Bundle und der Launcher-Speicher sind schreibgeschützt, auch innerhalb eines freigegebenen Ordners.
Was das Profil nicht sperren kann und warum, steht auf der Hilfeseite: Apple Events an andere Apps hängen an der Automation-Freigabe von macOS, nicht an der Sandbox.
1.1.2 (12. September): nach dem Review
Zwei unabhängige Reviews (Codex gpt-6-astra, Kimi k3) und eigene Ausbruchsversuche haben gefunden, was 1.1.1 noch offen ließ. Zuerst eine Korrektur: 1.1.1 behauptete, ScopeShelfs eigenes Bundle und der Launcher-Speicher seien schreibgeschützt. Die Regel gab es, aber kein Startweg hat sie ans Profil übergeben, sie war also nicht aktiv. 1.1.2 behebt das und ergänzt:
- Geschützte Ordner lassen sich weder unter ihren Regeln wegbenennen noch über einen Hardlink in einem beschreibbaren Ordner ändern; eine Freigabe innerhalb des Bundles oder Speichers öffnet ihn nicht mehr.
- Ungesandboxte Helfer desselben Nutzers führen keine Befehle für die Sandbox aus: ein screen-Server (erreichbar über eine FIFO im geteilten Temp-Ordner, ein echter Ausbruch, den wir nachgestellt haben), tmux, Neovim- und Emacs-Server, Docker und Kurzbefehle sind gesperrt. Gesandboxte Shells bekommen einen eigenen Temp-Ordner; tmux und screen, die du darin startest, laufen weiter.
- Bei „Netz aus“ kann der Prozess auch keinen Port öffnen.
- Eine
.scopeshelf-Datei darf nur Ordner im eigenen Projekt freigeben; ein Agent, der sie umschreibt, kann seine nächste Sandbox nicht weiten.
Das Testskript macht jetzt 21 Versuche, darunter das Töten des ScopeShelf-Prozesses von außen; jede Behauptung mit ihrem Beleg steht in docs/sandbox-enforcement-map.md.
Download
ScopeShelf 1.1.2 läuft auf macOS 14 (Sonoma) oder neuer; das DMG ist notarisiert.
Alle 1.x-Updates sind kostenlos. Preis und Testphase: Website.