Zum Inhalt springen

The command sandbox

Bubbles mit dem Werkzeug Run commands können Befehle in deinem Projekt ausführen: Pakete installieren, Builds und Tests laufen lassen. Drei Ebenen entscheiden, was tatsächlich ausgeführt wird.

Jede Rolle besitzt einen festen Satz an Werkzeugen. Ein Coder kann Dateien schreiben und Befehle ausführen; ein Reviewer kann Befehle ausführen, aber keine Dateien schreiben; ein Researcher kann beides nicht. Die Werkzeuge einer integrierten Rolle stehen fest. Um eigene auszuwählen, baust du eine benutzerdefinierte Bubble.

Die Dateiwerkzeuge halten einen Loop stets an seinen Ordner gebunden. Seine Befehle werden vom Betriebssystem nur dann dort festgehalten, wenn Sandbox agent commands eingeschaltet ist (siehe unten). Ohne die Sandbox wird ein Befehl abgelehnt, der eine Datei außerhalb des Ordners benennt. Ein Skript, ein Build oder ein Paketmanager, den ein Befehl startet, kann jedoch weiterhin überall im Projekt schreiben.

Jeder Befehl wird vor der Ausführung gelesen und erhält eine von drei Antworten.

Abgelehnt, immer:

  • das direkte Ausführen einer Shell (bash, sh, cmd, powershell, wsl) und alles, was die Shell selbst verändert;
  • Fernzugriff (ssh, scp, rsync und Ähnliches), das Beenden von Prozessen, das Ändern von Berechtigungen;
  • destruktives Git (reset --hard, clean -f, Force-Pushes, interaktive Befehle) und das Veröffentlichen von Paketen;
  • jegliche Pfade außerhalb des Projekts und Dateien, die wie ein Geheimnis aussehen (.env, Schlüssel, Zertifikate);
  • Webadressen, die kein Paketregister, GitHub, Docker Hub oder dein eigener Computer sind;
  • alles, was sich nicht beendet, wie ein Dev-Server oder ein Watch-Modus. Solche Dinge gehören in ein Terminal.

Nachfragen, es sei denn, du hast Full Auto eingeschaltet:

  • Git-Commits, -Pushes, -Merges, -Rebases, -Checkouts und Ähnliches;
  • das Löschen von Dateien innerhalb des Ordners des Loops;
  • das Ausführen von Inline-Code (node -e, python -c und Ähnliches).

Erlaubt: alles andere, wie zum Beispiel npm install oder npm test.

Befehle laufen ohne Umgebungsvariablen, deren Name KEY, SECRET, TOKEN, PASSWORD, CREDENTIAL oder PRIVATE enthält. Ein Befehl erhält zwei Minuten Zeit, beziehungsweise zehn für Paketmanager, Compiler und Testläufer. Wenn die Zeit abläuft, wird der gesamte Prozessbaum gestoppt.

Wenn ein Befehl deine Zustimmung benötigt, fragt die App: Allow once, Allow always this session (für diese Art von Befehl auf diesem Board, bis der Gateway neu startet) oder Deny. Wenn kein Fenster zum Fragen geöffnet ist oder niemand rechtzeitig antwortet, wird der Befehl abgelehnt.

Full Auto verwandelt jedes „Nachfragen“ in ein „Erlauben“ für ein einzelnes Board. Es ändert nichts anderes: abgelehnte Befehle, Werkzeugberechtigungen und Ordner gelten weiterhin. Es bleibt eingeschaltet, bis du es ausschaltest.

Die Kontrolle liest einen Befehl und lehnt ab, was sie erkennen kann. Ein Build-Skript oder der Installationsschritt eines Pakets kann dennoch Dateien schreiben, deren Namen in keinem Argument vorkommen. Sandbox agent commands (unter Einstellungen, standardmäßig aus) sorgt dafür, dass auch das Betriebssystem die Ordner durchsetzt:

  • das Projekt ist schreibgeschützt, der eigene Ordner des Loops ist beschreibbar, die Ordner anderer Loops darin sind schreibgeschützt und der eigene Ordner der App ist schreibgeschützt;
  • es gibt keinen Netzwerkzugriff aus der Sandbox heraus.
System Wie
Linux bubblewrap (bwrap)
macOS sandbox-exec
Windows WSL mit bubblewrap (Standard) oder Docker

Wenn die Sandbox eingeschaltet ist, wird ein Befehl, der nicht in eine Sandbox gepackt werden kann, abgelehnt und niemals ohne sie ausgeführt. Wenn ein Backend nicht bereit ist, zeigt die App unter Einstellungen den einen Schritt zu seiner Behebung an, mitsamt dem exakten Befehl zum Kopieren, zum Beispiel die Installation von bubblewrap innerhalb von WSL.

Perfica installiert niemals eine Sandbox für dich. Das Docker-Bild wird erst heruntergeladen, nachdem du einen Dialog bestätigt hast, der seine Größe angibt.

Das Terminal-Dock unten in der App ist deine eigene Shell (Bash, PowerShell oder CMD) und nicht die der Agenten. Die Kontrolle greift dort nicht. Run in terminal platziert einen Befehl aus einer Chat-Antwort oder einem Protokolleintrag in der Eingabezeile des Terminal; es drückt niemals von allein die Eingabetaste.