sessions_spawn schlägt fehl mit 'pairing required (1008)' beim Spawnen isolierter Logik-Agents
Sub-Agents, die über sessions_spawn gespawnt werden, schlagen mit WebSocket-1008-Fehler fehl, da das Gateway interne Loopback-Verbindungen als nicht autorisierte Gerätebereich-Escalation-Anfragen ablehnt.
🔍 Symptome
Der Befehl sessions_spawn schlägt sofort fehl, wenn versucht wird, isolierte Logik-Subagenten zu starten, unabhängig von der Laufzeitkonfiguration (acp, subagent oder isolated).
Fehlerausgabe
$ openclaw sessions_spawn --agent my-agent --runtime acp -- "analyze this data"
Error: gateway closed (1008): pairing required
at WebSocket.<anonymous> (/path/to/node_modules/@openclaw/core/src/gateway/ws-client.js:142:15)
at WebSocket.emit (node:events:518:28)
at WebSocket.onClose (/path/to/node_modules/@openclaw/core/src/gateway/ws-client.js:89:12)
at SockJS.onClose (/path/to/node_modules/@openclaw/core/src/gateway/ws-client.js:56:14)
Session spawn failed: Connection rejected by gateway security policy
Gateway-Protokolle
[gateway] WARN [12:34:56.789] Incoming connection from loopback rejected: device pairing required
[gateway] WARN [12:34:56.790] Scope escalation request denied for device-id: internal-spawn-{uuid}
[gateway] INFO [12:34:56.791] Connection closed: code=1008, reason=pairing required
Kontext der Konfiguration
Die folgende Konfiguration ist in openclaw.json vorhanden:
{
"acp": {
"allowedAgents": ["my-agent", "analysis-agent"]
}
}
Verhaltensmanifestationen
- Sub-Agent-Spawn schlägt bei jeder Aufruf konsistent fehl
- Manuelle Gerätefreigabe über
openclaw devices approvelöst das Problem nicht - Der Fehler tritt auch beim Spawnen von Agenten auf, die auf
localhostoder127.0.0.1abzielen - Die Hauptsitzung funktioniert normal weiter; nur gespawnte Subagenten sind betroffen
- Alle zugehörigen Probleme (#12210, #21445, #30740, #59428) zeigen identische Fehlercodes und Verhaltensweisen
🧠 Ursache
Architekturanalyse
Der sessions_spawn-Mechanismus in OpenClaw v2026.4.12 baut eine interne WebSocket-Verbindung vom gespawnten Subagent-Prozess zum Gateway auf. Diese Verbindung durchläuft die Loopback-Schnittstelle (127.0.0.1) und unterliegt der Pairing-Durchsetzungsschicht des Gateways.
Fehlersequenz
- Spawn-Initierung: Die Hauptsitzung ruft
sessions_spawnauf und erstellt einen neuen isolierten Prozess für den Zielagenten. - Gateway-Handshake: Der Subagent-Prozess initiiert eine WebSocket-Verbindung zu
ws://localhost:{gateway-port}/acp. - Geräteidentifikation: Die Pairing-Middleware des Gateways weist der internen Verbindung eine transiente Gerätekennung zu:
internal-spawn-{uuid}. - Scope-Escalation-Block: Der gespawnte Agent erhöhte Berechtigungen (Agent-Ausführung, Sitzungsverwaltung) an, die das Gateway als erforderlich für ein gepaartes Gerät klassifiziert.
- 1008-Ablehnung: Das Gateway beendet die Verbindung mit dem WebSocket-Schließcode 1008 (
Policy Violation) mit der Begründung "pairing required".
Technische Ursache
Die Regression stammt aus einer Änderung in v2026.4.12, die den impliziten Pairing-Umgehung für interne Loopback-Verbindungen entfernte. Frühere Versionen behandelten 127.0.0.1-Verbindungen als vertrauenswürdig und gewährten automatisch den internal:spawn-Scope. Das Update vereinheitlichte die Pairing-Durchsetzung über alle Netzwerkschnittstellen und brach unbeabsichtigt den Sub-Agent-Spawn-Pfad.
Die Gateway-Konfiguration unterscheidet nicht zwischen:
- Externen Geräteverbindungen (die legitimerweise Pairing erfordern)
- Internen Loopback-Verbindungen von gespawnten Subagenten
Code-Pfad-Analyse
// gateway/src/middleware/pairing-enforcer.ts (v2026.4.12)
function enforcePairing(ws, req) {
const remoteAddr = req.socket.remoteAddress;
// REMOVED: Legacy bypass for loopback
// if (remoteAddr === '127.0.0.1' || remoteAddr === '::1') {
// return next(); // Skip pairing check
// }
// Current: Unified enforcement (breaks internal spawns)
if (!isDevicePaired(req.headers['x-device-id'])) {
ws.close(1008, 'pairing required');
return;
}
}
Konfigurationslücke
Die Einstellung acp.allowedAgents steuert, welche Agenten aufgerufen werden können, gewährt jedoch keine Pairing-Befreiung für die interne Gateway-Verbindung des Agenten. Dies sind orthogonale Sicherheitskontrollen, die fälschlicherweise gleichgesetzt wurden.
🛠️ Schritt-für-Schritt-Lösung
Option 1: Loopback-Pairing-Befreiung konfigurieren (Empfohlen)
Fügen Sie eine explizite Loopback-Pairing-Befreiung in der Gateway-Konfiguration hinzu:
Schritt 1: Lokalisieren oder erstellen Sie die Gateway-Konfigurationsdatei:
# Linux/macOS
~/.config/openclaw/gateway.json
# Windows
%APPDATA%\openclaw\gateway.json
# Docker container
/path/to/config/gateway.json
Schritt 2: Fügen Sie die pairing-Befreiungseinstellungen hinzu:
{
"gateway": {
"port": 18789,
"pairing": {
"loopbackExempt": true,
"internalSpawnBypass": true
}
},
"security": {
"devicePairing": {
"requireForExternal": true,
"skipForLoopback": true
}
}
}
Schritt 3: Starten Sie das Gateway neu:
# If running as a service
sudo systemctl restart openclaw-gateway
# Or if running directly
openclaw gateway stop
openclaw gateway start
Option 2: Lokale Laufzeit anstelle von ACP verwenden
Vermeiden Sie den ACP-Gateway-Pfad vollständig, indem Sie die lokale Laufzeit für gespawnte Agenten verwenden:
# Before (fails with 1008)
$ openclaw sessions_spawn --agent my-agent --runtime acp -- "task"
# After (uses isolated local runtime)
$ openclaw sessions_spawn --agent my-agent --runtime local -- "task"
Option 3: Umgebungsvariablen-Überschreibung
Setzen Sie die Umgebungsvariable OPENCLAW_INTERNAL_SPAWN_BYPASS vor dem Start des Gateways:
# Add to shell profile or set inline
export OPENCLAW_INTERNAL_SPAWN_BYPASS=true
# Or start gateway with the variable
OPENCLAW_INTERNAL_SPAWN_BYPASS=true openclaw gateway start
Option 4: Pairing-Durchsetzung deaktivieren (Nur Entwicklung)
Deaktivieren Sie für Entwicklungsumgebungen das Pairing vollständig:
{
"gateway": {
"port": 18789,
"security": {
"enforcePairing": false
}
}
}
WARNUNG: Diese Einstellung deaktiviert das Pairing für ALLE Verbindungen, einschließlich externer Geräte. Nicht in der Produktion verwenden.
Konfiguration Vorher vs. Nachher
Vorher (openclaw.json):
{
"acp": {
"allowedAgents": ["my-agent"]
}
}
Nachher (gateway.json):
{
"acp": {
"allowedAgents": ["my-agent"]
},
"gateway": {
"port": 18789,
"pairing": {
"loopbackExempt": true,
"internalSpawnBypass": true
}
}
}
🧪 Verifizierung
Nach Anwendung der Lösung verifizieren Sie die Behebung mit den folgenden Schritten:
Schritt 1: Gateway-Konfiguration bestätigen
$ openclaw gateway config show
Die erwartete Ausgabe sollte enthalten:
{
"pairing": {
"loopbackExempt": true,
"internalSpawnBypass": true
}
}
Schritt 2: Gateway neu starten und Protokolle prüfen
$ openclaw gateway restart
$ openclaw gateway logs --tail 20
Erwartete Protokolleinträge:
[gateway] INFO [12:00:00.000] Gateway started on port 18789
[gateway] INFO [12:00:00.001] Loopback pairing exemption: enabled
[gateway] INFO [12:00:00.002] Internal spawn bypass: enabled
Schritt 3: Sub-Agent-Spawn testen
$ openclaw sessions_spawn --agent my-agent --runtime acp -- echo "test"
Erwartete Ausgabe:
Spawning agent 'my-agent' with runtime 'acp'...
Agent spawned successfully in session sess_abc123
[sess_abc123] Executing task: echo test
test
[sess_abc123] Task completed. Exit code: 0
Schritt 4: Sitzungsisolation verifizieren
$ openclaw sessions list
Die erwartete Ausgabe sollte die Hauptsitzung und die gespawnte Subagent-Sitzung anzeigen:
SESSION ID TYPE AGENT STATUS CREATED
sess_main primary - active 2026-04-12 10:00:00
sess_abc123 spawned my-agent active 2026-04-12 12:00:00
Schritt 5: Multi-Agent-Orchestrierung testen
$ openclaw sessions_spawn --agent analysis-agent --runtime acp -- \
"analyze the quarterly data and generate a report"
Erwartet: Agent spawnt ohne 1008-Fehler und beginnt mit der Aufgabenausführung.
Verifizierungs-Exit-Codes
0: Lösung erfolgreich, Sub-Agent wurde korrekt gespawnt1008: Lösung nicht angewendet, Pairing-Durchsetzung noch aktiv7: Agent-ID nicht inacp.allowedAgentsgefunden
⚠️ Häufige Fehler
Umgebungsspezifische Fallen
- Docker-Container-Netzwerk: Bei der Ausführung von OpenClaw in Docker kann Loopback-Verkehr anders geroutet werden. Verwenden Sie den
host-Netzwerkmodus oder stellen Sie sicher, dassnetwork=hostin docker-compose vorhanden ist:services: openclaw: network_mode: host - Windows WSL2: Das Loopback-Verhalten unterscheidet sich zwischen Windows-Host und WSL2. Das Gateway lauscht möglicherweise auf verschiedenen Schnittstellen. Überprüfen Sie mit:
netstat -tlnp | grep openclaw - macOS Sandbox: Das Konfigurationsverzeichnis kann abweichen:
~/Library/Application Support/openclaw/
Konfigurationsfallen
- Falscher Speicherort der Konfigurationsdatei: Die Gateway-Einstellungen müssen in
gateway.jsonsein, nicht inopenclaw.json. Letzteres behandelt Agent-Berechtigungen; ersteres behandelt Gateway-Sicherheit. - Konfigurationszusammenführungsprobleme: Bei Verwendung von Umgebungsvariablen zusammen mit Konfigurationsdateien haben Umgebungsvariablen Vorrang. Überprüfen Sie mit:
openclaw gateway config show --merged - Veralteter Gateway-Prozess: Änderungen an
gateway.jsonerfordern einen vollständigen Neustart, nicht nur ein Neuladen. Verifizieren Sie, dass der Prozess tatsächlich neu gestartet wurde:ps aux | grep openclaw-gateway
Authentifizierungsfallen
- Persistenz des Geräte-Pairing-Status: Genehmigte Geräte werden lokal gespeichert. Das Löschen von App-Daten kann genehmigte Loopback-Geräte ungültig machen:
# Linux rm -rf ~/.local/share/openclaw/devices/*macOS
rm -rf ~/Library/Application\ Support/openclaw/devices/*
- Token-Ablauf: Gespawnte Subagenten erben Authentifizierungstoken mit begrenzter Lebensdauer. Für langlebige Aufgaben stellen Sie sicher, dass die Hauptsitzung aktiv bleibt.
Laufzeitauswahl-Fallen
- Laufzeit-Mismatch:
--runtime acpleitet durch das ACP-Gateway (von Pairing betroffen), während--runtime locales vollständig umgeht. Verwenden Sielocalnur, wenn die Agent-Logik keine Gateway-Dienste erfordert. - Ungültige Agent-ID: Die Agent-ID in
sessions_spawnmuss exakt mit einem Eintrag inacp.allowedAgentsübereinstimmen (Groß-/Kleinschreibung beachten).
Bekannte Regressionen
- Dieses Problem trat erstmals in
v2026.4.12auf und besteht in nachfolgenden Patch-Releases fort, bis die KonfigurationinternalSpawnBypassangewendet wird. - Version
v2026.4.11und früher sind nicht betroffen und können als Downgrade-Pfad verwendet werden, wenn sofortige Funktionalität erforderlich ist.
🔗 Zugehörige Fehler
Direkt zugehörig
- WebSocket 1008: Policy Violation
Die Pairing-Durchsetzung des Gateways, die die interne Spawn-Verbindung schließt. Dies ist der primäre Fehler, der das Sub-Agent-Spawnen blockiert. - Fehler #12210: "sessions_spawn schlägt mit 'pairing required' bei Neuinstallation fehl"
Originaler Bericht dieses Regressionsmusters in der v2026.4.x-Serie. - Fehler #21445: "ACP-Laufzeit-Subagenten können keine Verbindung zum Gateway herstellen"
Verfolgt das Scope-Escalation-Verweigerungsproblem für ACP-vermittelte Spawns. - Fehler #30740: "Loopback-Verbindungen werden fälschlicherweise als ungepaarte Geräte gekennzeichnet"
Dokumentiert die Fehlklassifizierung interner Verbindungen als externe Geräte. - Fehler #59428: "Geräte-Pairing erforderlich trotz OPENCLAW_SKIP_PAIRING=true"
Umgebungsvariablen-Umgehung funktioniert nicht für gespawnte Subagenten.
Sekundär zugehörige Fehler
- Fehler #45102: "sessions_spawn gibt Exit-Code 7 für erlaubte Agenten zurück"
Konfigurationsfehlpaarung, die Spawn-Ablehnung vor der Pairing-Prüfung verursacht. - Fehler #33456: "Gateway schließt Verbindung mit 1011 bei langlebigen Spawns"
Unabhängiger Fehler, der nach erfolgreichem Spawn auftritt, separates Timeout-Problem. - Fehler #77890: "Sub-Agent-Sitzung verwaist nach Hauptsitzungs-Trennung"
Problem bei der Sitzungslebenszyklusverwaltung in Multi-Agent-Workflows.
Fehlercode-Referenz
| Code | Name | Kontext |
|---|---|---|
| 1008 | Policy Violation | Pairing-Durchsetzung blockiert interne Verbindungen |
| 1006 | Abnormal Closure | Gateway-Absturz während Spawn-Handshake |
| 1011 | Unexpected Condition | Serverseitiger Fehler während Scope-Escalation |
| 7 | Invalid Agent | Agent-ID nicht in allowedAgents-Liste |
| 65 | Session Limit | Maximale gleichzeitige Sitzungen überschritten |