Gateway
Dokumentacja konfiguracji
Dokumentacja referencyjna podstawowej konfiguracji dla ~/.openclaw/openclaw.json. Przegląd zorientowany na zadania znajdziesz w Konfiguracja.
Obejmuje główne powierzchnie konfiguracji OpenClaw i odsyła dalej, gdy podsystem ma własną, głębszą dokumentację referencyjną. Katalogi poleceń należące do kanałów i Pluginów oraz szczegółowe ustawienia pamięci/QMD znajdują się na własnych stronach, a nie na tej.
Źródło prawdy w kodzie:
openclaw config schemawypisuje aktualny schemat JSON używany do walidacji i Control UI, z dołączonymi metadanymi pakietów/Pluginów/kanałów, gdy są dostępneconfig.schema.lookupzwraca jeden węzeł schematu ograniczony do ścieżki dla narzędzi drążenia szczegółówpnpm config:docs:check/pnpm config:docs:genwalidują bazowy hash dokumentacji konfiguracji względem bieżącej powierzchni schematu
Ścieżka wyszukiwania agenta: użyj akcji narzędzia gateway config.schema.lookup, aby przed edycją uzyskać dokładną dokumentację i ograniczenia na poziomie pól. Użyj
Konfiguracja jako wskazówek zorientowanych na zadania, a tej strony
jako szerszej mapy pól, wartości domyślnych i linków do dokumentacji referencyjnej podsystemów.
Dedykowane szczegółowe dokumentacje referencyjne:
- Dokumentacja referencyjna konfiguracji pamięci dla
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationsoraz konfiguracji dreaming podplugins.entries.memory-core.config.dreaming - Polecenia ukośnikiem dla bieżącego wbudowanego + pakietowego katalogu poleceń
- strony kanałów/Pluginów będących właścicielami dla powierzchni poleceń specyficznych dla kanałów
Format konfiguracji to JSON5 (dozwolone komentarze i przecinki końcowe). Wszystkie pola są opcjonalne - OpenClaw używa bezpiecznych wartości domyślnych, gdy są pominięte.
Kanały
Klucze konfiguracji poszczególnych kanałów przeniesiono na dedykowaną stronę - zobacz
Konfiguracja - kanały dla channels.*,
w tym Slack, Discord, Telegram, WhatsApp, Matrix, iMessage oraz innych
pakietowych kanałów (uwierzytelnianie, kontrola dostępu, wiele kont, bramkowanie wzmianek).
Domyślne ustawienia agenta, wielu agentów, sesje i wiadomości
Przeniesiono na dedykowaną stronę - zobacz Konfiguracja - agenci dla:
agents.defaults.*(workspace, model, myślenie, heartbeat, pamięć, media, skills, sandbox)multiAgent.*(routing i powiązania wieloagentowe)session.*(cykl życia sesji, compaction, przycinanie)messages.*(dostarczanie wiadomości, TTS, renderowanie markdown)talk.*(tryb Talk)talk.consultThinkingLevel: nadpisanie poziomu myślenia dla pełnego przebiegu agenta OpenClaw stojącego za konsultacjami realtime Control UI Talktalk.consultFastMode: jednorazowe nadpisanie trybu szybkiego dla konsultacji realtime Control UI Talktalk.speechLocale: opcjonalny identyfikator lokalizacji BCP 47 dla rozpoznawania mowy Talk na iOS/macOStalk.silenceTimeoutMs: gdy nieustawione, Talk zachowuje domyślne okno pauzy platformy przed wysłaniem transkryptu (700 ms on macOS and Android, 900 ms on iOS)talk.realtime.consultRouting: awaryjne przekazanie przez Gateway dla sfinalizowanych transkryptów realtime Talk, które pomijająopenclaw_agent_consult
Narzędzia i niestandardowi dostawcy
Zasady narzędzi, eksperymentalne przełączniki, konfiguracja narzędzi wspieranych przez dostawców oraz konfiguracja niestandardowych dostawców / bazowych adresów URL zostały przeniesione na dedykowaną stronę - zobacz Konfiguracja - narzędzia i niestandardowi dostawcy.
Modele
Definicje dostawców, listy dozwolonych modeli i konfiguracja niestandardowych dostawców znajdują się w
Konfiguracja - narzędzia i niestandardowi dostawcy.
Katalog główny models jest też właścicielem globalnego zachowania katalogu modeli.
{ models: { // Optional. Default: true. Requires a Gateway restart when changed. pricing: { enabled: false }, },}models.mode: zachowanie katalogu dostawców (mergelubreplace).models.providers: mapa niestandardowych dostawców indeksowana identyfikatorem dostawcy.models.providers.*.localService: opcjonalny menedżer procesów na żądanie dla lokalnych serwerów modeli. OpenClaw sprawdza skonfigurowany endpoint kondycji, uruchamia bezwzględnecommand, gdy jest potrzebne, czeka na gotowość, a następnie wysyła żądanie modelu. Zobacz Lokalne usługi modeli.models.pricing.enabled: kontroluje bootstrap cenowy w tle, który uruchamia się po tym, jak procesy sidecar i kanały dotrą do ścieżki gotowości Gateway. Gdyfalse, Gateway pomija pobieranie katalogów cen OpenRouter i LiteLLM; skonfigurowane wartościmodels.providers.*.models[].costnadal działają dla lokalnych szacunków kosztów.
MCP
Definicje serwerów MCP zarządzanych przez OpenClaw znajdują się pod mcp.servers i są
używane przez osadzony OpenClaw oraz inne adaptery runtime. Polecenia openclaw mcp list,
show, set i unset zarządzają tym blokiem bez łączenia się z
serwerem docelowym podczas edycji konfiguracji.
{ mcp: { // Optional. Default: 600000 ms (10 minutes). Set 0 to disable idle eviction. sessionIdleTtlMs: 600000, servers: { docs: { command: "npx", args: ["-y", "@modelcontextprotocol/server-fetch"], }, remote: { url: "https://example.com/mcp", transport: "streamable-http", // streamable-http | sse timeout: 20, connectTimeout: 5, supportsParallelToolCalls: true, headers: { Authorization: "Bearer ${MCP_REMOTE_TOKEN}", }, auth: "oauth", oauth: { scope: "docs.read", }, sslVerify: true, clientCert: "/path/to/client.crt", clientKey: "/path/to/client.key", toolFilter: { include: ["search_*"], exclude: ["admin_*"], }, // Optional Codex app-server projection controls. codex: { agents: ["main"], defaultToolsApprovalMode: "approve", // auto | prompt | approve }, }, }, },}mcp.servers: nazwane definicje serwerów MCP stdio lub zdalnych dla runtime, które udostępniają skonfigurowane narzędzia MCP. Wpisy zdalne używajątransport: "streamable-http"albotransport: "sse";type: "http"to natywny dla CLI alias, któryopenclaw mcp setiopenclaw doctor --fixnormalizują do kanonicznego polatransport.mcp.servers.<name>.enabled: ustawfalse, aby zachować zapisaną definicję serwera, wykluczając ją jednocześnie z odkrywania MCP osadzonego OpenClaw i projekcji narzędzi.mcp.servers.<name>.timeout/requestTimeoutMs: limit czasu żądania MCP dla serwera, w sekundach lub milisekundach.mcp.servers.<name>.connectTimeout/connectionTimeoutMs: limit czasu połączenia dla serwera, w sekundach lub milisekundach.mcp.servers.<name>.supportsParallelToolCalls: opcjonalna wskazówka współbieżności dla adapterów, które mogą wybrać, czy wykonywać równoległe wywołania narzędzi MCP.mcp.servers.<name>.auth: ustaw"oauth"dla serwerów HTTP MCP, które wymagają OAuth. Uruchomopenclaw mcp login <name>, aby zapisać tokeny w stanie OpenClaw.mcp.servers.<name>.oauth: opcjonalne nadpisania zakresu OAuth, adresu URL przekierowania i adresu URL metadanych klienta.mcp.servers.<name>.sslVerify,clientCert,clientKey: kontrolki HTTP TLS dla prywatnych endpointów i wzajemnego TLS.mcp.servers.<name>.toolFilter: opcjonalny wybór narzędzi dla serwera.includeogranicza odkryte narzędzia MCP do pasujących nazw;excludeukrywa pasujące nazwy. Wpisy to dokładne nazwy narzędzi MCP albo proste globs*. Serwery z zasobami lub promptami generują też nazwy narzędzi pomocniczych (resources_list,resources_read,prompts_list,prompts_get), a te nazwy używają tego samego filtra.mcp.servers.<name>.codex: opcjonalne kontrolki projekcji app-server Codex. Ten blok to metadane OpenClaw tylko dla wątków app-server Codex; nie wpływa na sesje ACP, ogólną konfigurację harness Codex ani inne adaptery runtime. Niepustecodex.agentsogranicza serwer do wymienionych identyfikatorów agentów OpenClaw. Puste, puste tekstowo lub nieprawidłowe listy agentów o ograniczonym zakresie są odrzucane przez walidację konfiguracji i pomijane przez ścieżkę projekcji runtime, zamiast stawać się globalne.codex.defaultToolsApprovalModeemituje natywne dla Codexdefault_tools_approval_modedla tego serwera. OpenClaw usuwa blokcodexprzed przekazaniem natywnej konfiguracjimcp_serversdo Codex. Pomiń ten blok, aby zachować projekcję serwera dla każdego agenta app-server Codex z domyślnym zachowaniem zatwierdzania MCP Codex.mcp.sessionIdleTtlMs: bezczynny TTL dla sesyjnych, pakietowych runtime MCP. Jednorazowe osadzone przebiegi proszą o sprzątanie po zakończeniu przebiegu; ten TTL jest zabezpieczeniem dla długowiecznych sesji i przyszłych wywołujących.- Zmiany pod
mcp.*są stosowane na gorąco przez zwolnienie buforowanych sesyjnych runtime MCP. Następne odkrycie/użycie narzędzia odtwarza je z nowej konfiguracji, więc usunięte wpisymcp.serverssą sprzątane natychmiast zamiast czekać na bezczynny TTL. - Odkrywanie runtime uwzględnia też powiadomienia o zmianie listy narzędzi MCP przez porzucenie buforowanego katalogu dla tej sesji. Serwery, które reklamują zasoby lub prompty, otrzymują narzędzia pomocnicze do wyświetlania/odczytu zasobów oraz wyświetlania/pobierania promptów. Powtarzające się niepowodzenia wywołań narzędzi krótko pauzują dotknięty serwer przed kolejną próbą wywołania.
Zobacz MCP i Backendy CLI, aby poznać zachowanie runtime.
Skills
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, install: { preferBrew: true, nodeManager: "npm", // npm | pnpm | yarn | bun allowUploadedArchives: false, }, workshop: { allowSymlinkTargetWrites: false, }, entries: { "image-lab": { apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}allowBundled: opcjonalna lista dozwolonych tylko dla pakietowych Skills (zarządzane/workspace Skills bez zmian).load.extraDirs: dodatkowe współdzielone katalogi główne skills (najniższy priorytet).load.allowSymlinkTargets: zaufane rzeczywiste katalogi główne celów, do których symlinki skill mogą się rozwiązywać, gdy link znajduje się poza skonfigurowanym źródłowym katalogiem głównym.workshop.allowSymlinkTargetWrites: pozwala Skill Workshop apply pisać przez już zaufane cele symlinków (domyślnie: false).install.preferBrew: gdy true, preferuj instalatory Homebrew, gdybrewjest dostępne, przed przejściem do innych rodzajów instalatorów.install.nodeManager: preferencja instalatora node dla specyfikacjimetadata.openclaw.install(npm|pnpm|yarn|bun).install.allowUploadedArchives: zezwala zaufanym klientom Gatewayoperator.admininstalować prywatne archiwa zip przygotowane przezskills.upload.*(domyślnie: false). Włącza to tylko ścieżkę przesłanych archiwów; zwykłe instalacje ClawHub jej nie wymagają.entries.<skillKey>.enabled: falsewyłącza skill, nawet jeśli jest pakietowy/zainstalowany.entries.<skillKey>.apiKey: udogodnienie dla skills deklarujących podstawową zmienną env (jawny ciąg tekstowy albo obiekt SecretRef).
Pluginy
{ plugins: { enabled: true, allow: ["voice-call"], deny: [], load: { paths: ["~/Projects/oss/voice-call-plugin"], }, entries: { "voice-call": { enabled: true, hooks: { allowPromptInjection: false, }, config: { provider: "twilio" }, }, }, },}- Ładowane z katalogów pakietów lub pakietów wbudowanych pod
~/.openclaw/extensionsi<workspace>/.openclaw/extensions, plus pliki lub katalogi wymienione wplugins.load.paths. - Samodzielne pliki pluginów umieszczaj w
plugins.load.paths; automatycznie wykrywane katalogi główne rozszerzeń ignorują pliki.js,.mjsi.tsnajwyższego poziomu, aby skrypty pomocnicze w tych katalogach nie blokowały uruchamiania. - Wykrywanie akceptuje natywne pluginy OpenClaw oraz zgodne pakiety Codex i pakiety Claude, w tym bezmanifestowe pakiety Claude w domyślnym układzie.
- Zmiany konfiguracji wymagają restartu gatewaya.
allow: opcjonalna lista dozwolonych (ładują się tylko wymienione pluginy).denyma pierwszeństwo.plugins.entries.<id>.apiKey: wygodne pole klucza API na poziomie pluginu (gdy jest obsługiwane przez plugin).plugins.entries.<id>.env: mapa zmiennych środowiskowych o zakresie pluginu.plugins.entries.<id>.hooks.allowPromptInjection: gdyfalse, rdzeń blokujebefore_prompt_buildi ignoruje pola modyfikujące prompt ze starszegobefore_agent_start, zachowując jednocześnie starszemodelOverrideiproviderOverride. Dotyczy natywnych hooków pluginów i obsługiwanych katalogów hooków dostarczanych przez pakiety.plugins.entries.<id>.hooks.allowConversationAccess: gdytrue, zaufane niewbudowane pluginy mogą odczytywać surową treść konwersacji z typowanych hooków, takich jakllm_input,llm_output,before_model_resolve,before_agent_reply,before_agent_run,before_agent_finalizeiagent_end.plugins.entries.<id>.subagent.allowModelOverride: wyraźnie zaufaj temu pluginowi, aby mógł żądać nadpisańproviderimodeldla pojedynczych uruchomień subagentów w tle.plugins.entries.<id>.subagent.allowedModels: opcjonalna lista dozwolonych kanonicznych celówprovider/modeldla zaufanych nadpisań subagentów. Użyj"*"tylko wtedy, gdy celowo chcesz zezwolić na dowolny model.plugins.entries.<id>.llm.allowModelOverride: wyraźnie zaufaj temu pluginowi, aby mógł żądać nadpisań modelu dlaapi.runtime.llm.complete.plugins.entries.<id>.llm.allowedModels: opcjonalna lista dozwolonych kanonicznych celówprovider/modeldla zaufanych nadpisań uzupełniania LLM przez plugin. Użyj"*"tylko wtedy, gdy celowo chcesz zezwolić na dowolny model.plugins.entries.<id>.llm.allowAgentIdOverride: wyraźnie zaufaj temu pluginowi, aby mógł uruchamiaćapi.runtime.llm.completedla niedomyślnego identyfikatora agenta.plugins.entries.<id>.config: obiekt konfiguracji zdefiniowany przez plugin (walidowany przez schemat natywnego pluginu OpenClaw, gdy jest dostępny).- Ustawienia konta/czasu wykonania pluginu kanału znajdują się pod
channels.<id>i powinny być opisane przez metadanechannelConfigsw manifeście pluginu właściciela, a nie przez centralny rejestr opcji OpenClaw.
Konfiguracja pluginu harness Codex
Wbudowany plugin codex jest właścicielem natywnych ustawień harnessa serwera aplikacji Codex pod
plugins.entries.codex.config. Pełną powierzchnię konfiguracji znajdziesz w
odniesieniu harnessa Codex, a model czasu wykonania w harnessie Codex.
codexPlugins ma zastosowanie tylko do sesji, które wybierają natywny harness Codex.
Nie włącza pluginów Codex dla uruchomień dostawcy OpenClaw, powiązań konwersacji ACP
ani żadnego harnessa innego niż Codex.
{ plugins: { entries: { codex: { enabled: true, config: { codexPlugins: { enabled: true, allow_destructive_actions: true, plugins: { "google-calendar": { enabled: true, marketplaceName: "openai-curated", pluginName: "google-calendar", allow_destructive_actions: false, }, }, }, }, }, }, },}plugins.entries.codex.config.codexPlugins.enabled: włącza natywną obsługę pluginów/aplikacji Codex dla harnessa Codex. Domyślnie:false.plugins.entries.codex.config.codexPlugins.allow_destructive_actions: domyślna polityka działań destrukcyjnych dla zmigrowanych wywołań aplikacji pluginów. Użyjtrue, aby akceptować bezpieczne schematy zatwierdzania Codex bez pytania,false, aby je odrzucać,"auto", aby kierować wymagane przez Codex zatwierdzenia przez zatwierdzenia pluginów OpenClaw, albo"ask", aby pytać o każdą akcję zapisu/destrukcyjną pluginu bez trwałego zatwierdzenia. Tryb"ask"czyści trwałe nadpisania zatwierdzeń Codex dla poszczególnych narzędzi w danej aplikacji i wybiera recenzenta ludzkich zatwierdzeń dla tej aplikacji przed uruchomieniem wątku Codex. Domyślnie:true.plugins.entries.codex.config.codexPlugins.plugins.<key>.enabled: włącza zmigrowany wpis pluginu, gdy globalnecodexPlugins.enabledrównież ma wartość true. Domyślnie:truedla jawnych wpisów.plugins.entries.codex.config.codexPlugins.plugins.<key>.marketplaceName: stabilna tożsamość marketplace. V1 obsługuje tylko"openai-curated".plugins.entries.codex.config.codexPlugins.plugins.<key>.pluginName: stabilna tożsamość pluginu Codex z migracji, na przykład"google-calendar".plugins.entries.codex.config.codexPlugins.plugins.<key>.allow_destructive_actions: nadpisanie działań destrukcyjnych dla danego pluginu. Gdy pominięte, używana jest globalna wartośćallow_destructive_actions. Wartość na poziomie pluginu akceptuje te same politykitrue,false,"auto"lub"ask".
Każda dopuszczona aplikacja pluginu, która używa "ask", kieruje żądania zatwierdzeń tej aplikacji
do ludzkiego recenzenta. Inne aplikacje i zatwierdzenia wątków niebędących aplikacjami zachowują
skonfigurowanego recenzenta, więc mieszane polityki pluginów nie dziedziczą zachowania "ask".
codexPlugins.enabled to globalna dyrektywa włączenia. Jawne wpisy pluginów
zapisane przez migrację są trwałym zestawem uprawnień do instalacji i naprawy.
plugins["*"] nie jest obsługiwane, nie ma przełącznika install, a lokalne
wartości marketplacePath celowo nie są polami konfiguracji, ponieważ są
zależne od hosta.
Kontrole gotowości app/list są buforowane przez jedną godzinę i odświeżane
asynchronicznie, gdy stają się nieaktualne. Konfiguracja aplikacji wątku Codex jest obliczana przy ustanawianiu sesji harnessa Codex,
a nie przy każdym przebiegu; po zmianie natywnej konfiguracji pluginu użyj /new, /reset albo zrestartuj Gateway.
plugins.entries.firecrawl.config.webFetch: ustawienia dostawcy web-fetch Firecrawl.apiKey: opcjonalny klucz API Firecrawl dla wyższych limitów (akceptuje SecretRef). W razie braku używaplugins.entries.firecrawl.config.webSearch.apiKey, starszegotools.web.fetch.firecrawl.apiKeyalbo zmiennej środowiskowejFIRECRAWL_API_KEY.baseUrl: bazowy URL API Firecrawl (domyślnie:https://api.firecrawl.dev; nadpisania self-hosted muszą wskazywać prywatne/wewnętrzne endpointy).onlyMainContent: wyodrębniaj tylko główną treść ze stron (domyślnie:true).maxAgeMs: maksymalny wiek cache w milisekundach (domyślnie:172800000/ 2 dni).timeoutSeconds: limit czasu żądania scrape w sekundach (domyślnie:60).
plugins.entries.xai.config.xSearch: ustawienia xAI X Search (wyszukiwanie web Grok).enabled: włącz dostawcę X Search.model: model Grok używany do wyszukiwania (np."grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: ustawienia memory dreaming. Zobacz Dreaming, aby poznać fazy i progi.enabled: główny przełącznik dreaming (domyślniefalse).frequency: kadencja cron dla każdego pełnego przebiegu dreaming ("0 3 * * *"domyślnie).model: opcjonalne nadpisanie modelu subagenta Dream Diary. Wymagaplugins.entries.memory-core.subagent.allowModelOverride: true; sparuj zallowedModels, aby ograniczyć cele. Błędy niedostępności modelu ponawiają próbę raz z domyślnym modelem sesji; błędy zaufania lub listy dozwolonych nie przechodzą po cichu do wartości zastępczej.- polityka faz i progi są szczegółami implementacyjnymi (nie są kluczami konfiguracji widocznymi dla użytkownika).
- Pełna konfiguracja pamięci znajduje się w odniesieniu konfiguracji pamięci:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Włączone pluginy pakietów Claude mogą też dostarczać osadzone domyślne ustawienia OpenClaw z
settings.json; OpenClaw stosuje je jako oczyszczone ustawienia agenta, a nie jako surowe poprawki konfiguracji OpenClaw. plugins.slots.memory: wybierz identyfikator aktywnego pluginu pamięci albo"none", aby wyłączyć pluginy pamięci.plugins.slots.contextEngine: wybierz identyfikator aktywnego pluginu silnika kontekstu; domyślnie"legacy", chyba że zainstalujesz i wybierzesz inny silnik.
Zobacz Pluginy.
Zobowiązania
commitments kontroluje wywnioskowaną pamięć działań następczych: OpenClaw może wykrywać check-iny z przebiegów konwersacji i dostarczać je przez przebiegi heartbeat.
commitments.enabled: włącz ukrytą ekstrakcję LLM, przechowywanie i dostarczanie przez heartbeat wywnioskowanych zobowiązań działań następczych. Domyślnie:false.commitments.maxPerDay: maksymalna liczba wywnioskowanych zobowiązań działań następczych dostarczanych na sesję agenta w ruchomym dniu. Domyślnie:3.
Zobacz Wywnioskowane zobowiązania.
Przeglądarka
{ browser: { enabled: true, evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, tabCleanup: { enabled: true, idleMinutes: 120, maxTabsPerSession: 8, sweepMinutes: 5, }, profiles: { openclaw: { cdpPort: 18800, color: "#FF4500" }, work: { cdpPort: 18801, color: "#0066CC", executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", }, user: { driver: "existing-session", attachOnly: true, color: "#00AA00" }, brave: { driver: "existing-session", attachOnly: true, userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser", color: "#FB542B", }, remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }, }, color: "#FF4500", // headless: false, // noSandbox: false, // extraArgs: [], // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", // attachOnly: false, },}evaluateEnabled: falsewyłączaact:evaluateiwait --fn.tabCleanupodzyskuje śledzone karty głównego agenta po czasie bezczynności lub gdy sesja przekroczy swój limit. UstawidleMinutes: 0lubmaxTabsPerSession: 0, aby wyłączyć te poszczególne tryby czyszczenia.ssrfPolicy.dangerouslyAllowPrivateNetworkjest wyłączone, gdy nie jest ustawione, więc nawigacja przeglądarki domyślnie pozostaje restrykcyjna.- Ustaw
ssrfPolicy.dangerouslyAllowPrivateNetwork: truetylko wtedy, gdy celowo ufasz nawigacji przeglądarki w sieci prywatnej. - W trybie ścisłym zdalne punkty końcowe profili CDP (
profiles.*.cdpUrl) podlegają temu samemu blokowaniu sieci prywatnej podczas sprawdzania osiągalności/wykrywania. ssrfPolicy.allowPrivateNetworkpozostaje obsługiwane jako starszy alias.- W trybie ścisłym używaj
ssrfPolicy.hostnameAllowlistissrfPolicy.allowedHostnamesdo jawnych wyjątków. - Profile zdalne działają tylko w trybie dołączania (start/stop/reset wyłączone).
profiles.*.cdpUrlakceptujehttp://,https://,ws://iwss://. Użyj HTTP(S), gdy chcesz, aby OpenClaw wykrył/json/version; użyj WS(S), gdy dostawca podaje bezpośredni URL WebSocket DevTools.remoteCdpTimeoutMsiremoteCdpHandshakeTimeoutMsdotyczą zdalnej orazattachOnlyosiągalności CDP, a także żądań otwierania kart. Zarządzane profile loopback zachowują lokalne wartości domyślne CDP.- Jeśli zewnętrznie zarządzana usługa CDP jest osiągalna przez loopback, ustaw dla tego
profilu
attachOnly: true; w przeciwnym razie OpenClaw potraktuje port loopback jako lokalny zarządzany profil przeglądarki i może zgłaszać błędy własności portu lokalnego. - Profile
existing-sessionużywają Chrome MCP zamiast CDP i mogą dołączać na wybranym hoście albo przez połączony węzeł przeglądarki. - Profile
existing-sessionmogą ustawićuserDataDir, aby wskazać konkretny profil przeglądarki opartej na Chromium, taki jak Brave lub Edge. - Profile
existing-sessionmogą ustawićcdpUrl, gdy Chrome już działa za punktem końcowym wykrywania DevTools HTTP(S) albo bezpośrednim punktem końcowym WS(S). W tym trybie OpenClaw przekazuje punkt końcowy do Chrome MCP zamiast używać automatycznego połączenia;userDataDirjest ignorowane dla argumentów uruchomienia Chrome MCP. - Profile
existing-sessionzachowują bieżące ograniczenia trasy Chrome MCP: akcje oparte na migawkach/ref zamiast celowania selektorami CSS, hooki przesyłania jednego pliku, brak nadpisań limitu czasu dialogów, brakwait --load networkidleoraz brakresponsebody, eksportu PDF, przechwytywania pobrań ani akcji wsadowych. - Lokalne zarządzane profile
openclawautomatycznie przypisującdpPorticdpUrl; ustawcdpUrljawnie tylko dla zdalnych profili CDP lub dołączania punktu końcowego istniejącej sesji. - Lokalne zarządzane profile mogą ustawić
executablePath, aby nadpisać globalnebrowser.executablePathdla tego profilu. Użyj tego, aby uruchomić jeden profil w Chrome, a drugi w Brave. - Lokalne zarządzane profile używają
browser.localLaunchTimeoutMsdo wykrywania HTTP Chrome CDP po uruchomieniu procesu orazbrowser.localCdpReadyTimeoutMsdo gotowości websocket CDP po uruchomieniu. Zwiększ je na wolniejszych hostach, gdzie Chrome uruchamia się poprawnie, ale sprawdzenia gotowości ścigają się ze startem. Obie wartości muszą być dodatnimi liczbami całkowitymi do120000ms; nieprawidłowe wartości konfiguracji są odrzucane. - Kolejność automatycznego wykrywania: domyślna przeglądarka, jeśli oparta na Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
browser.executablePathibrowser.profiles.<name>.executablePathakceptują zarówno~, jak i~/...dla katalogu domowego systemu operacyjnego przed uruchomieniem Chromium.userDataDirdla profilu w profilachexisting-sessionrównież rozwija tyldę.- Usługa sterowania: tylko loopback (port wyprowadzany z
gateway.port, domyślnie18791). extraArgsdołącza dodatkowe flagi uruchomieniowe do lokalnego startu Chromium (na przykład--disable-gpu, rozmiar okna lub flagi debugowania).
Interfejs użytkownika
{ ui: { seamColor: "#FF4500", assistant: { name: "OpenClaw", avatar: "CB", // emoji, short text, image URL, or data URI }, },}seamColor: kolor akcentu dla obramowania interfejsu natywnej aplikacji (odcień dymku Talk Mode itd.).assistant: nadpisanie tożsamości Control UI. W razie braku używa tożsamości aktywnego agenta.
Gateway
{ gateway: { mode: "local", // local | remote port: 18789, bind: "loopback", auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", // password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD // trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000, exemptLoopback: true, }, }, tailscale: { mode: "off", // off | serve | funnel resetOnExit: false, }, controlUi: { enabled: true, basePath: "/openclaw", // root: "dist/control-ui", // embedSandbox: "scripts", // strict | scripts | trusted // allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs // chatMessageMaxWidth: "min(1280px, 82%)", // optional grouped chat message max-width // allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI // dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, remote: { url: "ws://127.0.0.1:18789", transport: "ssh", // ssh | direct token: "your-token", // password: "your-password", }, trustedProxies: ["10.0.0.1"], // Optional. Default false. allowRealIpFallback: false, nodes: { pairing: { // Optional. Default unset/disabled. autoApproveCidrs: ["192.168.1.0/24", "fd00:1234:5678::/64"], }, allowCommands: ["canvas.navigate"], denyCommands: ["system.run"], }, tools: { // Additional /tools/invoke HTTP denies deny: ["browser"], // Remove tools from the default HTTP deny list for owner/admin callers allow: ["gateway"], }, push: { apns: { relay: { baseUrl: "https://relay.example.com", timeoutMs: 10000, }, }, }, },}Szczegóły pól Gateway
mode:local(uruchom Gateway) lubremote(połącz ze zdalnym Gateway). Gateway odmawia uruchomienia, chyba że ustawionolocal.port: pojedynczy multipleksowany port dla WS + HTTP. Priorytet:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(domyślnie),lan(0.0.0.0),tailnet(tylko adres IP Tailscale) lubcustom.- Starsze aliasy bind: używaj wartości trybu bind w
gateway.bind(auto,loopback,lan,tailnet,custom), nie aliasów hosta (0.0.0.0,127.0.0.1,localhost,::,::1). - Uwaga dotycząca Docker: domyślne powiązanie
loopbacknasłuchuje na127.0.0.1wewnątrz kontenera. Przy sieci mostkowej Docker (-p 18789:18789) ruch przychodzi przezeth0, więc Gateway jest nieosiągalny. Użyj--network hostalbo ustawbind: "lan"(lubbind: "custom"zcustomBindHost: "0.0.0.0"), aby nasłuchiwać na wszystkich interfejsach. - Uwierzytelnianie: domyślnie wymagane. Powiązania inne niż loopback wymagają uwierzytelniania Gateway. W praktyce oznacza to współdzielony token/hasło albo reverse proxy rozpoznające tożsamość z
gateway.auth.mode: "trusted-proxy". Kreator wdrożenia domyślnie generuje token. - Jeśli skonfigurowano zarówno
gateway.auth.token, jak igateway.auth.password(w tym SecretRefs), ustaw jawniegateway.auth.modenatokenalbopassword. Uruchamianie oraz przepływy instalacji/naprawy usługi kończą się błędem, gdy oba są skonfigurowane, a tryb nie jest ustawiony. gateway.auth.mode: "none": jawny tryb bez uwierzytelniania. Używaj tylko w zaufanych konfiguracjach local loopback; celowo nie jest oferowany przez monity wdrożenia.gateway.auth.mode: "trusted-proxy": deleguje uwierzytelnianie przeglądarki/użytkownika do reverse proxy rozpoznającego tożsamość i ufa nagłówkom tożsamości zgateway.trustedProxies(zobacz Uwierzytelnianie przez zaufane proxy). Ten tryb domyślnie oczekuje źródła proxy innego niż loopback; odwrotne proxy loopback na tym samym hoście wymagają jawnegogateway.auth.trustedProxy.allowLoopback = true. Wewnętrzni wywołujący z tego samego hosta mogą użyćgateway.auth.passwordjako lokalnego bezpośredniego fallbacku;gateway.auth.tokenpozostaje wzajemnie wykluczone z trybem trusted-proxy.gateway.auth.allowTailscale: gdytrue, nagłówki tożsamości Tailscale Serve mogą spełnić uwierzytelnianie Control UI/WebSocket (weryfikowane przeztailscale whois). Punkty końcowe HTTP API nie używają tego uwierzytelniania z nagłówka Tailscale; zamiast tego podążają za normalnym trybem uwierzytelniania HTTP Gateway. Ten bez-tokenowy przepływ zakłada, że host Gateway jest zaufany. Domyślnietrue, gdytailscale.mode = "serve".gateway.auth.rateLimit: opcjonalny limiter nieudanych uwierzytelnień. Stosowany per adres IP klienta i per zakres uwierzytelniania (shared-secret i device-token są śledzone niezależnie). Zablokowane próby zwracają429+Retry-After.- Na asynchronicznej ścieżce Tailscale Serve Control UI nieudane próby dla tego samego
{scope, clientIp}są serializowane przed zapisem błędu. Równoczesne błędne próby od tego samego klienta mogą więc uruchomić limiter przy drugim żądaniu, zamiast obu przejść równolegle jako zwykłe niezgodności. gateway.auth.rateLimit.exemptLoopbackdomyślnie ma wartośćtrue; ustawfalse, gdy celowo chcesz ograniczać tempo także ruchu localhost (dla konfiguracji testowych lub rygorystycznych wdrożeń proxy).- Próby uwierzytelniania WS z originu przeglądarki są zawsze ograniczane, z wyłączonym zwolnieniem dla loopback (obrona warstwowa przed brute force localhost z przeglądarki).
- Na loopback te blokady originu przeglądarki są izolowane per znormalizowana wartość
Origin, więc powtarzające się niepowodzenia z jednego originu localhost nie blokują automatycznie innego originu. tailscale.mode:serve(tylko tailnet, bind loopback) lubfunnel(publiczny, wymaga uwierzytelniania).tailscale.serviceName: opcjonalna nazwa usługi Tailscale dla trybu Serve, taka jaksvc:openclaw. Gdy jest ustawiona, OpenClaw przekazuje ją dotailscale serve --service, aby Control UI można było wystawić przez nazwaną usługę zamiast nazwy hosta urządzenia. Wartość musi używać formatu nazwy usługi Tailscalesvc:<dns-label>; uruchamianie zgłasza wyprowadzony URL usługi.tailscale.preserveFunnel: gdytrueitailscale.mode = "serve", OpenClaw sprawdzatailscale funnel statusprzed ponownym zastosowaniem Serve przy uruchamianiu i pomija je, jeśli zewnętrznie skonfigurowana trasa Funnel już obejmuje port Gateway. Domyślniefalse.controlUi.allowedOrigins: jawna lista dozwolonych originów przeglądarki dla połączeń Gateway WebSocket. Wymagana dla publicznych originów przeglądarki innych niż loopback. Prywatne ładowania UI z tego samego originu w LAN/Tailnet z hostów loopback, RFC1918/link-local,.local,.ts.netlub Tailscale CGNAT są akceptowane bez włączania fallbacku nagłówka Host.controlUi.chatMessageMaxWidth: opcjonalna maksymalna szerokość dla grupowanych wiadomości czatu Control UI. Akceptuje ograniczone wartości szerokości CSS, takie jak960px,82%,min(1280px, 82%)icalc(100% - 2rem).controlUi.dangerouslyAllowHostHeaderOriginFallback: niebezpieczny tryb, który włącza fallback originu z nagłówka Host dla wdrożeń celowo polegających na polityce originu z nagłówka Host.remote.transport:ssh(domyślnie) lubdirect(ws/wss). Dladirectremote.urlmusi byćwss://dla hostów publicznych; tekst jawnyws://jest akceptowany tylko dla loopback, LAN, link-local,.local,.ts.neti hostów Tailscale CGNAT.remote.remotePort: port Gateway na zdalnym hoście SSH. Domyślnie18789; użyj tego, gdy lokalny port tunelu różni się od zdalnego portu Gateway.remote.sshHostKeyPolicy: polityka klucza hosta tunelu SSH w macOS.strictjest domyślne i wymaga już zaufanego klucza.opensshto jawne włączenie efektywnej konfiguracji OpenSSH dla zarządzanych aliasów; przed użyciem przejrzyj pasujące ustawienia SSH użytkownika i systemu. Aplikacja macOS iconfigure-remoteresetują tę politykę dostrictprzy zmianie celów, chyba że zostanie ponownie jawnie włączona.gateway.remote.token/.passwordto pola poświadczeń zdalnego klienta. Same nie konfigurują uwierzytelniania Gateway.gateway.push.apns.relay.baseUrl: bazowy URL HTTPS dla zewnętrznego przekaźnika APNs używanego po tym, jak kompilacje iOS wspierane przekaźnikiem opublikują rejestracje do Gateway. Publiczne kompilacje App Store używają hostowanego przekaźnika OpenClaw. Niestandardowe URL-e przekaźnika muszą odpowiadać celowo oddzielnej ścieżce kompilacji/wdrożenia iOS, której URL przekaźnika wskazuje na ten przekaźnik.gateway.push.apns.relay.timeoutMs: limit czasu wysyłki z Gateway do przekaźnika w milisekundach. Domyślnie10000.- Rejestracje wspierane przekaźnikiem są delegowane do konkretnej tożsamości Gateway. Sparowana aplikacja iOS pobiera
gateway.identity.get, dołącza tę tożsamość do rejestracji przekaźnika i przekazuje do Gateway grant wysyłki ograniczony do rejestracji. Inny Gateway nie może ponownie użyć tej zapisanej rejestracji. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: tymczasowe nadpisania zmiennych środowiskowych dla powyższej konfiguracji przekaźnika.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: wyjście awaryjne tylko deweloperskie dla URL-i przekaźnika HTTP loopback. Produkcyjne URL-e przekaźnika powinny pozostać na HTTPS.gateway.handshakeTimeoutMs: limit czasu uzgadniania Gateway WebSocket przed uwierzytelnieniem, w milisekundach. Domyślnie:15000.OPENCLAW_HANDSHAKE_TIMEOUT_MSma pierwszeństwo, gdy jest ustawione. Zwiększ tę wartość na obciążonych lub słabszych hostach, gdzie lokalni klienci mogą połączyć się, gdy rozgrzewka uruchamiania jeszcze się stabilizuje.gateway.channelHealthCheckMinutes: interwał monitora kondycji kanałów w minutach. Ustaw0, aby globalnie wyłączyć restarty monitora kondycji. Domyślnie:5.gateway.channelStaleEventThresholdMinutes: próg nieaktualnego gniazda w minutach. Utrzymuj go większy lub równygateway.channelHealthCheckMinutes. Domyślnie:30.gateway.channelMaxRestartsPerHour: maksymalna liczba restartów monitora kondycji per kanał/konto w kroczącym oknie jednej godziny. Domyślnie:10.channels.<provider>.healthMonitor.enabled: rezygnacja per kanał z restartów monitora kondycji przy zachowaniu włączonego globalnego monitora.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: nadpisanie per konto dla kanałów wielokontowych. Gdy jest ustawione, ma pierwszeństwo przed nadpisaniem na poziomie kanału.- Lokalne ścieżki wywołań Gateway mogą używać
gateway.remote.*jako fallbacku tylko wtedy, gdygateway.auth.*nie jest ustawione. - Jeśli
gateway.auth.token/gateway.auth.passwordjest jawnie skonfigurowane przez SecretRef i nierozwiązane, rozwiązywanie kończy się w trybie zamkniętym (bez maskowania przez zdalny fallback). trustedProxies: adresy IP reverse proxy, które kończą TLS lub wstrzykują nagłówki przekazanego klienta. Wymieniaj tylko proxy, które kontrolujesz. Wpisy loopback nadal są prawidłowe dla konfiguracji proxy/wykrywania lokalnego na tym samym hoście (na przykład Tailscale Serve lub lokalne reverse proxy), ale nie czynią żądań loopback kwalifikującymi się dogateway.auth.mode: "trusted-proxy".allowRealIpFallback: gdytrue, Gateway akceptujeX-Real-IP, jeśli brakujeX-Forwarded-For. Domyślniefalsedla zachowania fail-closed.gateway.nodes.pairing.autoApproveCidrs: opcjonalna lista dozwolonych CIDR/IP do automatycznego zatwierdzania pierwszego parowania urządzenia węzła bez żądanych zakresów. Jest wyłączona, gdy nie jest ustawiona. Nie zatwierdza automatycznie parowania operatora/przeglądarki/Control UI/WebChat i nie zatwierdza automatycznie roli, zakresu, metadanych ani aktualizacji klucza publicznego.gateway.nodes.allowCommands/gateway.nodes.denyCommands: globalne kształtowanie allow/deny dla zadeklarowanych poleceń węzłów po sparowaniu i ocenie listy dozwolonych platformy. UżyjallowCommands, aby włączyć niebezpieczne polecenia węzłów, takie jakcamera.snap,camera.clipiscreen.record;denyCommandsusuwa polecenie, nawet jeśli domyślna wartość platformy lub jawne zezwolenie inaczej by je obejmowały. Po zmianie przez węzeł zadeklarowanej listy poleceń odrzuć i ponownie zatwierdź parowanie tego urządzenia, aby Gateway zapisał zaktualizowaną migawkę poleceń.gateway.tools.deny: dodatkowe nazwy narzędzi blokowane dla HTTPPOST /tools/invoke(rozszerza domyślną listę odmów).gateway.tools.allow: usuwa nazwy narzędzi z domyślnej listy odmów HTTP dla wywołujących właściciela/administratora. Nie podnosi wywołujących z tożsamościąoperator.writedo dostępu właściciela/administratora;cron,gatewayinodespozostają niedostępne dla wywołujących niebędących właścicielami, nawet gdy są na liście dozwolonych.
Punkty końcowe zgodne z OpenAI
- Administracyjne HTTP RPC: domyślnie wyłączone jako Plugin
admin-http-rpc. Włącz Plugin, aby zarejestrowaćPOST /api/v1/admin/rpc. Zobacz Administracyjne HTTP RPC. - Uzupełnienia czatu: domyślnie wyłączone. Włącz przez
gateway.http.endpoints.chatCompletions.enabled: true. - API Responses:
gateway.http.endpoints.responses.enabled. - Wzmocnienie wejścia URL dla Responses:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistPuste listy dozwolone są traktowane jako nieustawione; użyjgateway.http.endpoints.responses.files.allowUrl=falsei/lubgateway.http.endpoints.responses.images.allowUrl=false, aby wyłączyć pobieranie URL-i.
- Opcjonalny nagłówek wzmacniający odpowiedź:
gateway.http.securityHeaders.strictTransportSecurity(ustawiaj tylko dla originów HTTPS, które kontrolujesz; zobacz Uwierzytelnianie przez zaufane proxy)
Izolacja wielu instancji
Uruchom wiele Gateway na jednym hoście z unikalnymi portami i katalogami stanu:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \OPENCLAW_STATE_DIR=~/.openclaw-a \openclaw gateway --port 19001Wygodne flagi: --dev (używa ~/.openclaw-dev + portu 19001), --profile <name> (używa ~/.openclaw-<name>).
Zobacz Wiele Gateway.
gateway.tls
{ gateway: { tls: { enabled: false, autoGenerate: false, certPath: "/etc/openclaw/tls/server.crt", keyPath: "/etc/openclaw/tls/server.key", caPath: "/etc/openclaw/tls/ca-bundle.crt", }, },}enabled: włącza terminację TLS na listenerze Gateway (HTTPS/WSS) (domyślnie:false).autoGenerate: automatycznie generuje lokalną parę samopodpisanego certyfikatu/klucza, gdy jawne pliki nie są skonfigurowane; tylko do użytku lokalnego/deweloperskiego.certPath: ścieżka w systemie plików do pliku certyfikatu TLS.keyPath: ścieżka w systemie plików do pliku klucza prywatnego TLS; zachowaj ograniczone uprawnienia.caPath: opcjonalna ścieżka pakietu CA do weryfikacji klienta lub niestandardowych łańcuchów zaufania.
gateway.reload
{ gateway: { reload: { mode: "hybrid", // off | restart | hot | hybrid debounceMs: 500, deferralTimeoutMs: 300000, }, },}mode: kontroluje sposób stosowania zmian konfiguracji w czasie działania."off": ignoruje zmiany na żywo; zmiany wymagają jawnego restartu."restart": zawsze restartuje proces Gateway po zmianie konfiguracji."hot": stosuje zmiany w procesie bez restartu."hybrid"(domyślnie): najpierw próbuje przeładowania na gorąco; w razie potrzeby wraca do restartu.
debounceMs: okno debounce w ms przed zastosowaniem zmian konfiguracji (nieujemna liczba całkowita).deferralTimeoutMs: opcjonalny maksymalny czas oczekiwania w ms na operacje w toku przed wymuszeniem restartu lub przeładowania kanału na gorąco. Pomiń, aby użyć domyślnego ograniczonego oczekiwania (300000); ustaw0, aby czekać bezterminowo i okresowo logować ostrzeżenia o wciąż oczekujących operacjach.
Hooki
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", maxBodyBytes: 262144, defaultSessionKey: "hook:ingress", allowRequestSessionKey: true, allowedSessionKeyPrefixes: ["hook:", "hook:gmail:"], allowedAgentIds: ["hooks", "main"], presets: ["gmail"], transformsDir: "~/.openclaw/hooks/transforms", mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "hooks", wakeMode: "now", name: "Gmail", sessionKey: "hook:gmail:{{messages[0].id}}", messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}", deliver: true, channel: "last", model: "openai/gpt-5.4-mini", }, ], },}Uwierzytelnianie: Authorization: Bearer <token> lub x-openclaw-token: <token>.
Tokeny hooków w ciągu zapytania są odrzucane.
Uwagi dotyczące walidacji i bezpieczeństwa:
hooks.enabled=truewymaga niepustegohooks.token.hooks.tokenpowinien różnić się od aktywnego współdzielonego sekretu uwierzytelniania Gateway (gateway.auth.token/OPENCLAW_GATEWAY_TOKENlubgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD); podczas startu logowane jest niekrytyczne ostrzeżenie bezpieczeństwa, gdy wykryte zostanie ponowne użycie.openclaw security auditoznacza ponowne użycie uwierzytelniania hook/Gateway jako krytyczne znalezisko, w tym uwierzytelnianie hasłem Gateway podane tylko w czasie audytu (--auth password --password <password>). Uruchomopenclaw doctor --fix, aby zrotować utrwalony ponownie użytyhooks.token, a następnie zaktualizuj zewnętrznych nadawców hooków, aby używali nowego tokenu hooka.hooks.pathnie może być/; użyj dedykowanej podścieżki, takiej jak/hooks.- Jeśli
hooks.allowRequestSessionKey=true, ograniczhooks.allowedSessionKeyPrefixes(na przykład["hook:"]). - Jeśli mapowanie lub preset używa szablonowego
sessionKey, ustawhooks.allowedSessionKeyPrefixesorazhooks.allowRequestSessionKey=true. Statyczne klucze mapowania nie wymagają takiej zgody.
Punkty końcowe:
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }sessionKeyz danych żądania jest akceptowany tylko wtedy, gdyhooks.allowRequestSessionKey=true(domyślnie:false).
POST /hooks/<name>→ rozwiązywane przezhooks.mappings- Wartości
sessionKeymapowania renderowane z szablonu są traktowane jako dostarczone z zewnątrz i również wymagająhooks.allowRequestSessionKey=true.
- Wartości
Mapping details
match.pathdopasowuje podścieżkę po/hooks(np./hooks/gmail→gmail).match.sourcedopasowuje pole danych dla ścieżek ogólnych.- Szablony takie jak
{{messages[0].subject}}odczytują dane z payloadu. transformmoże wskazywać moduł JS/TS zwracający akcję hooka.transform.modulemusi być ścieżką względną i pozostaje w obrębiehooks.transformsDir(ścieżki bezwzględne i przechodzenie poza katalog są odrzucane).- Trzymaj
hooks.transformsDirpod~/.openclaw/hooks/transforms; katalogi Skills w przestrzeni roboczej są odrzucane. Jeśliopenclaw doctorzgłasza tę ścieżkę jako nieprawidłową, przenieś moduł transformacji do katalogu transformacji hooków albo usuńhooks.transformsDir. agentIdkieruje do konkretnego agenta; nieznane identyfikatory wracają do domyślnego agenta.allowedAgentIds: ogranicza efektywne kierowanie agentów, w tym ścieżkę domyślnego agenta, gdyagentIdjest pominięte (*lub pominięte = zezwól na wszystkie,[]= odmów wszystkim).defaultSessionKey: opcjonalny stały klucz sesji dla uruchomień agenta z hooka bez jawnegosessionKey.allowRequestSessionKey: pozwala wywołującym/hooks/agentoraz kluczom sesji mapowania sterowanym szablonami ustawiaćsessionKey(domyślnie:false).allowedSessionKeyPrefixes: opcjonalna lista dozwolonych prefiksów dla jawnych wartościsessionKey(żądanie + mapowanie), np.["hook:"]. Staje się wymagana, gdy dowolne mapowanie lub preset używa szablonowegosessionKey.deliver: truewysyła końcową odpowiedź do kanału;channeldomyślnie przyjmujelast.modelnadpisuje LLM dla tego uruchomienia hooka (musi być dozwolony, jeśli ustawiono katalog modeli).
Integracja Gmail
- Wbudowany preset Gmail używa
sessionKey: "hook:gmail:{{messages[0].id}}". - Jeśli zachowujesz to kierowanie według wiadomości, ustaw
hooks.allowRequestSessionKey: truei ograniczhooks.allowedSessionKeyPrefixes, aby pasowało do przestrzeni nazw Gmail, na przykład["hook:", "hook:gmail:"]. - Jeśli potrzebujesz
hooks.allowRequestSessionKey: false, nadpisz preset statycznymsessionKeyzamiast szablonowej wartości domyślnej.
{ hooks: { gmail: { account: "openclaw@gmail.com", topic: "projects/<project-id>/topics/gog-gmail-watch", subscription: "gog-gmail-watch-push", pushToken: "shared-push-token", hookUrl: "http://127.0.0.1:18789/hooks/gmail", includeBody: true, maxBytes: 20000, renewEveryMinutes: 720, serve: { bind: "127.0.0.1", port: 8788, path: "/" }, tailscale: { mode: "funnel", path: "/gmail-pubsub" }, model: "openrouter/meta-llama/llama-3.3-70b-instruct:free", thinking: "off", }, },}- Gateway automatycznie uruchamia
gog gmail watch serveprzy starcie, gdy jest skonfigurowany. UstawOPENCLAW_SKIP_GMAIL_WATCHER=1, aby wyłączyć. - Nie uruchamiaj osobnego
gog gmail watch serverównolegle z Gateway.
Host Pluginu Canvas
{ plugins: { entries: { canvas: { config: { host: { root: "~/.openclaw/workspace/canvas", liveReload: true, // enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1 }, }, }, }, },}- Udostępnia edytowalne przez agenta HTML/CSS/JS oraz A2UI przez HTTP pod portem Gateway:
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Tylko lokalnie: zachowaj
gateway.bind: "loopback"(domyślnie). - Powiązania inne niż loopback: trasy canvas wymagają uwierzytelniania Gateway (token/hasło/zaufany proxy), tak samo jak inne powierzchnie HTTP Gateway.
- Node WebViews zazwyczaj nie wysyłają nagłówków uwierzytelniania; po sparowaniu i połączeniu węzła Gateway ogłasza adresy URL uprawnień ograniczone do węzła dla dostępu canvas/A2UI.
- Adresy URL uprawnień są powiązane z aktywną sesją WS węzła i szybko wygasają. Awaryjny mechanizm oparty na IP nie jest używany.
- Wstrzykuje klienta przeładowania na żywo do serwowanego HTML.
- Automatycznie tworzy startowy
index.html, gdy katalog jest pusty. - Udostępnia też A2UI pod
/__openclaw__/a2ui/. - Zmiany wymagają restartu Gateway.
- Wyłącz przeładowanie na żywo dla dużych katalogów lub błędów
EMFILE.
Wykrywanie
mDNS (Bonjour)
{ discovery: { mdns: { mode: "minimal", // minimal | full | off }, },}minimal(domyślnie, gdy włączony jest dołączony Pluginbonjour): pomijacliPath+sshPortw rekordach TXT.full: uwzględniacliPath+sshPort; ogłaszanie multicast w LAN nadal wymaga włączenia dołączonego Pluginubonjour.off: wyłącza ogłaszanie multicast w LAN bez zmiany włączenia Pluginu.- Dołączony Plugin
bonjoururuchamia się automatycznie na hostach macOS i jest opcjonalny na Linuxie, Windows oraz skonteneryzowanych wdrożeniach Gateway. - Nazwa hosta domyślnie przyjmuje systemową nazwę hosta, gdy jest prawidłową etykietą DNS, w przeciwnym razie wraca do
openclaw. Nadpisz za pomocąOPENCLAW_MDNS_HOSTNAME.
Rozległe (DNS-SD)
{ discovery: { wideArea: { enabled: true }, },}Zapisuje strefę unicast DNS-SD pod ~/.openclaw/dns/. Do wykrywania między sieciami połącz z serwerem DNS (zalecany CoreDNS) + Tailscale split DNS.
Konfiguracja: openclaw dns setup --apply.
Środowisko
env (wbudowane zmienne env)
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-...", }, shellEnv: { enabled: true, timeoutMs: 15000, }, },}- Wbudowane zmienne env są stosowane tylko wtedy, gdy w środowisku procesu brakuje klucza.
- Pliki
.env:.envz CWD +~/.openclaw/.env(żaden nie nadpisuje istniejących zmiennych). shellEnv: importuje brakujące oczekiwane klucze z profilu powłoki logowania.- Zobacz Środowisko, aby poznać pełny priorytet.
Podstawianie zmiennych env
Odwołuj się do zmiennych env w dowolnym ciągu konfiguracji za pomocą ${VAR_NAME}:
{ gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" }, },}- Dopasowywane są tylko nazwy wielkimi literami:
[A-Z_][A-Z0-9_]*. - Brakujące/puste zmienne zgłaszają błąd podczas ładowania konfiguracji.
- Ucieknij za pomocą
$${VAR}, aby uzyskać dosłowne${VAR}. - Działa z
$include.
Sekrety
Referencje sekretów są addytywne: wartości jawnym tekstem nadal działają.
SecretRef
Użyj jednego kształtu obiektu:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }Walidacja:
- wzorzec
provider:^[a-z][a-z0-9_-]{0,63}$ - wzorzec id
source: "env":^[A-Z][A-Z0-9_]{0,127}$ - id
source: "file": bezwzględny wskaźnik JSON (na przykład"/providers/openai/apiKey") - wzorzec id
source: "exec":^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(obsługuje selektory w stylu AWSsecret#json_key) - identyfikatory
source: "exec"nie mogą zawierać segmentów ścieżki rozdzielonych ukośnikami.ani..(na przykłada/../bjest odrzucane)
Obsługiwana powierzchnia poświadczeń
- Kanoniczna macierz: Powierzchnia poświadczeń SecretRef
secrets applykieruje na obsługiwane ścieżki poświadczeńopenclaw.json.- Referencje
auth-profiles.jsonsą uwzględnione w rozwiązywaniu w czasie działania i pokryciu audytu.
Konfiguracja dostawców sekretów
{ secrets: { providers: { default: { source: "env" }, // optional explicit env provider filemain: { source: "file", path: "~/.openclaw/secrets.json", mode: "json", timeoutMs: 5000, }, vault: { source: "exec", command: "/usr/local/bin/openclaw-vault-resolver", passEnv: ["PATH", "VAULT_ADDR"], }, }, defaults: { env: "default", file: "filemain", exec: "vault", }, },}Uwagi:
- Dostawca
fileobsługujemode: "json"orazmode: "singleValue"(idmusi mieć wartość"value"w trybie singleValue). - Ścieżki dostawców file i exec kończą się niepowodzeniem w trybie zamkniętym, gdy weryfikacja ACL Windows jest niedostępna. Ustaw
allowInsecurePath: truetylko dla zaufanych ścieżek, których nie można zweryfikować. - Dostawca
execwymaga bezwzględnej ścieżkicommandi używa payloadów protokołu na stdin/stdout. - Domyślnie ścieżki poleceń będące symlinkami są odrzucane. Ustaw
allowSymlinkCommand: true, aby zezwolić na ścieżki symlinków przy jednoczesnej walidacji rozwiązanej ścieżki docelowej. - Jeśli skonfigurowano
trustedDirs, sprawdzenie zaufanego katalogu dotyczy rozwiązanej ścieżki docelowej. - Środowisko procesu potomnego
execjest domyślnie minimalne; jawnie przekaż wymagane zmienne za pomocąpassEnv. - Referencje sekretów są rozwiązywane w czasie aktywacji do migawki w pamięci, a następnie ścieżki żądań odczytują tylko tę migawkę.
- Filtrowanie aktywnych powierzchni ma zastosowanie podczas aktywacji: nierozwiązane referencje na włączonych powierzchniach powodują niepowodzenie startu/przeładowania, a nieaktywne powierzchnie są pomijane z diagnostyką.
Przechowywanie danych uwierzytelniania
{ auth: { profiles: { "anthropic:default": { provider: "anthropic", mode: "api_key" }, "anthropic:work": { provider: "anthropic", mode: "api_key" }, "openai:personal": { provider: "openai", mode: "oauth" }, }, order: { anthropic: ["anthropic:default", "anthropic:work"], openai: ["openai:personal"], }, },}- Profile per agenta są przechowywane w
<agentDir>/auth-profiles.json. auth-profiles.jsonobsługuje odwołania na poziomie wartości (keyRefdlaapi_key,tokenRefdlatoken) dla statycznych trybów poświadczeń.- Starsze płaskie mapy
auth-profiles.json, takie jak{ "provider": { "apiKey": "..." } }, nie są formatem runtime;openclaw doctor --fixprzepisuje je do kanonicznych profili klucza APIprovider:defaultz kopią zapasową.legacy-flat.*.bak. - Profile w trybie OAuth (
auth.profiles.<id>.mode = "oauth") nie obsługują poświadczeń profilu auth opartych na SecretRef. - Statyczne poświadczenia runtime pochodzą z rozwiązanych snapshotów w pamięci; starsze statyczne wpisy
auth.jsonsą czyszczone po wykryciu. - Starsze importy OAuth pochodzą z
~/.openclaw/credentials/oauth.json. - Zobacz OAuth.
- Zachowanie runtime sekretów oraz narzędzia
audit/configure/apply: Zarządzanie sekretami.
auth.cooldowns
{ auth: { cooldowns: { billingBackoffHours: 5, billingBackoffHoursByProvider: { anthropic: 3, openai: 8 }, billingMaxHours: 24, authPermanentBackoffMinutes: 10, authPermanentMaxMinutes: 60, failureWindowHours: 24, overloadedProfileRotations: 1, overloadedBackoffMs: 0, rateLimitedProfileRotations: 1, }, },}billingBackoffHours: bazowy backoff w godzinach, gdy profil zawiedzie z powodu rzeczywistych błędów rozliczeń/niewystarczających środków (domyślnie:5). Jawny tekst dotyczący rozliczeń może nadal trafić tutaj nawet przy odpowiedziach401/403, ale dopasowania tekstu specyficzne dla dostawcy pozostają ograniczone do dostawcy, do którego należą (na przykład OpenRouterKey limit exceeded). Ponawialne komunikaty HTTP402dotyczące okna użycia lub limitu wydatków organizacji/przestrzeni roboczej pozostają zamiast tego w ścieżcerate_limit.billingBackoffHoursByProvider: opcjonalne nadpisania godzin backoffu rozliczeniowego dla poszczególnych dostawców.billingMaxHours: limit w godzinach dla wykładniczego wzrostu backoffu rozliczeniowego (domyślnie:24).authPermanentBackoffMinutes: bazowy backoff w minutach dla wysoce pewnych awariiauth_permanent(domyślnie:10).authPermanentMaxMinutes: limit w minutach dla wzrostu backoffuauth_permanent(domyślnie:60).failureWindowHours: ruchome okno w godzinach używane dla liczników backoffu (domyślnie:24).overloadedProfileRotations: maksymalna liczba rotacji profili auth u tego samego dostawcy dla błędów przeciążenia przed przełączeniem na fallback modelu (domyślnie:1). Kształty przeciążenia dostawcy, takie jakModelNotReadyException, trafiają tutaj.overloadedBackoffMs: stałe opóźnienie przed ponowieniem rotacji przeciążonego dostawcy/profilu (domyślnie:0).rateLimitedProfileRotations: maksymalna liczba rotacji profili auth u tego samego dostawcy dla błędów limitu szybkości przed przełączeniem na fallback modelu (domyślnie:1). Ten kubeł limitu szybkości obejmuje teksty w kształcie dostawcy, takie jakToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceededorazresource exhausted.
Rejestrowanie
{ logging: { level: "info", file: "/tmp/openclaw/openclaw.log", consoleLevel: "info", consoleStyle: "pretty", // pretty | compact | json redactSensitive: "tools", // off | tools redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"], },}- Domyślny plik dziennika:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Ustaw
logging.file, aby użyć stabilnej ścieżki. consoleLevelprzechodzi nadebug, gdy użyto--verbose.maxFileBytes: maksymalny rozmiar aktywnego pliku dziennika w bajtach przed rotacją (dodatnia liczba całkowita; domyślnie:104857600= 100 MB). OpenClaw przechowuje do pięciu ponumerowanych archiwów obok aktywnego pliku.redactSensitive/redactPatterns: maskowanie best-effort dla wyjścia konsoli, dzienników plikowych, rekordów dziennika OTLP i utrwalonego tekstu transkryptu sesji.redactSensitive: "off"wyłącza tylko tę ogólną politykę dzienników/transkryptów; powierzchnie bezpieczeństwa UI/narzędzi/diagnostyki nadal redagują sekrety przed emisją.
Diagnostyka
{ diagnostics: { enabled: true, flags: ["telegram.*"], stuckSessionWarnMs: 30000, stuckSessionAbortMs: 300000, memoryPressureSnapshot: false, otel: { enabled: false, endpoint: "https://otel-collector.example.com:4318", tracesEndpoint: "https://traces.example.com/v1/traces", metricsEndpoint: "https://metrics.example.com/v1/metrics", logsEndpoint: "https://logs.example.com/v1/logs", protocol: "http/protobuf", // http/protobuf | grpc headers: { "x-tenant-id": "my-org" }, serviceName: "openclaw-gateway", traces: true, metrics: true, logs: false, logsExporter: "otlp", sampleRate: 1.0, flushIntervalMs: 5000, captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, cacheTrace: { enabled: false, filePath: "~/.openclaw/logs/cache-trace.jsonl", includeMessages: true, includePrompt: true, includeSystem: true, }, },}enabled: główny przełącznik wyjścia instrumentacji (domyślnie:true).flags: tablica ciągów flag włączających ukierunkowane wyjście dziennika (obsługuje symbole wieloznaczne, takie jak"telegram.*"lub"*").stuckSessionWarnMs: próg wieku bez postępu w ms do klasyfikowania długotrwałych sesji przetwarzania jakosession.long_running,session.stalledlubsession.stuck. Odpowiedź, narzędzie, status, blok i postęp ACP resetują licznik; powtarzane diagnostykisession.stuckstosują backoff, dopóki pozostają bez zmian.stuckSessionAbortMs: próg wieku bez postępu w ms, po którym kwalifikująca się zablokowana aktywna praca może zostać abort-drained w celu odzyskania. Gdy nie ustawiono, OpenClaw używa bezpieczniejszego rozszerzonego okna osadzonego uruchomienia wynoszącego co najmniej 5 minut i 3xstuckSessionWarnMs.memoryPressureSnapshot: przechwytuje zredagowany snapshot stabilności przed OOM, gdy presja pamięci osiągniecritical(domyślnie:false). Ustaw natrue, aby dodać skan/zapis pliku pakietu stabilności, zachowując normalne zdarzenia presji pamięci.otel.enabled: włącza potok eksportu OpenTelemetry (domyślnie:false). Pełną konfigurację, katalog sygnałów i model prywatności znajdziesz w Eksport OpenTelemetry.otel.endpoint: URL kolektora dla eksportu OTel.otel.tracesEndpoint/otel.metricsEndpoint/otel.logsEndpoint: opcjonalne, specyficzne dla sygnału endpointy OTLP. Gdy są ustawione, nadpisująotel.endpointtylko dla tego sygnału.otel.protocol:"http/protobuf"(domyślnie) lub"grpc".otel.headers: dodatkowe nagłówki metadanych HTTP/gRPC wysyłane z żądaniami eksportu OTel.otel.serviceName: nazwa usługi dla atrybutów zasobu.otel.traces/otel.metrics/otel.logs: włącz eksport śladów, metryk lub dzienników.otel.logsExporter: ujście eksportu dzienników:"otlp"(domyślnie),"stdout"dla jednego obiektu JSON na linię stdout albo"both".otel.sampleRate: współczynnik próbkowania śladów0-1.otel.flushIntervalMs: okresowy interwał opróżniania telemetrii w ms.otel.captureContent: opcjonalne przechwytywanie surowej treści dla atrybutów spanów OTEL. Domyślnie wyłączone. Wartość logicznatrueprzechwytuje niesystemową treść wiadomości/narzędzi; forma obiektowa pozwala jawnie włączyćinputMessages,outputMessages,toolInputs,toolOutputs,systemPromptitoolDefinitions.OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental: przełącznik środowiskowy dla najnowszego eksperymentalnego kształtu spanów wnioskowania GenAI, w tym nazw spanów{gen_ai.operation.name} {gen_ai.request.model}, rodzaju spanaCLIENTigen_ai.provider.namezamiast starszegogen_ai.system. Domyślnie spany zachowująopenclaw.model.calligen_ai.systemdla zgodności; metryki GenAI używają ograniczonych atrybutów semantycznych.OPENCLAW_OTEL_PRELOADED=1: przełącznik środowiskowy dla hostów, które już zarejestrowały globalny SDK OpenTelemetry. OpenClaw pomija wtedy uruchamianie/zamykanie SDK należącego do Plugin, pozostawiając aktywne listenery diagnostyczne.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,OTEL_EXPORTER_OTLP_METRICS_ENDPOINTiOTEL_EXPORTER_OTLP_LOGS_ENDPOINT: zmienne środowiskowe endpointów specyficznych dla sygnału, używane, gdy odpowiadający klucz konfiguracji jest nieustawiony.cacheTrace.enabled: zapisuj snapshoty śladu cache dla osadzonych uruchomień (domyślnie:false).cacheTrace.filePath: ścieżka wyjściowa dla JSONL śladu cache (domyślnie:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: kontrolują, co jest uwzględniane w wyjściu śladu cache (wszystkie domyślnie:true).
Aktualizacja
{ update: { channel: "stable", // stable | beta | dev checkOnStart: true, auto: { enabled: false, stableDelayHours: 6, stableJitterHours: 12, betaCheckIntervalHours: 1, }, },}channel: kanał wydania dla instalacji npm/git -"stable","beta"lub"dev".checkOnStart: sprawdzaj aktualizacje npm podczas uruchamiania Gateway (domyślnie:true).auto.enabled: włącz automatyczną aktualizację w tle dla instalacji pakietowych (domyślnie:false).auto.stableDelayHours: minimalne opóźnienie w godzinach przed automatycznym zastosowaniem w kanale stable (domyślnie:6; maks.:168).auto.stableJitterHours: dodatkowe okno rozłożenia wdrożenia w kanale stable w godzinach (domyślnie:12; maks.:168).auto.betaCheckIntervalHours: jak często uruchamiane są sprawdzenia kanału beta, w godzinach (domyślnie:1; maks.:24).
ACP
{ acp: { enabled: true, dispatch: { enabled: true }, backend: "acpx", defaultAgent: "main", allowedAgents: ["main", "ops"], maxConcurrentSessions: 10, stream: { coalesceIdleMs: 50, maxChunkChars: 1000, repeatSuppression: true, deliveryMode: "live", // live | final_only hiddenBoundarySeparator: "paragraph", // none | space | newline | paragraph maxOutputChars: 50000, maxSessionUpdateChars: 500, }, runtime: { ttlMinutes: 30, }, },}enabled: globalna bramka funkcji ACP (domyślnie:true; ustawfalse, aby ukryć wysyłanie ACP i affordance’y spawn).dispatch.enabled: niezależna bramka wysyłania tur sesji ACP (domyślnie:true). Ustawfalse, aby polecenia ACP pozostały dostępne, ale wykonanie było blokowane.backend: domyślny identyfikator backendu runtime ACP (musi odpowiadać zarejestrowanemu Plugin runtime ACP). Najpierw zainstaluj Plugin backendu, a jeśli ustawionoplugins.allow, uwzględnij identyfikator Plugin backendu (na przykładacpx), inaczej backend ACP się nie załaduje.defaultAgent: fallback identyfikatora agenta docelowego ACP, gdy spawny nie określają jawnego celu.allowedAgents: allowlista identyfikatorów agentów dozwolonych dla sesji runtime ACP; pusta oznacza brak dodatkowych ograniczeń.maxConcurrentSessions: maksymalna liczba jednocześnie aktywnych sesji ACP.stream.coalesceIdleMs: okno opróżniania bezczynności w ms dla strumieniowanego tekstu.stream.maxChunkChars: maksymalny rozmiar fragmentu przed podziałem projekcji strumieniowanego bloku.stream.repeatSuppression: tłum powtarzające się linie statusu/narzędzi na turę (domyślnie:true).stream.deliveryMode:"live"strumieniuje przyrostowo;"final_only"buforuje do terminalnych zdarzeń tury.stream.hiddenBoundarySeparator: separator przed widocznym tekstem po ukrytych zdarzeniach narzędzi (domyślnie:"paragraph").stream.maxOutputChars: maksymalna liczba znaków wyjścia asystenta rzutowana na turę ACP.stream.maxSessionUpdateChars: maksymalna liczba znaków dla rzutowanych linii statusu/aktualizacji ACP.stream.tagVisibility: rekord nazw tagów do logicznych nadpisań widoczności dla strumieniowanych zdarzeń.runtime.ttlMinutes: TTL bezczynności w minutach dla workerów sesji ACP przed kwalifikującym się czyszczeniem.runtime.installCommand: opcjonalne polecenie instalacji uruchamiane podczas bootstrappingu środowiska runtime ACP.
CLI
{ cli: { banner: { taglineMode: "off", // random | default | off }, },}cli.banner.taglineModekontroluje styl sloganu banera:"random"(domyślnie): rotujące zabawne/sezonowe slogany."default": stały neutralny slogan (All your chats, one OpenClaw.)."off": brak tekstu sloganu (tytuł/wersja banera nadal są wyświetlane).
- Aby ukryć cały baner (nie tylko slogany), ustaw zmienną środowiskową
OPENCLAW_HIDE_BANNER=1.
Kreator
Metadane zapisywane przez prowadzone przepływy konfiguracji CLI (onboard, configure, doctor):
{ wizard: { lastRunAt: "2026-01-01T00:00:00.000Z", lastRunVersion: "2026.1.4", lastRunCommit: "abc1234", lastRunCommand: "configure", lastRunMode: "local", securityAcknowledgedAt: "2026-01-01T00:00:00.000Z", },}Tożsamość
Zobacz pola tożsamości agents.list w sekcji Domyślne ustawienia agenta.
Most (starszy, usunięty)
Bieżące kompilacje nie zawierają już mostu TCP. Node łączą się przez WebSocket Gateway. Klucze bridge.* nie są już częścią schematu konfiguracji (walidacja kończy się niepowodzeniem, dopóki nie zostaną usunięte; openclaw doctor --fix może usunąć nieznane klucze).
Legacy bridge config (historical reference)
{"bridge": { "enabled": true, "port": 18790, "bind": "tailnet", "tls": { "enabled": true, "autoGenerate": true }}}Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // default; cron dispatch + isolated cron agent-turn execution webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth sessionRetention: "24h", // duration string or false runLog: { maxBytes: "2mb", // default 2_000_000 bytes keepLines: 2000, // default 2000 }, },}sessionRetention: jak długo przechowywać ukończone izolowane sesje uruchomień Cron przed usunięciem zsessions.json. Kontroluje także czyszczenie zarchiwizowanych transkrypcji usuniętych zadań Cron. Domyślnie:24h; ustawfalse, aby wyłączyć.runLog.maxBytes: akceptowane dla zgodności ze starszymi dziennikami uruchomień Cron opartymi na plikach. Domyślnie:2_000_000bajtów.runLog.keepLines: najnowsze wiersze historii uruchomień SQLite zachowywane dla każdego zadania. Domyślnie:2000.webhookToken: token bearer używany do dostarczania żądań POST Cron Webhook (delivery.mode = "webhook"); jeśli zostanie pominięty, nagłówek uwierzytelniania nie jest wysyłany.webhook: przestarzały starszy zapasowy adres URL Webhook (http/https), używany przezopenclaw doctor --fixdo migracji zapisanych zadań, które nadal mająnotify: true; dostarczanie w czasie wykonywania używa per-zadaniowegodelivery.mode="webhook"orazdelivery.toalbodelivery.completionDestinationprzy zachowywaniu dostarczania ogłoszeń.
cron.retry
{ cron: { retry: { maxAttempts: 3, backoffMs: [30000, 60000, 300000], retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"], }, },}maxAttempts: maksymalna liczba ponowień dla zadań Cron przy błędach przejściowych (domyślnie:3; zakres:0-10).backoffMs: tablica opóźnień wycofania w ms dla każdej próby ponowienia (domyślnie:[30000, 60000, 300000]; 1-10 wpisów).retryOn: typy błędów wyzwalające ponowienia -"rate_limit","overloaded","network","timeout","server_error". Pomiń, aby ponawiać wszystkie typy przejściowe.
Zadania jednorazowe pozostają włączone do wyczerpania prób ponowienia, a następnie są wyłączane z zachowaniem końcowego stanu błędu. Zadania cykliczne używają tej samej polityki ponawiania błędów przejściowych, aby uruchomić się ponownie po wycofaniu przed następnym zaplanowanym terminem; błędy trwałe lub wyczerpane ponowienia błędów przejściowych wracają do normalnego harmonogramu cyklicznego z wycofaniem po błędzie.
cron.failureAlert
{ cron: { failureAlert: { enabled: false, after: 3, cooldownMs: 3600000, includeSkipped: false, mode: "announce", accountId: "main", }, },}enabled: włącza alerty o niepowodzeniach dla zadań Cron (domyślnie:false).after: liczba kolejnych niepowodzeń przed wywołaniem alertu (dodatnia liczba całkowita, min:1).cooldownMs: minimalna liczba milisekund między powtarzanymi alertami dla tego samego zadania (nieujemna liczba całkowita).includeSkipped: zlicza kolejne pominięte uruchomienia do progu alertu (domyślnie:false). Pominięte uruchomienia są śledzone oddzielnie i nie wpływają na wycofanie po błędzie wykonania.mode: tryb dostarczania -"announce"wysyła przez wiadomość kanału;"webhook"publikuje do skonfigurowanego Webhook.accountId: opcjonalne konto lub identyfikator kanału ograniczające zakres dostarczania alertów.
cron.failureDestination
{ cron: { failureDestination: { mode: "announce", channel: "last", to: "channel:C1234567890", accountId: "main", }, },}- Domyślny cel powiadomień o niepowodzeniach Cron we wszystkich zadaniach.
mode:"announce"lub"webhook"; domyślnie"announce", gdy istnieje wystarczająco danych celu.channel: nadpisanie kanału dla dostarczania ogłoszeń."last"używa ostatniego znanego kanału dostarczania.to: jawny cel ogłoszenia lub adres URL Webhook. Wymagane w trybie Webhook.accountId: opcjonalne nadpisanie konta dla dostarczania.- Per-zadaniowe
delivery.failureDestinationnadpisuje tę globalną wartość domyślną. - Gdy nie ustawiono ani globalnego, ani per-zadaniowego celu niepowodzenia, zadania, które już dostarczają przez
announce, wracają przy niepowodzeniu do tego głównego celu ogłoszenia. delivery.failureDestinationjest obsługiwane tylko dla zadańsessionTarget="isolated", chyba że głównedelivery.modezadania to"webhook".
Zobacz Zadania Cron. Izolowane wykonania Cron są śledzone jako zadania w tle.
Zmienne szablonu modelu mediów
Symbole zastępcze szablonu rozwijane w tools.media.models[].args:
| Zmienna | Opis |
|---|---|
{{Body}} |
Pełna treść wiadomości przychodzącej |
{{RawBody}} |
Surowa treść (bez opakowań historii/nadawcy) |
{{BodyStripped}} |
Treść z usuniętymi wzmiankami grupowymi |
{{From}} |
Identyfikator nadawcy |
{{To}} |
Identyfikator celu |
{{MessageSid}} |
Identyfikator wiadomości kanału |
{{SessionId}} |
UUID bieżącej sesji |
{{IsNewSession}} |
"true", gdy utworzono nową sesję |
{{MediaUrl}} |
Pseudo-URL przychodzących mediów |
{{MediaPath}} |
Lokalna ścieżka mediów |
{{MediaType}} |
Typ mediów (obraz/audio/dokument/…) |
{{Transcript}} |
Transkrypcja audio |
{{Prompt}} |
Rozwiązany prompt mediów dla wpisów CLI |
{{MaxChars}} |
Rozwiązana maksymalna liczba znaków wyjścia dla wpisów CLI |
{{ChatType}} |
"direct" lub "group" |
{{GroupSubject}} |
Temat grupy (best effort) |
{{GroupMembers}} |
Podgląd członków grupy (best effort) |
{{SenderName}} |
Wyświetlana nazwa nadawcy (best effort) |
{{SenderE164}} |
Numer telefonu nadawcy (best effort) |
{{Provider}} |
Wskazówka dostawcy (whatsapp, telegram, discord itd.) |
Dołączanie konfiguracji ($include)
Podziel konfigurację na wiele plików:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/mueller.json5", "./clients/schmidt.json5"], },}Zachowanie scalania:
- Pojedynczy plik: zastępuje zawierający go obiekt.
- Tablica plików: głęboko scalana w kolejności (późniejsze nadpisują wcześniejsze).
- Klucze siostrzane: scalane po dołączeniach (nadpisują dołączone wartości).
- Zagnieżdżone dołączenia: do 10 poziomów głębokości.
- Ścieżki: rozwiązywane względem pliku dołączającego, ale muszą pozostać w katalogu konfiguracji najwyższego poziomu (
dirnameplikuopenclaw.json). Formy bezwzględne/../są dozwolone tylko wtedy, gdy nadal rozwiązują się w tej granicy. Ścieżki nie mogą zawierać bajtów null i muszą mieć ściśle mniej niż 4096 znaków przed rozwiązaniem i po nim. - Zapisy właścicielskie OpenClaw, które zmieniają tylko jedną sekcję najwyższego poziomu opartą na dołączeniu pojedynczego pliku, zapisują bezpośrednio do tego dołączonego pliku. Na przykład
plugins installaktualizujeplugins: { $include: "./plugins.json5" }wplugins.json5i pozostawiaopenclaw.jsonbez zmian. - Dołączenia główne, tablice dołączeń oraz dołączenia z nadpisaniami kluczy siostrzanych są tylko do odczytu dla zapisów właścicielskich OpenClaw; takie zapisy kończą się odmową zamiast spłaszczania konfiguracji.
- Błędy: jasne komunikaty dla brakujących plików, błędów parsowania, cyklicznych dołączeń, nieprawidłowego formatu ścieżki i nadmiernej długości.
Powiązane: Konfiguracja · Przykłady konfiguracji · Doctor