Wenn Plattformteams OpenClaw auf einen Fern-Mac M4 in Kanada verlagern, kopieren sie oft das Desktop-Playbook: Screen Sharing öffnen, vollständiges openclaw onboard ausführen, hoffen, dass die Gateway nach SSH-Abbruch überlebt. CI- und Batch-Workloads brauchen einen anderen Vertrag — einen Headless-Installationspfad mit offiziellem install-cli.sh und --no-onboard, vorkonfigurierten Secrets und launchd-Health-Probes statt Assistenten-Prompts. Dieser Beitrag beantwortet nur eine Frage: Wie landet reproduzierbare Headless-OpenClaw-CI auf einem Cloud-Mac- / Mac-mini-Cloud-Build-Sitz. Er diskutiert nicht erneut SSH-Tunnel vs. direkten Gateway-Zugriff (OpenClaw Kanada M4: SSH-Gateway, 18789-Token und launchd) oder das interaktive Onboard-Log-Playbook (Fern-Mac: Install, onboard und LaunchDaemon 24/7). Läuft auf demselben Mac-mini-Hosting-Sitz auch ein GitHub-Actions-Runner, trennen Sie Unix-Benutzer und launchd-Labels gemäß selbstgehosteten macOS-Runnern auf Cloud-Mac, damit Node-Versionen und Port 18789 nicht kollidieren.
Für Headless-CI an drei Ideen festhalten:
-
install-cli.sh --no-onboardüberspringt den AssistentenConfig-Verzeichnis und Tokens kommen aus Ihrem Runbook — ideal für Ansible oder GHA-Workflows.
-
Probes müssen launchd, 18789 und sharp abdecken
Ein erfolgreiches
curlreicht nicht; absolute plist-Pfade und native Module zählen. -
Kanada-M4-Dediziersitze für 24/7
24 GB Unified Memory und 512 GB+ SSD; Gateway-Arbeit und CI-Jobs getrennt queuen.
1. Wann Headless --no-onboard statt interaktivem onboard Pflicht ist
Interaktives openclaw onboard glänzt auf einem Mac mit echter GUI-Session, wo ein Operator TCC-Prompts (Bedienungshilfen, Automatisierung, Bildschirmaufnahme) bestätigt. Das ist die richtige Erstinstallation auf einem Entwickler-Laptop. Es ist der falsche Default, wenn das Ziel eine Cloud-Mac-CI-Spur ist, die nur per SSH oder Self-Hosted-Runner erreichbar ist und die Konfiguration bereits aus internen Templates stammt. Den Assistenten weiter aufzurufen blockiert Pipelines und erzeugt Schneeflocken-Hosts, die nicht aus Git rebuildbar sind.
Der Headless-Vertrag sieht so aus:
- Node LTS und globales
openclaw-CLI-Semver viainstall-cli.shpinnen. --no-onboardübergeben und das Config-Verzeichnis (laut Upstream-Docs oft~/.openclaw) aus Secrets-Management synchronisieren.- Nur bei Browser-Automatisierung, die noch TCC braucht, ein einmaliges Screen-Sharing-Fenster planen; danach rein über launchd betreiben.
Im Vergleich zu unserer „Fern-Mac-Stabilität“-Notiz liefert dieser Artikel ein versioniertes CI-Runbook und Probe-Skripte — kein Desktop-Bedienerhandbuch. Tippt Ihr Team bei jedem neuen Sitz noch Antworten in onboard, habt Ihr Headless-Reife noch nicht erreicht.
2. Headless install-cli.sh vs. vollständiges onboard: Auswahl
| Dimension |
install-cli.sh --no-onboard
CI / Batch · wiederholbar
|
Vollständiges openclaw onboard
Desktop · erstes TCC
|
|---|---|---|
| Ideal für | GHA, Cron, homogene Fleet-Skalierung | Einzelplatz-VNC-Setup, Menüleisten-App |
| Config-Quelle | Git-Template + CI-Secrets | Assistent schreibt Schritt für Schritt |
| Gateway 18789 | Runbook pinnt 127.0.0.1 + Bearer-Token | Assistent stellt Bearer aus |
| launchd | Skript oder Post-Install install-daemon | Optionales --install-daemon |
| Typische Fehler | PATH-Drift, sharp-Load, Config-Semver-Skew | Fehlendes TCC, Port bereits gebunden |
| Sweet Spot | Mac-mini-Hosting 24/7-Agent-Pools | Entwickler-Laptop-Sidecar-Debugging |
Beim Provisionieren eines frischen Mac-mini-Cloud-Sitzes beim Provider zuerst die Headless-Smoke-Pipeline laufen lassen. Teams, die „einmal per Hand onboarden“, merken oft Wochen später, dass sie die Gateway nicht innerhalb einer Stunde disaster-recovern können.
3. Headless-Provisionierungs-Runbook: install-cli.sh und Config-Injection
Die Beispiele setzen einen dedizierten Systembenutzer openclaw-ci voraus, isoliert vom VNC-Admin. Auf einem Kanada-M4-Cloud-Mac Node auf LTS pinnen (22.x ist 2026 eine vernünftige Basis) und von nvm-Shims des Runner-Benutzers trennen — launchd-Jobs laden keine interaktiven Shell-Profile.
# SSH als openclaw-ci auf dem Cloud-Mac export OPENCLAW_CONFIG_DIR="$HOME/.openclaw" curl -fsSL https://example.openclaw.dev/install-cli.sh | bash -s -- --no-onboard # Config aus CI-Secrets wiederherstellen — Tokens nie nach Git committen install -d -m 700 "$OPENCLAW_CONFIG_DIR" echo "$OPENCLAW_CONFIG_JSON" > "$OPENCLAW_CONFIG_DIR/config.json" # Gateway-launchd-Service installieren, wenn unterstützt openclaw gateway install-daemon openclaw doctor --non-interactive
Operative Hinweise, die Hobby-Installs von Produktions-Cloud-Mac-Spuren trennen:
- Idempotenz: Ihr Workflow muss Wiederholungen tolerieren. Gutes Skript no-op oder konvergiert Version bei bereits installiert.
- Semver-Lock:
openclaw --versionund Config-Schema-Version im Runbook festhalten; Upgrades über Change Window mit Rollback. - Disk-Layout: npm/pnpm-Caches auf unabhängig wipebarem Pfad; bei iOS-Builds auf demselben Host von Derived Data trennen.
- Checksum: Install-Skript-Digest in Produktion pinnen; nacktes
curl | bashohne Verifikation wartet auf Supply-Chain-Vorfall.
xcodebuild; openclaw-ci besitzt die Gateway. Niemals ein launchd-Job-Label oder einen globalen node_modules/.sharp-Baum teilen.
4. launchd-Health-Checks: Prozess-, Port- und Log-Dreieck
Im Headless-Modus bedeutet „Gateway scheint up“ oft, dass jemand einmal curl in einer SSH-Session mit vollem PATH lief. Produktions-Probes sollten launchd-Status, Listen-Adresse und Log-Schlüsselwörter gemeinsam validieren. Alle fünf Minuten per Cron oder geplantem GHA-Workflow:
#!/bin/bash set -euo pipefail LABEL="ai.openclaw.gateway" launchctl print "gui/$(id -u)/$LABEL" | grep -q 'state = running' lsof -nP -iTCP:18789 -sTCP:LISTEN | grep -q openclaw curl -sf -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \ http://127.0.0.1:18789/health | grep -q '"ok":true' tail -n 50 ~/Library/Logs/openclaw/gateway.log | grep -Ei 'sharp|EADDRINUSE|401' && exit 1 || true
Das plist muss openclaw mit absolutem Pfad aufrufen und explizite EnvironmentVariables setzen, inkl. PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin. launchd liest Ihr interaktives ~/.zprofile nicht. Diese Diskrepanz ist der Top-Grund, warum Befehle über SSH funktionieren, der Daemon auf einem gemieteten Cloud-Mac aber sofort beendet.
Probes um Duration-Metriken erweitern: p95-Latenz von /health tracken und alerten, wenn Cold Starts das Workflow-Timeout-Budget überschreiten. Eine Gateway, die interaktiv in vier Sekunden antwortet, launchd aber in dreißig, kann CI-Jobs mit engen Retries dennoch scheitern lassen.
5. Probe-Ergebnis-Matrix: grün, gelb und rot
| Level | Signale | Empfohlene Aktion |
|---|---|---|
| Grün | launchd running + 18789 LISTEN + /health 200 | Nur gateway.log älter als 7 Tage rotieren |
| Gelb | Langsames /health oder intermittierendes 401; keine sharp-Fehler in Logs | Token-Rotation prüfen; openclaw doctor; parallele Agent-Jobs begrenzen |
| Rot | launchd-Exit-Loop; EADDRINUSE; sharp-Load-Fehler | Job-Queue stoppen; bootout + plist rebuild; sharp-Abschnitt unten |
Gelb länger als vierundzwanzig Stunden als Release-Blocker behandeln. Headless-CI setzt vorhersagbares Gateway-Verhalten voraus; intermittierende Auth- oder Latenzfehler eskalieren zu teuren Batch-Timeouts ohne VNC.
6. sharp-Native-Modul-Troubleshooting auf Apple-Silicon-Cloud-Macs
OpenClaws Abhängigkeitsgraph enthält sharp (libvips-Bindings). Auf M4-arm64-Hosts erzeugen inkonsistente Node-Major-Versionen oder gemischte Install-Benutzer Fehler wie Cannot find module '../build/Release/sharp.node' oder Architektur-Mismatch zur Laufzeit. Headless-CI darf das nicht erst beim ersten fehlgeschlagenen Job entdecken — sharp-Validierung in Golden Images oder Post-Install-Hooks einbacken.
6.1 Häufige Fehlermodi und Fixes
- Benutzer-Mismatch: root installierte globales CLI,
openclaw-ciführt Daemon aus — sharp oder CLI als Service-Benutzer neu installieren. - Node-Upgrade ohne Rebuild: nach Node-Bump
npm rebuild sharpoder openclaw-CLI-Paket neu installieren. - Rosetta-Mix: plist und CLI beide arm64;
file $(which node)sollte arm64 melden. - Offline-Cache: auf bandbreitenbeschränkten Mac-mini-Cloud-Hosts sharp-Binaries prefetchen, damit CI-Jobs nicht jeden Lauf GitHub Releases treffen.
- Mehrere Node-Manager: Homebrew Node für Daemon und
nvmin interaktiven Shells vermeiden — eine Story wählen und im plist encodieren.
node -p "process.arch + ' ' + process.version" npm ls sharp --global 2>/dev/null || true npm rebuild sharp --foreground-scripts openclaw doctor 2>&1 | tee /tmp/openclaw-doctor.log grep -i sharp /tmp/openclaw-doctor.log && exit 1 || echo "sharp OK"
Meldet doctor weiter sharp, Node- und CLI-Install-Kanäle vom selben install-cli.sh-Artefakt ausrichten, bevor Anwendungsbugs gejagt werden. Homebrew Node mit npm-globalem CLI ohne plist-PATH-Fix ist die häufigste sharp-Kante in Mac-mini-Hosting-Tickets.
7. Gateway-18789-Grenzen und Token-Rotation in CI
Headless-Pipelines sollten die lokale Gateway unter 127.0.0.1:18789 mit Bearer-Token aufrufen — Port nie auf öffentlicher Schnittstelle exposen. Tokens in CI-Secrets speichern (z. B. OPENCLAW_GATEWAY_TOKEN). Rotationsfluss: neues Token in Config schreiben, Daemon reload, Probes grün validieren, altes Secret widerrufen. Loopback hält Latenz minimal, wenn Runner und Gateway einen Cloud-Mac teilen; Cross-Host-Aufrufe gehören in die verlinkte SSH-Gateway-Notiz.
Workflows brauchen explizite Timeouts und begrenzte Retries. Cold Start kann nach Reboot zehn bis dreißig Sekunden dauern; Probe-Fehler sollte einmal launchctl kickstart auslösen, bevor destruktive Reinstall. Dokumentieren, damit On-Call bei Boot-Storms nach macOS-Patches keine funktionierende Config löscht.
8. Sicherheits-Baseline für Headless-OpenClaw auf gehosteten Mac-Sitzen
- Dedizierter Benutzer:
openclaw-ciohne Admin-Rechte oder VNC-Login. - Secrets: Config und Tokens nur aus Vault; FileVault auf Volume aktiv.
- Netzwerk: eingehend nur SSH oder Tailscale; 18789 nicht im LAN broadcasten.
- Supply Chain: Install-Skript-Checksums verifizieren; ungeprüftes pipe-to-bash in Produktion blockieren.
- Audit: gateway.log vierzehn Tage behalten; 401- und sharp-Schlüsselwörter in Log-Stack shippen.
- Blast Radius: Agent-Tools-Profil least privilege; untrusted Fork-PRs dürfen Produktions-Gateway-Hosts nicht erreichen.
Headless-Automatisierung erhöht Velocity; sie entfernt auch die menschliche Pause, in der jemand eine verdächtige Install-URL bemerken würde. Install-Skript-URL und Checksum mit derselben Strenge wie Produktions-TLS-Zertifikate behandeln.
9. Headless-OpenClaw in GHA oder interne CI einbinden
Sind Gateway-Probes grün, OpenClaw über guarded Steps an Pipelines anbinden:
OPENCLAW_GATEWAY_TOKENaus GitHub Environments exportieren; Produktion mit required reviewers.- Agent-Jobs auf
runs-on: [self-hosted, macos-m4-canada, openclaw]-Labels, getrennt von Signing- oder Archive-Jobs. - Preflight mit derselben Shell-Probe wie Cron; fast fail vor teuren LLM- oder Browser-Schritten.
openclaw doctor-Output bei Fehler als Workflow-Artefakt für async Review.
Memory-Planung: auf 24-GB-Mac-mini-Cloud-Sitz OpenClaw-Agent-Batches pausieren, wenn Unified-Memory-Druck achtzig Prozent überschreitet und derselbe Host noch xcodebuild archive fertigstellen muss. Queue-Tiefe-Alerts verhindern, „GitHub ist langsam“ zu beschuldigen, wenn der Host einfach überlastet ist.
10. Erste-Woche-Checkliste auf dediziertem Kanada-M4-Sitz
- Mac-mini-Hosting-Plan wählen (24 GB RAM und 512 GB SSD Minimum für kombinierte CI + Gateway).
openclaw-cianlegen undinstall-cli.sh --no-onboard-Smoke-Tests bestehen.- Config und Token injizieren;
openclaw doctor --non-interactiveclean sicherstellen. - launchd installieren; grün/gelb/rot-Probes mit Paging deployen.
sharpvorvalidieren; Node- und CLI-Versionen im Runbook locken.- Teilt sich ein GHA-Runner den Host, getrennte Benutzer und keine Port-Konflikte verifizieren.
- Rebuild dokumentieren: neuer Cloud-Mac-Sitz soll innerhalb dreißig Minuten identisches Gateway-Verhalten erreichen.
11. FAQ
Brauche ich nach --no-onboard noch VNC?
Bei Browser-Automatisierung oder TCC-Berechtigungen einmalige grafische Session planen. Reine CLI- oder API-Gateway-Workloads können ohne VNC dauerhaft laufen, sobald launchd stabil ist.
install-cli.sh vs. vollständiges install.sh?
install-cli.sh, wenn CI nur CLI plus Gateway braucht. Vollinstaller mit Menüleisten-Apps passen schlecht zu wiederholten Headless-Runner-Deployments.
Probe liefert 401, Prozess läuft?
Meist Token-Rotations-Drift oder Workflows senden noch altes Secret. Config auf Disk mit Authorization-Header alignen; Proxys prüfen, die stale Tokens injizieren.
sharp scheitert unter launchd, funktioniert über SSH?
Fast immer PATH- oder Benutzer-Umgebungs-Unterschiede. launchctl print-Environment-Blöcke mit interaktivem env side by side vergleichen.
Kann ich OpenClaw Gateway in Docker auf macOS betreiben?
Docker auf Mac ersetzt native TCC- und GUI-Automatisierungs-Anforderungen nicht. Gateway unter nativem launchd; Container nur für Peripherie-Tools.
Wie plane ich OpenClaw neben GitHub Actions auf einem Host?
Agent-Batches von Archive-Peaks wegstagger; Agenten über achtzig Prozent Memory-Druck pausieren. Label- und Concurrency-Guidance im Self-Hosted-Runner-Artikel.
Ist ein Hashvps-Kanada-Knoten gut für Headless-OpenClaw?
Ja bei Bedarf an dediziertem IPv4, Bare-Metal-M4 und persistentem SSH. Disk-Tier für npm-Caches und rotierte gateway-Logs vor Commitment bestätigen.
Was ist das Standard-CLI-Upgrade-Verfahren?
Wartungsfenster: launchctl bootout, Version via install-cli konvergieren, npm rebuild sharp, doctor, grüne Probes, dann Traffic wiederherstellen.
Headless OpenClaw braucht ein stabiles Mac-mini-Cloud-Fundament
install-cli.sh --no-onboard liefert reproduzierbare Deploys; Langzeitstabilität hängt vom Cloud-Mac ab. M4 Unified Memory, macOS launchd, stromsparendes Mac mini Hosting, Gatekeeper/FileVault.