Sub-Agenten
An Subagenten delegieren. Arbeit auf spezialisierte Agenten verteilen. Sub-Agenten sind Hintergrund-Agentenläufe, die aus einem bestehenden Agentenlauf gestartet werden. Sie laufen in einer eigenen Sitzung (agent:<agentId>:subagent:<uuid>) und melden bei Fertigstellung ihr Ergebnis zurück an den anfragenden Chat-Kanal.
Slash-Befehl
/subagents zum Inspizieren oder Steuern von Sub-Agenten-Läufen der aktuellen Sitzung:
/subagents list/subagents stop <id|#|all>/subagents log <id|#> [limit] [tools]/subagents info <id|#>/subagents send <id|#> <message>
/subagents info zeigt Lauf-Metadaten (Status, Zeitstempel, Sitzungs-ID, Transkript-Pfad, Cleanup). Hauptziele:
- „Recherche / lange Aufgabe / langsames Tool“ parallelisieren, ohne den Hauptlauf zu blockieren.
- Sub-Agenten standardmäßig isoliert halten (Sitzungstrennung + optionales Sandboxing).
- Die Tool-Oberfläche schwer missbrauchbar halten: Sub-Agenten erhalten standardmäßig keine Sitzungs-Tools.
- Verschachteltes Fan-Out vermeiden: Sub-Agenten können keine Sub-Agenten starten.
Kosten-Hinweis: Jeder Sub-Agent hat eigenen Kontext und Token-Verbrauch. Für schwere oder wiederholte Aufgaben ein günstigeres Modell für Sub-Agenten setzen und den Hauptagenten auf einem höherwertigen Modell lassen. Konfigurierbar über agents.defaults.subagents.model oder pro-Agent-Überschreibungen.
Tool
sessions_spawn nutzen:
- Startet einen Sub-Agenten-Lauf (
deliver: false, globale Lane:subagent) - Führt dann einen Announce-Schritt aus und postet die Announce-Antwort in den anfragenden Chat-Kanal
- Standardmodell: erbt vom Aufrufer, außer du setzt
agents.defaults.subagents.model(oder pro Agentagents.list[].subagents.model); ein explizitessessions_spawn.modelgewinnt weiterhin.
Tool-Parameter:
task(erforderlich)label?(optional)agentId?(optional; unter anderer Agent-ID starten, wenn erlaubt)model?(optional; überschreibt das Sub-Agenten-Modell; ungültige Werte werden übersprungen, Sub-Agent läuft mit Default-Modell mit Warnung im Tool-Ergebnis)thinking?(optional; überschreibt Thinking-Level für den Sub-Agenten-Lauf)runTimeoutSeconds?(Standard0; wenn gesetzt, wird der Sub-Agenten-Lauf nach N Sekunden abgebrochen)cleanup?(delete|keep, Standardkeep)
Allowlist:
agents.list[].subagents.allowAgents: Liste der Agent-IDs, die peragentIdansprechbar sind (["*"]für beliebige). Standard: nur der anfragende Agent.
Discovery:
agents_listnutzen, um zu sehen, welche Agent-IDs aktuell fürsessions_spawnerlaubt sind.
Auto-Archiv:
- Sub-Agenten-Sitzungen werden automatisch nach
agents.defaults.subagents.archiveAfterMinutes(Standard: 60) archiviert. - Archiv nutzt
sessions.deleteund benennt das Transkript in*.deleted.<timestamp>um (gleicher Ordner). cleanup: "delete"archiviert sofort nach Announce (Transkript bleibt per Umbenennung erhalten).- Auto-Archiv ist Best-Effort; ausstehende Timer gehen bei Gateway-Neustart verloren.
runTimeoutSecondsarchiviert nicht automatisch; es stoppt nur den Lauf. Die Sitzung bleibt bis Auto-Archiv.
Authentifizierung
Sub-Agenten-Auth wird nach Agent-ID aufgelöst, nicht nach Sitzungstyp:
- Der Sub-Agenten-Sitzungs-Key ist
agent:<agentId>:subagent:<uuid>. - Der Auth-Store wird aus dem
agentDirdieses Agenten geladen. - Die Auth-Profile des Hauptagenten werden als Fallback eingemischt; Agent-Profile überschreiben Haupt-Profile bei Konflikten.
Hinweis: Die Zusammenführung ist additiv, Haupt-Profile sind also immer als Fallback verfügbar. Vollständig getrennte Auth pro Agent wird noch nicht unterstützt.
Announce
Sub-Agenten melden per Announce-Schritt zurück:
- Der Announce-Schritt läuft in der Sub-Agenten-Sitzung (nicht der anfragenden Sitzung).
- Antwortet der Sub-Agent exakt
ANNOUNCE_SKIP, wird nichts gepostet. - Sonst wird die Announce-Antwort per Follow-up-
agent-Aufruf (deliver=true) in den anfragenden Chat-Kanal gepostet. - Announce-Antworten bewahren Thread/Topic-Routing, wenn verfügbar (Slack-Threads, Telegram-Topics, Matrix-Threads).
- Announce-Nachrichten werden auf eine stabile Vorlage normalisiert:
Status:aus dem Lauf-Ergebnis (success,error,timeoutoderunknown).Result:die Zusammenfassung aus dem Announce-Schritt (oder(not available)wenn fehlend).Notes:Fehlerdetails und anderer nützlicher Kontext.
Statuswird nicht aus der Modellausgabe abgeleitet; er kommt von Laufzeit-Ergebnis-Signalen.
Announce-Payloads enthalten am Ende eine Stats-Zeile (auch bei Umbrüchen):
- Laufzeit (z. B.
runtime 5m12s) - Token-Verbrauch (Input/Output/Gesamt)
- Geschätzte Kosten, wenn Modell-Preise konfiguriert sind (
models.providers.*.models[].cost) sessionKey,sessionIdund Transkript-Pfad (damit der Hauptagent persessions_historydie Historie holen oder die Datei auf Disk prüfen kann)
Tool-Richtlinie (Sub-Agenten-Tools)
Standardmäßig erhalten Sub-Agenten alle Tools außer Sitzungs-Tools:
sessions_listsessions_historysessions_sendsessions_spawn
Überschreiben per Config:
{
agents: {
defaults: {
subagents: {
maxConcurrent: 1
}
}
},
tools: {
subagents: {
tools: {
// deny gewinnt
deny: ["gateway", "cron"],
// bei allow wird es allow-only (deny gewinnt weiter)
// allow: ["read", "exec", "process"]
}
}
}
}Parallelität
Sub-Agenten nutzen eine eigene In-Process-Queue-Lane:
- Lane-Name:
subagent - Parallelität:
agents.defaults.subagents.maxConcurrent(Standard8)
Stoppen
/stopim anfragenden Chat bricht die anfragende Sitzung ab und stoppt alle aktiven Sub-Agenten-Läufe, die von ihr gestartet wurden.
Einschränkungen
- Sub-Agenten-Announce ist Best-Effort. Bei Gateway-Neustart geht ausstehende „announce back“-Arbeit verloren.
- Sub-Agenten teilen weiterhin dieselben Gateway-Prozess-Ressourcen;
maxConcurrentals Sicherheitsventil behandeln. sessions_spawnist immer nicht-blockierend: Es gibt sofort{ status: "accepted", runId, childSessionKey }zurück.- Sub-Agenten-Kontext injiziert nur
AGENTS.md+TOOLS.md(keinSOUL.md,IDENTITY.md,USER.md,HEARTBEAT.mdoderBOOTSTRAP.md).