Dokumentacja konfiguracji
Podstawowa dokumentacja konfiguracji dla~/.openclaw/openclaw.json. Aby zobaczyć omówienie zorientowane na zadania, przejdź do Konfiguracja.
Ta strona obejmuje główne powierzchnie konfiguracji OpenClaw i odsyła dalej, gdy podsystem ma własną, bardziej szczegółową dokumentację. Nie próbuje umieszczać na jednej stronie każdego katalogu poleceń należącego do kanału/Plugin ani każdego zaawansowanego ustawienia pamięci/QMD.
Źródło prawdy w kodzie:
openclaw config schemawypisuje bieżący schemat JSON używany do walidacji i Control UI, z dołączonymi metadanymi bundled/Plugin/kanałów, gdy są dostępneconfig.schema.lookupzwraca jeden węzeł schematu o zakresie jednej ścieżki dla narzędzi do szczegółowej analizypnpm config:docs:check/pnpm config:docs:genweryfikują hash bazowy dokumentacji konfiguracji względem bieżącej powierzchni schematu
- Dokumentacja konfiguracji pamięci dla
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationsoraz konfiguracji Dreaming wplugins.entries.memory-core.config.dreaming - Slash Commands dla bieżącego katalogu wbudowanych + bundled poleceń
- strony właścicieli kanałów/Pluginów dla powierzchni poleceń specyficznych dla kanału
Kanały
Każdy kanał uruchamia się automatycznie, gdy istnieje jego sekcja konfiguracji (chyba żeenabled: false).
Dostęp do DM i grup
Wszystkie kanały obsługują zasady dla DM i zasady dla grup:| Zasada DM | Zachowanie |
|---|---|
pairing (domyślna) | Nieznani nadawcy otrzymują jednorazowy kod parowania; właściciel musi zatwierdzić |
allowlist | Tylko nadawcy z allowFrom (lub sparowanego magazynu dozwolonych) |
open | Zezwala na wszystkie przychodzące DM (wymaga allowFrom: ["*"]) |
disabled | Ignoruje wszystkie przychodzące DM |
| Zasada grup | Zachowanie |
|---|---|
allowlist (domyślna) | Tylko grupy pasujące do skonfigurowanej listy dozwolonych |
open | Pomija listy dozwolonych grup (nadal obowiązuje wymaganie wzmianki) |
disabled | Blokuje wszystkie wiadomości grupowe/pokojowe |
channels.defaults.groupPolicy ustawia wartość domyślną, gdy groupPolicy dostawcy nie jest ustawione.
Kody parowania wygasają po 1 godzinie. Oczekujące żądania parowania DM są ograniczone do 3 na kanał.
Jeśli blok dostawcy całkowicie nie istnieje (channels.<provider> jest nieobecne), zasada grup w czasie działania wraca do allowlist (fail-closed) z ostrzeżeniem przy uruchamianiu.Nadpisania modeli dla kanałów
Użyjchannels.modelByChannel, aby przypiąć określone identyfikatory kanałów do modelu. Wartości akceptują provider/model lub skonfigurowane aliasy modeli. Mapowanie kanałów ma zastosowanie wtedy, gdy sesja nie ma już nadpisania modelu (na przykład ustawionego przez /model).
Domyślne ustawienia kanałów i Heartbeat
Użyjchannels.defaults dla współdzielonych zasad grup i zachowania Heartbeat we wszystkich dostawcach:
channels.defaults.groupPolicy: zapasowa zasada grup, gdygroupPolicyna poziomie dostawcy nie jest ustawione.channels.defaults.contextVisibility: domyślny tryb widoczności dodatkowego kontekstu dla wszystkich kanałów. Wartości:all(domyślna, uwzględnia cały kontekst cytatu/wątku/historii),allowlist(uwzględnia tylko kontekst od nadawców z listy dozwolonych),allowlist_quote(tak samo jak allowlist, ale zachowuje jawny kontekst cytatu/odpowiedzi). Nadpisanie per kanał:channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: uwzględnia zdrowe stany kanałów w wyjściu Heartbeat.channels.defaults.heartbeat.showAlerts: uwzględnia stany pogorszone/błędów w wyjściu Heartbeat.channels.defaults.heartbeat.useIndicator: renderuje kompaktowe wyjście Heartbeat w stylu wskaźnika.
WhatsApp z wieloma kontami
WhatsApp z wieloma kontami
- Polecenia wychodzące domyślnie używają konta
default, jeśli istnieje; w przeciwnym razie pierwszego skonfigurowanego identyfikatora konta (posortowanego). - Opcjonalne
channels.whatsapp.defaultAccountnadpisuje ten zapasowy wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. - Starszy katalog uwierzytelniania Baileys dla pojedynczego konta jest migrowany przez
openclaw doctordowhatsapp/default. - Nadpisania per konto:
channels.whatsapp.accounts.<id>.sendReadReceipts,channels.whatsapp.accounts.<id>.dmPolicy,channels.whatsapp.accounts.<id>.allowFrom.
Telegram
- Token bota:
channels.telegram.botTokenlubchannels.telegram.tokenFile(tylko zwykły plik; dowiązania symboliczne są odrzucane), zTELEGRAM_BOT_TOKENjako wartością zapasową dla konta domyślnego. - Opcjonalne
channels.telegram.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. - W konfiguracjach z wieloma kontami (2+ identyfikatory kont) ustaw jawne konto domyślne (
channels.telegram.defaultAccountlubchannels.telegram.accounts.default), aby uniknąć routingu zapasowego;openclaw doctorostrzega, gdy tego brakuje lub jest nieprawidłowe. configWrites: falseblokuje zapisy konfiguracji inicjowane z Telegrama (migracje identyfikatorów supergrup,/config set|unset).- Wpisy najwyższego poziomu
bindings[]ztype: "acp"konfigurują trwałe powiązania ACP dla tematów forum (użyj kanonicznegochatId:topic:topicIdwmatch.peer.id). Semantyka pól jest współdzielona z ACP Agents. - Podglądy strumieniowe Telegram używają
sendMessage+editMessageText(działa w czatach bezpośrednich i grupowych). - Zasady ponawiania: zobacz Retry policy.
Discord
- Token:
channels.discord.token, zDISCORD_BOT_TOKENjako wartością zapasową dla konta domyślnego. - Bezpośrednie wywołania wychodzące, które przekazują jawny
tokenDiscorda, używają tego tokena do wywołania; ustawienia ponawiania/zasad konta nadal pochodzą z wybranego konta w aktywnej migawce środowiska uruchomieniowego. - Opcjonalne
channels.discord.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. - Używaj
user:<id>(DM) lubchannel:<id>(kanał serwera) jako celów dostarczenia; same numeryczne identyfikatory są odrzucane. - Slugi serwerów są pisane małymi literami, a spacje są zastępowane przez
-; klucze kanałów używają nazwy w postaci slugu (bez#). Preferuj identyfikatory serwerów. - Wiadomości napisane przez bota są domyślnie ignorowane.
allowBots: trueje włącza; użyjallowBots: "mentions", aby akceptować tylko wiadomości botów, które wspominają bota (własne wiadomości nadal są filtrowane). channels.discord.guilds.<id>.ignoreOtherMentions(oraz nadpisania na poziomie kanału) odrzuca wiadomości, które wspominają innego użytkownika lub rolę, ale nie bota (z wyłączeniem @everyone/@here).maxLinesPerMessage(domyślnie 17) dzieli wysokie wiadomości nawet wtedy, gdy mają mniej niż 2000 znaków.channels.discord.threadBindingssteruje routowaniem związanym z wątkami Discorda:enabled: nadpisanie Discorda dla funkcji sesji związanych z wątkami (/focus,/unfocus,/agents,/session idle,/session max-ageoraz dostarczanie/routowanie związane z powiązaniem)idleHours: nadpisanie Discorda dla automatycznego zdejmowania fokusu po bezczynności w godzinach (0wyłącza)maxAgeHours: nadpisanie Discorda dla twardego maksymalnego wieku w godzinach (0wyłącza)spawnSubagentSessions: przełącznik opt-in dla automatycznego tworzenia/powiązania wątków przezsessions_spawn({ thread: true })
- Wpisy najwyższego poziomu
bindings[]ztype: "acp"konfigurują trwałe powiązania ACP dla kanałów i wątków (użyj identyfikatora kanału/wątku wmatch.peer.id). Semantyka pól jest współdzielona z ACP Agents. channels.discord.ui.components.accentColorustawia kolor akcentu dla kontenerów komponentów Discord v2.channels.discord.voicewłącza rozmowy w kanałach głosowych Discorda oraz opcjonalne automatyczne dołączanie i nadpisania TTS.channels.discord.voice.daveEncryptionorazchannels.discord.voice.decryptionFailureTolerancesą przekazywane do opcji DAVE@discordjs/voice(truei24domyślnie).- OpenClaw dodatkowo próbuje odzyskać odbiór głosu przez opuszczenie i ponowne dołączenie do sesji głosowej po powtarzających się błędach odszyfrowywania.
channels.discord.streamingjest kanonicznym kluczem trybu strumieniowania. Starsze wartościstreamModei logicznestreamingsą automatycznie migrowane.channels.discord.autoPresencemapuje dostępność środowiska uruchomieniowego na status obecności bota (healthy => online, degraded => idle, exhausted => dnd) i pozwala na opcjonalne nadpisania tekstu statusu.channels.discord.dangerouslyAllowNameMatchingponownie włącza dopasowywanie po zmiennej nazwie/tagu (awaryjny tryb zgodności).channels.discord.execApprovals: natywne dla Discorda dostarczanie zatwierdzeń exec i autoryzacja zatwierdzających.enabled:true,falselub"auto"(domyślnie). W trybie auto zatwierdzenia exec aktywują się, gdy zatwierdzających można rozwiązać zapproverslubcommands.ownerAllowFrom.approvers: identyfikatory użytkowników Discorda, którym wolno zatwierdzać żądania exec. Gdy pominięte, używa wartości zapasowej zcommands.ownerAllowFrom.agentFilter: opcjonalna lista dozwolonych identyfikatorów agentów. Pomiń, aby przekazywać zatwierdzenia dla wszystkich agentów.sessionFilter: opcjonalne wzorce kluczy sesji (podciąg lub regex).target: gdzie wysyłać prośby o zatwierdzenie."dm"(domyślnie) wysyła do DM zatwierdzających,"channel"wysyła do kanału źródłowego,"both"wysyła do obu. Gdy target zawiera"channel", przycisków mogą używać tylko rozwiązani zatwierdzający.cleanupAfterResolve: gdytrue, usuwa DM z zatwierdzeniem po zatwierdzeniu, odrzuceniu lub przekroczeniu limitu czasu.
off (brak), own (wiadomości bota, domyślnie), all (wszystkie wiadomości), allowlist (od guilds.<id>.users dla wszystkich wiadomości).
Google Chat
- JSON konta usługi: osadzony (
serviceAccount) lub oparty na pliku (serviceAccountFile). - SecretRef konta usługi jest również obsługiwany (
serviceAccountRef). - Wartości zapasowe ze środowiska:
GOOGLE_CHAT_SERVICE_ACCOUNTlubGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Używaj
spaces/<spaceId>lubusers/<userId>jako celów dostarczenia. channels.googlechat.dangerouslyAllowNameMatchingponownie włącza dopasowywanie po zmiennym adresie e-mail principal (awaryjny tryb zgodności).
Slack
- Tryb socket wymaga zarówno
botToken, jak iappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENjako zapasowe wartości środowiskowe dla konta domyślnego). - Tryb HTTP wymaga
botTokenorazsigningSecret(w korzeniu lub per konto). botToken,appToken,signingSecretiuserTokenakceptują jawne ciągi znaków lub obiekty SecretRef.- Migawki kont Slacka udostępniają pola źródła/statusu per poświadczenie, takie jak
botTokenSource,botTokenStatus,appTokenStatusoraz, w trybie HTTP,signingSecretStatus.configured_unavailableoznacza, że konto jest skonfigurowane przez SecretRef, ale bieżąca ścieżka polecenia/środowiska uruchomieniowego nie mogła rozwiązać wartości sekretu. configWrites: falseblokuje zapisy konfiguracji inicjowane ze Slacka.- Opcjonalne
channels.slack.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. channels.slack.streaming.modejest kanonicznym kluczem trybu strumieniowania Slacka.channels.slack.streaming.nativeTransportkontroluje natywny transport strumieniowania Slacka. Starsze wartościstreamMode, logicznestreaminginativeStreamingsą automatycznie migrowane.- Używaj
user:<id>(DM) lubchannel:<id>jako celów dostarczenia.
off, own (domyślnie), all, allowlist (z reactionAllowlist).
Izolacja sesji wątków: thread.historyScope jest per wątek (domyślnie) lub współdzielone w całym kanale. thread.inheritParent kopiuje transkrypt kanału nadrzędnego do nowych wątków.
- Natywne strumieniowanie Slacka oraz status w stylu asystenta Slacka „is typing…” w wątku wymagają celu odpowiedzi będącego wątkiem. DM najwyższego poziomu domyślnie pozostają poza wątkiem, więc używają
typingReactionlub zwykłego dostarczania zamiast podglądu w stylu wątku. typingReactiondodaje tymczasową reakcję do przychodzącej wiadomości Slacka, gdy odpowiedź jest w trakcie generowania, a następnie usuwa ją po zakończeniu. Użyj skrótu emoji Slacka, takiego jak"hourglass_flowing_sand".channels.slack.execApprovals: natywne dla Slacka dostarczanie zatwierdzeń exec i autoryzacja zatwierdzających. Ten sam schemat co w Discordzie:enabled(true/false/"auto"),approvers(identyfikatory użytkowników Slacka),agentFilter,sessionFilteritarget("dm","channel"lub"both").
| Grupa akcji | Domyślnie | Uwagi |
|---|---|---|
| reactions | włączone | Reagowanie + lista reakcji |
| messages | włączone | Odczyt/wysyłanie/edycja/usuwanie |
| pins | włączone | Przypinanie/odpinanie/lista |
| memberInfo | włączone | Informacje o członku |
| emojiList | włączone | Lista niestandardowych emoji |
Mattermost
Mattermost jest dostarczany jako Plugin:openclaw plugins install @openclaw/mattermost.
oncall (odpowiada na wzmiankę @, domyślnie), onmessage (każda wiadomość), onchar (wiadomości zaczynające się od prefiksu wyzwalacza).
Gdy natywne polecenia Mattermost są włączone:
commands.callbackPathmusi być ścieżką (na przykład/api/channels/mattermost/command), a nie pełnym URL-em.commands.callbackUrlmusi wskazywać na punkt końcowy Gateway OpenClaw i być osiągalny z serwera Mattermost.- Natywne wywołania zwrotne slash są uwierzytelniane tokenami per polecenie zwracanymi przez Mattermost podczas rejestracji poleceń slash. Jeśli rejestracja się nie powiedzie lub żadne polecenia nie zostaną aktywowane, OpenClaw odrzuci wywołania zwrotne z komunikatem
Unauthorized: invalid command token. - Dla prywatnych/tailnet/wewnętrznych hostów callbacków Mattermost może wymagać, aby
ServiceSettings.AllowedUntrustedInternalConnectionszawierało host/domenę callbacku. Używaj wartości hosta/domeny, a nie pełnych URL-i. channels.mattermost.configWrites: zezwala lub zabrania zapisów konfiguracji inicjowanych z Mattermost.channels.mattermost.requireMention: wymaga@mentionprzed odpowiedzią w kanałach.channels.mattermost.groups.<channelId>.requireMention: nadpisanie wymagania wzmianki per kanał ("*"dla wartości domyślnej).- Opcjonalne
channels.mattermost.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta.
Signal
off, own (domyślnie), all, allowlist (z reactionAllowlist).
channels.signal.account: przypina uruchamianie kanału do określonej tożsamości konta Signal.channels.signal.configWrites: zezwala lub zabrania zapisów konfiguracji inicjowanych z Signal.- Opcjonalne
channels.signal.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta.
BlueBubbles
BlueBubbles to zalecana ścieżka dla iMessage (oparta na Plugin, konfigurowana wchannels.bluebubbles).
- Główne ścieżki kluczy omawiane tutaj:
channels.bluebubbles,channels.bluebubbles.dmPolicy. - Opcjonalne
channels.bluebubbles.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. - Wpisy najwyższego poziomu
bindings[]ztype: "acp"mogą wiązać rozmowy BlueBubbles z trwałymi sesjami ACP. Użyj uchwytu BlueBubbles lub ciągu docelowego (chat_id:*,chat_guid:*,chat_identifier:*) wmatch.peer.id. Współdzielona semantyka pól: ACP Agents. - Pełna konfiguracja kanału BlueBubbles jest opisana w BlueBubbles.
iMessage
OpenClaw uruchamiaimsg rpc (JSON-RPC przez stdio). Nie jest wymagany daemon ani port.
-
Opcjonalne
channels.imessage.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. - Wymaga Full Disk Access do bazy danych Messages.
-
Preferuj cele
chat_id:<id>. Użyjimsg chats --limit 20, aby wyświetlić listę czatów. -
cliPathmoże wskazywać na wrapper SSH; ustawremoteHost(hostlubuser@host) dla pobierania załączników przez SCP. -
attachmentRootsiremoteAttachmentRootsograniczają ścieżki przychodzących załączników (domyślnie:/Users/*/Library/Messages/Attachments). -
SCP używa ścisłego sprawdzania klucza hosta, więc upewnij się, że klucz hosta przekaźnika już istnieje w
~/.ssh/known_hosts. -
channels.imessage.configWrites: zezwala lub zabrania zapisów konfiguracji inicjowanych z iMessage. -
Wpisy najwyższego poziomu
bindings[]ztype: "acp"mogą wiązać rozmowy iMessage z trwałymi sesjami ACP. Użyj znormalizowanego uchwytu lub jawnego celu czatu (chat_id:*,chat_guid:*,chat_identifier:*) wmatch.peer.id. Współdzielona semantyka pól: ACP Agents.
Przykład wrappera SSH dla iMessage
Przykład wrappera SSH dla iMessage
Matrix
Matrix jest wspierany przez rozszerzenie i konfigurowany wchannels.matrix.
- Uwierzytelnianie tokenem używa
accessToken; uwierzytelnianie hasłem używauserId+password. channels.matrix.proxykieruje ruch HTTP Matrix przez jawny serwer proxy HTTP(S). Nazwane konta mogą to nadpisać przezchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkzezwala na prywatne/wewnętrzne homeservery.proxyi to sieciowe opt-in są niezależnymi mechanizmami kontroli.channels.matrix.defaultAccountwybiera preferowane konto w konfiguracjach z wieloma kontami.channels.matrix.autoJoindomyślnie ma wartośćoff, więc zaproszone pokoje i nowe zaproszenia w stylu DM są ignorowane, dopóki nie ustawiszautoJoin: "allowlist"zautoJoinAllowlistalboautoJoin: "always".channels.matrix.execApprovals: natywne dla Matrix dostarczanie zatwierdzeń exec i autoryzacja zatwierdzających.enabled:true,falselub"auto"(domyślnie). W trybie auto zatwierdzenia exec aktywują się, gdy zatwierdzających można rozwiązać zapproverslubcommands.ownerAllowFrom.approvers: identyfikatory użytkowników Matrix (np.@owner:example.org) uprawnione do zatwierdzania żądań exec.agentFilter: opcjonalna lista dozwolonych identyfikatorów agentów. Pomiń, aby przekazywać zatwierdzenia dla wszystkich agentów.sessionFilter: opcjonalne wzorce kluczy sesji (podciąg lub regex).target: gdzie wysyłać prośby o zatwierdzenie."dm"(domyślnie),"channel"(pokój źródłowy) lub"both".- Nadpisania per konto:
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopekontroluje, jak DM Matrix są grupowane w sesje:per-user(domyślnie) współdzieli według kierowanego peera, aper-roomizoluje każdy pokój DM.- Sondy statusu Matrix i wyszukiwania w katalogu na żywo używają tej samej polityki proxy co ruch środowiska uruchomieniowego.
- Pełna konfiguracja Matrix, reguły targetowania i przykłady konfiguracji są opisane w Matrix.
Microsoft Teams
Microsoft Teams jest wspierany przez rozszerzenie i konfigurowany wchannels.msteams.
- Główne ścieżki kluczy omawiane tutaj:
channels.msteams,channels.msteams.configWrites. - Pełna konfiguracja Teams (poświadczenia, webhook, zasady DM/grup, nadpisania per zespół/per kanał) jest opisana w Microsoft Teams.
IRC
IRC jest wspierany przez rozszerzenie i konfigurowany wchannels.irc.
- Główne ścieżki kluczy omawiane tutaj:
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. - Opcjonalne
channels.irc.defaultAccountnadpisuje wybór konta domyślnego, jeśli pasuje do skonfigurowanego identyfikatora konta. - Pełna konfiguracja kanału IRC (host/port/TLS/kanały/listy dozwolonych/wymaganie wzmianki) jest opisana w IRC.
Wiele kont (wszystkie kanały)
Uruchamiaj wiele kont na kanał (każde z własnymaccountId):
defaultjest używane, gdyaccountIdjest pominięte (CLI + routing).- Tokeny środowiskowe mają zastosowanie tylko do konta default.
- Bazowe ustawienia kanału mają zastosowanie do wszystkich kont, chyba że zostaną nadpisane per konto.
- Użyj
bindings[].match.accountId, aby kierować każde konto do innego agenta. - Jeśli dodasz konto inne niż domyślne przez
openclaw channels add(lub onboarding kanału), gdy nadal używasz jednokontowej konfiguracji najwyższego poziomu dla kanału, OpenClaw najpierw promuje jednokontowe wartości najwyższego poziomu o zakresie konta do mapy kont kanału, aby oryginalne konto nadal działało. Większość kanałów przenosi je dochannels.<channel>.accounts.default; Matrix może zamiast tego zachować istniejący pasujący nazwany/domyslny cel. - Istniejące powiązania tylko-kanałowe (bez
accountId) nadal dopasowują się do konta domyślnego; powiązania o zakresie konta pozostają opcjonalne. openclaw doctor --fixrównież naprawia mieszane kształty, przenosząc jednokontowe wartości najwyższego poziomu o zakresie konta do promowanego konta wybranego dla tego kanału. Większość kanałów używaaccounts.default; Matrix może zamiast tego zachować istniejący pasujący nazwany/domyslny cel.
Inne kanały rozszerzeń
Wiele kanałów rozszerzeń jest konfigurowanych jakochannels.<id> i opisanych na ich dedykowanych stronach kanałów (na przykład Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat i Twitch).
Zobacz pełny indeks kanałów: Channels.
Wymaganie wzmianki w czatach grupowych
Wiadomości grupowe domyślnie wymagają wzmianki (wzmianka z metadanych lub bezpieczne wzorce regex). Dotyczy czatów grupowych WhatsApp, Telegram, Discord, Google Chat i iMessage. Typy wzmianek:- Wzmianki z metadanych: natywne wzmianki @ platformy. Ignorowane w trybie self-chat WhatsApp.
- Wzorce tekstowe: bezpieczne wzorce regex w
agents.list[].groupChat.mentionPatterns. Nieprawidłowe wzorce i niebezpieczne zagnieżdżone powtórzenia są ignorowane. - Wymaganie wzmianki jest egzekwowane tylko wtedy, gdy wykrycie jest możliwe (natywne wzmianki lub co najmniej jeden wzorzec).
messages.groupChat.historyLimit ustawia globalną wartość domyślną. Kanały mogą ją nadpisać przez channels.<channel>.historyLimit (lub per konto). Ustaw 0, aby wyłączyć.
Limity historii DM
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Tryb self-chat
Uwzględnij własny numer wallowFrom, aby włączyć tryb self-chat (ignoruje natywne wzmianki @, odpowiada tylko na wzorce tekstowe):
Polecenia (obsługa poleceń czatu)
Szczegóły poleceń
Szczegóły poleceń
- Ten blok konfiguruje powierzchnie poleceń. Bieżący katalog wbudowanych + bundled poleceń znajdziesz w Slash Commands.
- Ta strona jest dokumentacją kluczy konfiguracji, a nie pełnym katalogiem poleceń. Polecenia należące do kanałów/Pluginów, takie jak QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, device-pair/pair, memory/dreaming, phone-control/phonei Talk/voice, są opisane na stronach ich kanałów/Pluginów oraz w Slash Commands. - Polecenia tekstowe muszą być samodzielnymi wiadomościami zaczynającymi się od
/. native: "auto"włącza natywne polecenia dla Discorda/Telegrama, pozostawia Slack wyłączony.nativeSkills: "auto"włącza natywne polecenia Skills dla Discorda/Telegrama, pozostawia Slack wyłączony.- Nadpisanie per kanał:
channels.discord.commands.native(bool lub"auto").falseczyści wcześniej zarejestrowane polecenia. - Nadpisz rejestrację natywnych Skills per kanał przez
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsdodaje dodatkowe wpisy menu bota Telegram.bash: truewłącza! <cmd>dla powłoki hosta. Wymagatools.elevated.enabledoraz nadawcy wtools.elevated.allowFrom.<channel>.config: truewłącza/config(odczytuje/zapisujeopenclaw.json). Dla klientów Gatewaychat.sendtrwałe zapisy/config set|unsetwymagają takżeoperator.admin; tylko do odczytu/config showpozostaje dostępne dla zwykłych klientów operatora z zakresem zapisu.mcp: truewłącza/mcpdla zarządzanej przez OpenClaw konfiguracji serwera MCP wmcp.servers.plugins: truewłącza/pluginsdo wykrywania Pluginów, instalacji oraz sterowania włączaniem/wyłączaniem.channels.<provider>.configWritesogranicza mutacje konfiguracji per kanał (domyślnie: true).- Dla kanałów z wieloma kontami
channels.<provider>.accounts.<id>.configWritesrównież ogranicza zapisy kierowane do tego konta (na przykład/allowlist --config --account <id>lub/config set channels.<provider>.accounts.<id>...). restart: falsewyłącza/restarti działania narzędzia restartu Gateway. Domyślnie:true.ownerAllowFromto jawna lista dozwolonych właściciela dla poleceń/narzędzi tylko dla właściciela. Jest oddzielna odallowFrom.ownerDisplay: "hash"hashuje identyfikatory właściciela w system prompt. UstawownerDisplaySecret, aby sterować haszowaniem.allowFromjest per dostawca. Gdy jest ustawione, jest jedynym źródłem autoryzacji (listy dozwolonych/parowanie kanału iuseAccessGroupssą ignorowane).useAccessGroups: falsepozwala poleceniom omijać zasady grup dostępu, gdyallowFromnie jest ustawione.- Mapa dokumentacji poleceń:
Domyślne ustawienia agenta
agents.defaults.workspace
Domyślnie: ~/.openclaw/workspace.
agents.defaults.repoRoot
Opcjonalny katalog główny repozytorium wyświetlany w wierszu Runtime system prompt. Jeśli nie jest ustawiony, OpenClaw wykrywa go automatycznie, przechodząc w górę od workspace.
agents.defaults.skills
Opcjonalna domyślna lista dozwolonych Skills dla agentów, które nie ustawiają
agents.list[].skills.
- Pomiń
agents.defaults.skills, aby domyślnie nie ograniczać Skills. - Pomiń
agents.list[].skills, aby dziedziczyć wartości domyślne. - Ustaw
agents.list[].skills: [], aby nie mieć żadnych Skills. - Niepusta lista
agents.list[].skillsjest końcowym zestawem dla tego agenta; nie łączy się z wartościami domyślnymi.
agents.defaults.skipBootstrap
Wyłącza automatyczne tworzenie plików bootstrap workspace (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md).
agents.defaults.contextInjection
Steruje tym, kiedy pliki bootstrap workspace są wstrzykiwane do system prompt. Domyślnie: "always".
"continuation-skip": bezpieczne tury kontynuacji (po zakończonej odpowiedzi asystenta) pomijają ponowne wstrzyknięcie bootstrap workspace, zmniejszając rozmiar prompt. Uruchomienia Heartbeat i ponowne próby po Compaction nadal przebudowują kontekst.
agents.defaults.bootstrapMaxChars
Maksymalna liczba znaków na plik bootstrap workspace przed obcięciem. Domyślnie: 20000.
agents.defaults.bootstrapTotalMaxChars
Maksymalna łączna liczba znaków wstrzykiwanych we wszystkich plikach bootstrap workspace. Domyślnie: 150000.
agents.defaults.bootstrapPromptTruncationWarning
Steruje widocznym dla agenta tekstem ostrzeżenia, gdy kontekst bootstrap jest obcinany.
Domyślnie: "once".
"off": nigdy nie wstrzykuje tekstu ostrzeżenia do system prompt."once": wstrzykuje ostrzeżenie raz dla każdego unikalnego podpisu obcięcia (zalecane)."always": wstrzykuje ostrzeżenie przy każdym uruchomieniu, gdy istnieje obcięcie.
Mapa właścicieli budżetu kontekstu
OpenClaw ma wiele budżetów prompt/kontekstu o dużej objętości i są one celowo podzielone według podsystemów zamiast kierowania wszystkiego przez jedno ogólne ustawienie.agents.defaults.bootstrapMaxChars/agents.defaults.bootstrapTotalMaxChars: zwykłe wstrzykiwanie bootstrap workspace.agents.defaults.startupContext.*: jednorazowe preludium startowe/newi/reset, w tym ostatnie dzienne plikimemory/*.md.skills.limits.*: kompaktowa lista Skills wstrzykiwana do system prompt.agents.defaults.contextLimits.*: ograniczone wycinki środowiska uruchomieniowego i wstrzykiwane bloki należące do runtime.memory.qmd.limits.*: rozmiar fragmentów wyszukiwania zaindeksowanej pamięci i wstrzyknięć.
agents.list[].skillsLimits.maxSkillsPromptCharsagents.list[].contextLimits.*
agents.defaults.startupContext
Steruje preludium startowym pierwszej tury wstrzykiwanym przy pustych uruchomieniach /new i /reset.
agents.defaults.contextLimits
Współdzielone wartości domyślne dla ograniczonych powierzchni kontekstu runtime.
memoryGetMaxChars: domyślny limit wycinkamemory_getprzed dodaniem metadanych obcięcia i informacji o kontynuacji.memoryGetDefaultLines: domyślne okno wierszymemory_get, gdylinesjest pominięte.toolResultMaxChars: limit wyników narzędzi na żywo używany dla utrwalonych wyników i odzyskiwania po przepełnieniu.postCompactionMaxChars: limit wycinka AGENTS.md używany podczas wstrzykiwania odświeżenia po Compaction.
agents.list[].contextLimits
Nadpisanie per agent dla współdzielonych ustawień contextLimits. Pominięte pola dziedziczą
z agents.defaults.contextLimits.
skills.limits.maxSkillsPromptChars
Globalny limit dla kompaktowej listy Skills wstrzykiwanej do system prompt. To
nie wpływa na odczyt plików SKILL.md na żądanie.
agents.list[].skillsLimits.maxSkillsPromptChars
Nadpisanie per agent dla budżetu prompt Skills.
agents.defaults.imageMaxDimensionPx
Maksymalny rozmiar w pikselach dla dłuższego boku obrazu w blokach obrazów transkryptu/narzędzi przed wywołaniami dostawcy.
Domyślnie: 1200.
Niższe wartości zwykle zmniejszają użycie tokenów vision i rozmiar ładunku żądania przy przebiegach z dużą liczbą zrzutów ekranu.
Wyższe wartości zachowują więcej szczegółów wizualnych.
agents.defaults.userTimezone
Strefa czasowa dla kontekstu system prompt (nie znaczników czasu wiadomości). Wartość zapasowa pochodzi ze strefy czasowej hosta.
agents.defaults.timeFormat
Format czasu w system prompt. Domyślnie: auto (preferencja systemu operacyjnego).
agents.defaults.model
model: akceptuje albo ciąg znaków ("provider/model"), albo obiekt ({ primary, fallbacks }).- Forma ciągu ustawia tylko model podstawowy.
- Forma obiektu ustawia model podstawowy oraz uporządkowane modele przełączania awaryjnego.
imageModel: akceptuje albo ciąg znaków ("provider/model"), albo obiekt ({ primary, fallbacks }).- Używany przez ścieżkę narzędzia
imagejako konfiguracja modelu vision. - Używany także jako routing zapasowy, gdy wybrany/domyslny model nie może przyjąć wejścia obrazu.
- Używany przez ścieżkę narzędzia
imageGenerationModel: akceptuje albo ciąg znaków ("provider/model"), albo obiekt ({ primary, fallbacks }).- Używany przez współdzieloną funkcję generowania obrazów i każdą przyszłą powierzchnię narzędzia/Pluginu generującą obrazy.
- Typowe wartości:
google/gemini-3.1-flash-image-previewdla natywnego generowania obrazów Gemini,fal/fal-ai/flux/devdla fal lubopenai/gpt-image-1dla OpenAI Images. - Jeśli wybierzesz bezpośrednio
provider/model, skonfiguruj również pasujące uwierzytelnianie/klucz API dostawcy (na przykładGEMINI_API_KEYlubGOOGLE_API_KEYdlagoogle/*,OPENAI_API_KEYdlaopenai/*,FAL_KEYdlafal/*). - Jeśli pominięte,
image_generatenadal może wywnioskować domyślną wartość dostawcy opartą na uwierzytelnieniu. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania obrazów w kolejności identyfikatorów dostawców.
musicGenerationModel: akceptuje albo ciąg znaków ("provider/model"), albo obiekt ({ primary, fallbacks }).- Używany przez współdzieloną funkcję generowania muzyki i wbudowane narzędzie
music_generate. - Typowe wartości:
google/lyria-3-clip-preview,google/lyria-3-pro-previewlubminimax/music-2.5+. - Jeśli pominięte,
music_generatenadal może wywnioskować domyślną wartość dostawcy opartą na uwierzytelnieniu. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania muzyki w kolejności identyfikatorów dostawców. - Jeśli wybierzesz bezpośrednio
provider/model, skonfiguruj również pasujące uwierzytelnianie/klucz API dostawcy.
- Używany przez współdzieloną funkcję generowania muzyki i wbudowane narzędzie
videoGenerationModel: akceptuje albo ciąg znaków ("provider/model"), albo obiekt ({ primary, fallbacks }).- Używany przez współdzieloną funkcję generowania wideo i wbudowane narzędzie
video_generate. - Typowe wartości:
qwen/wan2.6-t2v,qwen/wan2.6-i2v,qwen/wan2.6-r2v,qwen/wan2.6-r2v-flashlubqwen/wan2.7-r2v. - Jeśli pominięte,
video_generatenadal może wywnioskować domyślną wartość dostawcy opartą na uwierzytelnieniu. Najpierw próbuje bieżącego domyślnego dostawcy, a potem pozostałych zarejestrowanych dostawców generowania wideo w kolejności identyfikatorów dostawców. - Jeśli wybierzesz bezpośrednio
provider/model, skonfiguruj również pasujące uwierzytelnianie/klucz API dostawcy. - Bundled dostawca generowania wideo Qwen obsługuje maksymalnie 1 wyjściowe wideo, 1 wejściowy obraz, 4 wejściowe filmy, czas trwania do 10 sekund oraz opcje na poziomie dostawcy
size,aspectRatio,resolution,audioiwatermark.
- Używany przez współdzieloną funkcję generowania wideo i wbudowane narzędzie
pdfModel: akceptuje albo ciąg znaków ("provider/model"), albo obiekt ({ primary, fallbacks }).- Używany przez narzędzie
pdfdo routingu modelu. - Jeśli pominięty, narzędzie PDF przechodzi awaryjnie do
imageModel, a następnie do rozwiązanego modelu sesji/domyslnego.
- Używany przez narzędzie
pdfMaxBytesMb: domyślny limit rozmiaru PDF dla narzędziapdf, gdymaxBytesMbnie jest przekazane w czasie wywołania.pdfMaxPages: domyślna maksymalna liczba stron uwzględnianych przez tryb awaryjnej ekstrakcji w narzędziupdf.verboseDefault: domyślny poziom verbose dla agentów. Wartości:"off","on","full". Domyślnie:"off".elevatedDefault: domyślny poziom wyjścia elevated dla agentów. Wartości:"off","on","ask","full". Domyślnie:"on".model.primary: formatprovider/model(np.openai/gpt-5.4). Jeśli pominiesz dostawcę, OpenClaw najpierw próbuje aliasu, potem unikalnego dopasowania dokładnego identyfikatora modelu w skonfigurowanych dostawcach, a dopiero potem wraca do skonfigurowanego domyślnego dostawcy (przestarzałe zachowanie zgodności, więc preferuj jawneprovider/model). Jeśli ten dostawca nie udostępnia już skonfigurowanego modelu domyślnego, OpenClaw przechodzi awaryjnie do pierwszego skonfigurowanego dostawcy/modelu zamiast ujawniać przestarzałą wartość domyślną usuniętego dostawcy.models: skonfigurowany katalog modeli i lista dozwolonych dla/model. Każdy wpis może zawieraćalias(skrót) iparams(specyficzne dla dostawcy, na przykładtemperature,maxTokens,cacheRetention,context1m).params: globalne domyślne parametry dostawcy stosowane do wszystkich modeli. Ustawiane wagents.defaults.params(np.{ cacheRetention: "long" }).- Priorytet scalania
params(konfiguracja):agents.defaults.params(globalna baza) jest nadpisywane przezagents.defaults.models["provider/model"].params(per model), a następnieagents.list[].params(pasujący identyfikator agenta) nadpisuje po kluczu. Szczegóły znajdziesz w Prompt Caching. embeddedHarness: domyślna polityka niskopoziomowego runtime wbudowanego agenta. Użyjruntime: "auto", aby pozwolić zarejestrowanym harnessom Pluginów przejmować obsługiwane modele,runtime: "pi", aby wymusić wbudowany harness PI, albo zarejestrowanego identyfikatora harnessu, np.runtime: "codex". Ustawfallback: "none", aby wyłączyć automatyczny zapasowy fallback PI.- Pisarze konfiguracji, którzy mutują te pola (na przykład
/models set,/models set-imageoraz polecenia dodawania/usuwania fallbacków), zapisują kanoniczną formę obiektu i w miarę możliwości zachowują istniejące listy fallbacków. maxConcurrent: maksymalna liczba równoległych uruchomień agentów między sesjami (każda sesja nadal jest serializowana). Domyślnie: 4.
agents.defaults.embeddedHarness
embeddedHarness kontroluje, który niskopoziomowy executor uruchamia tury wbudowanego agenta.
Większość wdrożeń powinna zachować wartość domyślną { runtime: "auto", fallback: "pi" }.
Użyj tego, gdy zaufany Plugin udostępnia natywny harness, taki jak bundled
harness serwera aplikacji Codex.
runtime:"auto","pi"lub identyfikator zarejestrowanego harnessu Pluginu. Bundled Plugin Codex rejestrujecodex.fallback:"pi"lub"none"."pi"zachowuje wbudowany harness PI jako fallback zgodności."none"powoduje, że brakujący lub nieobsługiwany wybór harnessu Pluginu kończy się błędem zamiast cichego użycia PI.- Nadpisania środowiskowe:
OPENCLAW_AGENT_RUNTIME=<id|auto|pi>nadpisujeruntime;OPENCLAW_AGENT_HARNESS_FALLBACK=nonewyłącza fallback PI dla tego procesu. - Dla wdrożeń tylko z Codex ustaw
model: "codex/gpt-5.4",embeddedHarness.runtime: "codex"iembeddedHarness.fallback: "none". - To kontroluje tylko wbudowany harness czatu. Generowanie mediów, vision, PDF, muzyka, wideo i TTS nadal używają swoich ustawień dostawcy/modelu.
agents.defaults.models):
| Alias | Model |
|---|---|
opus | anthropic/claude-opus-4-6 |
sonnet | anthropic/claude-sonnet-4-6 |
gpt | openai/gpt-5.4 |
gpt-mini | openai/gpt-5.4-mini |
gpt-nano | openai/gpt-5.4-nano |
gemini | google/gemini-3.1-pro-preview |
gemini-flash | google/gemini-3-flash-preview |
gemini-flash-lite | google/gemini-3.1-flash-lite-preview |
--thinking off lub samodzielnie zdefiniujesz agents.defaults.models["zai/<model>"].params.thinking.
Modele Z.AI domyślnie włączają tool_stream do strumieniowania wywołań narzędzi. Ustaw agents.defaults.models["zai/<model>"].params.tool_stream na false, aby to wyłączyć.
Modele Anthropic Claude 4.6 domyślnie używają thinking adaptive, gdy nie ustawiono jawnego poziomu thinking.
agents.defaults.cliBackends
Opcjonalne backendy CLI dla tekstowych przebiegów awaryjnych (bez wywołań narzędzi). Przydatne jako kopia zapasowa, gdy dostawcy API zawodzą.
- Backendy CLI są przede wszystkim tekstowe; narzędzia są zawsze wyłączone.
- Sesje są obsługiwane, gdy ustawione jest
sessionArg. - Przekazywanie obrazów jest obsługiwane, gdy
imageArgakceptuje ścieżki plików.
agents.defaults.systemPromptOverride
Zastępuje cały system prompt złożony przez OpenClaw stałym ciągiem znaków. Ustawiane na poziomie domyślnym (agents.defaults.systemPromptOverride) lub per agent (agents.list[].systemPromptOverride). Wartości per agent mają pierwszeństwo; wartość pusta lub zawierająca tylko białe znaki jest ignorowana. Przydatne do kontrolowanych eksperymentów z promptami.
agents.defaults.heartbeat
Okresowe uruchomienia Heartbeat.
every: ciąg czasu trwania (ms/s/m/h). Domyślnie:30m(uwierzytelnianie kluczem API) lub1h(uwierzytelnianie OAuth). Ustaw0m, aby wyłączyć.includeSystemPromptSection: gdy ma wartość false, pomija sekcję Heartbeat w system prompt i pomija wstrzykiwanieHEARTBEAT.mddo kontekstu bootstrap. Domyślnie:true.suppressToolErrorWarnings: gdy ma wartość true, ukrywa ładunki ostrzeżeń o błędach narzędzi podczas uruchomień Heartbeat.timeoutSeconds: maksymalny czas w sekundach dozwolony dla tury agenta Heartbeat przed jej przerwaniem. Pozostaw nieustawione, aby użyćagents.defaults.timeoutSeconds.directPolicy: zasada dostarczania bezpośredniego/DM.allow(domyślnie) zezwala na dostarczanie do celu bezpośredniego.blockblokuje dostarczanie do celu bezpośredniego i emitujereason=dm-blocked.lightContext: gdy ma wartość true, uruchomienia Heartbeat używają lekkiego kontekstu bootstrap i zachowują tylkoHEARTBEAT.mdz plików bootstrap workspace.isolatedSession: gdy ma wartość true, każde uruchomienie Heartbeat odbywa się w świeżej sesji bez wcześniejszej historii rozmowy. Ten sam wzorzec izolacji co CronsessionTarget: "isolated". Zmniejsza koszt tokenów na Heartbeat z około 100K do około 2-5K tokenów.- Per agent: ustaw
agents.list[].heartbeat. Gdy dowolny agent definiujeheartbeat, Heartbeat uruchamiają tylko te agenty. - Heartbeat uruchamia pełne tury agenta — krótsze interwały zużywają więcej tokenów.
agents.defaults.compaction
mode:defaultlubsafeguard(podsumowywanie porcjami dla długiej historii). Zobacz Compaction.provider: identyfikator zarejestrowanego Pluginu dostawcy Compaction. Gdy ustawione, wywoływane jestsummarize()dostawcy zamiast wbudowanego podsumowywania LLM. W razie błędu wraca do wbudowanego trybu. Ustawienie dostawcy wymuszamode: "safeguard". Zobacz Compaction.timeoutSeconds: maksymalna liczba sekund dozwolona dla pojedynczej operacji Compaction, po której OpenClaw ją przerywa. Domyślnie:900.identifierPolicy:strict(domyślnie),offlubcustom.strictdodaje na początku wbudowane wskazówki dotyczące zachowywania nieprzezroczystych identyfikatorów podczas podsumowywania Compaction.identifierInstructions: opcjonalny własny tekst zachowania identyfikatorów używany, gdyidentifierPolicy=custom.postCompactionSections: opcjonalne nazwy sekcji H2/H3 z AGENTS.md do ponownego wstrzyknięcia po Compaction. Domyślnie["Session Startup", "Red Lines"]; ustaw[], aby wyłączyć ponowne wstrzyknięcie. Gdy nieustawione lub jawnie ustawione na tę domyślną parę, starsze nagłówkiEvery Session/Safetysą również akceptowane jako zgodność wsteczna.model: opcjonalne nadpisanieprovider/model-idtylko dla podsumowywania Compaction. Użyj tego, gdy główna sesja ma pozostać przy jednym modelu, ale podsumowania Compaction mają działać na innym; gdy nieustawione, Compaction używa modelu podstawowego sesji.notifyUser: gdytrue, wysyła krótkie powiadomienie do użytkownika, gdy rozpoczyna się Compaction (na przykład „Trwa kompaktowanie kontekstu…” ). Domyślnie wyłączone, aby Compaction pozostawał cichy.memoryFlush: cicha agentowa tura przed automatycznym Compaction, aby zapisać trwałe wspomnienia. Pomijane, gdy workspace jest tylko do odczytu.
agents.defaults.contextPruning
Przycina stare wyniki narzędzi z kontekstu w pamięci przed wysłaniem do LLM. Nie modyfikuje historii sesji zapisanej na dysku.
Zachowanie trybu cache-ttl
Zachowanie trybu cache-ttl
mode: "cache-ttl"włącza przebiegi przycinania.ttlokreśla, jak często przycinanie może uruchomić się ponownie (po ostatnim użyciu pamięci podręcznej).- Przycinanie najpierw miękko skraca zbyt duże wyniki narzędzi, a następnie w razie potrzeby całkowicie czyści starsze wyniki narzędzi.
... pośrodku.Twarde czyszczenie zastępuje cały wynik narzędzia symbolem zastępczym.Uwagi:- Bloki obrazów nigdy nie są skracane/czyszczone.
- Proporcje są oparte na znakach (w przybliżeniu), a nie na dokładnej liczbie tokenów.
- Jeśli istnieje mniej niż
keepLastAssistantswiadomości asystenta, przycinanie jest pomijane.
Strumieniowanie blokowe
- Kanały inne niż Telegram wymagają jawnego
*.blockStreaming: true, aby włączyć odpowiedzi blokowe. - Nadpisania kanału:
channels.<channel>.blockStreamingCoalesce(oraz warianty per konto). Signal/Slack/Discord/Google Chat domyślnie używająminChars: 1500. humanDelay: losowa pauza między odpowiedziami blokowymi.natural= 800–2500 ms. Nadpisanie per agent:agents.list[].humanDelay.
Wskaźniki pisania
- Wartości domyślne:
instantdla czatów bezpośrednich/wzmianek,messagedla niewzmiankowanych czatów grupowych. - Nadpisania per sesja:
session.typingMode,session.typingIntervalSeconds.
agents.defaults.sandbox
Opcjonalny sandboxing dla wbudowanego agenta. Pełny przewodnik znajdziesz w Sandboxing.
Szczegóły sandboxa
Szczegóły sandboxa
Backend:Tryb OpenShell:
docker: lokalny runtime Docker (domyślnie)ssh: ogólny zdalny runtime oparty na SSHopenshell: runtime OpenShell
backend: "openshell", ustawienia specyficzne dla runtime są przenoszone do
plugins.entries.openshell.config.Konfiguracja backendu SSH:target: cel SSH w formieuser@host[:port]command: polecenie klienta SSH (domyślnie:ssh)workspaceRoot: bezwzględny zdalny katalog główny używany dla workspace per zakresidentityFile/certificateFile/knownHostsFile: istniejące lokalne pliki przekazywane do OpenSSHidentityData/certificateData/knownHostsData: zawartość inline lub SecretRef, które OpenClaw materializuje do plików tymczasowych w czasie działaniastrictHostKeyChecking/updateHostKeys: ustawienia zasad klucza hosta OpenSSH
identityDatama pierwszeństwo przedidentityFilecertificateDatama pierwszeństwo przedcertificateFileknownHostsDatama pierwszeństwo przedknownHostsFile- Wartości
*Dataoparte na SecretRef są rozwiązywane z aktywnej migawki runtime sekretów przed rozpoczęciem sesji sandboxa
- inicjuje zdalny workspace raz po utworzeniu lub odtworzeniu
- następnie utrzymuje zdalny workspace SSH jako kanoniczny
- kieruje
exec, narzędzia plikowe i ścieżki mediów przez SSH - nie synchronizuje automatycznie zdalnych zmian z powrotem na hosta
- nie obsługuje kontenerów przeglądarki sandboxa
none: workspace sandboxa per zakres pod~/.openclaw/sandboxesro: workspace sandboxa pod/workspace, workspace agenta montowany tylko do odczytu pod/agentrw: workspace agenta montowany do odczytu i zapisu pod/workspace
session: kontener + workspace per sesjaagent: jeden kontener + workspace per agent (domyślnie)shared: współdzielony kontener i workspace (brak izolacji między sesjami)
mirror: inicjuje zdalne środowisko z lokalnego przedexec, synchronizuje z powrotem poexec; lokalny workspace pozostaje kanonicznyremote: inicjuje zdalne środowisko raz podczas tworzenia sandboxa, a następnie utrzymuje zdalny workspace jako kanoniczny
remote lokalne zmiany hosta wykonane poza OpenClaw nie są automatycznie synchronizowane do sandboxa po kroku inicjalizacji.
Transport odbywa się przez SSH do sandboxa OpenShell, ale Plugin zarządza cyklem życia sandboxa i opcjonalną synchronizacją lustrzaną.setupCommand uruchamia się raz po utworzeniu kontenera (przez sh -lc). Wymaga wychodzącego dostępu do sieci, zapisywalnego katalogu głównego i użytkownika root.Kontenery domyślnie używają network: "none" — ustaw "bridge" (lub własną sieć bridge), jeśli agent potrzebuje dostępu wychodzącego.
"host" jest blokowane. "container:<id>" jest domyślnie blokowane, chyba że jawnie ustawisz
sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true (tryb awaryjny).Przychodzące załączniki są umieszczane w media/inbound/* w aktywnym workspace.docker.binds montuje dodatkowe katalogi hosta; globalne i per-agent binds są scalane.Sandboxowana przeglądarka (sandbox.browser.enabled): Chromium + CDP w kontenerze. URL noVNC jest wstrzykiwany do system prompt. Nie wymaga browser.enabled w openclaw.json.
Dostęp obserwatora noVNC domyślnie używa uwierzytelniania VNC, a OpenClaw emituje URL z krótkotrwałym tokenem (zamiast ujawniać hasło we współdzielonym URL).allowHostControl: false(domyślnie) blokuje sandboxowane sesje przed kierowaniem do przeglądarki hosta.networkdomyślnie ma wartośćopenclaw-sandbox-browser(dedykowana sieć bridge). Ustawbridgetylko wtedy, gdy jawnie chcesz globalnej łączności bridge.cdpSourceRangeopcjonalnie ogranicza ruch przychodzący CDP na krawędzi kontenera do zakresu CIDR (na przykład172.21.0.1/32).sandbox.browser.bindsmontuje dodatkowe katalogi hosta tylko do kontenera sandboxowanej przeglądarki. Gdy ustawione (w tym[]), zastępujedocker.bindsdla kontenera przeglądarki.- Domyślne parametry uruchomienia są zdefiniowane w
scripts/sandbox-browser-entrypoint.shi dostrojone pod hosty kontenerowe:--remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-3d-apis--disable-gpu--disable-software-rasterizer--disable-dev-shm-usage--disable-background-networking--disable-features=TranslateUI--disable-breakpad--disable-crash-reporter--renderer-process-limit=2--no-zygote--metrics-recording-only--disable-extensions(domyślnie włączone)--disable-3d-apis,--disable-software-rasterizeri--disable-gpusą domyślnie włączone i można je wyłączyć przezOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0, jeśli użycie WebGL/3D tego wymaga.OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0ponownie włącza rozszerzenia, jeśli Twój workflow ich wymaga.--renderer-process-limit=2można zmienić przezOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>; ustaw0, aby użyć domyślnego limitu procesów Chromium.- dodatkowo
--no-sandboxi--disable-setuid-sandbox, gdynoSandboxjest włączone. - Wartości domyślne są bazą obrazu kontenera; użyj własnego obrazu przeglądarki z własnym entrypointem, aby zmienić domyślne ustawienia kontenera.
sandbox.docker.binds działają tylko z Dockerem.
Budowanie obrazów:
agents.list (nadpisania per agent)
id: stabilny identyfikator agenta (wymagany).default: gdy ustawionych jest wiele, wygrywa pierwszy (zapisywane jest ostrzeżenie). Jeśli żaden nie jest ustawiony, domyślny jest pierwszy wpis listy.model: forma ciągu nadpisuje tylkoprimary; forma obiektu{ primary, fallbacks }nadpisuje oba ([]wyłącza globalne fallbacki). Zadania Cron, które nadpisują tylkoprimary, nadal dziedziczą domyślne fallbacki, chyba że ustawiszfallbacks: [].params: parametry strumienia per agent scalane ponad wybranym wpisem modelu wagents.defaults.models. Użyj tego do nadpisań specyficznych dla agenta, takich jakcacheRetention,temperaturelubmaxTokens, bez duplikowania całego katalogu modeli.skills: opcjonalna lista dozwolonych Skills per agent. Jeśli pominięta, agent dziedziczyagents.defaults.skills, gdy jest ustawione; jawna lista zastępuje wartości domyślne zamiast je scalać, a[]oznacza brak Skills.thinkingDefault: opcjonalny domyślny poziom thinking per agent (off | minimal | low | medium | high | xhigh | adaptive). Nadpisujeagents.defaults.thinkingDefaultdla tego agenta, gdy nie jest ustawione nadpisanie per wiadomość ani per sesję.reasoningDefault: opcjonalna domyślna widoczność reasoning per agent (on | off | stream). Stosowane, gdy nie ma nadpisania reasoning per wiadomość ani per sesję.fastModeDefault: opcjonalna wartość domyślna per agent dla fast mode (true | false). Stosowane, gdy nie ma nadpisania fast mode per wiadomość ani per sesję.embeddedHarness: opcjonalne nadpisanie polityki niskopoziomowego harnessu per agent. Użyj{ runtime: "codex", fallback: "none" }, aby jeden agent był tylko Codex, a pozostałe zachowały domyślny fallback PI.runtime: opcjonalny deskryptor runtime per agent. Użyjtype: "acp"z domyślnymi ustawieniamiruntime.acp(agent,backend,mode,cwd), gdy agent ma domyślnie używać sesji harnessu ACP.identity.avatar: ścieżka względna do workspace, URLhttp(s)lub URIdata:.identitywyprowadza wartości domyślne:ackReactionzemoji,mentionPatternszname/emoji.subagents.allowAgents: lista dozwolonych identyfikatorów agentów dlasessions_spawn(["*"]= dowolny; domyślnie: tylko ten sam agent).- Zabezpieczenie dziedziczenia sandboxa: jeśli sesja żądająca jest sandboxowana,
sessions_spawnodrzuca cele, które działałyby bez sandboxa. subagents.requireAgentId: gdy true, blokuje wywołaniasessions_spawn, które pomijająagentId(wymusza jawny wybór profilu; domyślnie: false).
Routing wielu agentów
Uruchamiaj wiele izolowanych agentów w jednym Gateway. Zobacz Multi-Agent.Pola dopasowania binding
type(opcjonalne):routedla zwykłego routingu (brak typu domyślnie oznacza route),acpdla trwałych powiązań rozmów ACP.match.channel(wymagane)match.accountId(opcjonalne;*= dowolne konto; pominięte = konto domyślne)match.peer(opcjonalne;{ kind: direct|group|channel, id })match.guildId/match.teamId(opcjonalne; zależne od kanału)acp(opcjonalne; tylko dlatype: "acp"):{ mode, label, cwd, backend }
match.peermatch.guildIdmatch.teamIdmatch.accountId(dokładne, bez peer/guild/team)match.accountId: "*"(na cały kanał)- Agent domyślny
bindings.
Dla wpisów type: "acp" OpenClaw rozwiązuje po dokładnej tożsamości rozmowy (match.channel + konto + match.peer.id) i nie używa powyższej kolejności poziomów powiązań route.
Profile dostępu per agent
Pełny dostęp (bez sandboxa)
Pełny dostęp (bez sandboxa)
Narzędzia tylko do odczytu + workspace
Narzędzia tylko do odczytu + workspace
Brak dostępu do systemu plików (tylko wiadomości)
Brak dostępu do systemu plików (tylko wiadomości)
Sesja
Szczegóły pól sesji
Szczegóły pól sesji
scope: podstawowa strategia grupowania sesji dla kontekstów czatu grupowego.per-sender(domyślnie): każdy nadawca otrzymuje izolowaną sesję w kontekście kanału.global: wszyscy uczestnicy w kontekście kanału współdzielą jedną sesję (używaj tylko wtedy, gdy współdzielony kontekst jest zamierzony).
dmScope: sposób grupowania DM.main: wszystkie DM współdzielą główną sesję.per-peer: izolacja według identyfikatora nadawcy między kanałami.per-channel-peer: izolacja per kanał + nadawca (zalecane dla skrzynek odbiorczych wielu użytkowników).per-account-channel-peer: izolacja per konto + kanał + nadawca (zalecane dla wielu kont).
identityLinks: mapuje kanoniczne identyfikatory do peerów z prefiksem dostawcy dla współdzielenia sesji między kanałami.reset: podstawowa polityka resetu.dailyresetuje oatHourczasu lokalnego;idleresetuje poidleMinutes. Gdy skonfigurowane są oba, wygrywa to, które wygaśnie wcześniej.resetByType: nadpisania per typ (direct,group,thread). Starszedmjest akceptowane jako aliasdirect.parentForkMaxTokens: maksymalna wartośćtotalTokenssesji nadrzędnej dozwolona przy tworzeniu rozwidlonej sesji wątku (domyślnie100000).- Jeśli
totalTokenssesji nadrzędnej przekracza tę wartość, OpenClaw rozpoczyna nową sesję wątku zamiast dziedziczyć historię transkryptu sesji nadrzędnej. - Ustaw
0, aby wyłączyć to zabezpieczenie i zawsze zezwalać na rozwidlanie z sesji nadrzędnej.
- Jeśli
mainKey: starsze pole. Runtime zawsze używa"main"dla głównego kubełka czatu bezpośredniego.agentToAgent.maxPingPongTurns: maksymalna liczba tur odpowiedzi zwrotnych między agentami podczas wymian agent-agent (liczba całkowita, zakres:0–5).0wyłącza łańcuchowanie ping-pong.sendPolicy: dopasowanie pochannel,chatType(direct|group|channel, ze starszym aliasemdm),keyPrefixlubrawKeyPrefix. Pierwsze odrzucenie wygrywa.maintenance: czyszczenie magazynu sesji + kontrola retencji.mode:warnemituje tylko ostrzeżenia;enforcestosuje czyszczenie.pruneAfter: granica wieku dla nieaktualnych wpisów (domyślnie30d).maxEntries: maksymalna liczba wpisów wsessions.json(domyślnie500).rotateBytes: rotujesessions.json, gdy przekroczy ten rozmiar (domyślnie10mb).resetArchiveRetention: retencja dla archiwów transkryptów*.reset.<timestamp>. Domyślnie przyjmuje wartośćpruneAfter; ustawfalse, aby wyłączyć.maxDiskBytes: opcjonalny twardy budżet dyskowy katalogu sesji. W trybiewarnzapisuje ostrzeżenia; w trybieenforcenajpierw usuwa najstarsze artefakty/sesje.highWaterBytes: opcjonalny cel po czyszczeniu budżetu. Domyślnie80%wartościmaxDiskBytes.
threadBindings: globalne wartości domyślne dla funkcji sesji związanych z wątkami.enabled: główny domyślny przełącznik (dostawcy mogą go nadpisywać; Discord używachannels.discord.threadBindings.enabled)idleHours: domyślny automatyczny brak fokusu po bezczynności w godzinach (0wyłącza; dostawcy mogą nadpisywać)maxAgeHours: domyślny twardy maksymalny wiek w godzinach (0wyłącza; dostawcy mogą nadpisywać)
Wiadomości
Prefiks odpowiedzi
Nadpisania per kanał/konto:channels.<channel>.responsePrefix, channels.<channel>.accounts.<id>.responsePrefix.
Rozwiązywanie (wygrywa najbardziej szczegółowe): konto → kanał → globalne. "" wyłącza i zatrzymuje kaskadę. "auto" wyprowadza [{identity.name}].
Zmienne szablonu:
| Zmienna | Opis | Przykład |
|---|---|---|
{model} | Krótka nazwa modelu | claude-opus-4-6 |
{modelFull} | Pełny identyfikator modelu | anthropic/claude-opus-4-6 |
{provider} | Nazwa dostawcy | anthropic |
{thinkingLevel} | Bieżący poziom thinking | high, low, off |
{identity.name} | Nazwa tożsamości agenta | (to samo co "auto") |
{think} jest aliasem dla {thinkingLevel}.
Reakcja ack
- Domyślnie używa
identity.emojiaktywnego agenta, w przeciwnym razie"👀". Ustaw"", aby wyłączyć. - Nadpisania per kanał:
channels.<channel>.ackReaction,channels.<channel>.accounts.<id>.ackReaction. - Kolejność rozwiązywania: konto → kanał →
messages.ackReaction→ fallback tożsamości. - Zakres:
group-mentions(domyślnie),group-all,direct,all. removeAckAfterReply: usuwa ack po odpowiedzi w Slack, Discord i Telegram.messages.statusReactions.enabled: włącza reakcje statusu cyklu życia w Slack, Discord i Telegram. W Slack i Discord brak ustawienia utrzymuje reakcje statusu włączone, gdy reakcje ack są aktywne. W Telegram ustaw to jawnie natrue, aby włączyć reakcje statusu cyklu życia.
Debounce przychodzących wiadomości
Łączy szybkie wiadomości tekstowe od tego samego nadawcy w jedną turę agenta. Media/załączniki są opróżniane natychmiast. Polecenia sterujące omijają debounce.TTS (zamiana tekstu na mowę)
autokontroluje domyślny tryb auto-TTS:off,always,inboundlubtagged./tts on|offmoże nadpisać lokalne preferencje, a/tts statuspokazuje stan efektywny.summaryModelnadpisujeagents.defaults.model.primarydla automatycznego podsumowania.modelOverridesjest domyślnie włączone;modelOverrides.allowProviderdomyślnie ma wartośćfalse(wymaga opt-in).- Klucze API mają wartości zapasowe z
ELEVENLABS_API_KEY/XI_API_KEYorazOPENAI_API_KEY. openai.baseUrlnadpisuje punkt końcowy OpenAI TTS. Kolejność rozwiązywania to konfiguracja, następnieOPENAI_TTS_BASE_URL, a potemhttps://api.openai.com/v1.- Gdy
openai.baseUrlwskazuje punkt końcowy inny niż OpenAI, OpenClaw traktuje go jako serwer TTS zgodny z OpenAI i łagodzi walidację modelu/głosu.
Talk
Ustawienia domyślne dla trybu Talk (macOS/iOS/Android).talk.providermusi odpowiadać kluczowi wtalk.providers, gdy skonfigurowano wielu dostawców Talk.- Starsze płaskie klucze Talk (
talk.voiceId,talk.voiceAliases,talk.modelId,talk.outputFormat,talk.apiKey) służą wyłącznie zgodności i są automatycznie migrowane dotalk.providers.<provider>. - Identyfikatory głosów mają wartości zapasowe z
ELEVENLABS_VOICE_IDlubSAG_VOICE_ID. providers.*.apiKeyakceptuje jawne ciągi znaków lub obiekty SecretRef.- Wartość zapasowa
ELEVENLABS_API_KEYma zastosowanie tylko wtedy, gdy nie skonfigurowano klucza API Talk. providers.*.voiceAliasespozwala dyrektywom Talk używać przyjaznych nazw.silenceTimeoutMskontroluje, jak długo tryb Talk czeka po ciszy użytkownika, zanim wyśle transkrypt. Brak ustawienia zachowuje domyślne okno pauzy platformy (700 ms na macOS i Androidzie, 900 ms na iOS).
Narzędzia
Profile narzędzi
tools.profile ustawia bazową listę dozwolonych przed tools.allow/tools.deny:
Lokalny onboarding domyślnie ustawia w nowych lokalnych konfiguracjach tools.profile: "coding", gdy nie jest ustawione (istniejące jawne profile są zachowywane).
| Profil | Obejmuje |
|---|---|
minimal | tylko session_status |
coding | group:fs, group:runtime, group:web, group:sessions, group:memory, cron, image, image_generate, video_generate |
messaging | group:messaging, sessions_list, sessions_history, sessions_send, session_status |
full | Brak ograniczeń (tak samo jak brak ustawienia) |
Grupy narzędzi
| Grupa | Narzędzia |
|---|---|
group:runtime | exec, process, code_execution (bash jest akceptowane jako alias exec) |
group:fs | read, write, edit, apply_patch |
group:sessions | sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status |
group:memory | memory_search, memory_get |
group:web | web_search, x_search, web_fetch |
group:ui | browser, canvas |
group:automation | cron, gateway |
group:messaging | message |
group:nodes | nodes |
group:agents | agents_list |
group:media | image, image_generate, video_generate, tts |
group:openclaw | Wszystkie wbudowane narzędzia (z wyłączeniem Pluginów dostawców) |
tools.allow / tools.deny
Globalna polityka dozwalania/odrzucania narzędzi (odrzucenie ma pierwszeństwo). Nierozróżniająca wielkości liter, obsługuje wildcardy *. Stosowana nawet wtedy, gdy sandbox Docker jest wyłączony.
tools.byProvider
Dodatkowo ogranicza narzędzia dla określonych dostawców lub modeli. Kolejność: profil bazowy → profil dostawcy → allow/deny.
tools.elevated
Steruje dostępem elevated exec poza sandboxem:
- Nadpisanie per agent (
agents.list[].tools.elevated) może tylko dalej ograniczać. /elevated on|off|ask|fullzapisuje stan per sesja; dyrektywy inline mają zastosowanie do pojedynczej wiadomości.- Elevated
execomija sandboxing i używa skonfigurowanej ścieżki ucieczki (gatewaydomyślnie lubnode, gdy celem exec jestnode).
tools.exec
tools.loopDetection
Kontrole bezpieczeństwa pętli narzędzi są domyślnie wyłączone. Ustaw enabled: true, aby aktywować wykrywanie.
Ustawienia można zdefiniować globalnie w tools.loopDetection i nadpisywać per agent w agents.list[].tools.loopDetection.
historySize: maksymalna historia wywołań narzędzi przechowywana do analizy pętli.warningThreshold: próg powtarzającego się wzorca bez postępu dla ostrzeżeń.criticalThreshold: wyższy próg powtarzania dla blokowania krytycznych pętli.globalCircuitBreakerThreshold: próg twardego zatrzymania dla dowolnego przebiegu bez postępu.detectors.genericRepeat: ostrzega o powtarzanych wywołaniach tego samego narzędzia z tymi samymi argumentami.detectors.knownPollNoProgress: ostrzega/blokuje znane narzędzia odpytywania (process.poll,command_statusitd.).detectors.pingPong: ostrzega/blokuje naprzemienne wzorce par bez postępu.- Jeśli
warningThreshold >= criticalThresholdlubcriticalThreshold >= globalCircuitBreakerThreshold, walidacja kończy się błędem.
tools.web
tools.media
Konfiguruje rozumienie przychodzących mediów (obraz/audio/wideo):
Pola wpisu modelu mediów
Pola wpisu modelu mediów
Wpis dostawcy (
type: "provider" lub pominięte):provider: identyfikator dostawcy API (openai,anthropic,google/gemini,groqitd.)model: nadpisanie identyfikatora modeluprofile/preferredProfile: wybór profiluauth-profiles.json
type: "cli"):command: wykonywalne polecenie do uruchomieniaargs: argumenty szablonowe (obsługuje{{MediaPath}},{{Prompt}},{{MaxChars}}itd.)
capabilities: opcjonalna lista (image,audio,video). Domyślnie:openai/anthropic/minimax→ image,google→ image+audio+video,groq→ audio.prompt,maxChars,maxBytes,timeoutSeconds,language: nadpisania per wpis.- Błędy powodują przejście do kolejnego wpisu.
auth-profiles.json → zmienne środowiskowe → models.providers.*.apiKey.Pola async completion:asyncCompletion.directSend: gdytrue, zakończone zadania asynchronicznemusic_generateivideo_generatenajpierw próbują bezpośredniego dostarczenia do kanału. Domyślnie:false(starsza ścieżka wybudzania sesji żądającej/dostarczania modelu).
tools.agentToAgent
tools.sessions
Kontroluje, które sesje mogą być wskazywane przez narzędzia sesji (sessions_list, sessions_history, sessions_send).
Domyślnie: tree (bieżąca sesja + sesje utworzone przez nią, takie jak subagenci).
self: tylko bieżący klucz sesji.tree: bieżąca sesja + sesje utworzone przez bieżącą sesję (subagenci).agent: dowolna sesja należąca do bieżącego identyfikatora agenta (może obejmować innych użytkowników, jeśli używasz sesji per nadawca pod tym samym identyfikatorem agenta).all: dowolna sesja. Kierowanie między agentami nadal wymagatools.agentToAgent.- Ograniczenie sandboxa: gdy bieżąca sesja jest sandboxowana i
agents.defaults.sandbox.sessionToolsVisibility="spawned", widoczność jest wymuszana natree, nawet jeślitools.sessions.visibility="all".
tools.sessions_spawn
Kontroluje obsługę załączników inline dla sessions_spawn.
- Załączniki są obsługiwane tylko dla
runtime: "subagent". Runtime ACP je odrzuca. - Pliki są materializowane w workspace potomnym pod
.openclaw/attachments/<uuid>/z.manifest.json. - Zawartość załączników jest automatycznie redagowana z utrwalania transkryptu.
- Wejścia base64 są walidowane przy użyciu ścisłych kontroli alfabetu/dopełnienia i zabezpieczenia rozmiaru przed dekodowaniem.
- Uprawnienia plików to
0700dla katalogów i0600dla plików. - Czyszczenie zależy od polityki
cleanup:deletezawsze usuwa załączniki;keepzachowuje je tylko wtedy, gdyretainOnSessionKeep: true.
tools.experimental
Flagi eksperymentalnych wbudowanych narzędzi. Domyślnie wyłączone, chyba że ma zastosowanie reguła automatycznego włączenia strict-agentic GPT-5.
planTool: włącza strukturalne narzędzieupdate_plando śledzenia nietrywialnej pracy wieloetapowej.- Domyślnie:
false, chyba żeagents.defaults.embeddedPi.executionContract(lub nadpisanie per agent) jest ustawione na"strict-agentic"dla przebiegu OpenAI lub OpenAI Codex z rodziny GPT-5. Ustawtrue, aby wymusić włączenie narzędzia poza tym zakresem, lubfalse, aby pozostawić je wyłączone nawet dla przebiegów strict-agentic GPT-5. - Gdy włączone, system prompt również dodaje wskazówki użycia, aby model używał go tylko do istotnej pracy i utrzymywał co najwyżej jeden krok
in_progress.
agents.defaults.subagents
model: domyślny model dla uruchamianych subagentów. Jeśli pominięty, subagenci dziedziczą model wywołującego.allowAgents: domyślna lista dozwolonych identyfikatorów agentów docelowych dlasessions_spawn, gdy agent żądający nie ustawia własnegosubagents.allowAgents(["*"]= dowolny; domyślnie: tylko ten sam agent).runTimeoutSeconds: domyślny limit czasu (sekundy) dlasessions_spawn, gdy wywołanie narzędzia pomijarunTimeoutSeconds.0oznacza brak limitu czasu.- Polityka narzędzi per subagent:
tools.subagents.tools.allow/tools.subagents.tools.deny.
Niestandardowi dostawcy i base URL-e
OpenClaw używa wbudowanego katalogu modeli. Dodawaj niestandardowych dostawców przezmodels.providers w konfiguracji lub ~/.openclaw/agents/<agentId>/agent/models.json.
- Użyj
authHeader: true+headersdla niestandardowych potrzeb uwierzytelniania. - Nadpisz katalog główny konfiguracji agenta przez
OPENCLAW_AGENT_DIR(lubPI_CODING_AGENT_DIR, starszy alias zmiennej środowiskowej). - Priorytet scalania dla pasujących identyfikatorów dostawców:
- Niepuste wartości
baseUrlzmodels.jsonagenta mają pierwszeństwo. - Niepuste wartości
apiKeyagenta mają pierwszeństwo tylko wtedy, gdy ten dostawca nie jest zarządzany przez SecretRef w bieżącym kontekście config/auth-profile. - Wartości
apiKeydostawcy zarządzanego przez SecretRef są odświeżane ze znaczników źródła (ENV_VAR_NAMEdla odwołań env,secretref-manageddla odwołań file/exec) zamiast utrwalania rozwiązanych sekretów. - Wartości nagłówków dostawcy zarządzanego przez SecretRef są odświeżane ze znaczników źródła (
secretref-env:ENV_VAR_NAMEdla odwołań env,secretref-manageddla odwołań file/exec). - Puste lub brakujące
apiKey/baseUrlagenta wracają domodels.providersw konfiguracji. - Pasujące
contextWindow/maxTokensmodelu używają wyższej wartości z jawnej konfiguracji i domyślnych wartości katalogu. - Pasujące
contextTokensmodelu zachowuje jawny limit runtime, gdy jest obecny; użyj go, aby ograniczyć efektywny kontekst bez zmiany natywnych metadanych modelu. - Użyj
models.mode: "replace", gdy chcesz, aby konfiguracja całkowicie nadpisałamodels.json. - Utrwalanie znaczników jest autorytatywne względem źródła: znaczniki są zapisywane z aktywnej migawki konfiguracji źródłowej (przed rozwiązaniem), a nie z rozwiązanych wartości sekretów runtime.
- Niepuste wartości
Szczegóły pól dostawcy
models.mode: zachowanie katalogu dostawców (mergelubreplace).models.providers: mapa niestandardowych dostawców kluczowana identyfikatorem dostawcy.models.providers.*.api: adapter żądań (openai-completions,openai-responses,anthropic-messages,google-generative-aiitd.).models.providers.*.apiKey: poświadczenie dostawcy (preferuj podstawienie SecretRef/env).models.providers.*.auth: strategia uwierzytelniania (api-key,token,oauth,aws-sdk).models.providers.*.injectNumCtxForOpenAICompat: dla Ollama +openai-completionswstrzykujeoptions.num_ctxdo żądań (domyślnie:true).models.providers.*.authHeader: wymusza przesyłanie poświadczenia w nagłówkuAuthorization, gdy jest to wymagane.models.providers.*.baseUrl: bazowy URL nadrzędnego API.models.providers.*.headers: dodatkowe statyczne nagłówki dla routingu proxy/dzierżawy.models.providers.*.request: nadpisania transportu dla żądań HTTP dostawcy modeli.request.headers: dodatkowe nagłówki (scalane z domyślnymi ustawieniami dostawcy). Wartości akceptują SecretRef.request.auth: nadpisanie strategii uwierzytelniania. Tryby:"provider-default"(użyj wbudowanego uwierzytelniania dostawcy),"authorization-bearer"(ztoken),"header"(zheaderName,value, opcjonalnymprefix).request.proxy: nadpisanie proxy HTTP. Tryby:"env-proxy"(użyj zmiennych środowiskowychHTTP_PROXY/HTTPS_PROXY),"explicit-proxy"(zurl). Oba tryby akceptują opcjonalny pod-obiekttls.request.tls: nadpisanie TLS dla połączeń bezpośrednich. Pola:ca,cert,key,passphrase(wszystkie akceptują SecretRef),serverName,insecureSkipVerify.request.allowPrivateNetwork: gdytrue, zezwala na HTTPS dobaseUrl, gdy DNS rozwiązuje się do prywatnych, CGNAT lub podobnych zakresów, przez zabezpieczenie pobierania HTTP dostawcy (operator opt-in dla zaufanych samohostowanych punktów końcowych zgodnych z OpenAI). WebSocket używa tego samegorequestdla nagłówków/TLS, ale nie tego zabezpieczenia SSRF pobierania. Domyślniefalse.
models.providers.*.models: jawne wpisy katalogu modeli dostawcy.models.providers.*.models.*.contextWindow: natywne metadane okna kontekstu modelu.models.providers.*.models.*.contextTokens: opcjonalny limit kontekstu runtime. Użyj tego, gdy chcesz mniejszy efektywny budżet kontekstu niż natywnecontextWindowmodelu.models.providers.*.models.*.compat.supportsDeveloperRole: opcjonalna wskazówka zgodności. Dlaapi: "openai-completions"z niepustym nienatywnymbaseUrl(host różny odapi.openai.com) OpenClaw wymusza to w runtime nafalse. Puste/pominiętebaseUrlzachowuje domyślne zachowanie OpenAI.models.providers.*.models.*.compat.requiresStringContent: opcjonalna wskazówka zgodności dla punktów końcowych czatu zgodnych z OpenAI obsługujących tylko ciągi znaków. Gdytrue, OpenClaw spłaszcza czysto tekstowe tablicemessages[].contentdo zwykłych ciągów przed wysłaniem żądania.plugins.entries.amazon-bedrock.config.discovery: główny katalog ustawień automatycznego wykrywania Bedrock.plugins.entries.amazon-bedrock.config.discovery.enabled: włącza/wyłącza niejawne wykrywanie.plugins.entries.amazon-bedrock.config.discovery.region: region AWS dla wykrywania.plugins.entries.amazon-bedrock.config.discovery.providerFilter: opcjonalny filtr identyfikatora dostawcy do wykrywania ukierunkowanego.plugins.entries.amazon-bedrock.config.discovery.refreshInterval: interwał odpytywania do odświeżania wykrywania.plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow: zapasowe okno kontekstu dla wykrytych modeli.plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens: zapasowa maksymalna liczba tokenów wyjściowych dla wykrytych modeli.
Przykłady dostawców
Cerebras (GLM 4.6 / 4.7)
Cerebras (GLM 4.6 / 4.7)
cerebras/zai-glm-4.7 dla Cerebras; zai/glm-4.7 dla bezpośredniego Z.AI.OpenCode
OpenCode
OPENCODE_API_KEY (lub OPENCODE_ZEN_API_KEY). Używaj odwołań opencode/... dla katalogu Zen lub opencode-go/... dla katalogu Go. Skrót: openclaw onboard --auth-choice opencode-zen lub openclaw onboard --auth-choice opencode-go.Z.AI (GLM-4.7)
Z.AI (GLM-4.7)
ZAI_API_KEY. z.ai/* i z-ai/* są akceptowanymi aliasami. Skrót: openclaw onboard --auth-choice zai-api-key.- Ogólny punkt końcowy:
https://api.z.ai/api/paas/v4 - Punkt końcowy do kodowania (domyślny):
https://api.z.ai/api/coding/paas/v4 - Dla ogólnego punktu końcowego zdefiniuj niestandardowego dostawcę z nadpisaniem base URL.
Moonshot AI (Kimi)
Moonshot AI (Kimi)
baseUrl: "https://api.moonshot.cn/v1" lub openclaw onboard --auth-choice moonshot-api-key-cn.Natywne punkty końcowe Moonshot ogłaszają zgodność użycia strumieniowania na współdzielonym
transporcie openai-completions, a OpenClaw opiera się tu na możliwościach punktu końcowego,
a nie wyłącznie na wbudowanym identyfikatorze dostawcy.Kimi Coding
Kimi Coding
openclaw onboard --auth-choice kimi-code-api-key.Synthetic (zgodny z Anthropic)
Synthetic (zgodny z Anthropic)
/v1 (klient Anthropic dopisuje je sam). Skrót: openclaw onboard --auth-choice synthetic-api-key.MiniMax M2.7 (bezpośrednio)
MiniMax M2.7 (bezpośrednio)
MINIMAX_API_KEY. Skróty:
openclaw onboard --auth-choice minimax-global-api lub
openclaw onboard --auth-choice minimax-cn-api.
Katalog modeli domyślnie zawiera tylko M2.7.
Na ścieżce strumieniowania zgodnej z Anthropic OpenClaw domyślnie wyłącza thinking MiniMax,
chyba że jawnie ustawisz thinking. /fast on lub
params.fastMode: true przepisuje MiniMax-M2.7 na
MiniMax-M2.7-highspeed.Modele lokalne (LM Studio)
Modele lokalne (LM Studio)
Zobacz Local Models. W skrócie: uruchamiaj duży model lokalny przez LM Studio Responses API na odpowiednio wydajnym sprzęcie; zachowaj hostowane modele jako scalone dla fallbacku.
Skills
allowBundled: opcjonalna lista dozwolonych tylko dla bundled Skills (Skills zarządzane/workspace bez zmian).load.extraDirs: dodatkowe współdzielone katalogi główne Skills (najniższy priorytet).install.preferBrew: gdy true, preferuje instalatory Homebrew, jeślibrewjest dostępne, zanim przejdzie do innych rodzajów instalatorów.install.nodeManager: preferencja instalatora node dla specyfikacjimetadata.openclaw.install(npm|pnpm|yarn|bun).entries.<skillKey>.enabled: falsewyłącza Skill nawet jeśli jest bundled/zainstalowany.entries.<skillKey>.apiKey: wygodne ustawienie dla Skills deklarujących główną zmienną env (jawny ciąg znaków lub obiekt SecretRef).
Plugins
- Ładowane z
~/.openclaw/extensions,<workspace>/.openclaw/extensionsorazplugins.load.paths. - Wykrywanie akceptuje natywne Plugins OpenClaw oraz zgodne bundli Codex i Claude, w tym bundli Claude o domyślnym układzie bez manifestu.
- Zmiany konfiguracji wymagają restartu Gateway.
allow: opcjonalna lista dozwolonych (ładują się tylko wymienione Plugins).denyma pierwszeństwo.plugins.entries.<id>.apiKey: wygodne pole klucza API na poziomie Pluginu (gdy obsługiwane przez Plugin).plugins.entries.<id>.env: mapa zmiennych środowiskowych o zakresie Pluginu.plugins.entries.<id>.hooks.allowPromptInjection: gdyfalse, core blokujebefore_prompt_buildi ignoruje pola mutujące prompt ze starszegobefore_agent_start, zachowując przy tym starszemodelOverrideiproviderOverride. Dotyczy natywnych hooków Pluginów i obsługiwanych katalogów hooków dostarczanych przez bundle.plugins.entries.<id>.subagent.allowModelOverride: jawnie ufa temu Pluginowi, że może żądać nadpisańproviderimodelper uruchomienie dla przebiegów subagenta w tle.plugins.entries.<id>.subagent.allowedModels: opcjonalna lista dozwolonych kanonicznych celówprovider/modeldla zaufanych nadpisań subagentów. Używaj"*"tylko wtedy, gdy celowo chcesz zezwolić na dowolny model.plugins.entries.<id>.config: obiekt konfiguracji zdefiniowany przez Plugin (walidowany względem natywnego schematu Pluginu OpenClaw, gdy jest dostępny).plugins.entries.firecrawl.config.webFetch: ustawienia dostawcy web-fetch Firecrawl.apiKey: klucz API Firecrawl (akceptuje SecretRef). Wartość zapasowa pochodzi zplugins.entries.firecrawl.config.webSearch.apiKey, starszegotools.web.fetch.firecrawl.apiKeylub zmiennej środowiskowejFIRECRAWL_API_KEY.baseUrl: bazowy URL API Firecrawl (domyślnie:https://api.firecrawl.dev).onlyMainContent: wyodrębnia tylko główną treść stron (domyślnie:true).maxAgeMs: maksymalny wiek pamięci podręcznej w milisekundach (domyślnie:172800000/ 2 dni).timeoutSeconds: limit czasu żądania scrapingu w sekundach (domyślnie:60).
plugins.entries.xai.config.xSearch: ustawienia xAI X Search (wyszukiwanie webowe Grok).enabled: włącza 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: harmonogram Cron dla każdego pełnego przebiegu Dreaming (domyślnie"0 3 * * *").- polityka faz i progi są szczegółami implementacji (nie są kluczami konfiguracji przeznaczonymi dla użytkownika).
- Pełna konfiguracja pamięci znajduje się w Memory configuration reference:
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Włączone Plugins z bundli Claude mogą także dostarczać osadzone wartości domyślne Pi z
settings.json; OpenClaw stosuje je jako oczyszczone ustawienia agentów, a nie jako surowe łatki konfiguracji OpenClaw. plugins.slots.memory: wybiera identyfikator aktywnego Pluginu pamięci albo"none", aby wyłączyć Plugins pamięci.plugins.slots.contextEngine: wybiera identyfikator aktywnego Pluginu silnika kontekstu; domyślnie"legacy", chyba że zainstalujesz i wybierzesz inny silnik.plugins.installs: metadane instalacji zarządzane przez CLI używane przezopenclaw plugins update.- Obejmuje
source,spec,sourcePath,installPath,version,resolvedName,resolvedVersion,resolvedSpec,integrity,shasum,resolvedAt,installedAt. - Traktuj
plugins.installs.*jako stan zarządzany; preferuj polecenia CLI zamiast ręcznych edycji.
- Obejmuje
Browser
evaluateEnabled: falsewyłączaact:evaluateiwait --fn.ssrfPolicy.dangerouslyAllowPrivateNetworkjest wyłączone, gdy nie jest ustawione, więc nawigacja Browser pozostaje domyślnie restrykcyjna.- Ustaw
ssrfPolicy.dangerouslyAllowPrivateNetwork: truetylko wtedy, gdy celowo ufasz nawigacji Browser do sieci prywatnych. - W trybie ścisłym zdalne punkty końcowe profili CDP (
profiles.*.cdpUrl) podlegają temu samemu blokowaniu sieci prywatnych podczas kontroli osiągalności/wykrywania. ssrfPolicy.allowPrivateNetworkpozostaje obsługiwane jako starszy alias.- W trybie ścisłym używaj
ssrfPolicy.hostnameAllowlistissrfPolicy.allowedHostnamesdla jawnych wyjątków. - Profile zdalne są tylko do podłączania (start/stop/reset wyłączone).
profiles.*.cdpUrlakceptujehttp://,https://,ws://iwss://. Używaj HTTP(S), gdy chcesz, aby OpenClaw wykrył/json/version; używaj WS(S), gdy dostawca przekazuje bezpośredni URL DevTools WebSocket.- Profile
existing-sessiondziałają tylko na hoście i używają Chrome MCP zamiast CDP. - Profile
existing-sessionmogą ustawiaćuserDataDir, aby kierować na konkretny profil przeglądarki opartej na Chromium, takiej jak Brave lub Edge. - Profile
existing-sessionzachowują bieżące limity tras Chrome MCP: działania oparte na snapshot/ref zamiast targetowania selektorami CSS, hooki przesyłania jednego pliku, brak nadpisań limitu czasu dialogów, brakwait --load networkidleoraz brakresponsebody, eksportu PDF, przechwytywania pobrań i działań wsadowych. - Lokalne zarządzane profile
openclawautomatycznie przypisującdpPorticdpUrl; jawnie ustawiajcdpUrltylko dla zdalnego CDP. - Kolejność automatycznego wykrywania: domyślna przeglądarka, jeśli jest oparta na Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
- Usługa sterowania: tylko loopback (port wyprowadzany z
gateway.port, domyślnie18791). extraArgsdopisuje dodatkowe flagi uruchomienia do lokalnego startu Chromium (na przykład--disable-gpu, rozmiar okna lub flagi debugowania).
UI
seamColor: kolor akcentu dla chrome natywnego UI aplikacji (odcień dymku trybu Talk itd.).assistant: nadpisanie tożsamości Control UI. Wartość zapasowa pochodzi z aktywnej tożsamości agenta.
Gateway
Szczegóły pól Gateway
Szczegóły pól Gateway
mode:local(uruchom Gateway) lubremote(połącz ze zdalnym Gateway). Gateway odmawia uruchomienia, jeśli nie jestlocal.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 IP Tailscale) lubcustom.- Starsze aliasy bind: używaj wartości trybu bind w
gateway.bind(auto,loopback,lan,tailnet,custom), a nie aliasów hosta (0.0.0.0,127.0.0.1,localhost,::,::1). - Uwaga dotycząca Dockera: domyślny bind
loopbacknasłuchuje na127.0.0.1wewnątrz kontenera. Przy sieci bridge Dockera (-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. - Auth: domyślnie wymagane. Bindy inne niż loopback wymagają uwierzytelniania Gateway. W praktyce oznacza to współdzielony token/hasło albo reverse proxy świadome tożsamości z
gateway.auth.mode: "trusted-proxy". Kreator onboardingu domyślnie generuje token. - Jeśli skonfigurowane są jednocześnie
gateway.auth.tokenigateway.auth.password(w tym SecretRef), ustaw jawniegateway.auth.modenatokenlubpassword. 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 dla zaufanych lokalnych konfiguracji local loopback; ten tryb celowo nie jest oferowany przez prompty onboardingowe.gateway.auth.mode: "trusted-proxy": deleguje uwierzytelnianie do reverse proxy świadomego tożsamości i ufa nagłówkom tożsamości zgateway.trustedProxies(zobacz Trusted Proxy Auth). Ten tryb oczekuje źródła proxy innego niż loopback; reverse proxy na tym samym hoście przez loopback nie spełniają wymagań uwierzytelniania trusted-proxy.gateway.auth.allowTailscale: gdytrue, nagłówki tożsamości Tailscale Serve mogą spełniać uwierzytelnianie Control UI/WebSocket (weryfikowane przeztailscale whois). Punkty końcowe HTTP API nie używają tego uwierzytelniania nagłówkiem Tailscale; stosują normalny tryb uwierzytelniania HTTP Gateway. Ten beztokenowy przepływ zakłada, że host Gateway jest zaufany. Domyślnietrue, gdytailscale.mode = "serve".gateway.auth.rateLimit: opcjonalny limiter nieudanych prób uwierzytelniania. Stosowany per IP klienta i per zakres auth (współdzielony sekret i token urządzenia są śledzone niezależnie). Zablokowane próby zwracają429+Retry-After.- W asynchronicznej ścieżce Tailscale Serve Control UI nieudane próby dla tego samego
{scope, clientIp}są serializowane przed zapisem porażki. Współbieżne błędne próby od tego samego klienta mogą więc uruchomić limiter przy drugim żądaniu zamiast przejść równolegle jako zwykłe niedopasowania. gateway.auth.rateLimit.exemptLoopbackdomyślnie ma wartośćtrue; ustawfalse, jeśli celowo chcesz ograniczać ruchem także localhost (dla środowisk testowych lub ścisłych wdrożeń proxy).
- W asynchronicznej ścieżce Tailscale Serve Control UI nieudane próby dla tego samego
- Próby uwierzytelniania WS pochodzące z przeglądarki są zawsze ograniczane z wyłączonym wyjątkiem dla loopbacka (dodatkowa warstwa obrony przed brutalnym atakiem z przeglądarki na localhost).
- Na loopback te blokady pochodzące z przeglądarki są izolowane per znormalizowana wartość
Origin, więc powtarzające się błędy z jednego źródła localhost nie blokują automatycznie innego źródła. tailscale.mode:serve(tylko tailnet, bind loopback) lubfunnel(publiczne, wymaga auth).controlUi.allowedOrigins: jawna lista dozwolonych źródeł przeglądarki dla połączeń Gateway WebSocket. Wymagana, gdy oczekiwani są klienci przeglądarkowi z innych źródeł niż loopback.controlUi.dangerouslyAllowHostHeaderOriginFallback: niebezpieczny tryb włączający fallback źródła oparty na nagłówku Host dla wdrożeń, które celowo opierają się na polityce źródła z nagłówka Host.remote.transport:ssh(domyślnie) lubdirect(ws/wss). Dladirectremote.urlmusi byćws://lubwss://.OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: awaryjne nadpisanie po stronie klienta, które zezwala na jawnews://do zaufanych adresów IP sieci prywatnej; domyślnie jawny tekst pozostaje dozwolony tylko dla loopback.gateway.remote.token/.passwordto pola poświadczeń klienta zdalnego. Same w sobie nie konfigurują uwierzytelniania Gateway.gateway.push.apns.relay.baseUrl: bazowy HTTPS URL zewnętrznego przekaźnika APNs używanego przez oficjalne/TestFlight buildy iOS po opublikowaniu przez nie rejestracji opartych na przekaźniku do Gateway. Ten URL musi odpowiadać URL-owi przekaźnika skompilowanemu w buildzie iOS.gateway.push.apns.relay.timeoutMs: limit czasu wysyłania Gateway-do-przekaźnika w milisekundach. Domyślnie10000.- Rejestracje oparte na przekaźniku są delegowane do określonej tożsamości Gateway. Sparowana aplikacja iOS pobiera
gateway.identity.get, dołącza tę tożsamość do rejestracji przekaźnika i przekazuje do Gateway uprawnienie wysyłania o zakresie rejestracji. Inny Gateway nie może ponownie użyć tej zapisanej rejestracji. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: tymczasowe nadpisania środowiskowe dla powyższej konfiguracji przekaźnika.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: tylko deweloperska furtka dla URL-i przekaźnika HTTP na loopback. Produkcyjne URL-e przekaźnika powinny pozostać przy HTTPS.gateway.channelHealthCheckMinutes: interwał monitora zdrowia kanałów w minutach. Ustaw0, aby globalnie wyłączyć restarty monitora zdrowia. Domyślnie:5.gateway.channelStaleEventThresholdMinutes: próg nieaktualnego socketu w minutach. Zachowaj wartość większą lub równągateway.channelHealthCheckMinutes. Domyślnie:30.gateway.channelMaxRestartsPerHour: maksymalna liczba restartów monitora zdrowia na kanał/konto w ruchomej godzinie. Domyślnie:10.channels.<provider>.healthMonitor.enabled: rezygnacja per kanał z restartów monitora zdrowia przy zachowaniu globalnego monitora.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: nadpisanie per konto dla kanałów z wieloma kontami. Gdy ustawione, ma pierwszeństwo przed nadpisaniem na poziomie kanału.- Lokalne ścieżki wywołań Gateway mogą używać
gateway.remote.*jako wartości zapasowej 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ę bezpiecznie jako zamknięte (bez maskującego zdalnego fallbacku). trustedProxies: adresy IP reverse proxy, które kończą TLS lub wstrzykują nagłówki przekazanego klienta. Wymieniaj tylko proxy, które kontrolujesz. Wpisy loopback są nadal prawidłowe dla konfiguracji wykrywania tego samego hosta/proxy lokalnego (na przykład Tailscale Serve lub lokalne reverse proxy), ale nie sprawiają, że żądania loopback kwalifikują się dogateway.auth.mode: "trusted-proxy".allowRealIpFallback: gdytrue, Gateway akceptujeX-Real-IP, jeśli brakujeX-Forwarded-For. Domyślniefalsedla zachowania fail-closed.gateway.tools.deny: dodatkowe nazwy narzędzi blokowane dla HTTPPOST /tools/invoke(rozszerza domyślną listę blokad).gateway.tools.allow: usuwa nazwy narzędzi z domyślnej listy blokad HTTP.
Punkty końcowe zgodne z OpenAI
- Chat Completions: domyślnie wyłączone. Włącz przez
gateway.http.endpoints.chatCompletions.enabled: true. - Responses API:
gateway.http.endpoints.responses.enabled. - Utwardzanie wejścia URL dla Responses:
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistPuste listy dozwolonych są traktowane jako brak ustawienia; użyjgateway.http.endpoints.responses.files.allowUrl=falsei/lubgateway.http.endpoints.responses.images.allowUrl=false, aby wyłączyć pobieranie URL-i.
- Opcjonalny nagłówek utwardzający odpowiedź:
gateway.http.securityHeaders.strictTransportSecurity(ustawiaj tylko dla kontrolowanych przez siebie źródeł HTTPS; zobacz Trusted Proxy Auth)
Izolacja wielu instancji
Uruchamiaj wiele Gateway na jednym hoście z unikalnymi portami i katalogami stanu:--dev (używa ~/.openclaw-dev + port 19001), --profile <name> (używa ~/.openclaw-<name>).
Zobacz Multiple Gateways.
gateway.tls
enabled: włącza kończenie TLS na listenerze Gateway (HTTPS/WSS) (domyślnie:false).autoGenerate: automatycznie generuje lokalną samopodpisaną parę certyfikat/klucz, gdy nie skonfigurowano jawnych plików; tylko do użytku lokalnego/deweloperskiego.certPath: ścieżka systemu plików do pliku certyfikatu TLS.keyPath: ścieżka systemu plików do prywatnego klucza TLS; utrzymuj ograniczone uprawnienia.caPath: opcjonalna ścieżka pakietu CA do weryfikacji klienta lub niestandardowych łańcuchów zaufania.
gateway.reload
mode: kontroluje sposób stosowania edycji konfiguracji w runtime."off": ignoruje edycje na żywo; zmiany wymagają jawnego restartu."restart": zawsze restartuje proces Gateway przy zmianie konfiguracji."hot": stosuje zmiany w procesie bez restartu."hybrid"(domyślnie): najpierw próbuje hot reload; w razie potrzeby wraca do restartu.
debounceMs: okno debounce w ms przed zastosowaniem zmian konfiguracji (nieujemna liczba całkowita).deferralTimeoutMs: maksymalny czas w ms oczekiwania na operacje w toku przed wymuszeniem restartu (domyślnie:300000= 5 minut).
Hooki
Authorization: Bearer <token> lub x-openclaw-token: <token>.
Tokeny hooków w query string są odrzucane.
Uwagi dotyczące walidacji i bezpieczeństwa:
hooks.enabled=truewymaga niepustegohooks.token.hooks.tokenmusi być różny odgateway.auth.token; ponowne użycie tokenu Gateway jest odrzucane.hooks.pathnie może być/; używaj dedykowanej podścieżki, takiej jak/hooks.- Jeśli
hooks.allowRequestSessionKey=true, ograniczhooks.allowedSessionKeyPrefixes(na przykład["hook:"]).
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }sessionKeyz ładunku żądania jest akceptowany tylko wtedy, gdyhooks.allowRequestSessionKey=true(domyślnie:false).
POST /hooks/<name>→ rozwiązywane przezhooks.mappings
Szczegóły mapowania
Szczegóły mapowania
match.pathdopasowuje podścieżkę po/hooks(np./hooks/gmail→gmail).match.sourcedopasowuje pole ładunku dla ścieżek ogólnych.- Szablony takie jak
{{messages[0].subject}}odczytują dane z ładunku. transformmoże wskazywać moduł JS/TS zwracający akcję hooka.transform.modulemusi być ścieżką względną i pozostawać w obrębiehooks.transformsDir(ścieżki bezwzględne i traversal są odrzucane).
agentIdkieruje do konkretnego agenta; nieznane identyfikatory wracają do domyślnego.allowedAgentIds: ogranicza jawny routing (*lub pominięte = zezwól na wszystkie,[]= zabroń wszystkich).defaultSessionKey: opcjonalny stały klucz sesji dla przebiegów agenta hooka bez jawnegosessionKey.allowRequestSessionKey: pozwala wywołującym/hooks/agentustawiaćsessionKey(domyślnie:false).allowedSessionKeyPrefixes: opcjonalna lista dozwolonych prefiksów dla jawnych wartościsessionKey(żądanie + mapowanie), np.["hook:"].deliver: truewysyła końcową odpowiedź do kanału;channeldomyślnie ma wartośćlast.modelnadpisuje LLM dla tego przebiegu hooka (musi być dozwolony, jeśli ustawiono katalog modeli).
Integracja Gmail
- Gateway automatycznie uruchamia
gog gmail watch serveprzy starcie, gdy jest skonfigurowane. UstawOPENCLAW_SKIP_GMAIL_WATCHER=1, aby to wyłączyć. - Nie uruchamiaj osobnego
gog gmail watch serverównolegle z Gateway.
Canvas host
- 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). - Bindy inne niż loopback: ścieżki canvas wymagają uwierzytelniania Gateway (token/hasło/trusted-proxy), tak samo jak inne powierzchnie HTTP Gateway.
- Node WebViews zwykle nie wysyłają nagłówków auth; po sparowaniu i połączeniu node Gateway ogłasza URL-e capability o zakresie node dla dostępu do canvas/A2UI.
- URL-e capability są powiązane z aktywną sesją WS node i szybko wygasają. Fallback oparty na IP nie jest używany.
- Wstrzykuje klienta live reload do serwowanego HTML.
- Automatycznie tworzy startowy
index.html, gdy katalog jest pusty. - Serwuje też A2UI pod
/__openclaw__/a2ui/. - Zmiany wymagają restartu Gateway.
- Wyłącz live reload dla dużych katalogów lub przy błędach
EMFILE.
Discovery
mDNS (Bonjour)
minimal(domyślnie): pomijacliPath+sshPortz rekordów TXT.full: uwzględniacliPath+sshPort.- Nazwa hosta domyślnie ma wartość
openclaw. Nadpisz przezOPENCLAW_MDNS_HOSTNAME.
Wide-area (DNS-SD)
~/.openclaw/dns/. Do wykrywania między sieciami połącz to z serwerem DNS (zalecany CoreDNS) + Tailscale split DNS.
Konfiguracja: openclaw dns setup --apply.
Środowisko
env (inline env vars)
- Inline env vars są stosowane tylko wtedy, gdy w środowisku procesu brakuje klucza.
- Pliki
.env:.envz bieżącego katalogu roboczego +~/.openclaw/.env(żaden nie nadpisuje istniejących zmiennych). shellEnv: importuje brakujące oczekiwane klucze z profilu powłoki logowania.- Pełny priorytet znajdziesz w Environment.
Podstawianie zmiennych env
Odwołuj się do zmiennych env w dowolnym ciągu konfiguracji przez${VAR_NAME}:
- Dopasowywane są tylko nazwy pisane wielkimi literami:
[A-Z_][A-Z0-9_]*. - Brakujące/puste zmienne powodują błąd podczas ładowania konfiguracji.
- Ucieknij przez
$${VAR}, aby uzyskać dosłowne${VAR}. - Działa z
$include.
Sekrety
Odwołania do sekretów są addytywne: jawne wartości nadal działają.SecretRef
Użyj jednego kształtu obiektu:
- wzorzec
provider:^[a-z][a-z0-9_-]{0,63}$ - wzorzec
iddlasource: "env":^[A-Z][A-Z0-9_]{0,127}$ source: "file"id: bezwzględny wskaźnik JSON (na przykład"/providers/openai/apiKey")- wzorzec
iddlasource: "exec":^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$ iddlasource: "exec"nie mogą zawierać segmentów ścieżki rozdzielanych przez ukośniki.ani..(na przykłada/../bjest odrzucane)
Obsługiwana powierzchnia poświadczeń
- Macierz kanoniczna: SecretRef Credential Surface
secrets applykieruje na obsługiwane ścieżki poświadczeńopenclaw.json.- Odwołania z
auth-profiles.jsonsą uwzględniane w rozwiązywaniu runtime i pokryciu audytu.
Konfiguracja dostawców sekretów
- Dostawca
fileobsługujemode: "json"imode: "singleValue"(idmusi mieć wartość"value"w trybie singleValue). - Dostawca
execwymaga bezwzględnej ścieżkicommandi używa ładunków protokołu przez stdin/stdout. - Domyślnie ścieżki poleceń będące dowiązaniami symbolicznymi są odrzucane. Ustaw
allowSymlinkCommand: true, aby zezwolić na ścieżki dowiązań symbolicznych przy jednoczesnej walidacji ścieżki rozwiązanego celu. - Jeśli skonfigurowano
trustedDirs, kontrola zaufanych katalogów dotyczy ścieżki rozwiązanego celu. - Środowisko potomne
execjest domyślnie minimalne; przekazuj wymagane zmienne jawnie przezpassEnv. - Odwołania do sekretów są rozwiązywane w czasie aktywacji do migawki w pamięci, a następnie ścieżki żądań odczytują tylko tę migawkę.
- Filtrowanie aktywnej powierzchni ma zastosowanie podczas aktywacji: nierozwiązane odwołania na włączonych powierzchniach powodują błąd startu/przeładowania, a nieaktywne powierzchnie są pomijane z diagnostyką.
Magazyn auth
- Profile per agent 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ń.- Profile trybu OAuth (
auth.profiles.<id>.mode = "oauth") nie obsługują poświadczeńauth-profileopartych na SecretRef. - Statyczne poświadczenia runtime pochodzą z rozwiązanych migawek w pamięci; starsze statyczne wpisy
auth.jsonsą czyszczone po wykryciu. - Starsze importy OAuth z
~/.openclaw/credentials/oauth.json. - Zobacz OAuth.
- Zachowanie runtime sekretów oraz narzędzia
audit/configure/apply: Secrets Management.
auth.cooldowns
billingBackoffHours: bazowy backoff w godzinach, gdy profil kończy się błędem z powodu rzeczywistych problemów rozliczeniowych/braku środków (domyślnie:5). Jawny tekst rozliczeniowy 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). Powtarzalne komunikaty402dotyczące okna użycia lub limitów wydatków organizacji/workspace pozostają zamiast tego w ścieżcerate_limit.billingBackoffHoursByProvider: opcjonalne nadpisania godzin backoffu rozliczeniowego per dostawca.billingMaxHours: limit wzrostu wykładniczego backoffu rozliczeniowego w godzinach (domyślnie:24).authPermanentBackoffMinutes: bazowy backoff w minutach dla błędówauth_permanento wysokiej pewności (domyślnie:10).authPermanentMaxMinutes: limit wzrostu backoffuauth_permanentw minutach (domyślnie:60).failureWindowHours: ruchome okno w godzinach używane dla liczników backoffu (domyślnie:24).overloadedProfileRotations: maksymalna liczba rotacji auth-profile tego samego dostawcy przy błędach przeciążenia przed przełączeniem na fallback modelu (domyślnie:1). Także kształty typu provider-busy, takie jakModelNotReadyException, trafiają tutaj.overloadedBackoffMs: stałe opóźnienie przed ponowną próbą rotacji przeciążonego dostawcy/profilu (domyślnie:0).rateLimitedProfileRotations: maksymalna liczba rotacji auth-profile tego samego dostawcy przy błędach limitu szybkości przed przełączeniem na fallback modelu (domyślnie:1). Ten koszykrate_limitobejmuje teksty charakterystyczne dla dostawców, takie jakToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceedediresource exhausted.
Logowanie
- Domyślny plik logu:
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Ustaw
logging.file, aby uzyskać stałą ścieżkę. consoleLevelpodnosi się dodebug, gdy--verbose.maxFileBytes: maksymalny rozmiar pliku logu w bajtach, po którym zapisy są wstrzymywane (dodatnia liczba całkowita; domyślnie:524288000= 500 MB). W środowiskach produkcyjnych używaj zewnętrznej rotacji logów.
Diagnostyka
enabled: główny przełącznik wyjścia instrumentacji (domyślnie:true).flags: tablica ciągów flag włączających ukierunkowane wyjście logów (obsługuje wildcardy takie jak"telegram.*"lub"*").stuckSessionWarnMs: próg wieku w ms do emitowania ostrzeżeń o zablokowanej sesji, gdy sesja pozostaje w stanie przetwarzania.otel.enabled: włącza potok eksportu OpenTelemetry (domyślnie:false).otel.endpoint: URL kolektora dla eksportu OTel.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łączają eksport śledzeń, metryk lub logów.otel.sampleRate: współczynnik próbkowania śledzeń0–1.otel.flushIntervalMs: okresowy interwał opróżniania telemetrii w ms.cacheTrace.enabled: zapisuje migawki śladu cache dla przebiegów wbudowanych (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
channel: kanał wydania dla instalacji npm/git —"stable","beta"lub"dev".checkOnStart: sprawdza aktualizacje npm przy starcie Gateway (domyślnie:true).auto.enabled: włącza aktualizacje automatyczne w tle dla instalacji pakietowych (domyślnie:false).auto.stableDelayHours: minimalne opóźnienie w godzinach przed automatycznym zastosowaniem na kanale stable (domyślnie:6; max:168).auto.stableJitterHours: dodatkowe okno rozłożenia wdrożenia kanału stable w godzinach (domyślnie:12; max:168).auto.betaCheckIntervalHours: jak często wykonywane są sprawdzenia kanału beta, w godzinach (domyślnie:1; max:24).
ACP
enabled: globalna bramka funkcji ACP (domyślnie:false).dispatch.enabled: niezależna bramka dla dyspozycji tur sesji ACP (domyślnie:true). Ustawfalse, aby zachować dostępność poleceń ACP przy jednoczesnym blokowaniu wykonania.backend: domyślny identyfikator backendu runtime ACP (musi odpowiadać zarejestrowanemu Pluginowi runtime ACP).defaultAgent: zapasowy identyfikator docelowego agenta ACP, gdy uruchomienia nie określają jawnego celu.allowedAgents: lista dozwolonych identyfikatorów agentów dopuszczonych do sesji runtime ACP; pusta oznacza brak dodatkowych ograniczeń.maxConcurrentSessions: maksymalna liczba jednocześnie aktywnych sesji ACP.stream.coalesceIdleMs: okno bezczynnego opróżniania w ms dla strumieniowanego tekstu.stream.maxChunkChars: maksymalny rozmiar porcji przed podziałem projekcji strumieniowanego bloku.stream.repeatSuppression: tłumi powtarzające się linie statusu/narzędzi per tura (domyślnie:true).stream.deliveryMode:"live"strumieniuje przyrostowo;"final_only"buforuje aż 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 projektowana per tura ACP.stream.maxSessionUpdateChars: maksymalna liczba znaków dla projektowanych linii statusu/aktualizacji ACP.stream.tagVisibility: zapis nazw tagów do logicznych nadpisań widoczności dla strumieniowanych zdarzeń.runtime.ttlMinutes: TTL bezczynności w minutach dla workerów sesji ACP przed kwalifikacją do czyszczenia.runtime.installCommand: opcjonalne polecenie instalacji uruchamiane przy bootstrapowaniu środowiska runtime ACP.
CLI
cli.banner.taglineModekontroluje styl sloganu bannera:"random"(domyślnie): rotujące zabawne/sezonowe slogany."default": stały neutralny slogan (Wszystkie Twoje czaty, jeden OpenClaw.)."off": brak tekstu sloganu (tytuł/wersja bannera nadal są wyświetlane).
- Aby ukryć cały banner (nie tylko slogany), ustaw zmienną środowiskową
OPENCLAW_HIDE_BANNER=1.
Wizard
Metadane zapisywane przez prowadzone przepływy konfiguracji CLI (onboard, configure, doctor):
Tożsamość
Zobacz pola tożsamościagents.list w sekcji Domyślne ustawienia agenta.
Bridge (starsze, usunięte)
Bieżące buildy nie zawierają już mostu TCP. Node łączą się przez Gateway WebSocket. Kluczebridge.* nie są już częścią schematu konfiguracji (walidacja kończy się błędem do czasu ich usunięcia; openclaw doctor --fix może usunąć nieznane klucze).
Starsza konfiguracja bridge (odniesienie historyczne)
Starsza konfiguracja bridge (odniesienie historyczne)
Cron
sessionRetention: jak długo zachowywać ukończone izolowane sesje uruchomień Cron przed usunięciem zsessions.json. Steruje także czyszczeniem zarchiwizowanych usuniętych transkryptów Cron. Domyślnie:24h; ustawfalse, aby wyłączyć.runLog.maxBytes: maksymalny rozmiar pliku logu na uruchomienie (cron/runs/<jobId>.jsonl) przed przycięciem. Domyślnie:2_000_000bajtów.runLog.keepLines: liczba najnowszych linii zachowywanych po uruchomieniu przycinania logu uruchomienia. Domyślnie:2000.webhookToken: token bearer używany do dostarczania POST Webhook dla Cron (delivery.mode = "webhook"); jeśli pominięty, nagłówek auth nie jest wysyłany.webhook: przestarzały starszy zapasowy URL Webhook (http/https) używany tylko dla zapisanych zadań, które nadal mająnotify: true.
cron.retry
maxAttempts: maksymalna liczba ponowień dla jednorazowych zadań przy błędach przejściowych (domyślnie:3; zakres:0–10).backoffMs: tablica opóźnień backoff 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ć dla wszystkich typów przejściowych.
cron.failureAlert
enabled: włącza alerty o błędach dla zadań Cron (domyślnie:false).after: liczba kolejnych niepowodzeń przed uruchomieniem alertu (dodatnia liczba całkowita, min.:1).cooldownMs: minimalna liczba milisekund między powtarzanymi alertami dla tego samego zadania (nieujemna liczba całkowita).mode: tryb dostarczenia —"announce"wysyła przez wiadomość kanałową;"webhook"wysyła POST na skonfigurowany Webhook.accountId: opcjonalny identyfikator konta lub kanału do ograniczenia zakresu dostarczania alertów.
cron.failureDestination
- Domyślny cel dla powiadomień o błędach Cron we wszystkich zadaniach.
mode:"announce"lub"webhook"; domyślnie"announce", gdy istnieją wystarczające dane docelowe.channel: nadpisanie kanału dla dostarczania announce."last"ponownie używa ostatniego znanego kanału dostarczenia.to: jawny cel announce lub URL Webhook. Wymagane dla trybu webhook.accountId: opcjonalne nadpisanie konta dla dostarczania.- Per-zadaniowe
delivery.failureDestinationnadpisuje tę globalną wartość domyślną. - Gdy nie jest ustawiony ani globalny, ani per-zadaniowy cel błędu, zadania, które już dostarczają przez
announce, wracają przy błędzie do tego podstawowego celu announce. delivery.failureDestinationjest obsługiwane tylko dla zadańsessionTarget="isolated", chyba że podstawowedelivery.modezadania ma wartość"webhook".
Zmienne szablonów modeli mediów
Placeholders szablonów rozwijane wtools.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}} | Bieżący UUID sesji |
{{IsNewSession}} | "true" po utworzeniu nowej sesji |
{{MediaUrl}} | Pseudo-URL przychodzącego medium |
{{MediaPath}} | Lokalna ścieżka medium |
{{MediaType}} | Typ medium (image/audio/document/…) |
{{Transcript}} | Transkrypt 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.) |
Include konfiguracji ($include)
Podziel konfigurację na wiele plików:
- Pojedynczy plik: zastępuje zawierający go obiekt.
- Tablica plików: głębokie scalanie w kolejności (późniejsze nadpisują wcześniejsze).
- Klucze sąsiednie: scalane po include (nadpisują dołączone wartości).
- Zagnieżdżone include: do 10 poziomów głębokości.
- Ścieżki: rozwiązywane względem pliku dołączającego, ale muszą pozostać w obrębie katalogu głównego najwyższego poziomu konfiguracji (
dirnamezopenclaw.json). Formy bezwzględne/../są dozwolone tylko wtedy, gdy nadal rozwiązują się wewnątrz tej granicy. - Błędy: jasne komunikaty dla brakujących plików, błędów parsowania i cyklicznych include.
Powiązane: Konfiguracja · Przykłady konfiguracji · Doctor