2026-05-11 OpenClaw-Workspace-Wurzeln, Repository-Erlaubnislisten & Monorepo-Leitplanken auf einem headless gemieteten Apple-Silicon-Cloud-Mac (HK / JP / KR / SG / US)
Headless-Gateways wirken unsichtbar, bis ein Tool das Repo verlässt, das Sie bearbeiten wollten. Auf gemieteten Mac mini M4-Hosts in Hongkong, Tokio, Seoul, Singapur und den USA teilt sich oft dieselbe UID OpenClaw, xcodebuild-Lanes und langlebiges Signaturmaterial — „Workspace“ ist also eine Sicherheitseigenschaft, kein Gefühl. Dieses 2026-05-11-Playbook verbindet Pfadrichtlinien für Dateitransfer, launchd-Umgebung & Geheimnis-Hygiene, Session-Checkpoint-Disziplin und Parallel-Lane-Isolation zu expliziten erlaubten Wurzeln, aufgelösten Symlinks und Operator-Drills, die fail-closed reagieren, wenn Assistenten ~/Library oder benachbarte CI-Bäume anfassen.
Warum Workspace-Leitplanken den Schadensradius auf geteilten Lease-Hosts bestimmen
Falsch gesetzte Wurzeln machen harmlose Lesezugriffe zu „Keychain-nah“-Überraschungen: Das Modell folgt einem relativen Pfad, die Shell expandiert ~ unter launchd anders, oder ein alter Symlink springt von einem „erlaubten“ Teilbaum in den Checkout eines anderen Mandanten. Produktions-Gateways veröffentlichen daher positive Listen von Dateisystemwurzeln — verlassen Sie sich nie allein auf „Modell-Alltagswissen“. Verknüpfen Sie diese Listen mit Automatisierungs-Tickets, damit jede Infra-Config-Merge sowohl OpenClaw-Richtlinien als auch benachbarte CI-Wrapper prüft.
Anatomie: OPENCLAW_STATE_DIR, CI-Checkouts und DerivedData-Nachbarschaft
Behandeln Sie persistenten Assistant-Zustand als Datenebenen-Speicher: nicht mit flüchtigen /tmp-Klonen und nicht mit Xcode-DerivedData-Bäumen kollokieren, die Reiniger mitten im Job löschen. Dokumentieren Sie drei Ringe — state (Checkpoint + Richtlinien), workspace (von Ihnen autorisierte git-Wurzeln), scratch (Wegwerf-Exporte) — und stellen Sie sicher, dass Cron die Grenzen respektiert. Teilen sich CI und Assistenten eine UID, folgen Sie der Trennung aus Parallel-Lane-Artikeln, damit keine Waisen-Locks entstehen.
- State-Ring — versionskontrollierte Snippets für Erlaubnislisten + versiegeltes JSON falls nötig.
- Workspace-Ring — eine oder mehrere absolute Wurzeln pro Repo/Service-Linie.
- Scratch-Ring — TTL-Verzeichnisse unter job-spezifischen TMP-Präfixen.
Erlaubnislisten mit Dateitransfer- und Shell-Tool-Richtlinien
Die Transfer-Plugin-Defaults vom 2026-05-07 tendieren zur Ablehnung; Workspace-Wurzeln sollten das spiegeln, damit fetch/Verzeichnislisten nicht zu Eltern klettern, die nur durch Symlink-Hops existieren. Kodieren Sie Wurzeln pro Umgebung (staging vs. prod) und halten Sie beide in Git — Promotion per PR statt Ad-hoc-SSH. Bei Microservices im Monorepo: Namensraum-Wurzeln pro Paket, um querlesende „Erkundungen“ zu verhindern.
readlink -f-Sweeps auf jeder konfigurierten Wurzel; APFS-Firmlinks und VPN-Mounts können Pfade umleiten, ohne den Config-Text auf der Platte zu ändern.
Monorepo-Sonderfälle: SwiftPM-Verschachtelung, Xcode-Workspaces und git-Submodule
Große Monorepos locken mit mehreren Package.swift-Manifesten und hybriden Xcode-Projekten. Separate Wurzeln pinnen, wenn Teams über Eigentumsgrenzen uneins sind — z. B. /build/mobile/ios vs. /platform/android — und seitliche Sprünge ohne zweiten Listeneintrag verbieten. Submodule erben nur nach Security-Review die Eltern-Autorisierung; sonst verschachtelte .git-Verzeichnisse als engere explizite Wurzeln behandeln.
# Symlinks vor Freigabe neuer Wurzeln auflösen
/usr/bin/python3 - <<'PY'
import os
roots = ["/var/ci/job123/acme"]
for r in roots:
print(os.path.realpath(r))
PY
Wo CI neben interaktiven Assistenten klont
Ephemeres CI klont oft in gehashte Ordner unter /var/tmp oder auf eigene Volumes; per SSH gestartete Assistenten defaulten auf ~/workspace. Konventionen angleichen: ASSISTANT_WORKSPACE_ROOT regional exportieren und Orchestratoren nur unter autorisierten Präfixen mounten lassen. Routen Self-Hosted-GitHub-Actions-Labels auf denselben Mac wie OpenClaw, erzwingen Sie getrennte Pfade, damit PR-Cleanup nicht gleichzeitig Assistant-Scratch löscht.
launchd: Wurzeln an nicht-interaktive Gateways exportieren
Interaktive Shells laden Profile-Snippets; Daemons nicht. Spiegeln Sie Erlaubnislisten in plist-EnvironmentVariables oder referenzierten env-Dateien mit Checksummen-Prüfung. Gateways nach Updates per kontrolliertem launchctl kickstart neu laden und stdout gemäß Health-Probe-Leitfaden erfassen — HTTP-Readiness und Dateisystem-Sonden auf verbotene Pfade prüfen.
Entscheidungsmatrix: Pfadabsicht vs. Durchsetzungsschicht
| Szenario | Risiko | Bevorzugte Abschwächung |
|---|---|---|
Assistant liest Repo und folgt ../ |
Flucht zu Geheimnissen benachbarter Services | Positive Präfixprüfungen + ..-Segmente nach Normalisierung ablehnen |
| Symlink zu Schreibtisch/Dokumente | TCC-Erwartungen unterscheiden headless vs. GUI | Symlink-Ziel auflösen; mit macOS-Datenschutzdokumenten abgleichen |
| Geteilte UID CI + Assistant | Lösch-Races auf überlappenden Bäumen | Getrennte TMPDIR-Namensräume pro Orchestrierungs-ID |
| Notfall-Hotfix-Branch | Temporäre Erweiterung ohne Rollback-Plan | Zeitbox-Erlaubnis-Tickets + automatisches Ablaufen |
Achtstufiges Rollout für Workspace-Governance
- Alle Pfade der letzten 30 Tage per Audit-Log inventarisieren.
- Minimale Erlaubnislisten kodieren; Erweiterungen mit VPEng + Sec-Review.
- Richtlinien in Git mergen; Checksumme ans Automatisierungs-Bundle hängen.
- plist/env regional ausrollen mit Health-Curls.
- Skriptierte Deny-Tests inklusive Symlink-Fluchten.
- On-Call schulen, Erlaubnislisten-PRs schnell zurückzunehmen.
- Reinigungs-Skripte an Scratch-TTL-Verträge binden.
- Vierteljährlich Retrospektiv-Metriken zu abgelehnten vs. erlaubten Operationen veröffentlichen.
SLO-Signale für Workspace-Governance
| Signal | Schwelle | Aktion |
|---|---|---|
| Nicht genehmigte Pfadversuche | > 3 pro Woche und Gateway | Config-Änderungen einfrieren; Incident-Spuren replayen |
| Listendrift vs. Git | Jede nicht ausgerollte manuelle Änderung | Host rollback; nur-PR-Workflow erzwingen |
| Symlink-Audit-Fehler | > 0 kritische Befunde | Release blockieren; gelöste Wurzelkarte neu aufbauen |
FAQ
| Frage | Praktische Antwort (2026-05-11) |
|---|---|
Sollen Wurzeln /Users/ci komplett enthalten? |
Nein — pro Pipeline oder Mandant partitionieren; Komplettwurzeln neutralisieren Listen. |
| Dürfen Assistenten außerhalb des Workspace für Cache schreiben? | Nur in deklarierten Scratch-Präfixen mit Quotas und automatischer Eviction. |
Warum Mac-mini-M4-Mieten die Dateisystem-Governance vereinfachen
Schnelles NVMe und vorhersagbarer Unified Memory erlauben Symlink-Audits, Dreifach-Klone und parallele Gateway-Healthchecks ohne Swap-Druck — wichtig bei Incident-Iterationen von Listen. Regionale Kapazität über Preise planen; unsichere Engineers vor Wurzel-Erweiterung zu SSH/VNC-Hilfe leiten.
Builder mieten, auf denen Workspace-Richtlinien durchsetzbar sind
HK / JP / KR / SG / US · SSH / optional VNC