ACP-Agenten
Agent Client Protocol (ACP)-Sitzungen ermöglichen es OpenClaw, externe Coding-Harnesses (zum Beispiel Pi, Claude Code, Codex, OpenCode und Gemini CLI) über ein ACP-Backend-Plugin auszuführen.
Wenn du OpenClaw in natürlicher Sprache bittest, etwas „in Codex auszuführen” oder „Claude Code in einem Thread zu starten”, leitet OpenClaw diese Anfrage an die ACP-Laufzeit weiter (nicht an die native Sub-Agent-Laufzeit).
Schneller Operator-Ablauf
Nutze dies, wenn du ein praktisches /acp-Runbook brauchst:
- Sitzung starten:
/acp spawn codex --mode persistent --thread auto
- Im gebundenen Thread arbeiten (oder den Session-Key explizit angeben).
- Laufzeitstatus prüfen:
/acp status
- Laufzeitoptionen bei Bedarf anpassen:
/acp model <provider/model>/acp permissions <profile>/acp timeout <seconds>
- Aktive Sitzung anstoßen, ohne den Kontext zu ersetzen:
/acp steer tighten logging and continue
- Arbeit beenden:
/acp cancel(aktuellen Turn stoppen), oder/acp close(Sitzung schließen + Bindungen entfernen)
Schnellstart für Menschen
Beispiele für natürliche Anfragen:
- „Starte eine persistente Codex-Sitzung in einem Thread hier und halte sie fokussiert.”
- „Führe das als einmalige Claude Code ACP-Sitzung aus und fasse das Ergebnis zusammen.”
- „Nutze Gemini CLI für diese Aufgabe in einem Thread und behalte Follow-ups im selben Thread.”
Was OpenClaw tun sollte:
runtime: "acp"wählen.- Das angeforderte Harness-Ziel auflösen (
agentId, zum Beispielcodex). - Wenn Thread-Bindung gewünscht und der aktuelle Kanal dies unterstützt, die ACP-Sitzung an den Thread binden.
- Folgenachrichten im Thread an dieselbe ACP-Sitzung weiterleiten, bis unfokussiert/geschlossen/abgelaufen.
ACP versus Sub-Agenten
Verwende ACP, wenn du eine externe Harness-Laufzeit möchtest. Verwende Sub-Agenten, wenn du native delegierte OpenClaw-Läufe möchtest.
| Bereich | ACP-Sitzung | Sub-Agent-Lauf |
|---|---|---|
| Laufzeit | ACP-Backend-Plugin (zum Beispiel acpx) | Native OpenClaw-Sub-Agent-Laufzeit |
| Session-Key | agent:<agentId>:acp:<uuid> | agent:<agentId>:subagent:<uuid> |
| Hauptbefehle | /acp ... | /subagents ... |
| Spawn-Tool | sessions_spawn mit runtime:"acp" | sessions_spawn (Standard-Laufzeit) |
Siehe auch Sub-Agenten.
Thread-gebundene Sitzungen (kanalunabhängig)
Wenn Thread-Bindungen für einen Kanaladapter aktiviert sind, können ACP-Sitzungen an Threads gebunden werden:
- OpenClaw bindet einen Thread an eine Ziel-ACP-Sitzung.
- Folgenachrichten in diesem Thread werden an die gebundene ACP-Sitzung weitergeleitet.
- ACP-Ausgaben werden im selben Thread zurückgeliefert.
- Unfokussierung/Schließen/Archivierung/Idle-Timeout oder Max-Age-Ablauf entfernt die Bindung.
Thread-Bindungsunterstützung ist adapterspezifisch. Wenn der aktive Kanaladapter keine Thread-Bindungen unterstützt, gibt OpenClaw eine klare Meldung „nicht unterstützt/nicht verfügbar” zurück.
Erforderliche Feature-Flags für Thread-gebundenes ACP:
acp.enabled=trueacp.dispatch.enabledist standardmäßig aktiviert (auffalsesetzen, um ACP-Dispatch zu pausieren)- Kanaladapter-ACP-Thread-Spawn-Flag aktiviert (adapterspezifisch)
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
Kanäle mit Thread-Unterstützung
- Jeder Kanaladapter, der Session-/Thread-Bindungsfähigkeit bietet.
- Aktuelle integrierte Unterstützung:
- Discord-Threads/Kanäle
- Telegram-Topics (Forum-Topics in Gruppen/Supergruppen und DM-Topics)
- Plugin-Kanäle können Unterstützung über die gleiche Bindungsschnittstelle hinzufügen.
Kanalspezifische Einstellungen
Für nicht-ephemere Workflows konfiguriere persistente ACP-Bindungen in den bindings[]-Einträgen auf oberster Ebene.
Bindungsmodell
bindings[].type="acp"markiert eine persistente ACP-Gesprächsbindung.bindings[].matchidentifiziert die Zielkonversation:- Discord-Kanal oder -Thread:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Telegram-Forum-Topic:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>"
- Discord-Kanal oder -Thread:
bindings[].agentIdist die zugehörige OpenClaw-Agent-ID.- Optionale ACP-Überschreibungen unter
bindings[].acp:mode(persistentoderoneshot)labelcwdbackend
Laufzeit-Standardwerte pro Agent
Verwende agents.list[].runtime, um ACP-Standardwerte einmal pro Agent zu definieren:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(Harness-ID, zum Beispielcodexoderclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
Überschreibungs-Reihenfolge für ACP-gebundene Sitzungen:
bindings[].acp.*agents.list[].runtime.acp.*- Globale ACP-Standardwerte (zum Beispiel
acp.backend)
Beispiel:
{
agents: {
list: [
{
id: "codex",
runtime: {
type: "acp",
acp: {
agent: "codex",
backend: "acpx",
mode: "persistent",
cwd: "/workspace/openclaw",
},
},
},
{
id: "claude",
runtime: {
type: "acp",
acp: { agent: "claude", backend: "acpx", mode: "persistent" },
},
},
],
},
bindings: [
{
type: "acp",
agentId: "codex",
match: {
channel: "discord",
accountId: "default",
peer: { kind: "channel", id: "222222222222222222" },
},
acp: { label: "codex-main" },
},
{
type: "acp",
agentId: "claude",
match: {
channel: "telegram",
accountId: "default",
peer: { kind: "group", id: "-1001234567890:topic:42" },
},
acp: { cwd: "/workspace/repo-b" },
},
{
type: "route",
agentId: "main",
match: { channel: "discord", accountId: "default" },
},
{
type: "route",
agentId: "main",
match: { channel: "telegram", accountId: "default" },
},
],
channels: {
discord: {
guilds: {
"111111111111111111": {
channels: {
"222222222222222222": { requireMention: false },
},
},
},
},
telegram: {
groups: {
"-1001234567890": {
topics: { "42": { requireMention: false } },
},
},
},
},
}
Verhalten:
- OpenClaw stellt sicher, dass die konfigurierte ACP-Sitzung vor der Nutzung existiert.
- Nachrichten in diesem Kanal oder Topic werden an die konfigurierte ACP-Sitzung weitergeleitet.
- In gebundenen Konversationen setzen
/newund/resetden gleichen ACP-Session-Key vor Ort zurück. - Temporäre Laufzeit-Bindungen (zum Beispiel durch Thread-Focus-Flows erstellt) gelten weiterhin, wo vorhanden.
ACP-Sitzungen starten (Schnittstellen)
Über sessions_spawn
Verwende runtime: "acp", um eine ACP-Sitzung aus einem Agent-Turn oder Tool-Aufruf zu starten.
{
"task": "Open the repo and summarize failing tests",
"runtime": "acp",
"agentId": "codex",
"thread": true,
"mode": "session"
}
Hinweise:
runtimeist standardmäßigsubagent, setze alsoruntime: "acp"explizit für ACP-Sitzungen.- Wenn
agentIdweggelassen wird, verwendet OpenClawacp.defaultAgent, sofern konfiguriert. mode: "session"erfordertthread: true, um eine persistente gebundene Konversation aufrechtzuerhalten.
Schnittstellendetails:
task(erforderlich): Initialer Prompt, der an die ACP-Sitzung gesendet wird.runtime(erforderlich für ACP): muss"acp"sein.agentId(optional): ACP-Ziel-Harness-ID. Fällt aufacp.defaultAgentzurück, wenn gesetzt.thread(optional, Standardfalse): Thread-Bindungs-Flow anfordern, wo unterstützt.mode(optional):run(einmalig) odersession(persistent).- Standard ist
run - wenn
thread: trueund mode weggelassen, kann OpenClaw je nach Laufzeitpfad standardmäßig persistentes Verhalten verwenden mode: "session"erfordertthread: true
- Standard ist
cwd(optional): Gewünschtes Laufzeit-Arbeitsverzeichnis (vom Backend/der Laufzeit-Richtlinie validiert).label(optional): Operator-sichtbares Label für Session-/Banner-Text.resumeSessionId(optional): Eine bestehende ACP-Sitzung fortsetzen, anstatt eine neue zu erstellen. Der Agent spielt seinen Gesprächsverlauf übersession/loadab. Erfordertruntime: "acp".streamTo(optional):"parent"streamt initiale ACP-Lauffortschrittszusammenfassungen als Systemereignisse an die Anforderersitzung zurück.- Wenn verfügbar, enthalten akzeptierte Antworten
streamLogPath, der auf ein sitzungsbezogenes JSONL-Log (<sessionId>.acp-stream.jsonl) zeigt, das du für die vollständige Relay-Historie verfolgen kannst.
- Wenn verfügbar, enthalten akzeptierte Antworten
Bestehende Sitzung fortsetzen
Verwende resumeSessionId, um eine vorherige ACP-Sitzung fortzusetzen, anstatt neu zu beginnen. Der Agent spielt seinen Gesprächsverlauf über session/load ab, sodass er mit dem vollständigen Kontext des Vorherigen fortfährt.
{
"task": "Continue where we left off — fix the remaining test failures",
"runtime": "acp",
"agentId": "codex",
"resumeSessionId": "<previous-session-id>"
}
Häufige Anwendungsfälle:
- Eine Codex-Sitzung von deinem Laptop auf dein Telefon übergeben — sage deinem Agenten, er soll dort weitermachen, wo du aufgehört hast
- Eine Coding-Sitzung fortsetzen, die du interaktiv in der CLI begonnen hast, jetzt kopflos über deinen Agenten
- Arbeit wieder aufnehmen, die durch einen Gateway-Neustart oder Idle-Timeout unterbrochen wurde
Hinweise:
resumeSessionIderfordertruntime: "acp"— gibt einen Fehler zurück, wenn es mit der Sub-Agent-Laufzeit verwendet wird.resumeSessionIdstellt den vorgelagerten ACP-Gesprächsverlauf wieder her;threadundmodegelten weiterhin normal für die neue OpenClaw-Sitzung, die du erstellst, also erfordertmode: "session"weiterhinthread: true.- Der Ziel-Agent muss
session/loadunterstützen (Codex und Claude Code tun dies). - Wenn die Session-ID nicht gefunden wird, schlägt der Spawn mit einem klaren Fehler fehl — kein stiller Fallback auf eine neue Sitzung.
Operator-Smoke-Test
Verwende dies nach einem Gateway-Deploy, wenn du einen schnellen Live-Check möchtest, ob ACP-Spawn tatsächlich durchgängig funktioniert und nicht nur Unit-Tests besteht.
Empfohlener Gate-Check:
- Verifiziere die deployte Gateway-Version/den Commit auf dem Zielhost.
- Bestätige, dass der deployte Quellcode die ACP-Lineage-Akzeptanz in
src/gateway/sessions-patch.ts(subagent:* or acp:* sessions) enthält. - Öffne eine temporäre ACPX-Bridge-Sitzung zu einem Live-Agenten (zum Beispiel
razor(main)aufjpclawhq). - Bitte diesen Agenten,
sessions_spawnaufzurufen mit:runtime: "acp"agentId: "codex"mode: "run"- task:
Reply with exactly LIVE-ACP-SPAWN-OK
- Verifiziere, dass der Agent meldet:
accepted=yes- einen echten
childSessionKey - keinen Validierungsfehler
- Räume die temporäre ACPX-Bridge-Sitzung auf.
Beispiel-Prompt an den Live-Agenten:
Use the sessions_spawn tool now with runtime: "acp", agentId: "codex", and mode: "run".
Set the task to: "Reply with exactly LIVE-ACP-SPAWN-OK".
Then report only: accepted=<yes/no>; childSessionKey=<value or none>; error=<exact text or none>.
Hinweise:
- Halte diesen Smoke-Test auf
mode: "run", es sei denn, du testest bewusst Thread-gebundene persistente ACP-Sitzungen. - Fordere nicht
streamTo: "parent"für den Basis-Gate-Check an. Dieser Pfad hängt von Requester-/Session-Fähigkeiten ab und ist ein separater Integrationscheck. - Behandle Thread-gebundenes
mode: "session"-Testing als zweiten, umfangreicheren Integrationspass von einem echten Discord-Thread oder Telegram-Topic aus.
Sandbox-Kompatibilität
ACP-Sitzungen laufen derzeit auf der Host-Laufzeit, nicht innerhalb der OpenClaw-Sandbox.
Aktuelle Einschränkungen:
- Wenn die Anforderersitzung gesandboxt ist, werden ACP-Spawns sowohl für
sessions_spawn({ runtime: "acp" })als auch für/acp spawnblockiert.- Fehler:
Sandboxed sessions cannot spawn ACP sessions because runtime="acp" runs on the host. Use runtime="subagent" from sandboxed sessions.
- Fehler:
sessions_spawnmitruntime: "acp"unterstütztsandbox: "require"nicht.- Fehler:
sessions_spawn sandbox="require" is unsupported for runtime="acp" because ACP sessions run outside the sandbox. Use runtime="subagent" or sandbox="inherit".
- Fehler:
Verwende runtime: "subagent", wenn du Sandbox-erzwungene Ausführung benötigst.
Über den /acp-Befehl
Verwende /acp spawn für explizite Operator-Kontrolle aus dem Chat, wenn nötig.
/acp spawn codex --mode persistent --thread auto
/acp spawn codex --mode oneshot --thread off
/acp spawn codex --thread here
Wichtige Flags:
--mode persistent|oneshot--thread auto|here|off--cwd <absolute-path>--label <name>
Siehe Slash-Befehle.
Session-Zielauflösung
Die meisten /acp-Aktionen akzeptieren ein optionales Sitzungsziel (session-key, session-id oder session-label).
Auflösungsreihenfolge:
- Explizites Zielargument (oder
--sessionfür/acp steer)- versucht Key
- dann UUID-förmige Session-ID
- dann Label
- Aktuelle Thread-Bindung (wenn diese Konversation/dieser Thread an eine ACP-Sitzung gebunden ist)
- Fallback auf aktuelle Anforderersitzung
Wenn kein Ziel aufgelöst werden kann, gibt OpenClaw einen klaren Fehler zurück (Unable to resolve session target: ...).
Spawn-Thread-Modi
/acp spawn unterstützt --thread auto|here|off.
| Modus | Verhalten |
|---|---|
auto | In einem aktiven Thread: diesen Thread binden. Außerhalb eines Threads: einen Kind-Thread erstellen/binden, wenn unterstützt. |
here | Erfordert aktuellen aktiven Thread; schlägt fehl, wenn nicht in einem. |
off | Keine Bindung. Sitzung startet ungebunden. |
Hinweise:
- Auf Oberflächen ohne Thread-Bindung ist das Standardverhalten effektiv
off. - Thread-gebundener Spawn erfordert Kanalrichtlinien-Unterstützung:
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
ACP-Steuerungen
Verfügbare Befehlsfamilie:
/acp spawn/acp cancel/acp steer/acp close/acp status/acp set-mode/acp set/acp cwd/acp permissions/acp timeout/acp model/acp reset-options/acp sessions/acp doctor/acp install
/acp status zeigt die effektiven Laufzeitoptionen und, wenn verfügbar, sowohl Laufzeit- als auch Backend-Level-Sitzungskennungen.
Einige Steuerungen hängen von Backend-Fähigkeiten ab. Wenn ein Backend eine Steuerung nicht unterstützt, gibt OpenClaw einen klaren Fehler „nicht unterstützte Steuerung” zurück.
ACP-Befehlskochbuch
| Befehl | Was er tut | Beispiel |
|---|---|---|
/acp spawn | ACP-Sitzung erstellen; optionale Thread-Bindung. | /acp spawn codex --mode persistent --thread auto --cwd /repo |
/acp cancel | Laufenden Turn für Zielsitzung abbrechen. | /acp cancel agent:codex:acp:<uuid> |
/acp steer | Steuerungsanweisung an laufende Sitzung senden. | /acp steer --session support inbox prioritize failing tests |
/acp close | Sitzung schließen und Thread-Ziele entbinden. | /acp close |
/acp status | Backend, Modus, Status, Laufzeitoptionen, Fähigkeiten zeigen. | /acp status |
/acp set-mode | Laufzeitmodus für Zielsitzung setzen. | /acp set-mode plan |
/acp set | Generischen Laufzeit-Konfigurationswert schreiben. | /acp set model openai/gpt-5.2 |
/acp cwd | Laufzeit-Arbeitsverzeichnis überschreiben. | /acp cwd /Users/user/Projects/repo |
/acp permissions | Genehmigungsrichtlinien-Profil setzen. | /acp permissions strict |
/acp timeout | Laufzeit-Timeout setzen (Sekunden). | /acp timeout 120 |
/acp model | Laufzeit-Modellüberschreibung setzen. | /acp model anthropic/claude-opus-4-5 |
/acp reset-options | Sitzungs-Laufzeitoptionsüberschreibungen entfernen. | /acp reset-options |
/acp sessions | Aktuelle ACP-Sitzungen aus dem Store auflisten. | /acp sessions |
/acp doctor | Backend-Gesundheit, Fähigkeiten, umsetzbare Korrekturen. | /acp doctor |
/acp install | Deterministische Installations- und Aktivierungsschritte ausgeben. | /acp install |
/acp sessions liest den Store für die aktuell gebundene oder anfordernde Sitzung. Befehle, die session-key-, session-id- oder session-label-Token akzeptieren, lösen Ziele über die Gateway-Session-Discovery auf, einschließlich benutzerdefinierter session.store-Roots pro Agent.
Laufzeitoptionen-Zuordnung
/acp hat Komfortbefehle und einen generischen Setter.
Äquivalente Operationen:
/acp model <id>wird auf den Laufzeit-Konfigurationsschlüsselmodelabgebildet./acp permissions <profile>wird auf den Laufzeit-Konfigurationsschlüsselapproval_policyabgebildet./acp timeout <seconds>wird auf den Laufzeit-Konfigurationsschlüsseltimeoutabgebildet./acp cwd <path>aktualisiert die Laufzeit-cwd-Überschreibung direkt./acp set <key> <value>ist der generische Pfad.- Sonderfall:
key=cwdverwendet den cwd-Überschreibungspfad.
- Sonderfall:
/acp reset-optionslöscht alle Laufzeitüberschreibungen für die Zielsitzung.
acpx-Harness-Unterstützung (aktuell)
Aktuelle integrierte acpx-Harness-Aliase:
piclaudecodexopencodegeminikimi
Wenn OpenClaw das acpx-Backend verwendet, bevorzuge diese Werte für agentId, es sei denn, deine acpx-Konfiguration definiert benutzerdefinierte Agent-Aliase.
Direkte acpx-CLI-Nutzung kann auch beliebige Adapter über --agent <command> ansprechen, aber diese Escape-Hatch ist ein acpx-CLI-Feature (nicht der normale OpenClaw-agentId-Pfad).
Erforderliche Konfiguration
Grundlegende ACP-Basiskonfiguration:
{
acp: {
enabled: true,
// Optional. Standard ist true; auf false setzen, um ACP-Dispatch zu pausieren, während /acp-Steuerungen erhalten bleiben.
dispatch: { enabled: true },
backend: "acpx",
defaultAgent: "codex",
allowedAgents: ["pi", "claude", "codex", "opencode", "gemini", "kimi"],
maxConcurrentSessions: 8,
stream: {
coalesceIdleMs: 300,
maxChunkChars: 1200,
},
runtime: {
ttlMinutes: 120,
},
},
}
Thread-Bindungskonfiguration ist kanaladapterspezifisch. Beispiel für Discord:
{
session: {
threadBindings: {
enabled: true,
idleHours: 24,
maxAgeHours: 0,
},
},
channels: {
discord: {
threadBindings: {
enabled: true,
spawnAcpSessions: true,
},
},
},
}
Wenn Thread-gebundener ACP-Spawn nicht funktioniert, überprüfe zuerst das Adapter-Feature-Flag:
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true
Siehe Konfigurationsreferenz.
Plugin-Einrichtung für das acpx-Backend
Plugin installieren und aktivieren:
openclaw plugins install acpx
openclaw config set plugins.entries.acpx.enabled true
Lokale Workspace-Installation während der Entwicklung:
openclaw plugins install ./extensions/acpx
Dann Backend-Gesundheit überprüfen:
/acp doctor
acpx-Befehl und Versionskonfiguration
Standardmäßig verwendet das acpx-Plugin (veröffentlicht als @openclaw/acpx) die plugin-lokal gepinnte Binary:
- Befehl wird standardmäßig auf
extensions/acpx/node_modules/.bin/acpxgesetzt. - Erwartete Version wird standardmäßig auf den Extension-Pin gesetzt.
- Beim Start wird das ACP-Backend sofort als nicht bereit registriert.
- Ein Hintergrund-Ensure-Job überprüft
acpx --version. - Wenn die plugin-lokale Binary fehlt oder nicht übereinstimmt, wird ausgeführt:
npm install --omit=dev --no-save acpx@<pinned>und erneut überprüft.
Du kannst Befehl/Version in der Plugin-Konfiguration überschreiben:
{
"plugins": {
"entries": {
"acpx": {
"enabled": true,
"config": {
"command": "../acpx/dist/cli.js",
"expectedVersion": "any"
}
}
}
}
}
Hinweise:
commandakzeptiert einen absoluten Pfad, relativen Pfad oder Befehlsnamen (acpx).- Relative Pfade werden vom OpenClaw-Workspace-Verzeichnis aufgelöst.
expectedVersion: "any"deaktiviert den strikten Versionsabgleich.- Wenn
commandauf eine benutzerdefinierte Binary/einen Pfad zeigt, wird die plugin-lokale Auto-Installation deaktiviert. - Der OpenClaw-Start bleibt nicht-blockierend, während der Backend-Gesundheitscheck läuft.
Siehe Plugins.
Berechtigungskonfiguration
ACP-Sitzungen laufen nicht-interaktiv — es gibt kein TTY, um Datei-Schreib- und Shell-Exec-Berechtigungsanfragen zu genehmigen oder abzulehnen. Das acpx-Plugin bietet zwei Konfigurationsschlüssel, die steuern, wie Berechtigungen behandelt werden:
permissionMode
Steuert, welche Operationen der Harness-Agent ohne Aufforderung durchführen kann.
| Wert | Verhalten |
|---|---|
approve-all | Alle Dateischreibvorgänge und Shell-Befehle automatisch genehmigen. |
approve-reads | Nur Lesezugriffe automatisch genehmigen; Schreib- und Exec-Vorgänge erfordern Aufforderungen. |
deny-all | Alle Berechtigungsanfragen ablehnen. |
nonInteractivePermissions
Steuert, was passiert, wenn eine Berechtigungsanfrage angezeigt würde, aber kein interaktives TTY verfügbar ist (was bei ACP-Sitzungen immer der Fall ist).
| Wert | Verhalten |
|---|---|
fail | Sitzung mit AcpRuntimeError abbrechen. (Standard) |
deny | Berechtigung stillschweigend verweigern und fortfahren (graceful degradation). |
Konfiguration
Per Plugin-Konfiguration setzen:
openclaw config set plugins.entries.acpx.config.permissionMode approve-all
openclaw config set plugins.entries.acpx.config.nonInteractivePermissions fail
Starte das Gateway nach dem Ändern dieser Werte neu.
Wichtig: OpenClaw verwendet derzeit standardmäßig
permissionMode=approve-readsundnonInteractivePermissions=fail. In nicht-interaktiven ACP-Sitzungen kann jeder Schreib- oder Exec-Vorgang, der eine Berechtigungsanfrage auslöst, mitAcpRuntimeError: Permission prompt unavailable in non-interactive modefehlschlagen.Wenn du Berechtigungen einschränken musst, setze
nonInteractivePermissionsaufdeny, damit Sitzungen graceful degradieren, anstatt abzustürzen.
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
ACP runtime backend is not configured | Backend-Plugin fehlt oder ist deaktiviert. | Backend-Plugin installieren und aktivieren, dann /acp doctor ausführen. |
ACP is disabled by policy (acp.enabled=false) | ACP global deaktiviert. | acp.enabled=true setzen. |
ACP dispatch is disabled by policy (acp.dispatch.enabled=false) | Dispatch aus normalen Thread-Nachrichten deaktiviert. | acp.dispatch.enabled=true setzen. |
ACP agent "<id>" is not allowed by policy | Agent nicht in der Erlaubnisliste. | Erlaubte agentId verwenden oder acp.allowedAgents aktualisieren. |
Unable to resolve session target: ... | Ungültiges Key-/ID-/Label-Token. | /acp sessions ausführen, exakten Key/Label kopieren, erneut versuchen. |
--thread here requires running /acp spawn inside an active ... thread | --thread here außerhalb eines Thread-Kontexts verwendet. | Zum Ziel-Thread wechseln oder --thread auto/off verwenden. |
Only <user-id> can rebind this thread. | Ein anderer Benutzer besitzt die Thread-Bindung. | Als Besitzer neu binden oder einen anderen Thread verwenden. |
Thread bindings are unavailable for <channel>. | Adapter hat keine Thread-Bindungsfähigkeit. | --thread off verwenden oder zu unterstütztem Adapter/Kanal wechseln. |
Sandboxed sessions cannot spawn ACP sessions ... | ACP-Laufzeit ist hostseitig; Anforderersitzung ist gesandboxt. | runtime="subagent" aus gesandboxten Sitzungen verwenden, oder ACP-Spawn aus einer nicht-gesandboxten Sitzung ausführen. |
sessions_spawn sandbox="require" is unsupported for runtime="acp" ... | sandbox="require" für ACP-Laufzeit angefordert. | runtime="subagent" für erforderliches Sandboxing verwenden, oder ACP mit sandbox="inherit" aus einer nicht-gesandboxten Sitzung verwenden. |
| Fehlende ACP-Metadaten für gebundene Sitzung | Veraltete/gelöschte ACP-Sitzungsmetadaten. | Mit /acp spawn neu erstellen, dann Thread neu binden/fokussieren. |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode | permissionMode blockiert Schreib-/Exec-Vorgänge in nicht-interaktiver ACP-Sitzung. | plugins.entries.acpx.config.permissionMode auf approve-all setzen und Gateway neu starten. Siehe Berechtigungskonfiguration. |
| ACP-Sitzung schlägt früh mit wenig Ausgabe fehl | Berechtigungsanfragen werden durch permissionMode/nonInteractivePermissions blockiert. | Gateway-Logs auf AcpRuntimeError prüfen. Für volle Berechtigungen permissionMode=approve-all setzen; für graceful degradation nonInteractivePermissions=deny. |
| ACP-Sitzung hängt nach Abschluss der Arbeit endlos | Harness-Prozess beendet, aber ACP-Sitzung hat Abschluss nicht gemeldet. | Mit ps aux | grep acpx überwachen; veraltete Prozesse manuell beenden. |