Doku: fremde Laufzeiten und Egress-Proxy - Umsetzung, Befunde, Einrichtung (#712)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d37fe91b37
commit
036d56ff04
@@ -828,6 +828,62 @@ verbraucht.
|
||||
beide Anmeldewege gebaut, Abo und API-Schlüssel, und die Entscheidung bleibt eine
|
||||
Frage der Konfiguration statt eine des Umbaus.
|
||||
|
||||
### Umsetzung (2026-09-25, #712)
|
||||
|
||||
Gebaut sind `native`, `claude-code` und `command`. `codex` und `http` sind nicht gebaut
|
||||
(„nach Bedarf“); die Einstellung lehnt sie ab, statt sie still als native laufen zu lassen.
|
||||
Ein Agent bekommt seine Laufzeit in der Agentenansicht (Karte „Laufzeit“) oder als
|
||||
`runtime` in `AgentSettings.json`. Das Claude-Code-Konto gilt für die ganze Instanz
|
||||
(`claudeCode` in `instance.json`, Schlüssel verschlüsselt wie der OpenRouter-Schlüssel).
|
||||
|
||||
- **Ohne Sandbox kein Lauf.** Ein fremder Lauf fällt nie auf die native Engine zurück,
|
||||
auch nicht ohne Runner. Deren Modell und Kosten wären nicht die konfigurierten.
|
||||
- **Eigener Arbeitsplatz ist eine Kopie.** Der Lauf arbeitet auf einer Kopie des
|
||||
Arbeitsbereichs, höchstens 20 000 Dateien und 512 MB. Was sich darin ändert, wird zum
|
||||
Vorschlag unter `proposals/<lauf>/`: `proposal.json` und die geänderten Dateien.
|
||||
Übernommen wird nichts; das ist die Sache der Lieferkette (#695). Gelesen werden nur
|
||||
reguläre Dateien. Ein symbolischer Link, den der Lauf hinterlässt, könnte außerhalb der
|
||||
Sandbox auf einen Schlüssel zeigen, eine benannte Pipe würde den Leser für immer
|
||||
blockieren. Beide werden nur als „ignoriert“ genannt.
|
||||
- **Netz nur über den Proxy.** Die Sandbox behält ihr eigenes Netz ohne alles außer
|
||||
Loopback. Claude Code erreicht `api.anthropic.com` über einen HTTPS-Proxy im
|
||||
Hauptprozess, dazu die Hosts, die der Agent einträgt. Der Proxy ist gleich mit gebaut
|
||||
(#655, Security-Konzept 5.2). Updates und Telemetrie von Claude Code sind abgeschaltet.
|
||||
- **Nur unsere Einstellungen gelten.** `--setting-sources user` liest nur die Einstellungen,
|
||||
die vor jedem Lauf ins Home der Laufzeit geschrieben werden, `--strict-mcp-config` nur
|
||||
unseren MCP-Server. Eine `.claude/settings.json` oder `.mcp.json` in der Kopie gewährt
|
||||
also nichts. Hooks sind aus. Was ein Lauf im Home hinterlässt und den nächsten anweisen
|
||||
könnte (Agents, Commands, Skills, `CLAUDE.md`), wird vor dem Start entfernt.
|
||||
Anmeldestand und Verlauf bleiben.
|
||||
- **Freigabelisten:** `--allowedTools` (Voreinstellung: Read, Edit, Write, Glob, Grep und
|
||||
`mcp__clawd`) und `--max-turns`. WebFetch und WebSearch sind immer verboten: Das Web
|
||||
läuft über unsere Werkzeuge, nicht an ihnen vorbei. `--dangerously-skip-permissions`
|
||||
gibt es nicht, auch nicht als Werkzeugname verkleidet.
|
||||
- **Der Rückweg:** Die Anwendung selbst ist in der Sandbox die MCP-Brücke
|
||||
(`--mcp-bridge --socket /run/mcp.sock`). Der MCP-Socket ist eingebunden, das
|
||||
Lauf-Token liegt in einer 0600-Datei und endet mit dem Lauf.
|
||||
- **Schlüssel nie auf der Befehlszeile.** Die Anwendung ist in der Sandbox auch der Starter
|
||||
(`--sandbox-launch`). Er liest den Schlüssel aus einer eingebundenen Datei und setzt ihn
|
||||
in die Umgebung des Programms. Er leitet außerdem den Proxy-Port der Sandbox an den
|
||||
Proxy-Socket weiter.
|
||||
- **Verbrauch:** `RunUsage` hat die Spalten `Runtime` und `OnSubscription`. Ein Lauf auf
|
||||
dem Abo kostet 0 $ und trägt seine Token; mit API-Schlüssel gilt der gemeldete Betrag
|
||||
(`total_cost_usd`). Die Anzeige als Kontingentverbrauch ist Sache von #699.
|
||||
- **Chat:** Eine fremde Laufzeit hat keinen Gesprächsverlauf, der weitergeführt würde. Jede
|
||||
Nachricht ist ein eigener Lauf; der Chat zeigt trotzdem beide Seiten.
|
||||
|
||||
Geprüft unter Linux auf der Test-VM, in der echten Sandbox: Schlüssel stehen in keiner
|
||||
Befehlszeile, ein gelisteter Host ist erreichbar, ein anderer nicht, am Proxy vorbei gibt
|
||||
es kein Netz, der Loopback der Instanz ist nicht der der Sandbox. Ein Programm in der
|
||||
Sandbox erreicht den MCP-Server als sein Agent. Der ganze Claude-Code-Weg ist mit einem
|
||||
Stellvertreter für `claude` geprüft, weil das echte Claude Code auf der Test-VM nicht
|
||||
laufen darf. **Offen:** der Lauf mit dem echten Claude Code und einem echten Schlüssel.
|
||||
Das macht der Mensch einmal von Hand.
|
||||
|
||||
Nicht gebaut: eine Speichergrenze für fremde Laufzeiten. Eine JavaScript-Laufzeit
|
||||
reserviert Adressraum in Gigabyte-Blöcken und startet unter keiner sinnvollen `ulimit -v`.
|
||||
Eine echte Grenze bräuchte cgroups.
|
||||
|
||||
---
|
||||
|
||||
## 8 — Kontrolle: eine Leitung delegiert nicht nur
|
||||
|
||||
Reference in New Issue
Block a user