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, ask_user, skill_workshop, image, image_generate, music_generate, video_generate |
messaging |
group:messaging, sessions, sessions_list, sessions_history, sessions_search, conversations_list, conversations_send, conversations_turn, sessions_send, sessions_spawn, sessions_yield, subagents, session_status, ask_user |
full |
Keine Einschränkung (entspricht einem nicht festgelegten Wert) |
coding und messaging lassen außerdem implizit bundle-mcp zu (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, sessions_list, sessions_history, sessions_search, conversations_list, conversations_send, conversations_turn, 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, screen, terminal, canvas, show_widget |
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, ask_user, skill_workshop |
group:media |
image, image_generate, music_generate, video_generate, tts |
group:openclaw |
Alle oben aufgeführten integrierten Tools außer read/write/edit/apply_patch/exec/process/canvas (schließt Plugin-Tools aus) |
group:plugins |
Tools, die zu geladenen Plugins gehören, einschließlich konfigurierter MCP-Server, die über bundle-mcp bereitgestellt werden |
Mit spawn_task kann ein Coding-Agent bestätigte Folgearbeiten vorschlagen, ohne sie zu starten. Die Control UI zeigt Titel und Zusammenfassung als interaktiven Chip an; eine Gateway-gestützte TUI zeigt eine entsprechende interaktive Eingabeaufforderung an. Das Annehmen in einer der beiden Oberflächen erstellt eine neue Sitzung in einem verwalteten Worktree und sendet die vollständige Eingabe dorthin, während der aktuelle Turn fortgesetzt wird. dismiss_task zieht einen noch ausstehenden Vorschlag anhand der kurzlebigen task_id zurück, 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 verarbeiten kann. Kanalsitzungen und lokale/eingebettete TUI-Sitzungen empfangen sie nicht; Kanaltransporte benötigen eine portable typisierte Aufgabenaktion, bevor sie diesen Ablauf sicher bereitstellen können. Vorschläge sind prozesslokal und verschwinden beim Neustart des Gateway. Beide Tools bleiben im Profil coding und in group:sessions, sodass sie durch die normale Richtlinienkonfiguration tools.allow und tools.deny automatisch konfiguriert werden, wenn die Oberfläche sie unterstützt.
MCP- und Plugin-Tools in 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 Sperre für Sandbox-Sitzungen. Wenn der Sandbox-Modus "all" oder "non-main" lautet, nehmen Sie einen der folgenden Einträge in die Sandbox-Tool-Zulassungsliste 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 MCP-Server-Toolnamen oder Server-Glob-Muster wie
outlook__send_mailoderoutlook__*, wenn Sie nur einen Server zulassen möchten
Server-Glob-Muster verwenden das Provider-sichere MCP-Serverpräfix, nicht unbedingt den unverarbeiteten Schlüssel mcp.servers. Zeichen, die nicht [A-Za-z0-9_-] entsprechen, 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 für von OpenClaw verwaltete Server in mcp.servers zu erkennen. MCP-Server, die aus gebündelten Plugin-Manifesten oder Claude .mcp.json geladen werden, verwenden dieselbe Sandbox-Sperre, aber diese Diagnose führt diese Quellen noch nicht auf; verwenden Sie dieselben Einträge in der Zulassungsliste, wenn deren Tools in Sandbox-Turns verschwinden.
tools.codeMode
tools.codeMode aktiviert die generische Code-Mode-Oberfläche von OpenClaw. Wenn sie
für einen Lauf mit Tools aktiviert ist, werden normale OpenClaw-Tools hinter die Sandbox-interne Katalogbrücke tools.*
verschoben, und MCP-Tools sind über den generierten Namespace MCP
verfügbar. Das Modell sieht normalerweise exec und wait; Tools wie computer,
deren strukturierte Ergebnisse die reine JSON-Brücke nicht passieren können, bleiben direkt verfügbar.
{ tools: { codeMode: { enabled: true, }, },}Die Kurzform wird ebenfalls akzeptiert:
{ tools: { codeMode: true },}MCP-Deklarationen werden im Code-Mode über die schreibgeschützte virtuelle API-Dateioberfläche
bereitgestellt. Gastcode kann API.list("mcp") und
API.read("mcp/<server>.d.ts") aufrufen, um TypeScript-ähnliche Signaturen zu prüfen, bevor
MCP.<server>.<tool>() aufgerufen wird. Informationen zum Laufzeitvertrag, zu Einschränkungen und zu Debugging-Schritten finden Sie unter Code-Mode.
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 außerdem 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änken Sie Tools für bestimmte Provider oder Modelle weiter ein. Reihenfolge: Basisprofil → Provider-Profil → Zulassen/Ablehnen.
{ tools: { profile: "coding", byProvider: { "google-antigravity": { profile: "minimal" }, "openai/gpt-5.4": { allow: ["group:fs", "sessions_list"] }, }, },}tools.toolsBySender
Beschränkt Tools für eine bestimmte Identität des Anfragenden. Dies dient als zusätzliche Sicherheitsebene neben der 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 Abgleichreihenfolge lautet Kanal+ID, ID, e164, Benutzername, Name und anschließend Platzhalter.
Das agentenspezifische agents.entries.*.tools.toolsBySender überschreibt bei einer Übereinstimmung den globalen Absenderabgleich, selbst bei einer leeren {}-Richtlinie.
tools.elevated
Steuert den erhöhten exec-Zugriff außerhalb der Sandbox:
{ tools: { elevated: { enabled: true, allowFrom: { whatsapp: ["+15555550123"], discord: ["1234567890123", "987654321098765432"], }, }, },}- Die agentenspezifische Überschreibung (
agents.entries.*.tools.elevated) kann die Berechtigungen nur weiter einschränken. /elevated on|off|ask|fullspeichert den Zustand pro Sitzung; Inline-Direktiven gelten für eine einzelne Nachricht.- Erhöhtes
execumgeht die Sandbox und verwendet den konfigurierten Ausweichpfad (standardmäßiggatewayodernode, wenn das exec-Zielnodeist).
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 angezeigten Werte sind Standardwerte, mit Ausnahme von applyPatch.allowModels (standardmäßig leer/nicht gesetzt, sodass jedes kompatible Modell apply_patch verwenden kann). approvalRunningNoticeMs gibt einen Hinweis zum laufenden Vorgang aus, wenn eine genehmigungsbasierte exec-Ausführung lange dauert; 0 deaktiviert ihn.
tools.loopDetection
Sicherheitsprüfungen für Tool-Schleifen sind standardmäßig deaktiviert. Setzen Sie enabled: true, um die Erkennung zu aktivieren. Einstellungen können global in tools.loopDetection definiert und agentenspezifisch unter agents.entries.*.tools.loopDetection überschrieben werden.
{ tools: { loopDetection: { enabled: true, }, },}tools.web
{ tools: { web: { search: { enabled: true, apiKey: "brave_api_key", // or BRAVE_API_KEY env (Brave provider) maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, provider: "firecrawl", // optional; omit for auto-detect 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 begrenzt den Wert auf 32000–10000000; maxChars begrenzt ihn auf maxCharsCap (erhöhen Sie maxCharsCap, um größere Antworten zuzulassen).
tools.media
Konfiguriert die Verarbeitung eingehender Medien (Bild/Audio/Video):
{ tools: { media: { concurrency: 2, models: [ { provider: "openai", model: "gpt-4o-mini-transcribe", capabilities: ["audio"] }, { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"], capabilities: ["audio"], }, { provider: "ollama", model: "gemma4:26b", capabilities: ["image"] }, { provider: "google", model: "gemini-3-flash-preview", capabilities: ["video"] }, ], audio: { enabled: true, preferredModel: "openai/gpt-4o-mini-transcribe" }, image: { enabled: true, preferredModel: "ollama/gemma4:26b" }, video: { enabled: true }, }, },}tools.media.models ist die einzige konfigurierte Modellliste. Jeder Eintrag gibt die von ihm unterstützten Fähigkeiten an. Der optionale preferredModel-Selektor akzeptiert provider/model, eine Modell-ID, provider:<id> für Einträge mit Provider-Standardwerten oder cli:command; übereinstimmende Einträge werden in der Fallback-Reihenfolge der jeweiligen Fähigkeit nach vorn verschoben. Fähigkeitsspezifische Prompts, Grenzwerte, Anfrageeinstellungen, Geltungsbereiche, Richtlinien für Anhänge und die Wiedergabe von Audiotranskripten behalten für konfigurierte und automatisch erkannte Modelle ihre Standardwerte bei; ein Modelleintrag kann modellspezifische Felder überschreiben.
Felder eines Medienmodelleintrags
Provider-Eintrag (type: "provider" oder weggelassen):
provider: API-Provider-ID (openai,anthropic,google/gemini,groqusw.)model: Überschreibung der Modell-IDprofile/preferredProfile: Auswahl desauth-profiles.json-Profils
CLI-Eintrag (type: "cli"):
command: auszuführbare Dateiargs: Argumente mit Vorlagen (unterstützt{{MediaPath}},{{Prompt}},{{MaxChars}}usw.;openclaw doctor --fixmigriert veraltete{input}-Platzhalter zu{{MediaPath}})
Gemeinsame Felder:
capabilities: Liste mit einem oder mehreren der Werteimage,audioundvideo.prompt,maxChars,maxBytes,timeoutSeconds,language: eintragsspezifische Überschreibungen.- Übereinstimmende
timeoutSeconds-Einträge für Bildmodelle gelten auch, wenn der Agent das expliziteimage-Tool aufruft. Für die Bildverarbeitung gilt dieses Zeitlimit 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.
tools.agentToAgent
{ tools: { agentToAgent: { enabled: false, allow: ["home", "work"], }, },}tools.sessions
Steuert, auf welche Sitzungen die Sitzungstools (sessions_list, sessions_history, sessions_send) zugreifen können.
Standard: tree (aktuelle Sitzung + von ihr gestartete Sitzungen wie Subagenten sowie nebenläufig
beobachtete Gruppensitzungen desselben Agenten).
{ 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). Bei Lesevorgängen umfasst dies außerdem Gruppensitzungen desselben Agenten, welche die aktuelle Sitzung über die nebenläufige Gruppenwahrnehmung beobachtet.agent: jede Sitzung, die zur aktuellen Agenten-ID gehört (kann andere Benutzer einschließen, wenn Sie absenderspezifische Sitzungen unter derselben Agenten-ID ausführen).all: jede Sitzung. Agentenübergreifender Zugriff erfordert weiterhintools.agentToAgent.- Sandbox-Begrenzung: Wenn die aktuelle Sitzung in einer Sandbox ausgeführt wird und
agents.defaults.sandbox.sessionToolsVisibility="spawned"gilt (der Standardwert), wird die Sichtbarkeit auftreebeschränkt, selbst wenntools.sessions.visibility="all"festgelegt ist. - Wenn nicht
all, enthältsessions_listein kompaktesvisibility-Feld, das den wirksamen Modus beschreibt und darauf hinweist, dass einige Sitzungen außerhalb des aktuellen Geltungsbereichs möglicherweise nicht enthalten sind.
Mit dem standardmäßigen session.dmScope: "main" macht menschliche Aktivität in einer Gruppe diese Gruppensitzung desselben Agenten
nebenläufig für die Hauptsitzung des Agenten sichtbar. In einer Mehrbenutzerkonfiguration teilt "main" außerdem
eine DM-Sitzung zwischen Benutzern, sodass jeder dorthin weitergeleitete Benutzer aus nebenläufig beobachteten Gruppen lesen kann,
einschließlich über das Sitzungsspeicher-memory_search. Verwenden Sie für die DM-Isolierung ein gegenstellenspezifisches dmScope oder setzen Sie
tools.sessions.visibility: "self", um Lesezugriffe auf nebenläufig beobachtete Sitzungen zu deaktivieren.
tools.sessions_spawn
Steuert die Unterstützung für Inline-Anhänge bei sessions_spawn.
{ tools: { sessions_spawn: { attachments: { enabled: false, // opt-in: set true to allow inline file attachments maxTotalBytes: 5242880, // 5 MB total across all files maxFiles: 50, maxFileBytes: 1048576, // 1 MB per file retainOnSessionKeep: false, // keep attachments when cleanup="keep" }, }, },}Hinweise zu Anhängen
- Anhänge erfordern
enabled: true. - Anhänge von Subagenten werden unter
.openclaw/attachments/<uuid>/mit einem.manifest.jsonim untergeordneten Arbeitsbereich bereitgestellt. - ACP-Anhänge sind ausschließlich Bilder und werden inline an die ACP-Laufzeit weitergeleitet, nachdem dieselben Grenzwerte für Dateianzahl, Bytes pro Datei und Gesamtbytes eingehalten wurden.
- Der Inhalt von Anhängen wird automatisch aus der dauerhaften Transkriptspeicherung entfernt.
- Base64-Eingaben werden durch strenge Prüfungen von Alphabet und Auffüllung sowie eine Größenprüfung vor der Dekodierung validiert.
- Die Dateiberechtigungen für Anhänge von Subagenten sind
0700für Verzeichnisse und0600für Dateien. - Die Bereinigung von Subagenten folgt der
cleanup-Richtlinie:deleteentfernt Anhänge immer;keepbehält sie nur bei, wennretainOnSessionKeep: true.
tools.experimental
Experimentelle Flags für integrierte Tools. Standardmäßig deaktiviert, sofern keine Regel zur automatischen Aktivierung für strikt agentisches GPT-5 greift.
{ tools: { experimental: { planTool: true, // enable experimental update_plan }, },}planTool: aktiviert das strukturierteupdate_plan-Tool zur Verfolgung nicht trivialer, mehrstufiger Arbeiten.- Standard:
false, sofernagents.defaults.embeddedAgent.executionContract(oder eine agentenspezifische Überschreibung) nicht für eine Ausführung mit einemopenai-Provider und einer Modell-ID aus der GPT-5-Familie auf"strict-agentic"gesetzt ist (dies schließt auch Ausführungen mit der OpenAI Codex CLI ein, da die Codex-Authentifizierung und das Modellrouting demopenai-Provider untergeordnet sind). Setzen Sietrue, um das Tool außerhalb dieses Geltungsbereichs zu erzwingen, oderfalse, um es selbst bei strikt agentischen GPT-5-Ausführungen deaktiviert zu lassen. - Wenn es aktiviert ist, ergänzt der System-Prompt außerdem Nutzungshinweise, 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 Unteragenten. Wenn nicht angegeben, übernehmen Unteragenten das Modell des Aufrufers.allowAgents: Standard-Zulassungsliste konfigurierter Ziel-Agenten-IDs fürsessions_spawn, wenn der anfragende Agent keine eigenesubagents.allowAgentsfestlegt (["*"]= jedes konfigurierte Ziel; Standard: nur derselbe Agent). Veraltete Einträge, deren Agentenkonfiguration gelöscht wurde, werden vonsessions_spawnabgelehnt und inagents_listausgelassen; führen Sieopenclaw doctor --fixaus, um sie zu bereinigen.maxConcurrent: maximale Anzahl gleichzeitig ausgeführter Unteragenten. Standard:8.runTimeoutSeconds: Zeitüberschreitung (Sekunden) fürsessions_spawn, wenn der Aufrufer keine eigene Überschreibung übergibt. Standard:0(keine Zeitüberschreitung); der oben gezeigte Wert900ist ein häufig verwendeter Opt-in-Wert, nicht der integrierte Standardwert.announceTimeoutMs: Zeitüberschreitung pro Aufruf (Millisekunden) für Gateway-Zustellversuche vonagent-Ankündigungen. Standard:120000. Vorübergehende Wiederholungsversuche können dazu führen, dass die gesamte Wartezeit für Ankündigungen länger als eine konfigurierte Zeitüberschreitung ist.archiveAfterMinutes: Minuten nach Abschluss einer Unteragentensitzung, bevor sie automatisch archiviert wird. Standard:60;0deaktiviert die automatische Archivierung.- Werkzeugrichtlinie pro Unteragent:
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 über ~/.openclaw/agents/<agentId>/agent/models.json hinzu.
Die Konfiguration eines benutzerdefinierten/lokalen Providers mit baseUrl ist zugleich die eng begrenzte Netzwerkvertrauensentscheidung für Modell-HTTP-Anfragen: OpenClaw lässt genau diesen scheme://host:port-Ursprung über den geschützten Abrufpfad zu, ohne eine separate Konfigurationsoption hinzuzufügen oder anderen privaten Ursprüngen zu vertrauen.
{ models: { mode: "merge", // zusammenführen (Standard) | ersetzen 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ührungsrangfolge
- Verwenden Sie
authHeader: true+headersfür benutzerdefinierte Authentifizierungsanforderungen. - Überschreiben Sie das Stammverzeichnis der Agentenkonfiguration mit
OPENCLAW_AGENT_DIR. - Zusammenführungsrangfolge für übereinstimmende Provider-IDs:
- Nicht leere
models.json-baseUrl-Werte des Agenten haben Vorrang. - Nicht leere
apiKey-Werte des Agenten haben nur dann Vorrang, wenn dieser Provider im aktuellen Konfigurations-/Authentifizierungsprofilkontext nicht von SecretRef verwaltet wird. - Von SecretRef verwaltete
apiKey-Werte des Providers werden anhand von Quellmarkierungen aktualisiert (ENV_VAR_NAMEfür Umgebungsreferenzen,secretref-managedfür Datei-/Ausführungsreferenzen), statt aufgelöste Geheimnisse dauerhaft zu speichern. - Von SecretRef verwaltete Provider-Headerwerte werden anhand von Quellmarkierungen aktualisiert (
secretref-env:ENV_VAR_NAMEfür Umgebungsreferenzen,secretref-managedfür Datei-/Ausführungsreferenzen). - Leere oder fehlende
apiKey/baseUrldes Agenten greifen aufmodels.providersin der Konfiguration zurück. - Übereinstimmende Modellwerte für
contextWindow/maxTokens: Der explizite Konfigurationswert hat Vorrang, wenn er vorhanden und gültig ist (eine positive endliche Zahl); andernfalls wird der implizite/generierte Katalogwert verwendet. - Übereinstimmendes Modell-
contextTokensfolgt derselben Regel „explizit hat Vorrang, andernfalls implizit“; verwenden Sie es, um den effektiven Kontext zu begrenzen, ohne native Modellmetadaten zu ändern. - Kataloge von Provider-Plugins werden als generierte, Plugin-eigene Katalogfragmente im Plugin-Status des Agenten gespeichert.
- Verwenden Sie
models.mode: "replace", wenn die Konfigurationmodels.jsonvollständig neu schreiben und die Zusammenführung Plugin-eigener Katalogfragmente überspringen soll. - Die dauerhafte Speicherung von Markierungen richtet sich maßgeblich nach der Quelle: Markierungen werden aus dem aktiven Snapshot der Quellkonfiguration (vor der Auflösung) und nicht aus aufgelösten Laufzeitwerten von Geheimnissen geschrieben.
- Nicht leere
Details zu Provider-Feldern
Katalog auf oberster Ebene
models.mode: Verhalten des Provider-Katalogs (mergeoderreplace).models.providers: nach Provider-ID indizierte Zuordnung benutzerdefinierter Provider.- 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-Anmeldedaten (SecretRef-/Umgebungsersetzung bevorzugen).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: optionale HTTP-Anfragezeitüberschreitung pro Provider und Modell in Sekunden, einschließlich Verbindung, Headern, Body und Behandlung des Abbruchs der gesamten Anfrage.models.providers.*.injectNumCtxForOpenAICompat: Fügt bei Ollama +openai-completionsden Wertoptions.num_ctxin Anfragen ein (Standard:true).models.providers.*.authHeader: Erzwingt bei Bedarf die Übertragung von Anmeldedaten imAuthorization-Header.models.providers.*.baseUrl: Basis-URL der vorgelagerten API.models.providers.*.headers: zusätzliche statische Header für Proxy-/Mandantenrouting.
Überschreibungen des Anfrage-Transports
models.providers.*.request: Transportüberschreibungen für HTTP-Anfragen an Modell-Provider.
request.headers: zusätzliche Header (mit Provider-Standardwerten zusammengeführt). 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: HTTP-Proxy-Überschreibung. 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 zu privaten, CGNAT- oder ähnlichen Bereichen über die HTTP-Abrufsicherung des Providers zugelassen. Basis-URLs benutzerdefinierter/lokaler Provider vertrauen bereits dem exakt konfigurierten Ursprung, mit Ausnahme von Metadaten-/Link-Local-Ursprüngen, die ohne explizites Opt-in weiterhin blockiert bleiben. Setzen Sie dies auffalse, um das Vertrauen in den exakten Ursprung zu deaktivieren. WebSocket verwendet dieselbenrequestfür Header/TLS, jedoch nicht diese Abrufsicherung gegen SSRF. Standard:false.
Modellkatalogeinträge
models.providers.*.models: explizite Modellkatalogeinträge des Providers.models.providers.*.models.*.input: Modelleingabemodalitäten. Verwenden Sie["text"]für reine Textmodelle und["text", "image"]für native Bild-/Vision-Modelle. Bildanhänge werden nur dann in Agentendurchläufe eingefügt, wenn das ausgewählte Modell als bildfähig gekennzeichnet ist.models.providers.*.models.*.contextWindow: Metadaten des nativen Modellkontextfensters. Dies überschreibtcontextWindowauf Provider-Ebene für dieses Modell.models.providers.*.models.*.contextTokens: optionale Laufzeit-Kontextobergrenze. Dies überschreibtcontextTokensauf Provider-Ebene; verwenden Sie sie, wenn Sie ein kleineres effektives Kontextbudget als das nativecontextWindowdes Modells wünschen;openclaw models listzeigt beide Werte an, wenn sie voneinander abweichen.
Funktionsdeklarationen für benutzerdefinierte Provider
Provider-Kataloge besitzen compat für gebündelte und katalogbekannte Modellrouten. Kopieren Sie diese Flags nicht in die Konfiguration: OpenClaw verwendet die Katalogzeile, solange die konfigurierten api und baseUrl weiterhin diese Route identifizieren. openclaw doctor --fix entfernt übereinstimmende veraltete Überschreibungen und meldet abweichende Werte zur Überprüfung.
Ein compat-Block wird weiterhin für einen tatsächlich benutzerdefinierten Provider, ein benutzerdefiniertes Modell oder ein zu einem anderen Endpunkt geroutetes Katalogmodell unterstützt. Legen Sie nur Funktionen fest, die für diesen Endpunkt verifiziert wurden:
| Schlüssel für benutzerdefinierte Route | Laufzeitvertrag |
|---|---|
supportsStore |
Akzeptiert das OpenAI-Anfragefeld store. |
supportsPromptCacheKey |
Akzeptiert OpenAI-Schlüssel für Prompt-Cache/Sitzungsaffinität. |
supportsDeveloperRole |
Akzeptiert developer-Nachrichten, statt system zu erfordern. |
supportsReasoningEffort |
Akzeptiert eine Steuerung des Reasoning-Aufwands. |
supportsTemperature |
Akzeptiert temperature für dieses Modell und diesen Adapter. |
supportsUsageInStreaming |
Gibt Nutzungsmetadaten in Streaming-Antworten aus. |
supportsTools |
Unterstützt strukturierte Werkzeug-/Funktionsaufrufe. Setzen Sie false, um Werkzeuge zu deaktivieren. |
supportsStrictMode |
Akzeptiert strikte Werkzeugschemas. |
requiresStringContent |
Erfordert Nachrichteninhalte der Chat Completions als einfache Zeichenfolge. |
strictMessageKeys |
Erfordert, dass ausgehende Nachrichten nur akzeptierte Schlüssel enthalten. |
visibleReasoningDetailTypes |
Benennt Typen von Reasoning-Detailblöcken, die sicher in Transkripten angezeigt werden können. |
supportedReasoningEfforts |
Führt die vom Endpunkt akzeptierten Reasoning-Bezeichnungen auf. |
reasoningEffortMap |
Ordnet OpenClaw-Denkbezeichnungen endpunktspezifischen Bezeichnungen zu. |
maxTokensField |
Wählt max_tokens oder max_completion_tokens aus. |
thinkingFormat |
Wählt den Dialekt der Reasoning-Nutzlast des Endpunkts aus. |
requiresToolResultName |
Erfordert einen Werkzeugnamen in Werkzeugergebnisnachrichten. |
requiresAssistantAfterToolResult |
Erfordert nach Werkzeugergebnissen eine Assistentennachricht. |
requiresThinkingAsText |
Gibt Reasoning als Text statt als strukturierten Inhalt wieder. |
requiresReasoningContentOnAssistantMessages |
Behält DeepSeek-artiges reasoning_content bei der Wiedergabe bei. |
toolSchemaProfile |
Wählt ein vom Provider definiertes Normalisierungsprofil für Werkzeugschemas aus. |
unsupportedToolSchemaKeywords |
Entfernt benannte JSON-Schema-Schlüsselwörter, die vom Endpunkt abgelehnt werden. |
toolCallArgumentsEncoding |
Wählt die Kodierung der Werkzeugaufrufargumente des Endpunkts aus. |
requiresOpenAiAnthropicToolPayload |
Konvertiert OpenAI-förmige Werkzeugaufrufe in Nutzlasten der Anthropic-Familie. |
Amazon-Bedrock-Erkennung
plugins.entries.amazon-bedrock.config.discovery: Stammeinstellung für die automatische Bedrock-Erkennung.plugins.entries.amazon-bedrock.config.discovery.enabled: implizite Erkennung aktivieren/deaktivieren.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 die gezielte Erkennung.plugins.entries.amazon-bedrock.config.discovery.refreshInterval: Abfrageintervall für die Aktualisierung der Erkennung.plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow: Ersatzwert für das Kontextfenster erkannter Modelle.plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens: Ersatzwert für die maximale Anzahl an Ausgabe-Tokens erkannter Modelle.
Das interaktive Onboarding benutzerdefinierter Provider leitet die Unterstützung von Bildeingaben für bekannte Muster von 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 einfachen Qwen-IDs ohne vl/vision-Suffix) wird die zusätzliche Frage übersprungen. Bei unbekannten Modell-IDs wird weiterhin nach der Bildunterstützung gefragt. Das nicht interaktive Onboarding verwendet dieselbe Ableitung; übergeben Sie --custom-image-input, um Metadaten mit Bildunterstützung 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 auf leistungsfähiger Hardware ein großes lokales Modell über die LM Studio Responses API aus; behalten Sie gehostete Modelle zusammengeführt als Rückfalloption bei.
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, }, ], }, }, },}Legen Sie MINIMAX_API_KEY fest. Kurzformen: 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. Beim Anthropic-kompatiblen Streaming-Pfad deaktiviert OpenClaw das Thinking von MiniMax M2.x standardmäßig, sofern Sie thinking nicht selbst explizit festlegen; MiniMax-M3 (und M3.x) verbleibt standardmäßig auf dem vom Provider vorgegebenen Pfad für ausgelassenes/adaptives Thinking. /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 die Kompatibilität der Streaming-Nutzungsdaten für den gemeinsam verwendeten openai-completions-Transport an, und OpenClaw richtet sich dabei nach den Endpunktfähigkeiten statt ausschließlich nach der integrierten Provider-ID.
OpenCode
{ agents: { defaults: { model: { primary: "opencode/claude-opus-4-6" }, models: { "opencode/claude-opus-4-6": { alias: "Opus" } }, }, },}Legen Sie OPENCODE_API_KEY (oder OPENCODE_ZEN_API_KEY) fest. Verwenden Sie opencode/...-Referenzen für den Zen-Katalog oder opencode-go/...-Referenzen für den Go-Katalog. Kurzform: 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-M3" }, models: { "synthetic/hf:MiniMaxAI/MiniMax-M3": { alias: "MiniMax M3" } }, }, }, models: { mode: "merge", providers: { synthetic: { baseUrl: "https://api.synthetic.new/anthropic", apiKey: "${SYNTHETIC_API_KEY}", api: "anthropic-messages", models: [ { id: "hf:MiniMaxAI/MiniMax-M3", name: "MiniMax M3", reasoning: true, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262144, maxTokens: 65536, }, ], }, }, },}Die Basis-URL sollte /v1 auslassen (der Anthropic-Client hängt es an). Kurzform: 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": {} }, }, },}Legen Sie ZAI_API_KEY fest. Modellreferenzen verwenden die kanonische Provider-ID zai/*. Kurzform: 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 Authentifizierungsoption
zai-api-keyprüft Ihren Schlüssel und erkennt automatisch, zu welchem Endpunkt er gehört. Falls die Erkennung kein eindeutiges Ergebnis liefert, wird eine Abfrage angezeigt, deren Standardwert Global ist. Für eine explizite Auswahl stehen außerdem spezielle Authentifizierungsoptionen 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 der obersten Ebene
- Tools und Plugins