Gateway
Konfiguration — Tools und benutzerdefinierte Provider
tools.*-Konfigurationsschlüssel und Einrichtung benutzerdefinierter Provider/Basis-URLs. Informationen zu Agenten, Kanälen und anderen Konfigurationsschlüsseln der obersten Ebene finden Sie in der Konfigurationsreferenz.
Tools
Tool-Profile
tools.profile legt vor tools.allow/tools.deny eine grundlegende Zulassungsliste fest:
| Profil | Enthält |
|---|---|
minimal |
nur session_status |
coding |
group:fs, group:runtime, group:web, group:sessions, group:memory, cron, get_goal, create_goal, update_goal, update_plan, skill_workshop, image, image_generate, music_generate, video_generate |
messaging |
group:messaging, sessions_list, sessions_history, sessions_send, session_status |
full |
Keine Einschränkung (entspricht einem nicht gesetzten Wert) |
coding und messaging erlauben außerdem implizit bundle-mcp (konfigurierte MCP-Server).
Tool-Gruppen
| Gruppe | Tools |
|---|---|
group:runtime |
exec, process, code_execution (bash wird als Alias für exec akzeptiert) |
group:fs |
read, write, edit, apply_patch |
group:sessions |
sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status, spawn_task, dismiss_task |
group:memory |
memory_search, memory_get |
group:web |
web_search, x_search, web_fetch |
group:ui |
browser, canvas |
group:automation |
heartbeat_respond, cron, gateway |
group:messaging |
message |
group:nodes |
nodes, computer |
group:agents |
agents_list, get_goal, create_goal, update_goal, update_plan, skill_workshop |
group:media |
image, image_generate, music_generate, video_generate, tts |
group:openclaw |
Alle oben genannten integrierten Tools außer read/write/edit/apply_patch/exec/process/canvas (Plugin-Tools ausgeschlossen) |
group:plugins |
Tools, die von geladenen Plugins bereitgestellt werden, einschließlich konfigurierter MCP-Server, die über bundle-mcp verfügbar gemacht werden |
Mit spawn_task kann ein Coding-Agent bestätigte Folgearbeiten vorschlagen, ohne sie zu starten. Die Control UI zeigt Titel und Zusammenfassung als ausführbaren Chip an; eine Gateway-gestützte TUI zeigt eine entsprechende interaktive Eingabeaufforderung an. Wenn Sie eine der beiden Optionen annehmen, wird eine neue Sitzung in einem verwalteten Worktree erstellt und die vollständige Eingabeaufforderung dorthin gesendet, während der aktuelle Durchlauf fortgesetzt wird. dismiss_task verwirft einen noch ausstehenden Vorschlag anhand der kurzlebigen task_id, die von spawn_task zurückgegeben wurde.
Die Tools werden nur angeboten, wenn die initiierende Bedienoberfläche Gateway-Ereignisse für Aufgabenvorschläge empfangen und ausführen kann. Kanalsitzungen und lokale/eingebettete TUI-Sitzungen empfangen diese Ereignisse nicht; Kanaltransporte benötigen eine portable typisierte Aufgabenaktion, bevor sie diesen Ablauf sicher bereitstellen können. Vorschläge sind prozesslokal und verschwinden bei einem Neustart des Gateway. Beide Tools bleiben im Profil coding und in group:sessions, sodass die normale Richtlinie über tools.allow und tools.deny sie automatisch konfiguriert, wenn die Oberfläche sie unterstützt.
MCP- und Plugin-Tools innerhalb der Sandbox-Tool-Richtlinie
Konfigurierte MCP-Server werden als Plugin-eigene Tools unter der Plugin-ID bundle-mcp bereitgestellt. Normale Tool-Profile können sie zulassen, aber tools.sandbox.tools ist eine zusätzliche Schranke für Sandbox-Sitzungen. Wenn der Sandbox-Modus "all" oder "non-main" ist, nehmen Sie einen der folgenden Einträge in die Zulassungsliste für Sandbox-Tools auf, wenn MCP-/Plugin-Tools sichtbar sein sollen:
bundle-mcpfür von OpenClaw verwaltete MCP-Server ausmcp.servers- die Plugin-ID für ein bestimmtes natives Plugin
group:pluginsfür alle geladenen Plugin-eigenen Tools- exakte Tool-Namen von MCP-Servern oder Server-Glob-Muster wie
outlook__send_mailoderoutlook__*, wenn Sie nur einen Server verwenden möchten
Server-Glob-Muster verwenden das Provider-sichere MCP-Serverpräfix und nicht unbedingt den unveränderten Schlüssel aus mcp.servers. Zeichen außerhalb von [A-Za-z0-9_-] werden zu -, Namen, die nicht mit einem Buchstaben beginnen, erhalten das Präfix mcp-, und lange oder doppelte Präfixe können gekürzt oder mit einem Suffix versehen werden; beispielsweise verwendet mcp.servers["Outlook Graph"] ein Glob-Muster wie outlook-graph__*.
{ agents: { defaults: { sandbox: { mode: "all" } } }, mcp: { servers: { outlook: { command: "node", args: ["./outlook-mcp.js"] }, }, }, tools: { sandbox: { tools: { alsoAllow: ["web_search", "web_fetch", "memory_search", "memory_get", "bundle-mcp"], }, }, },}Ohne diesen Eintrag auf Sandbox-Ebene kann der MCP-Server weiterhin erfolgreich geladen werden, während seine Tools vor der Provider-Anfrage herausgefiltert werden. Verwenden Sie openclaw doctor, um diese Konstellation bei von OpenClaw verwalteten Servern in mcp.servers zu erkennen. MCP-Server, die aus gebündelten Plugin-Manifesten oder der Claude-Datei .mcp.json geladen werden, verwenden dieselbe Sandbox-Schranke, diese Diagnose erfasst diese Quellen derzeit jedoch noch nicht; verwenden Sie dieselben Einträge in der Zulassungsliste, wenn deren Tools in Sandbox-Durchläufen verschwinden.
tools.codeMode
tools.codeMode aktiviert die generische Code-Modus-Oberfläche von OpenClaw. Wenn sie
für einen Durchlauf mit Tools aktiviert ist, werden normale OpenClaw-Tools hinter die
in der Sandbox verfügbare tools.*-Katalogbrücke verschoben, und MCP-Tools sind über den
generierten Namensraum MCP verfügbar. Das Modell sieht normalerweise exec und wait;
Tools wie computer, deren strukturierte Ergebnisse die ausschließlich JSON-basierte
Brücke nicht passieren können, bleiben direkt verfügbar.
{ tools: { codeMode: { enabled: true, }, },}Auch die Kurzform wird akzeptiert:
{ tools: { codeMode: true },}MCP-Deklarationen werden im Code-Modus über die schreibgeschützte virtuelle API-Dateioberfläche
bereitgestellt. Gastcode kann API.list("mcp") und
API.read("mcp/<server>.d.ts") aufrufen, um Signaturen im TypeScript-Stil zu prüfen, bevor
MCP.<server>.<tool>() aufgerufen wird. Informationen zum Laufzeitvertrag, zu Einschränkungen
und zu Debugging-Schritten finden Sie unter Code-Modus.
tools.allow / tools.deny
Globale Richtlinie zum Zulassen/Ablehnen von Tools (Ablehnen hat Vorrang). Groß-/Kleinschreibung wird nicht berücksichtigt, *-Platzhalter werden unterstützt. Wird auch angewendet, wenn die Docker-Sandbox deaktiviert ist.
{ tools: { deny: ["browser", "canvas"] },}write und apply_patch sind separate Tool-IDs. allow: ["write"] aktiviert bei kompatiblen Modellen auch apply_patch, aber deny: ["write"] lehnt apply_patch nicht ab. Um sämtliche Dateiänderungen zu blockieren, lehnen Sie group:fs ab oder führen Sie jedes ändernde Tool explizit auf:
{ tools: { deny: ["write", "edit", "apply_patch"] },}tools.byProvider
Schränkt Tools für bestimmte Provider oder Modelle weiter ein. Reihenfolge: Basisprofil → Providerprofil → Zulassen/Ablehnen.
{ tools: { profile: "coding", byProvider: { "google-antigravity": { profile: "minimal" }, "openai/gpt-5.4": { allow: ["group:fs", "sessions_list"] }, }, },}tools.toolsBySender
Schränkt Tools für eine bestimmte Identität des Anfragenden ein. Dies dient als mehrschichtige Absicherung zusätzlich zur Zugriffskontrolle des Kanals; Absenderwerte müssen vom Kanaladapter stammen, nicht aus dem Nachrichtentext.
{ tools: { toolsBySender: { "channel:discord:1234567890123": { alsoAllow: ["group:fs"] }, "id:guest-user-id": { deny: ["group:runtime", "group:fs"] }, "*": { deny: ["exec", "process", "write", "edit", "apply_patch"] }, }, },}Schlüssel verwenden explizite Präfixe: channel:<channelId>:<senderId>, id:<senderId>, e164:<phone>, username:<handle>, name:<displayName> oder "*". Kanal-IDs sind kanonische OpenClaw-IDs; Aliase wie teams werden zu msteams normalisiert. Veraltete Schlüssel ohne Präfix werden nur als id: akzeptiert. Die Abgleichsreihenfolge lautet: Kanal+ID, ID, e164, Benutzername, Name und anschließend Platzhalter.
Wenn agents.list[].tools.toolsBySender pro Agent übereinstimmt, überschreibt es den globalen Abgleich des Absenders, selbst bei einer leeren Richtlinie {}.
tools.elevated
Steuert den erhöhten Ausführungszugriff außerhalb der Sandbox:
{ tools: { elevated: { enabled: true, allowFrom: { whatsapp: ["+15555550123"], discord: ["1234567890123", "987654321098765432"], }, }, },}- Die Überschreibung pro Agent (
agents.list[].tools.elevated) kann die Berechtigungen nur weiter einschränken. /elevated on|off|ask|fullspeichert den Status pro Sitzung; Inline-Direktiven gelten für eine einzelne Nachricht.- Erhöhtes
execumgeht die Sandbox und verwendet den konfigurierten Ausweichpfad (standardmäßiggatewayodernode, wenn das Ausführungszielnodeist).
tools.exec
{ tools: { exec: { backgroundMs: 10000, timeoutSec: 1800, cleanupMs: 1800000, approvalRunningNoticeMs: 10000, notifyOnExit: true, notifyOnExitEmptySuccess: false, commandHighlighting: false, applyPatch: { enabled: true, allowModels: ["gpt-5.6-sol"], }, }, },}Die dargestellten Werte sind Standardwerte, mit Ausnahme von applyPatch.allowModels (standardmäßig leer/nicht festgelegt, was bedeutet, dass jedes kompatible Modell apply_patch verwenden darf). approvalRunningNoticeMs gibt bei länger dauernden, genehmigungsbasierten Ausführungen einen Hinweis zum laufenden Vorgang aus; 0 deaktiviert ihn.
tools.loopDetection
Sicherheitsprüfungen auf Tool-Schleifen sind standardmäßig deaktiviert. Legen Sie enabled: true fest, um die Erkennung zu aktivieren. Einstellungen können global unter tools.loopDetection definiert und pro Agent unter agents.list[].tools.loopDetection überschrieben werden.
{ tools: { loopDetection: { enabled: true, historySize: 30, warningThreshold: 10, unknownToolThreshold: 10, criticalThreshold: 20, globalCircuitBreakerThreshold: 30, detectors: { genericRepeat: true, knownPollNoProgress: true, pingPong: true, }, postCompactionGuard: { windowSize: 3, }, }, },}historySizenumberMaximale Historie der Tool-Aufrufe, die für die Schleifenanalyse aufbewahrt wird.
warningThresholdnumberSchwellenwert für Warnungen bei sich wiederholenden Mustern ohne Fortschritt.
unknownToolThresholdnumberBlockiert wiederholte Aufrufe desselben nicht verfügbaren/unbekannten Tool-Namens nach dieser Anzahl von Fehlversuchen.
criticalThresholdnumberHöherer Wiederholungsschwellenwert zum Blockieren kritischer Schleifen.
globalCircuitBreakerThresholdnumberSchwellenwert für den harten Abbruch jedes Laufs ohne Fortschritt.
detectors.genericRepeatbooleanWarnt bei wiederholten Aufrufen mit demselben Tool und denselben Argumenten.
detectors.knownPollNoProgressbooleanWarnt/blockiert bei bekannten Abfrage-Tools (process.poll, command_status usw.).
detectors.pingPongbooleanWarnt/blockiert bei alternierenden Paarmustern ohne Fortschritt.
postCompactionGuard.windowSizenumberAnzahl der Versuche nach der automatischen Compaction, für die die Schutzfunktion aktiv bleibt; sie bricht ab, wenn der Agent innerhalb dieses Fensters dieselbe Kombination aus Tool, Argumenten und Ergebnis wiederholt.
tools.web
{ tools: { web: { search: { enabled: true, apiKey: "brave_api_key", // oder Umgebungsvariable BRAVE_API_KEY (Brave-Provider) maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, provider: "firecrawl", // optional; für automatische Erkennung weglassen maxChars: 20000, maxCharsCap: 20000, maxResponseBytes: 750000, timeoutSeconds: 30, cacheTtlMinutes: 15, maxRedirects: 3, readability: true, userAgent: "custom-ua", }, }, },}Die angezeigten Werte sind Standardwerte, mit Ausnahme von provider und userAgent. maxResponseBytes wird auf 32000–10000000 begrenzt; maxChars wird auf maxCharsCap begrenzt (erhöhen Sie maxCharsCap, um größere Antworten zuzulassen).
tools.media
Konfiguriert das Verständnis eingehender Medien (Bild/Audio/Video):
{ tools: { media: { concurrency: 2, asyncCompletion: { directSend: false, // veraltet: Abschlüsse bleiben agentenvermittelt }, audio: { enabled: true, maxBytes: 20971520, scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, models: [ { provider: "openai", model: "gpt-4o-mini-transcribe" }, { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"] }, ], }, image: { enabled: true, timeoutSeconds: 180, models: [{ provider: "ollama", model: "gemma4:26b", timeoutSeconds: 300 }], }, video: { enabled: true, maxBytes: 52428800, models: [{ provider: "google", model: "gemini-3-flash-preview" }], }, }, },}concurrency (Standardwert 2), audio.maxBytes (Standardwert 20 MB) und video.maxBytes (Standardwert 50 MB) werden mit ihren Standardwerten angezeigt; der Standardwert für image.maxBytes beträgt 10 MB. Standardwerte für Anfragezeitüberschreitungen je Fähigkeit: Bild/Audio 60 s, Video 120 s.
Felder eines Medienmodelleintrags
Provider-Eintrag (type: "provider" oder weggelassen):
provider: ID des API-Providers (openai,anthropic,google/gemini,groqusw.)model: Überschreibung der Modell-IDprofile/preferredProfile: Profilauswahl ausauth-profiles.json
CLI-Eintrag (type: "cli"):
command: auszuführbare Dateiargs: vorlagenbasierte Argumente (unterstützt{{MediaPath}},{{Prompt}},{{MaxChars}}usw.;openclaw doctor --fixmigriert veraltete{input}-Platzhalter zu{{MediaPath}})
Gemeinsame Felder:
capabilities: optionale Liste (image,audio,video). Jedes Provider-Plugin deklariert seinen eigenen Standardsatz an Fähigkeiten; beispielsweise verwendet der gebündelteopenai-Provider standardmäßig Bild+Audio,anthropic/minimaxBild,googleBild+Audio+Video undgroqAudio.prompt,maxChars,maxBytes,timeoutSeconds,language: Überschreibungen je Eintrag.tools.media.image.timeoutSecondsund entsprechendetimeoutSeconds-Einträge des Bildmodells gelten auch, wenn der Agent das expliziteimage-Tool aufruft. Für das Bildverständnis gilt diese Zeitüberschreitung für die Anfrage selbst und wird nicht durch vorherige Vorbereitungsarbeiten verkürzt.- Bei Fehlern wird auf den nächsten Eintrag zurückgegriffen.
Die Provider-Authentifizierung folgt der Standardreihenfolge: auth-profiles.json → Umgebungsvariablen → models.providers.*.apiKey.
Felder für den asynchronen Abschluss:
asyncCompletion.directSend: veraltetes Kompatibilitätsflag. Abgeschlossene asynchrone Medienaufgaben bleiben über die Sitzung des Anforderers vermittelt, sodass der Agent das Ergebnis erhält, entscheidet, wie er es dem Benutzer mitteilt, und das Nachrichten-Tool verwendet, wenn die Zustellung an die Quelle dies erfordert.
tools.agentToAgent
{ tools: { agentToAgent: { enabled: false, allow: ["home", "work"], }, },}tools.sessions
Steuert, welche Sitzungen von den Sitzungs-Tools (sessions_list, sessions_history, sessions_send) als Ziel verwendet werden können.
Standard: tree (aktuelle Sitzung + von ihr gestartete Sitzungen, etwa Subagenten).
{ tools: { sessions: { // "self" | "tree" | "agent" | "all" visibility: "tree", }, },}Sichtbarkeitsbereiche
self: nur der Schlüssel der aktuellen Sitzung.tree: aktuelle Sitzung + von der aktuellen Sitzung gestartete Sitzungen (Subagenten).agent: jede Sitzung, die zur aktuellen Agenten-ID gehört (kann andere Benutzer einschließen, wenn Sie Sitzungen je Absender unter derselben Agenten-ID ausführen).all: jede Sitzung. Die agentenübergreifende Zielauswahl erfordert weiterhintools.agentToAgent.- Sandbox-Begrenzung: Wenn die aktuelle Sitzung in einer Sandbox ausgeführt wird und
agents.defaults.sandbox.sessionToolsVisibility="spawned"(der Standardwert) gilt, wird die Sichtbarkeit auftreefestgelegt, selbst wenntools.sessions.visibility="all"gesetzt ist. - Wenn der Wert nicht
allist, enthältsessions_listein kompaktes Feldvisibility, das den effektiven Modus beschreibt und davor warnt, dass einige Sitzungen außerhalb des aktuellen Bereichs möglicherweise ausgelassen werden.
tools.sessions_spawn
Steuert die Unterstützung eingebetteter Anhänge für sessions_spawn.
{ tools: { sessions_spawn: { attachments: { enabled: false, // Opt-in: auf true setzen, um eingebettete Dateianhänge zuzulassen maxTotalBytes: 5242880, // insgesamt 5 MB über alle Dateien hinweg maxFiles: 50, maxFileBytes: 1048576, // 1 MB pro Datei retainOnSessionKeep: false, // Anhänge beibehalten, wenn cleanup="keep" }, }, },}Hinweise zu Anhängen
- Anhänge erfordern
enabled: true. - Subagenten-Anhänge werden im untergeordneten Arbeitsbereich unter
.openclaw/attachments/<uuid>/mit einer.manifest.jsonbereitgestellt. - ACP-Anhänge unterstützen nur Bilder und werden nach erfolgreicher Prüfung derselben Grenzwerte für Dateianzahl, Bytes pro Datei und Gesamtbytes eingebettet an die ACP-Laufzeit weitergeleitet.
- Der Inhalt von Anhängen wird bei der dauerhaften Speicherung des Transkripts automatisch geschwärzt.
- Base64-Eingaben werden mit strengen Prüfungen von Alphabet und Auffüllzeichen sowie einer Größenprüfung vor der Dekodierung validiert.
- Die Dateiberechtigungen für Subagenten-Anhänge sind
0700für Verzeichnisse und0600für Dateien. - Die Bereinigung von Subagenten folgt der Richtlinie
cleanup:deleteentfernt Anhänge immer;keepbehält sie nur bei, wennretainOnSessionKeep: truegilt.
tools.experimental
Experimentelle Flags für integrierte Tools. Standardmäßig deaktiviert, sofern keine Regel zur automatischen Aktivierung für strikt agentisches GPT-5 gilt.
{ tools: { experimental: { planTool: true, // experimentelles update_plan aktivieren }, },}planTool: aktiviert das strukturierte Toolupdate_planzur Nachverfolgung nicht trivialer, mehrstufiger Arbeiten.- Standard:
false, sofernagents.defaults.embeddedAgent.executionContract(oder eine agentenspezifische Überschreibung) nicht für einen Lauf des Providersopenaimit einer Modell-ID aus der GPT-5-Familie auf"strict-agentic"gesetzt ist (dies umfasst auch Läufe der OpenAI Codex CLI, da die Codex-Authentifizierung und das Modell-Routing unter dem Provideropenaiangesiedelt sind). Setzen Sie den Wert auftrue, um das Tool außerhalb dieses Bereichs zu erzwingen, oder auffalse, um es selbst für strikt agentische GPT-5-Läufe deaktiviert zu lassen. - Wenn es aktiviert ist, fügt der System-Prompt außerdem Nutzungshinweise hinzu, damit das Modell es nur für umfangreiche Arbeiten verwendet und höchstens einen Schritt im Zustand
in_progresshält.
agents.defaults.subagents
{ agents: { defaults: { subagents: { allowAgents: ["research"], model: "minimax/MiniMax-M2.7", maxConcurrent: 8, runTimeoutSeconds: 900, announceTimeoutMs: 120000, archiveAfterMinutes: 60, }, }, },}model: Standardmodell für gestartete Subagenten. Wenn der Wert weggelassen wird, übernehmen Subagenten das Modell des Aufrufers.allowAgents: standardmäßige Positivliste konfigurierter Ziel-Agenten-IDs fürsessions_spawn, wenn der anfordernde Agent keine eigene Einstellungsubagents.allowAgentsfestlegt (["*"]= jedes konfigurierte Ziel; Standard: nur derselbe Agent). Veraltete Einträge, deren Agentenkonfiguration gelöscht wurde, werden vonsessions_spawnabgelehnt und ausagents_listausgelassen; führen Sieopenclaw doctor --fixaus, um sie zu bereinigen.maxConcurrent: maximale Anzahl gleichzeitig ausgeführter Subagenten. Standard:8.runTimeoutSeconds: Zeitüberschreitung (Sekunden) fürsessions_spawn, wenn der Aufrufer keine eigene Überschreibung übergibt. Standard:0(keine Zeitüberschreitung); die oben gezeigten900sind ein häufig verwendeter Opt-in-Wert, nicht der integrierte Standardwert.announceTimeoutMs: Zeitüberschreitung pro Aufruf (Millisekunden) für Zustellversuche der Gateway-agent-Ankündigung. Standard:120000. Vorübergehende Wiederholungsversuche können dazu führen, dass die gesamte Wartezeit für die Ankündigung länger als eine konfigurierte Zeitüberschreitung ist.archiveAfterMinutes: Minuten nach Abschluss einer Subagenten-Sitzung, bevor sie automatisch archiviert wird. Standard:60;0deaktiviert die automatische Archivierung.- Tool-Richtlinie je Subagent:
tools.subagents.tools.allow/tools.subagents.tools.deny.
Benutzerdefinierte Provider und Basis-URLs
Provider-Plugins veröffentlichen ihre eigenen Modellkatalogzeilen. Fügen Sie benutzerdefinierte Provider über models.providers in der Konfiguration oder ~/.openclaw/agents/<agentId>/agent/models.json hinzu.
Die Konfiguration einer benutzerdefinierten/lokalen Provider-baseUrl ist zugleich die eng begrenzte Entscheidung über das Netzwerkvertrauen für Modell-HTTP-Anfragen: OpenClaw lässt genau diesen Ursprung im Format scheme://host:port über den geschützten Abrufpfad zu, ohne eine separate Konfigurationsoption hinzuzufügen oder anderen privaten Ursprüngen zu vertrauen.
{ models: { mode: "merge", // merge (Standard) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", apiKey: "LITELLM_KEY", api: "openai-completions", // openai-completions | openai-responses | anthropic-messages | google-generative-ai | usw. models: [ { id: "llama-3.1-8b", name: "Llama 3.1 8B", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128000, contextTokens: 96000, maxTokens: 32000, }, ], }, }, },}Authentifizierung und Zusammenführungspriorität
- Verwenden Sie
authHeader: true+headersfür benutzerdefinierte Authentifizierungsanforderungen. - Überschreiben Sie das Stammverzeichnis der Agent-Konfiguration mit
OPENCLAW_AGENT_DIR. - Zusammenführungspriorität für übereinstimmende Provider-IDs:
- Nicht leere
baseUrl-Werte aus dermodels.jsondes Agenten haben Vorrang. - Nicht leere
apiKey-Werte des Agenten haben nur dann Vorrang, wenn dieser Provider im aktuellen Konfigurations-/Authentifizierungsprofil-Kontext nicht von SecretRef verwaltet wird. - Von SecretRef verwaltete
apiKey-Werte des Providers werden anhand von Quellmarkierungen (ENV_VAR_NAMEfür Umgebungsreferenzen,secretref-managedfür Datei-/Exec-Referenzen) aktualisiert, anstatt aufgelöste Geheimnisse dauerhaft zu speichern. - Von SecretRef verwaltete Header-Werte des Providers werden anhand von Quellmarkierungen (
secretref-env:ENV_VAR_NAMEfür Umgebungsreferenzen,secretref-managedfür Datei-/Exec-Referenzen) aktualisiert. - Leere oder fehlende
apiKey-/baseUrl-Werte des Agenten greifen aufmodels.providersin der Konfiguration zurück. - Bei übereinstimmenden Modellwerten für
contextWindow/maxTokenshat der explizite Konfigurationswert Vorrang, wenn er vorhanden und gültig ist (eine positive endliche Zahl); andernfalls wird der implizite/generierte Katalogwert verwendet. - Für
contextTokenseines übereinstimmenden Modells gilt dieselbe Regel „explizit vor implizit“; verwenden Sie diesen Wert, um den effektiven Kontext zu begrenzen, ohne die nativen Modellmetadaten zu ändern. - Kataloge von Provider-Plugins werden als generierte, dem Plugin gehörende Katalog-Shards im Plugin-Zustand des Agenten gespeichert.
- Verwenden Sie
models.mode: "replace", wenn die Konfigurationmodels.jsonvollständig neu schreiben und die Zusammenführung von Katalog-Shards im Besitz von Plugins überspringen soll. - Die dauerhafte Speicherung von Markierungen richtet sich verbindlich nach der Quelle: Markierungen werden aus dem aktiven Snapshot der Quellkonfiguration (vor der Auflösung) geschrieben, nicht aus aufgelösten Geheimniswerten der Laufzeit.
- Nicht leere
Details zu Provider-Feldern
Katalog auf oberster Ebene
models.mode: Verhalten des Provider-Katalogs (mergeoderreplace).models.providers: benutzerdefinierte Provider-Zuordnung, nach Provider-ID verschlüsselt.- Sichere Änderungen: Verwenden Sie
openclaw config set models.providers.<id> '<json>' --strict-json --mergeoderopenclaw config set models.providers.<id>.models '<json-array>' --strict-json --mergefür additive Aktualisierungen.config setlehnt destruktive Ersetzungen ab, sofern Sie nicht--replaceübergeben.
- Sichere Änderungen: Verwenden Sie
Provider-Verbindung und Authentifizierung
models.providers.*.api: Anfrageadapter (openai-completions,openai-responses,openai-chatgpt-responses,anthropic-messages,google-generative-ai,google-vertex,github-copilot,bedrock-converse-stream,ollama,azure-openai-responses). Verwenden Sie für selbst gehostete/v1/chat/completions-Backends wie MLX, vLLM, SGLang und die meisten OpenAI-kompatiblen lokalen Serveropenai-completions. Ein benutzerdefinierter Provider mitbaseUrl, aber ohneapi, verwendet standardmäßigopenai-completions; legen Sieopenai-responsesnur fest, wenn das Backend/v1/responsesunterstützt.models.providers.*.apiKey: Provider-Zugangsdaten (SecretRef-/Umgebungsersetzung bevorzugt).models.providers.*.auth: Authentifizierungsstrategie (api-key,token,oauth,aws-sdk).models.providers.*.contextWindow: standardmäßiges natives Kontextfenster für Modelle dieses Providers, wenn der ModelleintragcontextWindownicht festlegt.models.providers.*.contextTokens: standardmäßige effektive Laufzeit-Kontextobergrenze für Modelle dieses Providers, wenn der ModelleintragcontextTokensnicht festlegt.models.providers.*.maxTokens: standardmäßige Ausgabetoken-Obergrenze für Modelle dieses Providers, wenn der ModelleintragmaxTokensnicht festlegt.models.providers.*.timeoutSeconds: optionales Provider-spezifisches Zeitlimit in Sekunden für Modell-HTTP-Anfragen, einschließlich Verbindungsaufbau, Headern, Body und Behandlung des Abbruchs der Gesamtanfrage.models.providers.*.injectNumCtxForOpenAICompat: Fügt für Ollama +openai-completionsoptions.num_ctxin Anfragen ein (Standard:true).models.providers.*.authHeader: Erzwingt bei Bedarf die Übertragung der Zugangsdaten imAuthorization-Header.models.providers.*.baseUrl: Basis-URL der vorgelagerten API.models.providers.*.headers: zusätzliche statische Header für Proxy-/Mandanten-Routing.
Überschreibungen für den Anfragetransport
models.providers.*.request: Transportüberschreibungen für HTTP-Anfragen an Modell-Provider.
request.headers: zusätzliche Header (mit den Provider-Standardwerten zusammengeführt). Die Werte akzeptieren SecretRef.request.auth: Überschreibung der Authentifizierungsstrategie. Modi:"provider-default"(integrierte Authentifizierung des Providers verwenden),"authorization-bearer"(mittoken),"header"(mitheaderName,value, optionalprefix).request.proxy: Überschreibung des HTTP-Proxys. Modi:"env-proxy"(UmgebungsvariablenHTTP_PROXY/HTTPS_PROXYverwenden),"explicit-proxy"(miturl). Beide Modi akzeptieren ein optionalestls-Unterobjekt.request.tls: TLS-Überschreibung für direkte Verbindungen. Felder:ca,cert,key,passphrase(alle akzeptieren SecretRef),serverName,insecureSkipVerify.request.allowPrivateNetwork: Wenntrue, werden HTTP-Anfragen an Modell-Provider durch die HTTP-Abrufsicherung des Providers an private, CGNAT- oder ähnliche Bereiche zugelassen. Benutzerdefinierte/lokale Basis-URLs von Providern vertrauen bereits exakt dem konfigurierten Ursprung; ausgenommen sind Metadaten-/Link-Local-Ursprünge, die ohne ausdrückliche Zustimmung weiterhin blockiert bleiben. Setzen Sie dies auffalse, um das Vertrauen in den exakten Ursprung zu deaktivieren. WebSocket verwendet dieselberequest-Konfiguration für Header/TLS, jedoch nicht diese SSRF-Sicherung für Abrufe. Standard:false.
Einträge im Modellkatalog
models.providers.*.models: explizite Modellkatalogeinträge des Providers.models.providers.*.models.*.input: Eingabemodalitäten des Modells. Verwenden Sie["text"]für reine Textmodelle und["text", "image"]für native Bild-/Vision-Modelle. Bildanhänge werden nur in Agent-Durchläufe eingefügt, wenn das ausgewählte Modell als bildfähig gekennzeichnet ist.models.providers.*.models.*.contextWindow: Metadaten des nativen Modellkontextfensters. Dies überschreibt für dieses ModellcontextWindowauf Provider-Ebene.models.providers.*.models.*.contextTokens: optionale Laufzeit-Kontextobergrenze. Dies überschreibtcontextTokensauf Provider-Ebene; verwenden Sie den Wert, wenn Sie ein kleineres effektives Kontextbudget als das nativecontextWindowdes Modells wünschen;openclaw models listzeigt beide Werte an, wenn sie voneinander abweichen.models.providers.*.models.*.compat.supportsDeveloperRole: optionaler Kompatibilitätshinweis. Beiapi: "openai-completions"mit einer nicht leeren, nicht nativenbaseUrl(Host ist nichtapi.openai.com) erzwingt OpenClaw zur Laufzeit den Wertfalse. Eine leere/ausgelassenebaseUrlbehält das standardmäßige OpenAI-Verhalten bei.models.providers.*.models.*.compat.requiresStringContent: optionaler Kompatibilitätshinweis für ausschließlich Zeichenfolgen unterstützende OpenAI-kompatible Chat-Endpunkte. Wenntrue, wandelt OpenClaw reine Textarrays vom Typmessages[].contentvor dem Senden der Anfrage in einfache Zeichenfolgen um.models.providers.*.models.*.compat.strictMessageKeys: optionaler Kompatibilitätshinweis für strikte OpenAI-kompatible Chat-Endpunkte. Wenntrue, reduziert OpenClaw ausgehende Chat-Completions-Nachrichtenobjekte vor dem Senden der Anfrage aufroleundcontent.models.providers.*.models.*.compat.thinkingFormat: optionaler Hinweis zum Thinking-Payload. Verwenden Sie"together"fürreasoning.enabledim Together-Stil,"qwen"fürenable_thinkingauf oberster Ebene oder"qwen-chat-template"fürchat_template_kwargs.enable_thinkingauf OpenAI-kompatiblen Servern der Qwen-Familie, die Chat-Template-Kwargs auf Anfrageebene unterstützen, beispielsweise vLLM. Konfigurierte Qwen-Modelle von vLLM stellen für diese Formate binäre/think-Optionen (off,on) bereit.models.providers.*.models.*.compat.requiresReasoningContentOnAssistantMessages: optionaler Kompatibilitätshinweis für Chat-Completions-Backends im DeepSeek-Stil, die verlangen, dass vorherige Assistentennachrichten bei der erneuten Wiedergabereasoning_contentbeibehalten. Wenntrue, bewahrt OpenClaw dieses Feld in ausgehenden Assistentennachrichten. Verwenden Sie dies beim Einrichten eines benutzerdefinierten DeepSeek-kompatiblen Proxys, der Anfragen nach dem Entfernen der Reasoning-Inhalte ablehnt. Standard:false.
Amazon-Bedrock-Erkennung
plugins.entries.amazon-bedrock.config.discovery: Stamm der Einstellungen für die automatische Bedrock-Erkennung.plugins.entries.amazon-bedrock.config.discovery.enabled: implizite Erkennung ein-/ausschalten.plugins.entries.amazon-bedrock.config.discovery.region: AWS-Region für die Erkennung.plugins.entries.amazon-bedrock.config.discovery.providerFilter: optionaler Provider-ID-Filter für eine gezielte Erkennung.plugins.entries.amazon-bedrock.config.discovery.refreshInterval: Abfrageintervall für die Aktualisierung der Erkennung.plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow: Ersatz-Kontextfenster für erkannte Modelle.plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens: maximale Anzahl an Ausgabetoken als Ersatzwert für erkannte Modelle.
Das interaktive Onboarding benutzerdefinierter Provider leitet die Bildeingabe aus bekannten Mustern für Vision-Modell-IDs ab, darunter GPT-4o/GPT-4.1/GPT-5+, die Reasoning-Familien o1/o3/o4, Claude, Gemini, jede ID mit dem Suffix -vl (Qwen-VL und ähnliche) sowie benannte Familien wie LLaVA, Pixtral, InternVL, Mllama, MiniCPM-V und GLM-4V. Bei bekannten reinen Textfamilien (Llama, DeepSeek, Mistral/Mixtral, Kimi/Moonshot, Codestral, Devstral, Phi, QwQ, CodeLlama und einfache Qwen-IDs ohne vl-/vision-Suffix) wird die zusätzliche Frage übersprungen. Bei unbekannten Modell-IDs wird weiterhin nach Bildunterstützung gefragt. Das nicht interaktive Onboarding verwendet dieselbe Ableitung; übergeben Sie --custom-image-input, um bildfähige Metadaten zu erzwingen, oder --custom-text-input, um reine Textmetadaten zu erzwingen.
Provider-Beispiele
Cerebras (GLM 4.7 / GPT OSS)
Das offizielle externe Provider-Plugin cerebras kann dies über openclaw onboard --auth-choice cerebras-api-key konfigurieren. Verwenden Sie eine explizite Provider-Konfiguration nur, wenn Sie Standardwerte überschreiben.
{ env: { CEREBRAS_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "cerebras/zai-glm-4.7", fallbacks: ["cerebras/gpt-oss-120b"], }, models: { "cerebras/zai-glm-4.7": { alias: "GLM 4.7 (Cerebras)" }, "cerebras/gpt-oss-120b": { alias: "GPT OSS 120B (Cerebras)" }, }, }, }, models: { mode: "merge", providers: { cerebras: { baseUrl: "https://api.cerebras.ai/v1", apiKey: "${CEREBRAS_API_KEY}", api: "openai-completions", models: [ { id: "zai-glm-4.7", name: "GLM 4.7 (Cerebras)" }, { id: "gpt-oss-120b", name: "GPT OSS 120B (Cerebras)" }, ], }, }, },}Verwenden Sie cerebras/zai-glm-4.7 für Cerebras und zai/glm-4.7 für den direkten Zugriff auf Z.AI.
Kimi Coding
{ env: { KIMI_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "kimi/kimi-for-coding" }, models: { "kimi/kimi-for-coding": { alias: "Kimi Code" } }, }, },}Anthropic-kompatibler, integrierter Provider. Kurzform: openclaw onboard --auth-choice kimi-code-api-key.
Lokale Modelle (LM Studio)
Siehe Lokale Modelle. Kurz gesagt: Führen Sie über die LM Studio Responses API auf leistungsfähiger Hardware ein großes lokales Modell aus; führen Sie gehostete Modelle weiterhin zusammen, um einen Fallback bereitzustellen.
MiniMax M3 (direkt)
{ agents: { defaults: { model: { primary: "minimax/MiniMax-M3" }, models: { "minimax/MiniMax-M3": { alias: "Minimax" }, }, }, }, models: { mode: "merge", providers: { minimax: { baseUrl: "https://api.minimax.io/anthropic", apiKey: "${MINIMAX_API_KEY}", api: "anthropic-messages", models: [ { id: "MiniMax-M3", name: "MiniMax M3", reasoning: true, input: ["text", "image"], cost: { input: 0.6, output: 2.4, cacheRead: 0.12, cacheWrite: 0 }, contextWindow: 1000000, maxTokens: 131072, }, ], }, }, },}Setzen Sie MINIMAX_API_KEY. Kurzbefehle: openclaw onboard --auth-choice minimax-global-api oder openclaw onboard --auth-choice minimax-cn-api. Der Modellkatalog verwendet standardmäßig M3 und enthält außerdem die M2.7-Varianten. Auf dem Anthropic-kompatiblen Streaming-Pfad deaktiviert OpenClaw standardmäßig das Thinking von MiniMax M2.x, sofern Sie thinking nicht ausdrücklich selbst festlegen; MiniMax-M3 (und M3.x) verbleibt standardmäßig auf dem ausgelassenen/adaptiven Thinking-Pfad des Providers. /fast on oder params.fastMode: true schreibt MiniMax-M2.7 in MiniMax-M2.7-highspeed um.
Moonshot AI (Kimi)
{ env: { MOONSHOT_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "moonshot/kimi-k2.6" }, models: { "moonshot/kimi-k2.6": { alias: "Kimi K2.6" } }, }, }, models: { mode: "merge", providers: { moonshot: { baseUrl: "https://api.moonshot.ai/v1", apiKey: "${MOONSHOT_API_KEY}", api: "openai-completions", models: [ { id: "kimi-k2.6", name: "Kimi K2.6", reasoning: false, input: ["text", "image"], cost: { input: 0.95, output: 4, cacheRead: 0.16, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 262144, }, ], }, }, },}Für den China-Endpunkt: baseUrl: "https://api.moonshot.cn/v1" oder openclaw onboard --auth-choice moonshot-api-key-cn.
Native Moonshot-Endpunkte geben auf dem gemeinsam verwendeten openai-completions-Transport Kompatibilität mit der Streaming-Nutzungsstatistik an, und OpenClaw richtet dieses Verhalten nach den Endpunktfunktionen aus statt allein nach der integrierten Provider-ID.
OpenCode
{ agents: { defaults: { model: { primary: "opencode/claude-opus-4-6" }, models: { "opencode/claude-opus-4-6": { alias: "Opus" } }, }, },}Setzen Sie OPENCODE_API_KEY (oder OPENCODE_ZEN_API_KEY). Verwenden Sie opencode/...-Referenzen für den Zen-Katalog oder opencode-go/...-Referenzen für den Go-Katalog. Kurzbefehl: openclaw onboard --auth-choice opencode-zen oder openclaw onboard --auth-choice opencode-go.
Synthetic (Anthropic-kompatibel)
{ env: { SYNTHETIC_API_KEY: "sk-..." }, agents: { defaults: { model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.5" }, models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.5": { alias: "MiniMax M2.5" } }, }, }, models: { mode: "merge", providers: { synthetic: { baseUrl: "https://api.synthetic.new/anthropic", apiKey: "${SYNTHETIC_API_KEY}", api: "anthropic-messages", models: [ { id: "hf:MiniMaxAI/MiniMax-M2.5", name: "MiniMax M2.5", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 192000, maxTokens: 65536, }, ], }, }, },}Die Basis-URL sollte /v1 weglassen (der Anthropic-Client hängt es an). Kurzbefehl: openclaw onboard --auth-choice synthetic-api-key.
Z.AI (GLM-4.7)
{ agents: { defaults: { model: { primary: "zai/glm-4.7" }, models: { "zai/glm-4.7": {} }, }, },}Setzen Sie ZAI_API_KEY. Modellreferenzen verwenden die kanonische Provider-ID zai/*. Kurzbefehl: openclaw onboard --auth-choice zai-api-key.
- Allgemeiner Endpunkt:
https://api.z.ai/api/paas/v4 - Coding-Endpunkt:
https://api.z.ai/api/coding/paas/v4 - Die standardmäßige Authentifizierungsauswahl
zai-api-keyprüft Ihren Schlüssel und erkennt automatisch, zu welchem Endpunkt er gehört (wenn die Erkennung kein eindeutiges Ergebnis liefert, wird auf eine Eingabeaufforderung zurückgegriffen, deren Standardwert Global ist). Für eine explizite Auswahl stehen außerdem separate Authentifizierungsauswahlen für CN und den Coding-Plan zur Verfügung. - Definieren Sie für den allgemeinen Endpunkt einen benutzerdefinierten Provider mit überschriebener Basis-URL.
Verwandte Themen
- Konfiguration — Agenten
- Konfiguration — Kanäle
- Konfigurationsreferenz — weitere Schlüssel auf oberster Ebene
- Tools und Plugins