Einordnung: Vor dem Merge soll auf dem Remote-Mac eine Kette laufen: Gateway-Status als JSON, openclaw doctor, TCP-Fingerabdruck auf 18789 — statt informeller SSH-Leserunden. Enthalten: Schritte, Matrix, Headless-Hinweise, Health-Leiste, Fehlertabelle, FAQ (launchd, kein nvm als Wahrheit). Mehr: Config-Validate CI-Gate, Embeddings-/RAG-Prefetch, Onboarding-Logs. Ohne Login.

Drei Störfälle, die diese Kette gezielt adressiert

  1. Menschliche Kurzprüfung: Operatoren lesen farbige Terminalzeilen per SSH, während CI-relevante JSON-Felder ungeprüft bleiben und Regressionen erst nach dem Merge auffallen.
  2. Port-Geister: Ein verwaister Listener auf 18789 von einem gestrigen Experiment blockiert den nächsten Lauf, obwohl doctor noch grün wirkt, weil TCP-Zustand und Prozessmetadaten auseinanderlaufen.
  3. PATH-Fiktion: Die Pipeline nutzt einen nvm-Shim, während launchd ein anderes node-Binary lädt; das Gate ist grün, der produktive Dienst startet nach dem Deploy nicht zuverlässig neu.

Die Kette ersetzt keine Security-Reviews, reduziert aber Flakes und beschleunigt Freigaben, weil Artefakte maschinenlesbar bleiben und sich ohne Gateway-Neustart schnell wiederholt auswerten lassen können.

Entscheidungsmatrix: welches Signal hat Vorrang?

Reihenfolge beim Schreiben der Pipeline-JSON: Status, doctor, lsof, optional HTTP-Probe. So bleiben Webhook-Payloads stabil über mehrere Releases hinweg.

Signal Stärke Blinder Fleck
Gateway-Status JSON Diff-freundlich, maschinenlesbar. Kann kurz hinter einem Crash hinken — mit lsof bündeln.
doctor Provider, Rechte, Platte früh sichtbar. Kein exklusiver Beweis für 18789.
lsof Listener-Kollisionen auf dem Mac. Parsing ohne öffentliche PID-Leaks disziplinieren.
HTTP-Health Echter Listener inkl. Auth. TLS/Proxy können täuschen — Host wie am Edge.

Vorbedingungen im Sinne von launchd und Bare-Metal

Liste auf dem Image abarbeiten, das auch für Dauer-Gateways gilt; Shell, CI und ProgramArguments sollen dieselben Binaries sehen und dieselben Versionszeilen loggen.

  • Node per node -v und absolutem Pfad loggen, nicht per nvm-Alias.
  • OpenClaw-CLI global pinnen; command -v openclaw neben dem Entwurf der LaunchAgent-Plist ablegen.
  • OPENCLAW_CONFIG_HOME auf die getestete Repo-Kopie zeigen; Secrets nur aus maskierten Variablen.
  • Prefetch schwere Abhängigkeiten vor dem Gate, damit Status und doctor eine warme Realität messen.

Wer launchd produktiv nutzt, sollte EnvironmentVariables der Plist mit den exportierten CI-Variablen diffen, bevor ein neues Image ausgerollt wird.

Schritt-für-Schritt: Gate-Skript vor dem Merge

Nach Installation und Prefetch ausführen; ein kurzes Log für Webhooks, Reviews und Audits.

export CI=true
# Zusätzliche JSON-/Headless-Flags aus `openclaw gateway status --help` ergänzen
export OPENCLAW_GATE_LOG="${OPENCLAW_GATE_LOG:-openclaw-gate.log}"
: > "$OPENCLAW_GATE_LOG"

{
  echo "=== node pfad ==="
  command -v node
  node -v
  echo "=== openclaw pfad ==="
  command -v openclaw
  openclaw --version
  echo "=== gateway status json ==="
  openclaw gateway status --json > gateway-status.json
  python3 -m json.tool gateway-status.json | head -n 80
  echo "=== doctor ==="
  openclaw doctor
  echo "=== config validate ==="
  openclaw config validate --config "${OPENCLAW_CONFIG_HOME:?}/openclaw.json"
  echo "=== lsof 18789 ==="
  lsof -nP -iTCP:18789 -sTCP:LISTEN || true
} 2>&1 | tee "$OPENCLAW_GATE_LOG"

Gleichen openclaw-Pfad in die Plist übernehmen; nach Listener- oder Token-Änderungen Dienst neu starten, kein Hot-Reload als TCP-Beweis.

Health-Leiste: alle drei Kriterien müssen erfüllt sein

  • JSON: Prozesszustand running, Build-Stamp entspricht der gepinnten CLI-Version.
  • HTTP: Loopback-curl auf die dokumentierte Health-Route liefert 2xx mit demselben Bearer wie am Edge.
  • TCP: lsof zeigt höchstens einen erwarteten PID oder einen bewusst gewählten CI-Alternativport.

Headless-Parameter und Beobachtbarkeit

CI=true plus Flags aus openclaw gateway status --help; kein Pseudo-TTY, stattdessen tee nach openclaw-gate.log. Prefetch vor dem Gate erwärmt npm- und Modell-Caches — danach liefert ein kurzes JSON-Summary für Webhooks realistische Last statt Kaltstart-Flakes.

Häufige Signaturzeilen und erste Gegenmaßnahmen

Signatur Ursache Erste Maßnahme
EADDRINUSE 18789 Altes Gateway oder doppeltes Label. PID per lsof beenden oder CI-Port wechseln.
JSON ok, curl nein Bind/Token. Listen-Stanza und Authorization prüfen.
openclaw fehlt unter launchd PATH ohne npm-global. Absolute ProgramArguments oder PATH in Plist.
Timeouts nur in CI Kalte Caches. Prefetch wie im Embeddings-Artikel, Retries begrenzen.
Strukturierte Daten (HowTo / FAQPage)

Im <head>: JSON-LD BlogPosting, Article, BreadcrumbList, HowTo, FAQPage (de). Vor Go-Live mit dem Google-Rich-Result-Test prüfen.

FAQ

Sollen PR-Pipelines den Daemon installieren?

Nein: CLI-only-Gates auf Wegwerf-OPENCLAW_HOME; launchd bleibt dedizierten Hosts vorbehalten, damit keine parallelen Jobs um 18789 ringen.

Warum zuerst Prefetch, dann Status?

Kalte Downloads erzeugen Timeout-Flakes, die echte Regressionsmaskieren. Warme Runner liefern belastbare Kennzahlen für Management-Summaries.

Wie lange Artefakte aufbewahren?

Mindestens vierzehn Tage für Reviews; SHA256 jedes Tarballs neben dem Dateinamen speichern. Für regulatorische Kunden Archive mit unveränderlicher Aufbewahrung und Zugriffsjournal planen.

Fazit und nächste Schritte

Status-JSON, doctor und 18789 auf dem Remote-Mac sind ein günstiges Pre-Merge-Signal plus Kurz-Summary für Webhooks nach Prefetch. Nächste Schritte: Startseite, Preise, Kaufen, Hilfe, Blog — ohne Login.

Remote-Mac für stabile OpenClaw-Gateways

Dediziertes Apple Silicon für Dependency-Prefetch, JSON-Status-Gates und webhook-taugliche CI-Kurzberichte. Öffentliche Preise, Checkout und Hilfe — ohne Paywall.