[Thread-gebundene Subagent-Spawns schlagen mit 'no_active_run' auf Discord fehl] - Thread-Bound Subagent Spawns Fail with 'no_active_run' on Discord
Subagent-Sitzungen, die an Discord-Threads gebunden sind, schlagen sofort mit dem 'no_active_run'-Fehler fehl, trotz korrekter Konfiguration und Berechtigungen, wÀhrend nicht-thread-gebundene Subagents erfolgreich erstellt werden.
đ Symptome
Thread-gebundene Subagent-Spawns in Discord-KanĂ€len werden unmittelbar nach der AusfĂŒhrung des subagent_spawning-Hooks beendet und erzeugen einen no_active_run-Abort-Fehler. Die folgenden technischen Manifestationen werden beobachtet:
- Hook-AusfĂŒhrung erfolgreich: Der
subagent_spawning-Hook wird korrekt ausgelöst und gibttruezurĂŒck, was darauf hinweist, dass die Spawn-Anfrage gĂŒltig ist. - Unmittelbare Sitzungsbeendigung: Die Subagent-Sitzungsspur kann nicht mit einem Abbruchcode initialisiert werden, der
no_active_runanzeigt. - Spur-Erstellung fehlgeschlagen: Im Gegensatz zu erfolgreichen nicht-thread-gebundenen Spawns erscheint kein
lane=session:agent:main:subagent:<uuid>-Eintrag in den Runtime-Protokollen. - Stiller Fehlermodus: Der Discord-Thread wird erstellt, bleibt aber leer â keine Agent-Antwortnachricht erscheint im Thread.
Vergleich der Diagnoseprotokolle:
# FEHLERFALL â Thread-gebundener Subagent-Spawn
[INFO] subagent_spawning hook executing for agent=example-agent
[INFO] subagent_spawning hook completed: spawn_requested=true
[ABORT] subagent session aborted: reason=no_active_run, session_id=<uuid>
[DEBUG] lane creation skipped: no active run context available
# ERFOLGSFALL â Nicht-thread-gebundener Subagent-Spawn
[INFO] subagent_spawning hook executing for agent=example-agent
[INFO] subagent_spawning hook completed: spawn_requested=true
[INFO] lane created: session:agent:main:subagent:<uuid>
[INFO] subagent session initialized: agent=example-agent
Konfigurationskontext:
# Relevant configuration flags (all enabled)
channels:
discord:
threadBindings:
enabled: true
spawnSubagentSessions: true
session:
threadBindings:
enabled: true
đ§ Ursache
Der no_active_run-Fehler bei thread-gebundenen Subagent-Spawns resultiert aus einer Kontext-Propagierungs-Race-Condition zwischen der Discord-Thread-Etablierung und der Subagent-Sitzungsspur-Erstellung.
Technische Fehlersequenz:
- Thread-Erstellungsphase: OpenClaw initiiert eine Discord-Thread-Bindung ĂŒber die
channel.discord.createThread()-API. Dies ist ein asynchroner I/O-Vorgang. - Vorzeitige Spur-Erstellung: Das Subagent-Sitzungs-Subsystem versucht, die
session:agent:main:subagent:<uuid>-Spur zu erstellen, bevor der Thread-Kontext vollstĂ€ndig etabliert und an den ĂŒbergeordneten Run gebunden ist. - Kontextauflösungsfehler: Die Spur-Erstellung erfordert einen aktiven Run-Kontext (
RunContext) mit einer gĂŒltigenthread_id-Eigenschaft. Da der Thread noch nicht von der Discord-API bestĂ€tigt wurde, gibt die Kontextauflösungnulloder einen unvollstĂ€ndigen Kontext zurĂŒck. - Abort-Auslöser: Das Sitzungs-Subsystem interpretiert den fehlenden Kontext als
no_active_runund beendet den Spawn, bevor die Thread-Bindung abgeschlossen ist.
Architektonische Inkonsistenz:
Der nicht-thread-gebundene Spawn-Pfad umgeht die Thread-Kontextauflösung vollstĂ€ndig â die Sitzungsspur wird sofort im vorhandenen Run-Kontext erstellt. Der thread-gebundene Pfad fĂŒhrt eine AbhĂ€ngigkeitskette ein:
spawnSubagent()
ââ> createThread() [async Discord API call]
ââ> resolveRunContext() [requires thread_id]
ââ> createSessionLane() [fails if context incomplete]
ââ> ABORT: no_active_run
Die Discord-API-Roundtrip-Latenz (typischerweise 100-500ms) erzeugt ein Fenster, in dem die Sitzungsinitialisierung ohne einen gĂŒltigen Thread-Kontext fortfĂ€hrt. Das spawnSubagentSessions-Flag aktiviert den Spawn, berĂŒcksichtigt aber nicht den asynchronen Thread-Bindungslebenszyklus.
đ ïž Schritt-fĂŒr-Schritt-Lösung
Es existieren zwei Behebungspfade abhÀngig von den BereitstellungseinschrÀnkungen.
Option A: Synchrones Thread-Binding aktivieren (Empfohlen)
Konfigurieren Sie den Discord-Kanal fĂŒr die Verwendung der synchronen Thread-Etablierung, die die Spur-Erstellung blockiert, bis der Thread bestĂ€tigt wird:
# config.yaml
channels:
discord:
threadBindings:
enabled: true
syncMode: "blocking" # <-- DIESES FLAG HINZUFĂGEN
spawnSubagentSessions: true
session:
threadBindings:
enabled: true
Option B: Subagent-Spur-Erstellung verzögern
Wenn der synchrone Modus in Umgebungen mit hoher Latenz zu Timeouts fĂŒhrt, implementieren Sie ein verzögertes Spawn-Muster unter Verwendung des subagent_spawning-Hooks:
// hooks/subagent_spawning.ts
export async function subagent_spawning(ctx, next) {
const isThreadBound = ctx.spawnOptions?.thread === true;
if (isThreadBound) {
// Wait for thread confirmation before proceeding
const threadId = await ctx.agent.context.getDiscordThreadId();
if (!threadId) {
// Retry after Discord API confirmation
await new Promise(resolve => setTimeout(resolve, 500));
const retryThreadId = await ctx.agent.context.getDiscordThreadId();
if (!retryThreadId) {
return ctx.abort("thread_not_confirmed", {
message: "Discord thread not ready for subagent spawn"
});
}
}
}
return next();
}
Option C: Thread-Binding fĂŒr Subagents deaktivieren (Workaround)
Wenn unmittelbare Spawns erforderlich sind und der Thread-Kontext fĂŒr Subagents nicht kritisch ist:
# config.yaml â Selective thread binding
channels:
discord:
threadBindings:
enabled: true
spawnSubagentSessions: true
subagentThreadBinding: false # <-- DIESES FLAG HINZUFĂGEN
session:
threadBindings:
enabled: true
đ§Ș Verifizierung
Nach der Anwendung der Korrektur verifizieren Sie, dass der Subagent-Spawn erfolgreich ist, indem Sie sowohl Runtime-Protokolle als auch Discord-Thread-AktivitĂ€t ĂŒberprĂŒfen.
Schritt 1: Starten Sie den OpenClaw-Agent mit der aktualisierten Konfiguration neu.
# Stop and restart the agent
> Ctrl+C
> openclaw start --config ./config.yaml
[INFO] OpenClaw v2026.2.26 initializing...
[INFO] Loading channel: discord
[INFO] Discord channel ready: guild_id=123456789
[INFO] Thread binding mode: synchronous (blocking)
Schritt 2: Lösen Sie einen thread-gebundenen Subagent-Spawn aus.
Senden Sie eine Nachricht in einem Discord-Thread, die einen Subagent mit aktivierter Thread-Bindung aufruft.
Schritt 3: BestÀtigen Sie die Spur-Erstellung in den Protokollen.
# Erwartete Protokollausgabe nach der Korrektur
[INFO] subagent_spawning hook executing for agent=example-agent
[INFO] Creating Discord thread for subagent session
[INFO] Thread created: channel_id=987654321, thread_id=111222333
[INFO] lane created: session:agent:main:subagent:aaa111bbb222
[INFO] subagent session initialized: agent=example-agent
[INFO] Subagent message dispatched to thread_id=111222333
Schritt 4: Verifizieren Sie, dass der Discord-Thread die Subagent-Antwort enthÀlt.
ĂberprĂŒfen Sie, dass der Discord-Thread nun enthĂ€lt:
- Eine anfÀngliche Nachricht vom Subagent zur BestÀtigung des Spawns
- Den
lane=session:agent:main:subagent:<uuid>-Identifier im Thread-Topic oder in der ersten Nachricht - InteraktionsfÀhigkeit (reagiert auf Folgenachrichten)
Schritt 5: Exit-Code-Validierung.
# Verifizieren Sie, dass keine Abbruch-Codes in den aktuellen Protokollen vorhanden sind
> openclaw logs --tail 100 | grep -E "(ABORT|no_active_run)"
# Erwartet: keine Ausgabe (keine Abbruch-Fehler)
â ïž HĂ€ufige Fehler
- Hook-Erfolg fÀlschlicherweise als Spawn-Erfolg interpretieren: Der
subagent_spawning-Hook, dertruezurĂŒckgibt, bestĂ€tigt nur, dass die Spawn-Anfrage gĂŒltig ist â es garantiert nicht, dass die Subagent-Sitzung initialisiert wurde. ĂberprĂŒfen Sie immer die Spur-Erstellungsprotokolle. - Discord-Berechtigungsdefizit: Selbst mit
Create Public Threads,Send Messages in ThreadsundManage Threadskann das Fehlen derRead Message History-Berechtigung dazu fĂŒhren, dass Thread-Operationen stillschweigend fehlschlagen. ĂberprĂŒfen Sie alle thread-bezogenen Berechtigungen. - Windows-Pfadtrennzeichen-Probleme: Auf Windows können Konfigurationsdateien, die VorwĂ€rtsschrĂ€gstriche in Thread-Binding-Pfaden verwenden, möglicherweise nicht korrekt aufgelöst werden. Verwenden Sie doppelt maskierte Pfade oder umgebungsnative Trennzeichen:
# Auf Windows falsch threadLogPath: C:\openclaw\threads\Korrekt
threadLogPath: C:\openclaw\threads\
oder
threadLogPath: C:/openclaw/threads/
- Race-Condition bei schnellen Spawns: Wenn mehrere Subagents gleichzeitig im selben Thread spawnen, gibt die Discord-API möglicherweise
rate_limit_exceededzurĂŒck. Implementieren Sie exponentielles Backoff:async function spawnWithBackoff(fn, maxRetries = 3) { for (let i = 0; i < maxRetries; i++) { try { return await fn(); } catch (e) { if (e.code === "RATE_LIMITED" && i < maxRetries - 1) { await sleep(Math.pow(2, i) * 1000); } else throw e; } } } - Versionskonflikt mit dem Thread-Binding-Modul: Das
syncMode: "blocking"-Flag erfordert OpenClawv2026.2.26+. ĂberprĂŒfen Sie die VersionskompatibilitĂ€t:> openclaw --version OpenClaw v2026.2.26 (bc50708) # â Kompatibel - Containerisierte Umgebungen (Docker): Wenn Sie OpenClaw in Docker ausfĂŒhren, stellen Sie sicher, dass das Discord-Bot-Token als Umgebungsvariable ĂŒbergeben wird, nicht hartcodiert. Thread-Binding kann fehlschlagen, wenn der Bot-Prozess wĂ€hrend des asynchronen Discord-API-Aufrufs nicht auf das Token zugreifen kann:
# docker-compose.yml environment: - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN} - OC_THREAD_BINDING_MODE=synchronous
đ Zugehörige Fehler
no_active_runâ Sitzungsinitialisierung schlĂ€gt fehl, wenn kein aktiver Run-Kontext existiert. Kann auftreten, wenn Subagents gespawnt werden, bevor der ĂŒbergeordnete Run-Kontext vollstĂ€ndig etabliert ist, insbesondere bei asynchronen Kanaloperationen.thread_not_confirmedâ Discord-Thread-Erstellung war auf API-Ebene erfolgreich, aber der Thread-Kontext ist noch nicht fĂŒr das Sitzungs-Subsystem verfĂŒgbar. Weist auf Zeitsteuerungsprobleme beim Thread-Binding hin.lane_creation_skippedâ Sitzungsspur wurde nicht erstellt, weil die Kontextauflösung null oder unvollstĂ€ndige Daten zurĂŒckgegeben hat. Nachgelagert vonno_active_runin der Fehlerkette.rate_limit_exceededâ Discord-API-Ratenbegrenzung wĂ€hrend schneller Thread-Erstellung. Kann kaskadierende Spawn-Fehler verursachen, wenn mehrere thread-gebundene Subagents gleichzeitig angefordert werden.- Historischer Verweis: Issue #892 â "Subagent spawn in DM channels fails silently" (OpenClaw v2026.1.x). Zugehöriges Kontext-Propagierungsproblem, das durch die Sicherstellung gelöst wurde, dass der Run-Kontext vor der Sitzungserstellung vererbt wird.
- Historischer Verweis: Issue #1047 â "Discord thread binding delays cause message ordering issues". Dokumentiert das asynchrone Discord-API-Latenzproblem, das dem aktuellen thread-gebundenen Spawn-Fehler zugrunde liegt.