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
- 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.
- Port-Geister: Ein verwaister Listener auf
18789von einem gestrigen Experiment blockiert den nächsten Lauf, obwohldoctornoch grün wirkt, weil TCP-Zustand und Prozessmetadaten auseinanderlaufen. - PATH-Fiktion: Die Pipeline nutzt einen
nvm-Shim, währendlaunchdein anderesnode-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 -vund absolutem Pfad loggen, nicht pernvm-Alias. - OpenClaw-CLI global pinnen;
command -v openclawneben 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-
curlauf die dokumentierte Health-Route liefert 2xx mit demselben Bearer wie am Edge. - TCP:
lsofzeigt 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. |
Im <head>: JSON-LD BlogPosting, Article, BreadcrumbList, HowTo, FAQPage (de). Vor Go-Live mit dem Google-Rich-Result-Test prüfen.
FAQ
Nein: CLI-only-Gates auf Wegwerf-OPENCLAW_HOME; launchd bleibt dedizierten Hosts vorbehalten, damit keine parallelen Jobs um 18789 ringen.
Kalte Downloads erzeugen Timeout-Flakes, die echte Regressionsmaskieren. Warme Runner liefern belastbare Kennzahlen für Management-Summaries.
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.