#Agent-zu-Agent-Kommunikation ohne Blockierung — wie Subagenten Rückfragen stellen
1 messages · Page 1 of 1 (latest)
Ich prüfe kurz die Doku und den genauen Tool-Flow, damit ich dir nichts Falsches erzähle.
Kurz: teilweise ja, aber kein echtes voll-duplex async RPC zwischen zwei gleichzeitig laufenden Sessions.
Der wichtige Haken ist: OpenClaw serialisiert genau einen aktiven Run pro Session.
Also:
sessions_send({ timeoutSeconds: 0 })ist fire-and-forget und blockiert den aufrufenden Subagenten nicht.- Aber wenn der Hauptagent gerade noch läuft, wird die Nachricht an ihn nur gequeued. Er beantwortet sie erst, wenn sein aktueller Turn endet oder
sessions_yield()macht.
Praktisches Muster
- Hauptagent startet Kind mit
sessions_spawn(...) - Hauptagent macht danach
sessions_yield() - Subagent fragt mit
sessions_send({ sessionKey: "main", message: "...", timeoutSeconds: 0 }) - Wenn der Subagent die Antwort wirklich braucht, sollte er danach ebenfalls
sessions_yield()oder seinen Turn beenden
Dann ist es asynchron, aber eben ereignisbasiert, nicht zwei laufende Turns gleichzeitig.
Wichtige Config
Damit ein Subagent überhaupt sessions_send nutzen darf, musst du das explizit erlauben, weil Leaf-Subagents standardmäßig keine Session-Tools bekommen:
{
tools: {
subagents: {
tools: {
allow: ["sessions_send"]
}
}
}
}
tools.sessions.visibility: "tree" ist dafür meist genug, das ist auch der Default.
Wenn du echte persistente Rückfragen willst
Dann ist der offiziell unterstützte Weg aktuell die thread-bound Session:
{
session: {
threadBindings: { enabled: true }
},
channels: {
discord: {
threadBindings: {
enabled: true,
spawnSubagentSessions: true
}
}
}
}
Dann sessions_spawn({ thread: true, mode: "session" }).
Fazit
- Asynchron ohne Blockieren des Callers: ja, mit
sessions_send(..., timeoutSeconds: 0) - Sofortige Antwort an einen noch laufenden Parent-Run: nein
- Bestes Pattern heute:
sessions_send(timeoutSeconds: 0)+sessions_yield() - Für echte laufende Follow-ups: Discord thread bindings
Docs: