Konfiguracja 🔧
OpenClaw odczytuje opcjonalną konfigurację JSON5 z pliku~/.openclaw/openclaw.json (dozwolone są komentarze i przecinki na końcu).
Jeśli plik nie istnieje, OpenClaw używa bezpiecznych (w miarę) ustawień domyślnych (wbudowany agent Pi + sesje per nadawca + obszar roboczy ~/.openclaw/workspace). Zwykle konfiguracja jest potrzebna tylko po to, aby:
- ograniczyć, kto może wyzwalać bota (
channels.whatsapp.allowFrom,channels.telegram.allowFromitd.) - kontrolować listy dozwolonych grup i zachowanie wzmiankowania (
channels.whatsapp.groups,channels.telegram.groups,channels.discord.guilds,agents.list[].groupChat) - dostosować prefiksy wiadomości (
messages) - ustawić obszar roboczy agenta (
agents.defaults.workspacelubagents.list[].workspace) - dostroić domyślne ustawienia wbudowanego agenta (
agents.defaults) oraz zachowanie sesji (session) - ustawić tożsamość per‑agent (
agents.list[].identity)
Nowy w konfiguracji? Zobacz przewodnik Configuration Examples, aby zapoznać się z kompletnymi przykładami wraz ze szczegółowymi wyjaśnieniami!
Ścisła weryfikacja konfiguracji
OpenClaw akceptuje wyłącznie konfiguracje, które w pełni odpowiadają schematowi. Nieznane klucze, błędne typy lub nieprawidłowe wartości powodują, że Gateway odmawia uruchomienia ze względów bezpieczeństwa. Gdy walidacja zakończy się niepowodzeniem:- Gateway nie startuje.
- Dozwolone są wyłącznie polecenia diagnostyczne (na przykład:
openclaw doctor,openclaw logs,openclaw health,openclaw status,openclaw service,openclaw help). - Uruchom
openclaw doctor, aby zobaczyć dokładne problemy. - Uruchom
openclaw doctor --fix(lub--yes), aby zastosować migracje/naprawy.
--fix/--yes.
Schemat + podpowiedzi UI
Gateway udostępnia reprezentację JSON Schema konfiguracji poprzezconfig.schema dla edytorów UI.
Control UI renderuje formularz na podstawie tego schematu, z edytorem Raw JSON jako wyjściem awaryjnym.
Wtyczki kanałów i rozszerzenia mogą rejestrować schemat oraz podpowiedzi UI dla swojej konfiguracji, dzięki czemu
ustawienia kanałów pozostają sterowane schematem w różnych aplikacjach bez zakodowanych na sztywno formularzy.
Podpowiedzi (etykiety, grupowanie, pola wrażliwe) są dostarczane wraz ze schematem, aby klienci mogli renderować
lepsze formularze bez twardego kodowania wiedzy o konfiguracji.
Zastosuj + restart (RPC)
Użyjconfig.apply, aby zweryfikować i zapisać pełną konfigurację oraz zrestartować Gateway w jednym kroku.
Polecenie zapisuje znacznik restartu i wysyła ping do ostatniej aktywnej sesji po ponownym uruchomieniu Gateway.
Ostrzeżenie: config.apply zastępuje całą konfigurację. Jeśli chcesz zmienić tylko kilka kluczy,
użyj config.patch lub openclaw config set. Zachowaj kopię zapasową ~/.openclaw/openclaw.json.
Parametry:
raw(string) — ładunek JSON5 dla całej konfiguracjibaseHash(opcjonalne) — hash konfiguracji zconfig.get(wymagane, gdy konfiguracja już istnieje)sessionKey(opcjonalne) — klucz ostatniej aktywnej sesji do pingu wybudzającegonote(opcjonalne) — notatka do dołączenia do znacznika restarturestartDelayMs(opcjonalne) — opóźnienie przed restartem (domyślnie 2000)
gateway call):
Aktualizacje częściowe (RPC)
Użyjconfig.patch, aby scalić częściową aktualizację z istniejącą konfiguracją bez nadpisywania
niepowiązanych kluczy. Stosowane są semantyki JSON merge patch:
- obiekty scalają rekursywnie
nullusuwa klucz- tablice są zastępowane
Podobnie jakconfig.apply, polecenie waliduje, zapisuje konfigurację, zapisuje znacznik restartu i planuje restart Gateway (z opcjonalnym wybudzeniem, gdy podanosessionKey).
raw(string) — ładunek JSON5 zawierający wyłącznie klucze do zmianybaseHash(wymagane) — hash konfiguracji zconfig.getsessionKey(opcjonalne) — klucz ostatniej aktywnej sesji do pingu wybudzającegonote(opcjonalne) — notatka do dołączenia do znacznika restarturestartDelayMs(opcjonalne) — opóźnienie przed restartem (domyślnie 2000)
Minimalna konfiguracja (zalecany punkt startowy)
Tryb self‑chat (zalecany do kontroli grup)
Aby zapobiec odpowiadaniu bota na @‑wzmianki WhatsApp w grupach (odpowiadać tylko na określone wyzwalacze tekstowe):Dołączanie konfiguracji ($include)
Podziel konfigurację na wiele plików, używając dyrektywy $include. Jest to przydatne do:
- organizowania dużych konfiguracji (np. definicji agentów per klient)
- współdzielenia wspólnych ustawień między środowiskami
- oddzielania wrażliwych konfiguracji
Podstawowe użycie
Scal zachowanie
- Pojedynczy plik: zastępuje obiekt zawierający
$include - Tablica plików: głęboko scala pliki w kolejności (późniejsze nadpisują wcześniejsze)
- Z kluczami sąsiednimi: klucze sąsiednie są scalane po include (nadpisują wartości dołączone)
- Klucze sąsiednie + tablice/prymitywy: nieobsługiwane (dołączona zawartość musi być obiektem)
Zagnieżdżone include
Dołączane pliki mogą same zawierać dyrektywy$include (do 10 poziomów):
Rozwiązywanie ścieżek
- Ścieżki względne: rozwiązywane względem pliku dołączającego
- Ścieżki bezwzględne: używane bez zmian
- Katalogi nadrzędne: odwołania
../działają zgodnie z oczekiwaniami
Obsługa błędów
- Brak pliku: czytelny błąd z rozwiązaną ścieżką
- Błąd parsowania: wskazuje, który dołączony plik się nie powiódł
- Cykliczne include: wykrywane i raportowane wraz z łańcuchem include
Przykład: konfiguracja prawna dla wielu klientów
Wspólne opcje
Env vars + .env
OpenClaw odczytuje zmienne środowiskowe z procesu nadrzędnego (powłoka, launchd/systemd, CI itd.).
Dodatkowo ładuje:
.envz bieżącego katalogu roboczego (jeśli istnieje)- globalny fallback
.envz~/.openclaw/.env(czyli$OPENCLAW_STATE_DIR/.env)
.env nie nadpisuje istniejących zmiennych środowiskowych.
Możesz także podać zmienne środowiskowe inline w konfiguracji. Są one stosowane tylko wtedy, gdy
zmienna nie istnieje w środowisku procesu (ta sama zasada braku nadpisywania):
env.shellEnv (opcjonalne)
Opcjonalne ułatwienie: jeśli włączone i żaden z oczekiwanych kluczy nie jest jeszcze ustawiony,
OpenClaw uruchamia powłokę logowania użytkownika i importuje wyłącznie brakujące oczekiwane klucze
(nigdy nie nadpisuje).
W praktyce oznacza to załadowanie profilu powłoki.
OPENCLAW_LOAD_SHELL_ENV=1OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000
Podstawienie Env var w konfiguracji
Możesz bezpośrednio odwoływać się do zmiennych środowiskowych w dowolnej wartości string konfiguracji, używając składni${VAR_NAME}. Zmienne są podstawiane w czasie ładowania
konfiguracji, przed walidacją.
- Dopasowywane są tylko nazwy zmiennych zapisane wielkimi literami:
[A-Z_][A-Z0-9_]* - Brakujące lub puste zmienne powodują błąd podczas ładowania konfiguracji
- Użyj
$${VAR}, aby wypisać dosłowny${VAR} - Działa z
$include(dołączane pliki również podlegają podstawianiu)
Przechowywanie uwierzytelniania (OAuth + klucze API)
OpenClaw przechowuje profile uwierzytelniania per‑agent (OAuth + klucze API) w:<agentDir>/auth-profiles.json(domyślnie:~/.openclaw/agents/<agentId>/agent/auth-profiles.json)
~/.openclaw/credentials/oauth.json(lub$OPENCLAW_STATE_DIR/credentials/oauth.json)
<agentDir>/auth.json(zarządzane automatycznie; nie edytuj ręcznie)
~/.openclaw/agent/*(migrowany przezopenclaw doctordo~/.openclaw/agents/<defaultAgentId>/agent/*)
- Katalog OAuth (tylko import legacy):
OPENCLAW_OAUTH_DIR - Katalog agenta (nadpisanie domyślnego katalogu głównego agenta):
OPENCLAW_AGENT_DIR(zalecane),PI_CODING_AGENT_DIR(legacy)
oauth.json do auth-profiles.json.
auth
Opcjonalne metadane dla profili uwierzytelniania. Nie przechowuje sekretów; mapuje
identyfikatory profili na dostawcę i tryb (oraz opcjonalny e‑mail) i definiuje kolejność
rotacji dostawców używaną do przełączania awaryjnego.
agents.list[].identity
Opcjonalna tożsamość per‑agent używana dla domyślnych ustawień i UX. Zapisywana przez
asystenta onboardingu macOS.
Jeśli ustawiona, OpenClaw wyprowadza domyślne wartości (tylko gdy nie ustawiono ich jawnie):
messages.ackReactionzidentity.emojiaktywnego agenta (fallback 👀)agents.list[].groupChat.mentionPatternszidentity.name/identity.emojiagenta (dzięki czemu „@Samantha” działa w grupach na Telegram/Slack/Discord/Google Chat/iMessage/WhatsApp)identity.avatarakceptuje ścieżkę obrazu względem obszaru roboczego lub zdalny URL/data URL. Pliki lokalne muszą znajdować się w obszarze roboczym agenta.
identity.avatar akceptuje:
- Ścieżkę względem obszaru roboczego (musi pozostać w obrębie obszaru roboczego agenta)
- URL
http(s) - URI
data:
wizard
Metadane zapisywane przez kreatory CLI (onboard, configure, doctor).
logging
- Domyślny plik logów:
/tmp/openclaw/openclaw-YYYY-MM-DD.log - Jeśli potrzebujesz stabilnej ścieżki, ustaw
logging.filena/tmp/openclaw/openclaw.log. - Wyjście konsoli można stroić osobno poprzez:
logging.consoleLevel(domyślnieinfo, podnosi dodebuggdy--verbose)logging.consoleStyle(pretty|compact|json)
- Podsumowania narzędzi mogą być redagowane, aby uniknąć wycieku sekretów:
logging.redactSensitive(off|tools, domyślnie:tools)logging.redactPatterns(tablica regexów; nadpisuje domyślne)
channels.whatsapp.dmPolicy
Kontroluje sposób obsługi bezpośrednich czatów WhatsApp (DM‑y):
"pairing"(domyślnie): nieznani nadawcy otrzymują kod parowania; właściciel musi zatwierdzić"allowlist": zezwalaj tylko nadawcom zchannels.whatsapp.allowFrom(lub sparowanej listy dozwolonych)"open": zezwalaj na wszystkie przychodzące DM‑y (wymaga, abychannels.whatsapp.allowFromzawierało"*")"disabled": ignoruj wszystkie przychodzące DM‑y
openclaw pairing list whatsappopenclaw pairing approve whatsapp <code>
channels.whatsapp.allowFrom
Lista dozwolonych numerów telefonów E.164, które mogą wyzwalać automatyczne odpowiedzi WhatsApp (tylko DM‑y).
Jeśli pusta i channels.whatsapp.dmPolicy="pairing", nieznani nadawcy otrzymają kod parowania.
Dla grup użyj channels.whatsapp.groupPolicy + channels.whatsapp.groupAllowFrom.
channels.whatsapp.sendReadReceipts
Kontroluje, czy przychodzące wiadomości WhatsApp są oznaczane jako przeczytane (niebieskie znaczniki). Domyślnie: true.
Tryb self‑chat zawsze pomija potwierdzenia odczytu, nawet gdy włączone.
Nadpisanie per konto: channels.whatsapp.accounts.<id>.sendReadReceipts.
channels.whatsapp.accounts (wiele kont)
Uruchom wiele kont WhatsApp w jednym gateway:
- Polecenia wychodzące domyślnie używają konta
default, jeśli istnieje; w przeciwnym razie pierwszego skonfigurowanego identyfikatora konta (sortowane). - Starszy katalog uwierzytelniania Baileys dla pojedynczego konta jest migrowany przez
openclaw doctordowhatsapp/default.
channels.telegram.accounts / channels.discord.accounts / channels.googlechat.accounts / channels.slack.accounts / channels.mattermost.accounts / channels.signal.accounts / channels.imessage.accounts
Uruchom wiele kont na kanał (każde konto ma własne accountId i opcjonalne name):
defaultjest używany, gdyaccountIdjest pomijany (CLI + routing).- Tokeny Env dotyczą tylko domyślnego konta.
- Podstawowe ustawienia kanału (polityka grupowa, wzmianka o bramkach itp.) stosuje się do wszystkich kont, chyba że nadpisano na konto.
- Użyj
bindings[].match.accountIdaby przekierować każde konto do innego agenta.defaults.
Bramowanie czatu grupowego (agents.list[].Czat + messages.groupChat)
Grupuj wiadomości domyślne do wymaga wzmianki (albo wspomnienie o metadanych albo wzory regex). Dotyczy czatów grupowych WhatsApp, Telegram, Discord, Google Chat i iMessage
Rodzaje wspominania:
- Wzmianki o metadanych: Natywna platforma @-wzmianki (np. WhatsApp tap-to-mention). Ignorowane w trybie własnego czatu WhatsApp (patrz
channels.whatsapp.allowFrom). - Wzory tekstu: Wzory Regex zdefiniowane w
agents.list[].groupChat.mentionPatterns. Zawsze sprawdzane niezależnie od trybu samodzielnego czatu. - Bramowanie wzmiankowe jest wymuszone tylko wtedy, gdy wykrycie wzmianki jest możliwe (wzmianki wzmiankowe lub co najmniej jeden “wzmianka”).
messages.groupChat.historyLimit ustawia globalny domyślny kontekst historii grupy. Kanały mogą zastąpić kanałami.<channel>.historyLimit (lub channels.<channel>.accounts.*.historyLimit dla wielu kont. Ustaw 0 aby wyłączyć pakowanie historii.
Limity historii DM
Dyskusje DM wykorzystują historię sesji zarządzaną przez agenta. Możesz ograniczyć liczbę turów użytkowników zachowanych na sesji DM:- Nadpisanie per-DM:
kanały.<provider>.dms[userId].historyLimit - Domyślny dostawca:
kanały.<provider>.dmHistoryLimit - Brak limitu (cała historia zachowana)
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Nadpisanie per-agenta (ma pierwszeństwo gdy jest ustawione, nawet []):
channels.whatsapp.groups, channels.telegram.groups, channels.imessage.groups, channels.discord.guilds). Po ustawieniu *.groups działa również jako lista dozwolonych grup; dołącz "*" aby zezwolić wszystkim grupom.
Aby odpowiedzieć tylko na określone wyzwalacze tekstowe (ignorując natywne @-wzmianki):
Zasady grupowe (na kanał)
Użyjchannels.*.groupPolicy aby kontrolować, czy wiadomości grupowe/pomieszczenia są akceptowane w:
"open": groups bypass allowlists; ention-gating nadal występuje.- `“disabled”: blokuj wszystkie wiadomości grupy/pokoju.
"allowlist": zezwól tylko na grupy / pokoje, które pasują do skonfigurowanej listy dozwolonych.channels.defaults.groupPolicyustawia wartość domyślną, gdygroupPolicydostawcy jest nieustawiona.- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams używają
groupAllowFrom(fallback: explicitallowFrom). - Discord/Slack używaj list kanałów (
channels.discord.guilds.*.channels,channels.slack.channels). - DM z grupy (Discord/Slack) są nadal kontrolowane przez
dm.groupEnabled+dm.groupChannels. - Domyślnie jest
groupPolicy: "allowlist"(chyba że nadpisano przezchannels.defaults.groupPolicy); jeśli nie skonfigurowano dozwolonej listy, wiadomości grupowe są zablokowane.
Przekierowywanie wielu agentów (agents.list + bindings)
Uruchom wiele izolowanych czynników (oddzielny obszar roboczy, agentDir, sesje) wewnątrz jednej bramy.
Wiadomości przychodzące są kierowane do agenta za pośrednictwem powiązań.
agents.list[]: nadpisanie per-agenta.id: stabilny identyfikator agenta (wymagany).default: opcjonalne; gdy ustawione są wielokrotności, rejestruje się pierwsze wygrane i ostrzeżenie. Jeśli nic nie jest ustawione, pierwszy wpis na liście jest domyślnym agentem.nazwa: wyświetlana nazwa agenta.obszar roboczy: domyślny~/.openclaw/workspace-<agentId>(dlamain, spada z powrotem doagents.defaults.workspace).agentDir: domyślne~/.openclaw/agents/<agentId>/agent.model: model domyślny dla agenta, zastępujeagents.defaults.modeldla tego agenta.- formularz ciągu:
"provider/model", zastępuje tylkoagents.defaults.model.primary - formularz obiektu:
{ primary, fallbacks }(fallbacks overrideagents.defaults.model.fallbacks;[]wyłącza globalne upadki dla tego agenta)
- formularz ciągu:
identity: nazwa agenta / motyw/emoji (używane do wzmianki o wzorcach + brak reakcji).groupChat: na agenta wzmianka o bramce (mentionPatterns).sandbox: konfiguracja piaskownicy dla agenta (zastępujeagents.defaults.sandbox).mode:"off"|"non-main"|"all"workspaceAccess:"none"|"ro"|"rw"zakresu:"session"|"agent"|"shared"workspaceRoot: niestandardowy obszar roboczy sandbox rootdocker: nadpisywanie przez agenta (np.image,sieć,env,setupCommand, limity; ignorowane gdyscope: "shared")browser: nadpisanie przeglądarki piaskowanej przez agenta (ignorowane, gdyzakres: "shared")prune: nadpisywanie piaskownicy dla agenta (ignorowane gdyzakres: "shared")
subagentów: domyślne dla agenta subagenta.allowAgents: allowlist agent id forsessions_spawnfrom this agent (["*"]= allow any; default: only this agent)
tools: ograniczenia narzędzia dla każdego agenta (stosowane przed polityką narzędzia piaskowego).profile: profil narzędzia bazowego (stosowany przed zezwolnieniem/odrzuceniem)allow: tablica dozwolonych nazw narzędzideny: tablica nazw odrzuconych narzędzi (odmowa wygrana)
agents.defaults: domyślne współdzielony agent (model, obszar roboczy, sandbox, itp.).bindings[]: kieruje przychodzące wiadomości doagentId.match.channel(wymagane)match.accountId(opcjonalne;*= dowolne konto; pominięte = domyślne konto)match.peer(opcjonalne;{ kind: direct|group|channel, id })match.guildId/match.teamId(opcjonalne; specyficzne dla kanału)
match.peermatch.guildIdmatch.teamIdmatch.accountId(akt, brak peer/guild/team)match.accountId: "*"(cały kanał, brak peer/guild/team)- domyślny agent (
agents.list[].domyślny, w przeciwnym razie pierwszy wpis na liście, w przeciwnym razie"main")
bindings wygrywa.
Profile dostępu per agent (multi‑agent)
Każdy agent może mieć własną piaskownicę + politykę narzędzi. Użyj tego do mieszania poziomów dostępu w jednej bramie:- Pełny dostęp (osobisty agent)
- Tylko do odczytu narzędzia + obszar roboczy
- Brak dostępu do systemu plików (tylko narzędzia do wiadomości/sesji)
tools.agentToAgent (opcjonalnie)
Wiadomości od agenta to opt-in:
messages.quKoleje
Kontroluje jak komunikaty przychodzące zachowują się, gdy uruchomiony agent jest już aktywny.
messages.inbound
Odejmij przychodzące wiadomości od tego samego nadawcy, więc wielokrotne wiadomości typu wstecz
stają się pojedynczym agentem. Debouncing jest zakresowany per kanał + konwersacja
i używa najnowszej wiadomości do wątkowania odpowiedzi/ID.
- Odbiór partii wiadomości tylko tekstowo; media / załączniki natychmiast spłudzają.
- Polecenia sterowania (np.
/qukoleje,/new) bypass debouncing tak, aby pozostawały w stanie samodzielnym.
komendy (obsługa poleceń czatu)
Kontroluje jak polecenia czatu są włączone pomiędzy łącznikami.
- Komendy tekstowe muszą być wysyłane jako wiadomość standalone i użyć wiodącego
/(brak aliasów tekstowych). commands.text: falsewyłącza wysyłanie wiadomości na czacie dla poleceń.commands.native: "auto"(domyślnie) włącza natywne polecenia dla Discord/Telegram i zostawia Slack wyłączony; nieobsługiwane kanały pozostają tylko tekstem.- Ustaw
commands.native: true|falseaby wymusić wszystko lub nadpisać dla każdego kanałuchannels.discord.commands.native,channels.telegram.commands.native,channels.slack.commands.native(bool lub"auto").falseusuwa poprzednio zarejestrowane polecenia na Discordzie/Telegramie przy starcie; polecenia Slack są zarządzane w aplikacji Slack channels.telegram.customCommandsdodaje dodatkowe wpisy do menu bota Telegram. Nazwy są znormalizowane; konflikty z natywnymi poleceniami są ignorowane.commands.bash: truewłącza! <cmd>do uruchamiania poleceń powłoki hosta (/bash <cmd>działa również jako alias). Wymagatools.elevated.enabledi pozwala nadawcy na wpisanietools.elevated.allowFrom.<channel>.commands.bashForegroundMskontroluje, jak długo czeka na tło. Gdy praca w bash jest uruchomiona, nowy! <cmd>żądania zostały odrzucone (jeden naraz).commands.config: truewłącza/config(reads/writesopenclaw.json).kanały.<provider>Bramki Bramki .configWriteszapoczątkowane przez ten kanał (domyślnie: true). Dotyczy to/config set|unsetplus auto-migracje specyficzne dla dostawcy (zmiany identyfikatora supergrupy Telegram, zmiany identyfikatora kanału Slack).commands.debug: truewłącza/debug(nadpisywanie tylko do uruchomienia).commands.restart: truewłącza/restarti czynność ponownego uruchomienia narzędzia bramy.commands.useAccessGroups: falsepozwala poleceniom omijać listy uprawnień/zasady grup dostępu.- Polecenia slash i dyrektywy są honorowane wyłącznie dla autoryzowanych nadawców. Autoryzacja pochodzi z kanału
Zezwalaj/parowanie plus
commands.useAccessGroups.
web (WhatsApp Web channel runtime)
WhatsApp działa przez kanał internetowy bramki (Baileys Web). Rozpoczyna się automatycznie, gdy połączona sesja istnieje.
Ustaw web.enabled: false aby wyłączyć domyślnie.
channels.telegram (transport botów)
OpenClaw uruchamia Telegram tylko wtedy, gdy istnieje sekcja konfiguracji channels.telegram. Token bota jest rozwiązany z channels.telegram.botToken (lub channels.telegram.tokenFile), z TELEGRAM_BOT_TOKEN jako rezerwa dla konta domyślnego.
Ustaw channels.telegram.enabled: false aby wyłączyć automatyczne uruchamianie.
Obsługa wielu kont żyje pod channels.telegram.accounts (patrz powyżej sekcja wielokonta). Tokeny Env odnoszą się tylko do konta domyślnego.
Ustaw channels.telegram.configWrites: false aby zablokować zapisy konfiguracyjne inicjowane przez Telegram-(łącznie z migracjami supergrupy ID i ustawieniami /config |unset).
- Używa Telegram
sendMessageDraft(szkic bańki, a nie prawdziwej wiadomości). - Wymaga prywatnych wątków czatu (message_thread_id w DMs; bot ma włączone tematy).
- Rozumowanie strumieni
/reasoning streamdo szkicu, a następnie wysyła ostateczną odpowiedź. Ponownie spróbuj domyślnych reguł i zachowań są udokumentowane w Reguła próby.
channels.discord (transport botów)
Skonfiguruj bota Discorda, ustawiając token bota i opcjonalne gatowanie:
Wsparcie wielu kont pod channels.discord.accounts (patrz sekcja więcej niż jedno konto). Tokeny Env odnoszą się tylko do konta domyślnego.
channels.discord. Token jest rozwiązany z channels.discord.token, z DISCORD_BOT_TOKEN jako domyślne konto (chyba że channels.discord.enabled jest false). Użyj user:<id> (DM) lub channel:<id> (kanał gildii) podczas określania celów dostawy dla poleceń cron/CLI; niepotrzebne identyfikatory numeryczne są niejednoznaczne i odrzucone.
Slugi gildii są małymi literami ze spacjami zastąpionymi przez -; klucze kanału używają nazwy kanału slugowanego (brak wiodącego #). Preferuj identyfikatory gildii jako klucze, aby uniknąć zmiany nazwy dwuznaczności.
Domyślnie ignorowane są wiadomości z bota. Włącz z channels.discord.allowBots (własne wiadomości są nadal filtrowane, aby zapobiec pętlom autoodpowiedzi).
Tryb powiadomień reakcji:
off: brak zdarzeń reakcji.own: reakcje na własnych wiadomościach bota (domyślnie).all: wszystkie reakcje na wszystkich wiadomościach.allowlist: reakcje odguilds.<id>.usersna wszystkich wiadomościach (pusta lista wyłącza). Tekst wychodzący jest chunkowany przezchannels.discord.textChunkLimit(domyślnie 2000). Ustawchannels.discord.chunkMode="newline"aby podzielić na puste linie (granice paragrafów) przed wycinaniem długości. Klienci Discorda mogą klipować bardzo wysokie wiadomości, więcchannels.discord.maxLinesPerMessage(domyślnie 17) dzieli długie wielowymiarowe odpowiedzi nawet gdy są poniżej 2000 znaków. Ponownie spróbuj domyślnych reguł i zachowań są udokumentowane w Reguła próby.
channels.googlechat (Chat API webhook)
Czat Google działa przez webhooki HTTP z autoryzacją na poziomie aplikacji (konto usług).
Obsługa wielu kont żyje pod channels.googlechat.accounts (patrz powyżej sekcja wielokonta). Env vars ma zastosowanie tylko do konta domyślnego.
- Konto usługi JSON może być wbudowane (
serviceAccount) lub oparte na plikach (serviceAccountFile). - Env fallbacks dla domyślnego konta:
GOOGLE_CHAT_SERVICE_ACCOUNTlubGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. audienceType+audiencemusi odpowiadać konfiguracji webhooka aplikacji czatu.- Użyj
spacje/<spaceId>lubużytkowników/<userId|email>podczas ustawiania celów dostawy.
channels.slack (tryb gniazda)
Slack działa w trybie Socket i wymaga zarówno tokena bota, jak i tokenu aplikacji:
channels.slack.accounts (patrz powyżej sekcja wielokonta). Tokeny Env odnoszą się tylko do konta domyślnego.
OpenClaw rozpoczyna Slack, gdy dostawca jest włączony i oba tokeny są ustawione (poprzez konfigurację lub SLACK_BOT_TOKEN + SLACK_APP_TOKEN). Użyj user:<id> (DM) lub channel:<id> podczas określania celów dostawy dla poleceń cron/CLI.
Ustaw channels.slack.configWrites: false aby zablokować inicjowane Slack-config zapisy konfiguracyjne (w tym migracje ID kanału i /config set|unset).
Domyślnie ignorowane są wiadomości z bota. Włącz za pomocą channels.slack.allowBots lub channels.slack.channels.<id>.allowBots.
Tryb powiadomień reakcji:
off: brak zdarzeń reakcji.own: reakcje na własnych wiadomościach bota (domyślnie).all: wszystkie reakcje na wszystkich wiadomościach.allowlist: reakcje zchannels.slack.reactionAllowlistna wszystkich wiadomościach (pusta lista wyłączona).
channels.slack.thread.historyScopekontroluje czy historia wątku jest dla każdego wątku (wątek, domyślny, domyślnie) czy współdzielona przez kanał (kanał).channels.slack.thread.inheritParentkontroluje czy nowe sesje wątków odziedziczą transkrypt kanału nadrzędnego (domyślnie: fałsz).
| Grupa akcji | Domyślnie | Notes |
|---|---|---|
| reactions | włączone | Reakcje + lista reakcji |
| messages | włączone | Odczyt/wysyłanie/edycja/usuwanie |
| pins | włączone | Przypinanie/odpinanie/lista |
| memberInfo | włączone | Informacje o członkach |
| emojiList | włączone | Lista niestandardowych emoji |
channels.mattermost (token bota)
Mattermost jest dostarczany jako wtyczka i nie jest dołączony do instalacji rdzenia.
Zainstaluj najpierw: openclaw plugins install @openclaw/mattermost (lub ./extensions/mattermost z git checkout).
Najbardziej potrzebny jest token bota plus podstawowy adres URL dla Twojego serwera:
channels.mattermost.botToken + channels.mattermost.baseUrl lub MATTERMOST_BOT_TOKEN + MATTERMOST_URL dla domyślnego konta (chyba że channels.mattermost.enabled to false).
Tryb czatu:
oncall(domyślnie): odpowiadaj na wiadomości kanału tylko wtedy, gdy @wspomniała.onmessage: odpowiada na każdą wiadomość w kanale.onchar: odpowiadaj, gdy wiadomość zaczyna się od prefiksu wyzwalacza (channels.mattermost.oncharPrefixes, domyślnie[">", "!"]).
- Domyślne DM:
channels.mattermost.dmPolicy="pairing"(nieznani nadawcy otrzymują kod parowania). - Publiczne DM-y:
channels.mattermost.dmPolicy="open"pluschannels.mattermost.allowFrom=["*"]. - Grupy:
channels.mattermost.groupPolicy="allowlist"domyślnie (mention-gated). Użyjchannels.mattermost.groupAllowFromaby ograniczyć nadawców.
channels.mattermost.accounts (patrz powyżej sekcja wielokonta). Env vars ma zastosowanie tylko do konta domyślnego.
Użyj channel:<id> lub user:<id> (lub @username) podczas określania celów dostawy; ukryte identyfikatory są traktowane jako identyfikatory kanałów.
channels.signal (sygnał-cli)
Reakcje sygnałowe mogą emitować zdarzenia systemowe (narzędzie współdzielonej reakcji):
off: brak zdarzeń reakcji.own: reakcje na własnych wiadomościach bota (domyślnie).all: wszystkie reakcje na wszystkich wiadomościach.allowlist: reakcje zchannels.signal.reactionAllowlistna wszystkie wiadomości (pusta lista wyłączona).
channels.imessage (imsg CLI)
OpenClaw tworzy imsg rpc (JSON-RPC nad stdio). Demon lub port nie jest wymagany.
channels.imessage.accounts (patrz powyżej sekcja wielokonta).
Uwagi:
- Wymaga pełnego dostępu na dysku do DB.
- Pierwsza wysyłka poprosi o pozwolenie na automatyzację wiadomości.
- Preferuj ‘chat_id:<id>’ celu. Użyj
czatów imsg --limit 20aby wyświetlić listę czatów. channels.imessage.cliPathmoże wskazywać skrypt wrapper (np.sshdo innego Maca, który uruchamiaimsg rpc); użyj kluczy SSH, aby uniknąć zapytań o hasło.- Dla zdalnych zawijaczy SSH ustaw
channels.imessage.remoteHostaby pobrać załączniki za pośrednictwem SCP gdyincludeAttachmentsjest włączone.
agents.defaults.workspace
Ustawia pojedynczy globalny katalog projektowy używany przez konsultanta do operacji plików.
Domyślnie: ~/.openclaw/workspace.
agents.defaults.sandbox jest włączony, sesje inne niż główne mogą zastąpić to ich własnymi projektami
w zakresie pod agents.defaults.sandbox.workspaceRoot.
agents.defaults.repoRoot
Opcjonalny root repozytorium, aby pokazać w wierszu instrukcji systemowej. Jeśli nie jest ustawiony, OpenClaw
próbuje wykryć katalog .git przechodząc w górę z obszaru roboczego (i aktualny katalog roboczy
. Ścieżka musi być używana.
agents.defaults.skipBootstrap
Wyłącza automatyczne tworzenie plików bootstrap (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, i BOOTSTRAP.md).
Użyj tego dla wstępnie zaszyfrowanych wdrożeń, w których pliki projektu pochodzą z repozytorium.
agents.defaults.bootstrapMaxChars
Maksymalna liczba znaków każdego pliku bootstrap wprowadzonego do systemu
przed naciśnięciem. Domyślnie: 20000.
Gdy plik przekracza ten limit, OpenClaw rejestruje ostrzeżenie i wstrzykuje obcięty nagłówek/ogon
za pomocą znacznika.
agents.defaults.userTimezone
Ustawia strefę czasową użytkownika dla kontekstu wskazówek systemowych (nie dla znaczników czasu w kopertach komunikatów
). Jeśli wyłączone, OpenClaw używa strefy czasowej hosta w czasie uruchomienia.
agents.defaults.timeFormat
Kontroluje format czasu wyświetlany w aktualnej sekcji daty i czasu w oknie systemu.
Domyślnie: auto (preferencje OS).
wiadomości
Kontroluje prefiksy graniczne/wychodzące i opcjonalne reakcje na brak.
Zobacz Messages dla kolejkowania, sesji i kontekstu streamowania.
responsePrefix jest stosowany do wszystkich odpowiedzi wychodzących (podsumowania narzędzi, blok
streaming, odpowiedzi końcowe) przez kanały, chyba że są już obecne.
Nadpisania można skonfigurować dla każdego kanału i dla każdego konta:
channels.<channel>.responsePrefixchannels.<channel>.accounts.<id>.responsePrefix
channels.<channel>.accounts.<id>.responsePrefixchannels.<channel>.responsePrefixmessages.responsePrefix
undefinedprzechodzi do następnego poziomu.""wyraźnie wyłącza przedrostek i zatrzymuje kaskadę."auto"uzyskuje[{identity.name}]dla przekierowanego agenta.
messages.responsePrefix jest nieustawiony, nie stosuje się żadnego prefiksu. WhatsApp self-chat
odpowiedzi są wyjątkiem: domyślnie [{identity.name}] gdy jest ustawiony, w przeciwnym razie
[openclaw], więc rozmowy samonatelefoniczne są czytelne.
Ustaw na "auto" aby uzyskać [{identity.name}] dla przekierowanego agenta (gdy ustawiony).
Zmienne szablonu
CiągresponsePrefix może zawierać zmienne szablonu, które rozwiązują dynamicznie:
| Zmienna | Opis | Przykład |
|---|---|---|
{model} | Krótka nazwa modelu | claude-opus-4-6, gpt-4o |
{modelFull} | Identyfikator pełnego modelu | anthropic/claudeopus-4-6 |
{provider} | Nazwa dostawcy | anthropic, openai |
{thinkingLevel} | Bieżący poziom myślenia | wysoki, niski, off |
{identity.name} | Nazwa tożsamości agenta | (tak samo jak tryb “auto”`) |
{MODEL} = {model}). {think} jest aliasem dla {thinkingLevel}.
Nierozwiązane zmienne pozostają dosłownym tekstem.
[claude-opus-4-6 | think:high] Oto moja odpowiedź...
WhatsApp przychodzący prefiks jest skonfigurowany przez channels.whatsapp.messagePrefix (przestarzały:
messages.messagePrefix). Domyślnie bez zmian: "[openclaw]" gdy
channels.whatsapp.allowFrom jest pusty, w przeciwnym razie "" (brak prefiksu). Gdy używasz
"[openclaw]", OpenClaw użyje zamiast tego [{identity.name}], gdy przekierowany agent
ma ustawioną identity.name.
ackReaction wysyła reakcję z wielkim wysiłkiem emoji, aby potwierdzić przychodzące wiadomości
na kanałach obsługujących reakcje (Slack/Discord/Telegram/Google Chat). Domyślnie dla
aktywnego agenta identity.emoji, gdy jest ustawiony, w przeciwnym razie "👀". Ustaw na "" aby wyłączyć.
ackReactionScope kontroluje podczas reakcji na ogień:
group-mentions(domyślnie): tylko wtedy, gdy grupa / pokój wymaga wzmianki i o botugroup-all: wszystkie wiadomości grupy/pokojudirect: tylko bezpośrednie wiadomościall: wszystkie wiadomości
removeAckAfterReply usuwa reakcję bota po wysłaniu odpowiedzi
(tylko Slack/Discord/Telegram/Google Chat). Domyślnie: false.
messages.tts
Włącz tekst na mowę dla odpowiedzi wychodzących. Gdy włączony, OpenClaw generuje dźwięk
przy użyciu ElevenLabs lub OpenAI i dołącza go do odpowiedzi. Telegram używa notatek głosowych Opus
; inne kanały wysyłają dźwięk MP3.
messages.tts.autokontroluje auto-TTS (off,zawsze,inbound,ttaged)./tts off|zawsze|inbound|ttagedustawia tryb auto sesji (nadpisuje konfigurację).messages.tts.enabledjest legacy; lekarz migruje go domessages.tts.auto.prefsPathprzechowuje lokalne nadpisania (provider/limit/summarize).maxTextLengthjest twardym limitem wejścia TTS; podsumowania są obcięte, aby pasować.summaryModelzastępujeagents.defaults.model.primarydla automatycznego podsumowania.- Akceptuje
provider/modellub alias zagents.defaults.models.
- Akceptuje
modelOverridesumożliwia generowane przez model nadpisywanie tagów[[tts:...](domyślnie).- Ustawienia podsumowania
/tts limiti/tts summarydla każdego użytkownika. - Wartości
apiKeywracają doELEVENLABS_API_KEY/XI_API_KEYiOPENAI_API_KEY. elevenlabs.baseUrlzastępuje bazowy adres URL API ElevenLabs.elevenlabs.voiceSettingsobsługujestability/similarityBoost/style(0..1),useSpeakerBoost, ispeed(0.5..2.0).
talk
Domyślnie dla trybu Talk (macOS/iOS/Android). Identyfikatory głosowe wracają do ELEVENLABS_VOICE_ID lub SAG_VOICE_ID po wyłączeniu.
apiKey spada z powrotem do ELEVENLABS_API_KEY (lub profil powłoki bramy), gdy jest nieustawiony.
voiceAliases let Talk Directive using friendly names (e.g. "voice":"Clawd").
agents.defaults
Kontroluje wbudowany agent czas pracy (model/myślenie/verbose/timeout).
agents.defaults.models definiuje skonfigurowany katalog modeli (i działa jako lista dozwolona dla /model).
agents.defaults.model.primary ustawia domyślny model; agents.defaults.model.fallbacks są globalnymi failovers.
agents.defaults.imageModel jest opcjonalny i jest używane tylko wtedy, gdy model podstawowy nie zawiera obrazu.
Każdy wpis agents.defaults.models może zawierać:
alias(opcjonalny skrót modelowy, np./opus).params(opcjonalne parametry API specyficzne dla dostawcy, przekazane do żądania modelu).
params jest również stosowany do operacji strumieniowych (wbudowany agent + frakcja). Obsługiwane klucze dzisiaj: temperatura, maxTokens. Te połączenia z opcjami czasu połączenia; wartości dostarczane przez dzwoniącego wygrywają. temperatura jest zaawansowanym pokrętłem - pozostaw nieustawione, chyba że znasz domyślne ustawienia modelu i potrzebujesz zmiany.
Przykład:
- ustaw
--thinking wyłączony, lub - definiuj
agents.defaults.models["zai/<model>"].params.thinking.
agents.defaults.models:
opus->anthropic/claude-opus-4-6sonnet->anthropic/claude-sonnet-4-5gpt->openai/gpt-5.2gpt-mini->openai/gpt-5-minigemini->google/gemini-3-pro-previewgemini-flash->google/gemini-3-flash-preview
MINIMAX_API_KEY (env) lub skonfiguruj models.providers.minimax.
agents.defaults.cliBackends (CLI fallback)
Opcjonalne backendy CLI dla trybu awaryjnego tylko tekstowego (brak połączeń narzędzi). Są one przydatne jako ścieżka tworzenia kopii zapasowej
gdy dostawcy API nie powiedzą się. Przejście obrazu jest obsługiwane podczas konfigurowania
pliku imageArg, który akceptuje ścieżki plików.
Uwagi:
- backendy CLI są tekst-first; narzędzia są zawsze wyłączone.
- Sesje są obsługiwane, gdy ustawiona jest
sessionArg; identyfikatory sesji są utrzymywane na zapleczu. - Dla
claude-cli, domyślne ustawienia są włączone. Zastąp ścieżkę poleceń, jeśli PATH jest minimalny (uruchomiony/system).
agents.defaults.contextPruning (przybornik efektu)
agents.defaults.contextPruning prunes stare narzędzie wynika z kontekstu w pamięci bezpośrednio przed wysłaniem żądania do LLM.
To nie modyfikuje historię sesji na dysku (*.jsonl pozostaje gotowe).
Ma to na celu ograniczenie użycia tokenów dla czynników czatowych, które gromadzą duże narzędzia na przestrzeni czasu.
Wysoki poziom:
- Nigdy nie dotyka wiadomości użytkownika/asystenta.
- Chroni ostatnie wiadomości asystenta
keepLastAssistants(nie ma wyników narzędzia po tym punkcie są prundy). - Chroni prefiks bootstrap (nie ma nic przed wyciskaniem pierwszej wiadomości użytkownika).
- Tryby:
adaptive: wyniki narzędzi o rozmiarze nadmiaru (zachowaj głowę/ogon), gdy szacowany stosunek kontekstu przecinasoftTrimRatio. Następnie twardo wyczyści najstarsze kwalifikujące się narzędzia gdy szacowany współczynnik kontekstu przecinahardClearRatioi jest wystarczająco dużo narzędzia prądowego (minPrunableToolChars).aggressive: zawsze zastępuje kwalifikujące się wyniki narzędzia przed odcięciemhardClear.placeholder(brak kontroli).
- Soft-trim: tylko dla wyników narzędzi nadrozmiaru Zachowuje początek + koniec i umieszcza
...w środku.- Przed:
toolResult("…bardzo długi wyjście…") - Po:
toolResult("HEAD…\n...\n…TAIL\n\n[Tool result trimmed: …]")
- Przed:
- Trudno wyjaśnić: zastępuje cały wynik narzędzia symbolem zastępczym.
- Przed:
toolResult("…bardzo długi wyjście…") - Po:
toolResult("[Old tool result content cleard]")
- Przed:
- Wyniki narzędzi zawierające bloki obrazów są pomijane (nigdy nie przycięte/wyczyszczone).
- Oszacowany „współczynnik kontekstu” opiera się na znakach (przybliżonym), a nie dokładnych tokenach.
- Jeśli sesja nie zawiera jeszcze co najmniej wiadomości asystenta
keepLastAssistants, odprawa jest pomijana. - W trybie
aggressivehardClear.enabledjest ignorowany (kwalifikujące się wyniki narzędzia są zawsze zastępowanehardClear.placeholder).
mode to "adaptive" lub "aggressive"):
keepLastAssistants:3softTrimRatio:0.3(tylko adaptacyjne)hardClearRatio:0.5(tylko adaptacyjne)minPrunableToolChars:50000(tylko adaptacyjne)softTrim:{ maxChars: 4000, headChars: 1500, tailChars: 1500 }(tylko adaptacyjne)hardClear:{ enabled: true, placeholder: "[Old tool result content cleared]" }
agents.defaults.compaction (zarezerwuj pokój głowy + opróżnianie pamięci)
agents.defaults.compaction.mode wybiera strategię podsumowania kompakty. Domyślne do default; ustaw Securard aby włączyć podsumowanie chunked dla bardzo długich historii. Zobacz /concepts/compaction.
agents.defaults.compaction.reserveTokensFloor wymusza minimalną wartość reserveTokens
dla zagęszczenia Pi (domyślnie: 20000). Ustaw na 0 aby wyłączyć podłoże.
agents.defaults.compaction.memoryFlush uruchamia cich agentic obrót przed
auto-compaction, instruując model do przechowywania trwałych pamięci na dysku (np.
memory/YYYY-MM-DD.md). Wyzwala się, gdy szacowany token sesji przekroczy wartość
miękkiego progu poniżej limitu frakcji.
Domyślnie starsze:
memoryFlush.enabled:truememoryFlush.softThresholdTokens:4000memoryFlush.prompt/memoryFlush.systemPrompt: wbudowane domyślne ustawienia zNO_REPLY- Uwaga: pamięć jest pominięta, gdy obszar roboczy sesji jest tylko do odczytu
(
agents.defaults.sandbox.workspaceAccess: "ro"lub"none").
-
agents.defaults.blockStreamingDefault:"on"/"off"(domyślnie wyłączone). -
Nadpisywanie kanałów:
*.blockStreaming(i warianty dla każdego konta) wymusza włączanie/wyłączanie blokowania streamingu. Kanały inne niż Telegram wymagają wyraźnego*.blockStreaming: trueaby włączyć odpowiedzi bloku. -
agents.defaults.blockStreamingBreak:"text_end"lub"message_end"(domyślnie: text_end). -
agents.defaults.blockStreamingChunk: miękki chunking dla bloków strumieniowych. Domyślnie 800–1200 znaków, preferowane są przerwy w paragrafie (\n\n), potem nowe, potem zdania. Przykład: -
agents.defaults.blockStreamingCoalesce: scalanie strumieniowych bloków przed wysłaniem. Domyślnie{ idleMs: 1000 }i dziedziczyminCharszblockStreamingChunkzmaxCharsograniczonym do limitu tekstu kanału. Sygnał/Slack/Discord/Google Chat domyślnie dominChars: 1500, chyba że nadpisano. Nadpisuje kanał:channels.whatsapp.blockStreamingCoalesce,channels.telegram.blockStreamingCoalesce,channels.discord.blockStreamingCoalesce,kanałs.slack.blockStreamingCoalesce,channels.mattermost.blockStreamingCoalesce,channels.signal.blockStreamingCoalesce,channels.imessage.blockStreamingCoalesce,channels.msteams.blockStreamingCoalesce,channels.googlechat.blockStreamingCoalesce(i warianty na konto). -
agents.defaults.humanDelay: losowa pauza pomiędzy odpowiedziami bloku po pierwszej. Mody:off(domyślnie),natural(800–2500ms),custom(użyjminMs/maxMs). Nadpisywanie peragenta:agents.list[].Ludzkie Opóźnienie. Przykład:Zobacz /concepts/streaming dla zachowania + szczegóły chunkingu.
agents.defaults.typingMode:"niver" | "instant" | "thinking" | "message". Domyślnieinstantdla czatów bezpośrednich / wzmianek imessagedla niewymienionych czatów grupowych.session.typingMode: nadpisanie trybu na sesję.agents.defaults.typingIntervalSeconds: jak często sygnał pisania jest odświeżany (domyślnie: 6s).session.typingIntervalSeconds: dla każdej sesji nadpisanie odstępu odświeżania. Zobacz /concepts/typing-indicators, aby uzyskać szczegóły zachowań.
agents.defaults.model.primary powinien być ustawiony jako provider/model (np. anthropic/claude-opus-4-6).
Aliasy pochodzą z agents.defaults.models.*.alias (np. Opus).
Jeśli opuścisz dostawcę, OpenClaw przyjmuje obecnie anthropic jako tymczasową rezygnację z kategorii
.
Modele Z.AI są dostępne jako zai/<model> (np. zai/glm-4.7) i wymagają
ZAI_API_KEY (lub starsze Z_AI_API_KEY) w środowisku.
agents.defaults.heartbeat konfiguruje okresowe bicie serca:
every: ciąg czasu trwania (ms,s,m,h); domyślne minuty jednostki. Domyślnie:30m. Ustaw0maby wyłączyć.model: opcjonalne nadpisanie modelu dla akcji serca (provider/model).includeReasoning: kiedytrue, uderzenia serca również dostarczą oddzielną wiadomośćReasoning:jeśli jest dostępna (taki sam kształt jak/rozumowanie na). Domyślnie:false.sesja: opcjonalny klucz sesji do kontrolowania, w której zaczyna się sesja bicia serca. Domyślnie:main.do: opcjonalne nadpisanie odbiorcy (identyfikator specyficzny dla kanału, np. E.164 dla WhatsApp, identyfikator czatu dla Telegram).target: opcjonalny kanał dostawy (last,whatsapp,telegram,discord,slack,msteams,signal,imessage,none). Domyślnie:last.prompt: opcjonalnie nadpisz ciało bicia serca (domyślnie:Read HEARTBEAT.md jeśli istnieje (kontekst obszaru roboczego). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.). Nadpisania są wysyłane w słowniku; jeśli nadal chcesz przeczytać plik wpisz wiersz “Przeczytaj HEARTBEAT.md”.ackMaxChars: maksymalna ilość znaków dozwolonych poHEARTBEAT_OKprzed dostawą (domyślnie: 300).
- Ustaw
agents.list[].heartbeataby włączyć lub zastąpić ustawienia bicia serca dla konkretnego agenta. - Jeśli jakakolwiek pozycja agenta definiuje
heartbeat, tylko te czynniki uruchamiają bicie serca; domyślnie staje się wspólną linią podstawową dla tych czynników.
every, zachowaj HEARTBEAT.md i (lub) wybierz tańszy model.
tools.exec konfiguruje opóźnienie w tle:
tłoMs: czas przed auto-tłem (ms, domyślnie 10000)timeoutSec: automatyczne zabijanie po tym czasie (sekundy, domyślnie 1800)cleanupMs: jak długo zachować ukończone sesje w pamięci (ms, domyślnie 1800000)notifyOnExit: dodaj do kolejki zdarzenie systemowe + poproś o bicie serca po wyjściu z tła (domyślnie prawda)applyPatch.enabled: włącz eksperymentalneapply_patch(OpenAI/OpenAI Codex tylko domyślnie; false)applyPatch.allowModels: opcjonalna dopuszczalna lista identyfikatorów modelu (np.gpt-5.2lubopenai/gpt-5.2) Uwaga:applyPatchjest tylko podtools.exec.
tools.web konfiguruje wyszukiwanie internetowe + narzędzia pobierania:
tools.web.search.enabled(domyślnie: true gdy klawisz jest obecny)tools.web.search.apiKey(zalecane: ustaw za pomocąopenclaw configure --section web, lub użyjBRAVE_API_KEYenv var)tools.web.search.maxResults(1–10, domyślnie 5)tools.web.search.timeoutSeconds(domyślnie 30)tools.web.search.cacheTtlMinutes(domyślnie 15)tools.web.fetch.enabled(domyślnie prawda)tools.web.fetch.maxChars(domyślnie 50000)tools.web.fetch.maxCharsCap(domyślnie 50000; clamps maxChars from config/toolcalls)tools.web.fetch.timeoutSeconds(domyślnie 30)tools.web.fetch.cacheTtlMinutes(domyślnie 15)tools.web.fetch.userAgent(opcjonalne nadpisanie)tools.web.fetch.readability(domyślnie true; wyłącz tylko do czyszczenia HTML)tools.web.fetch.firecrawl.enabled(domyślnie prawda, gdy klucz API jest ustawiony)tools.web.fetch.firecrawl.apiKey(opcjonalne; domyślnieFIRECRAWL_API_KEY)tools.web.fetch.firecrawl.baseUrl(domyślnie https://api.firecrawl.dev)tools.web.fetch.firecrawl.onlyMainContent(domyślnie prawda)tools.web.fetch.firecrawl.maxAgeMs(opcjonalne)tools.web.fetch.firecrawl.timeoutSeconds(opcjonalne)
tools.media konfiguruje zrozumienie przychodzących mediów (obraz/audio/video):
tools.media.models: lista modeli współdzielonych (cap-lists).tools.media.concurrency: max jednoczesne uruchamianie zdolności (domyślnie 2).tools.media.image/tools.media.audio/tools.media.video:enabled: opt-out przełącznik (domyślnie true gdy modele są skonfigurowane).prompt: opcjonalne nadpisanie polecenia (image/video dołącz hintmaxCharsautomatycznie).maxChars: maksymalna ilość znaków wyjściowych (domyślnie 500 dla zdjęcia/wideo; nieustawione dla audio).maxBytes: maksymalny rozmiar multimediów do wysłania (domyślnie: obraz 10MB, dźwięk 20MB, wideo 50MB).timeoutSeconds: limit czasu żądania (domyślnie: obrazek 60, dźwięk 60, film 120).język: opcjonalna podpowiedź dźwiękowa.załączniki: zasady załączników (mode,maxAttachments,preferowane).zakresu: opcjonalna bramka (pierwsza wygrana meczu) zmatch.channel,match.chatType, lubmatch.keyPrefix.models: uporządkowana lista wpisów modelu; błędy lub nadwymiary mediów wracają do następnego wpisu.
- Każdy wpis
models[]:- Wpis dostawcy (
type: "provider"lub pominięty):provider: identyfikator dostawcy API (openai,anthropic,google/gemini,groq, itp.).model: nadpisanie identyfikatora modelu (wymagane dla obrazu; domyślniegpt-4o-mini-transcribe/whisper-big v3-turbodla dostawców audio igemini-3-flash-previewdla wideo).profile/preferowane profile: wybór profilu autoryzacji.
- Wpis CLI (
type: "cli"):komenda: wykonywalny do uruchomienia.args: templated args (obsługuje{{MediaPath}},{{Prompt}},{{MaxChars}}, etc).
zdolności: opcjonalna lista (image,audio,video) do bramki wspólnego wpisu. Domyślnie, gdy pominięto:openai/anthropic/minimax→ obraz,google→ obraz+audio+video,groq→ audio.prompt,maxChars,maxBytes,timeoutSeconds,languagemoże zostać zastąpiony na wpis.
- Wpis dostawcy (
enabled: false), zrozumienie jest pominięte; model nadal otrzymuje oryginalne załączniki.
Autoryzacja dostawcy postępuje zgodnie ze standardowym modelem uwierzytelniania (profile autoryzacji, var jak OPENAI_API_KEY/GROQ_API_KEY/GEMINI_API_KEY, lub models.providers.*.apiKey).
Przykład:
agents.defaults.subagents konfiguruje domyślne subagenta:
model: domyślny model dla spawanych podagentów (ciąg znaków lub{ primary, fallbacks }). W przypadku pominięcia subagenci dziedziczą model dzwoniącego, chyba że zostanie on zastąpiony przez jednego przedstawiciela lub jednego połączenia.maxConcurrent: max jednoczesny subagent (domyślnie 1)archiveAfterMinutes: automatyczne archiwizowanie sesji subagenta po N minutach (domyślnie 60; ustaw0na wyłączony)- Polityka narzędzi dla subagenta:
tools.subagents.tools.allow/tools.subagents.tools.deny(odmawiaj zwycięstw)
tools.profile ustawia bazową listę dozwolonych narzędzi przed tools.allow/tools.deny:
minimal: tylkosession_statuscoding:group:fs,group:runtime,group:sessions,group:memory,imagemessaging:group:messaging,sessions_list,sessions_history,sessions_send,session_statusfull: brak ograniczeń (tak samo jak brak ustawienia)
agents.list[].tools.profile.
Przykład (domyślnie tylko wiadomości, dodatkowo zezwól na narzędzia Slack + Discord):
tools.byProvider pozwala na dalsze ograniczenie narzędzi dla określonych dostawców (lub jednego dostawcy/modelu).
Nadpisanie per-agent: agents.list[].tools.byProvider.
Zamówienie: profil bazowy → profil dostawcy → zezwalaj/odrzuć zasady.
Klucze dostawcy akceptują provider (np. google-antigravity) lub provider/model
(np. openai/gpt-5.2).
Przykład (zachowaj globalny profil programistyczny, ale minimalne narzędzia dla Google Antigravity):
tools.allow / tools.deny skonfiguruje globalne narzędzie dozwolone/odmów (odrzuć wygrane).
Dopasowanie jest niewrażliwe na wielkość liter i obsługuje wieloznaczne karty * ("*" oznacza wszystkie narzędzia).
Jest to stosowane nawet wtedy, gdy piasek dokujący jest wyłączony.
Przykład (wyłącz przeglądarkę/płótno wszędzie):
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:web:web_search,web_fetchgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: wszystkie wbudowane narzędzia OpenClaw (z wyłączeniem wtyczek dostawców)
tools.elevated kontroluje podwyższony (host) dostęp do wykonawcy:
enabled: włącz tryb podwyższony (domyślnie prawda)allowFod: dozwolone listy na kanał (puste = wyłączone)whatsapp: Numery E.164telegram: identyfikatory czatu lub nazwy użytkownikówdiscord: identyfikatory użytkownika lub nazwy użytkowników (powróci dochannels.discord.dm.allowFrom, jeśli zostaniesz pominięty)sygnał: liczby E.164imessage: handles/chat idwebchat: identyfikatory sesji lub nazwy użytkowników
tools.elevatedjest globalną linią bazową.agents.list[].tools.elevatedmoże ograniczać tylko dalsze ograniczenia (oba muszą pozwalać)./elevated on|off|ask|fullprzechowuje stan na klucz sesji; wbudowane dyrektywy dotyczą pojedynczej wiadomości.- Podwyższony
execdziała na hosta i omija piaskownicę. - Wciąż ma zastosowanie polityka narzędzi; jeśli
execnie jest używany, nie można użyć podwyższonego limitu.
agents.defaults.maxConcurrent ustawia maksymalną liczbę osadzonych uruchomień agenta, które mogą
wykonywać równolegle między sesjami. Każda sesja jest nadal serializowana (jedno wykonanie
na klucz sesji naraz). Domyślnie: 1.
agents.defaults.sandbox
Opcjonalnie Piaskownica dokująca dla wbudowanego agenta. Przeznaczone na inne niż główne sesje
więc nie mogą uzyskać dostępu do Twojego systemu hosta.
Szczegóły: Sandboxing
Domyślne (jeśli włączone):
- zakres:
"agent"(jeden pojemnik + obszar roboczy na agenta) - Obraz z książki debiańskiej
- Dostęp do obszaru roboczego agenta:
workspaceAccess: "none"(domyślnie)"none": użyj obszaru roboczego dla każdego zakresu pod~/.openclaw/sandboxes
"ro": zachowaj obszar roboczy sandbox w/workspace, i zamontuj tylko do odczytu konsultanta w/agent(wyłączawrite/edit/apply_patch)"rw": mount the agent workspace read/write at/workspace
- auto-pruning: bezczynność > 24 h LUB wiek > 7 dni
- polityka narzędzi: zezwól tylko na
exec,process,read,write,edit,apply_patch,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status(odmawiaj zwycięstw)- skonfiguruj za pomocą
tools.sandbox.tools, nadpisz każdego agenta poprzezagents.list[].tools.sandbox.tools - skróty grupy narzędzi obsługiwane w polityce sandbox:
group:runtime,group:fs,group:sessions,group:memory(patrz Sandbox vs Tool Policy vs Elevated)
- skonfiguruj za pomocą
- opcjonalna przeglądarka piaskowana (Chromium + CDP, obserwator noVNC)
- utwardzające noby:
sieci,user,pidsLimit,memory,cpus,ulimits,seccompProfile,apparmorProfile
zakres: "shared" oznacza wspólny kontener i wspólny obszar roboczy. Brak
izolacji międzysesyjnej. Użyj zakresu: "sesja" dla izolacji na sesję.
Legacy: perSession jest nadal obsługiwany (true → zakres: "session",
false → zakres: "shared").
setupCommand działa raz po utworzeniu kontenera (wewnątrz kontenera poprzez sh -lc).
W przypadku instalacji pakietów należy zapewnić odejście od sieci, zapisywalny root FS i użytkownika roota.
sieć: "none"; ustaw agents.defaults.sandbox.docker.network
na "bridge" (lub twoja sieć niestandardowa), jeśli agent potrzebuje dostępu wychodzącego.
Uwaga: przychodzące załączniki są rozłożone w aktywny obszar roboczy w media/inbound/*. Z workspaceAccess: "rw", oznacza to, że pliki są zapisywane w obszarze roboczym agenta
Uwaga: docker.binds montuje dodatkowe katalogi hostów; globalne i dla każdego agenta są scalone.
Zbuduj opcjonalny obraz przeglądarki z:
agents.defaults.sandbox.browser.enabled=true, narzędzie przeglądarki używa sandboxed
Chromium instancja (CDP). Jeśli noVNC jest włączona (domyślnie gdy headless=false),
adres URL noVNC jest wstrzykiwany w monit systemowy, aby agent mógł się do niego odwołać.
To nie wymaga browser.enabled w głównej konfiguracji; sterownik sandbox
URL jest wstrzykiwany na sesję.
agents.defaults.sandbox.browser.allowHostControl (domyślnie: false) pozwala
sesjom piaskowanym wyraźnie skierować serwer kontroli przeglądarki host
za pomocą narzędzia przeglądarki (target: "host"). Pozostaw to wyłączone, jeśli chcesz izolować piaskownicę
.
Listy dozwolone do zdalnego sterowania:
allowedControlUrls: dokładna kontrola adresów URL dozwolonych dlatarget: "custom".allowedControlHosts: nazwy hostów dozwolone (tylko nazwa hosta, bez portu).allowedControlPorts: porty dozwolone (domyślnie: http=80, https=443). Domyślnie: wszystkie listy uprawnień są nieustawione (bez ograniczeń).allowHostControldomyślnie fałsz.
models (dostawcy niestandardowi + bazowe adresy URL)
OpenClaw używa katalogu modeli pi-coding-agent. Możesz dodać dostawców niestandardowych
(LiteLLM, lokalne serwery kompatybilne z OpenAI, proxy Antropic itp.) pisząc
~/.openclaw/agents/<agentId>/agent/models.json lub definiując ten sam schemat wewnątrz twojego
OpenClaw config pod models.providers.
Dostawca po dostawcach + przykłady: /concepts/model-providers.
Gdy jest obecny models.providers OpenClaw pisze/merges a models.json do
~/.openclaw/agents/<agentId>/agent/ przy starcie:
- domyślne zachowanie: scalanie (zachowuje istniejących dostawców, nadpisuje na nazwie)
- ustaw
models.mode: "replace"aby nadpisać zawartość pliku
agents.defaults.model.primary (provider/model).
OpenCode Zen (wielomodelowy proxy)
OpenCode Zen jest wielomodelową bramą z poszczególnymi modelowymi punktami końcowymi. OpenClaw używa wbudowanego dostawcyopencode z pi-ai; ustaw OPENCODE_API_KEY (lub
OPENCODE_ZEN_API_KEY) od https://opencode.ai/auth.
Uwagi:
- Model odmowa użycia
opencode/<modelId>(przykład:opencode/claude-opus-4-6). - Jeśli włączysz listę dozwoloną przez
agents.defaults.models, dodaj każdy model, którego planujesz użyć. - Skrót:
openclaw onboard --auth-choice opencode-zen.
Z.AI (GLM-4.7) — wsparcie aliasu dostawcy
Modele Z.AI są dostępne za pośrednictwem wbudowanego dostawcyzai. Ustaw ZAI_API_KEY
w swoim środowisku i odwołaj się do modelu według dostawcy/modelu.
Skrót: openclaw onboard --auth-choice zai-api-key.
z.ai/*iz-ai/*są akceptowane aliasy i znormalizuj dozai/*.- Jeśli brakuje pliku
ZAI_API_KEY, zapytania do plikuzai/*nie powiodą się z błędem uwierzytelniania w czasie uruchomienia. - Przykładowy błąd:
Nie znaleziono klucza API dla dostawcy "zai". - Ogólnym punktem końcowym API Z.AI jest
https://api.z.ai/api/paas/v4. Żądania kodowania GLM używają dedykowanego punktu końcowego kodowaniahttps://api.z.ai/api/coding/paas/v4. Wbudowany dostawcazaiużywa punktu końcowego kodowania. Jeśli potrzebujesz ogólnego punktu końcowego , zdefiniuj dostawcę niestandardowego wmodels.providersz nadpisaniem podstawowego adresu URL (patrz powyżej sekcja niestandardowych dostawców). - Użyj fałszywego symbolu zastępczego w docs/configs; nigdy nie zatwierdzaj prawdziwych kluczy API.
Moonshot AI (Kimi)
Użyj punktu końcowego kompatybilnego z OpenAI Moonshot:- Ustaw
MOONSHOT_API_KEYw środowisku lub użyjopenclaw onboard --auth-choice moonshot-api-key. - Wzór ref:
moonshot/kimi-k2.5. - W odniesieniu do punktu końcowego Chin:
- Uruchom
openclaw onboard --auth-choice moonshot-api-key-cn(kreator ustalihttps://api.moonshot.cn/v1), lub - Ręcznie ustaw
baseUrl: "https://api.moonshot.cn/v1"wmodels.providers.moonshot.
- Uruchom
Kimi Coding
Użyj punktu końcowego Kodowania Moonshot AI Kimi (kompatybilnego z antropiną, wbudowanego dostawcy):- Ustaw
KIMI_API_KEYw środowisku lub użyjopenclaw onboard --auth-choice kimi-code-api-key. - Wzór ref:
kimi-coding/k2p5.
Syntetyczne (kompatybilne z antytropinami)
Użyj punktu końcowego kompatybilnego z Antropią Synthetic:- Ustaw
SYNTHETIC_API_KEYlub użyjopenclaw onboard --auth-choice synthetic-api-key. - Wzór ref:
synthetic/hf:MiniMaxAI/MiniMax-M2.1. - Bazowy adres URL powinien pominąć
/v1, ponieważ Klient Antropiczny go przyłącza .
Modele lokalne (LM Studio) – zalecane ustawienia
Zobacz /gateway/local-models, aby uzyskać aktualne lokalne wytyczne. TL;DR: uruchom MiniMax M2.1 poprzez LM Studio Responses API na poważnym urządzeniu; utrzymuj modele hostowane w celu opadania.MiniMax M2.1
Użyj MiniMax M2.1 bezpośrednio bez LM Studio:- Ustaw zmienną środowiskową
MINIMAX_API_KEYlub użyjopenclaw onboard --auth-choice minimax-api. - Dostępny model:
MiniMax-M2.1(domyślnie). - Zaktualizuj ceny w
models.jsonjeśli potrzebujesz dokładnego śledzenia kosztów.
Cerebras (GLM 4, 6 / 4, 7)
Użyj Cerebras przez punkt końcowy kompatybilny z OpenAI:- Użyj
cerebras/zai-glm-4.7dla Cerebras; użyjzai/glm-4.7dla Z.AI bezpośrednio. - Ustaw
CEREBRAS_API_KEYw środowisku lub konfiguracji.
- Obsługiwane APIs:
openai-completions,openai-responses,anthropic-messages,google-generative-ai - Użyj
authHeader: true+headersdla niestandardowych potrzeb uwierzytelniania. - Zastąp root konfiguracji agenta
OPENCLAW_AGENT_DIR(lubPI_CODING_AGENT_DIR) jeśli chcesz przechowywaćmodels.jsongdzie indziej (domyślnie:~/.openclaw/agents/main/agent).
sesja
Kontroluje punktację sesji, resetowanie reguły, wyzwalacze resetowania i miejsce zapisu sklepu sesji.
mainKey: bezpośredni chat bucket (domyślnie:"main"). Przydatne, gdy chcesz “zmienić nazwę” głównego wątku pamięci DM bez zmianyagentId.- Notatka Sandbox:
agents.defaults.sandbox.mode: "non-main"używa tego klucza do wykrycia sesji głównej. Każdy klucz sesji, który nie pasuje domainKey(grupy/kanały) jest piaskowany.
- Notatka Sandbox:
dmScope: jak sesje pamięci DM są grupowane (domyślnie:"main").main: wszystkie DM udostępniają sesję główną dla ciągłości.per-peer: izoluj DM przez identyfikator nadawcy.per-channel-peer: izoluj DM na kanał + nadawca (zalecane dla wielu użytkowników skrzynki odbiorczej).per-account-channel-peer: izoluj DM na konto + kanał + nadawca (zalecane dla wielu kont pocztowych).- Tryb bezpieczny DM (zalecany): ustaw
session.dmScope: "per-channel-peer"gdy wiele osób może DM bota (współdzielone skrzynki odbiorcze, wiele osób na liście lubdmPolicy: "open").
identityLinks: mapuj kanoniczne identyfikatory dla wcześniej ustalonych peerów dostawcy, tak aby ta sama osoba dzieliła sesję pamięci DM pomiędzy kanałami podczas używaniaper-peer,per-channel-peer, lubper-account-channel-peer.- Przykład:
alice: ["telegram:123456789", "discord:987654321012345678"].
- Przykład:
resetuj: pierwotna reguła resetowania. Domyślnie resetuje się codziennie o godzinie 4:00 czasu lokalnego na organizmie bramy.mode:dailylubidle(domyślnie:dailygdyresetjest obecny).atHour: lokalna godzina (0-23) dla dziennej granicy resetowania.idleMinutes: przesuwanie bezczynnego okna w kilka minut. Gdy skonfigurowane są oba (dzienny + bezczynność), wygrywa to, które wygaśnie pierwsze.
resetByType: per-session overrides fordirect,group, andthread. Legacydmkey is accepted as an alias fordirect.- Jeśli ustawisz tylko starszy
session.idleMinutesbez żadnegoreset/resetByType, OpenClaw pozostaje w trybie bezczynności dla kompatybilności wstecz.
- Jeśli ustawisz tylko starszy
heartbeatIdleMinutes: opcjonalna bezczynność dla kontroli bicia serca (codzienne resetowanie nadal obowiązuje, gdy włączone).agentToAgent.maxPingPongTurns: maksymalna odpowiedź zwrotna między żądającym/docelowym (0–5, domyślnie 5).sendPolicy.default:allowlubdenyprzy braku pasujących reguł.sendPolicy.rules[]: pasuje dokanał,chatType(direct|group|room) lubkeyPrefix(np.cron:). Po raz pierwszy odmawiaj zwycięstw; w przeciwnym razie zezwól na nie.
umiejętności (konfiguracja umiejętności)
Kontroluje dołączoną listę dozwolonych, zainstaluj preferencje, dodatkowe foldery umiejętności i nadpisywanie umiejętności
. Dotyczy pakietowych umiejętności i ~/.openclaw/skills (umiejętności w obszarze roboczym
nadal wygrywa konflikty nazw).
Pola:
allowBundled: opcjonalna lista dozwolonych wyłącznie dla dołączonych skills. Jeśli ustawione, kwalifikują się tylko te umiejętności powiązane (bez wpływu na umiejętności zarządzane/w obszarze pracy).load.extraDirs: dodatkowe katalogi Skills do skanowania (najniższy priorytet).install.preferBrew: preferuj instalatory brew, gdy są dostępne (domyślnie: true).install.nodeManager: preferencje instalatora węzłów (npm|pnpm|yarn, domyślne: npm).entries.<skillKey>: nadpisanie konfiguracji dla umiejętności.
enabled: ustawfalse, aby wyłączyć skill, nawet jeśli jest dołączony/zainstalowany.env: zmienne środowiskowe wstrzykiwane do uruchomienia agenta (tylko jeśli nie są już ustawione).apiKey: opcjonalna wygoda dla umiejętności, które zadeklarowały podstawowy var env (np.nano-bana-pro→GEMINI_API_KEY).
plugins (rozszerzenia)
Kontroluje wykrycie wtyczki, zezwól / odmów oraz konfigurację każdej wtyczki. Plugins are loaded
from ~/.openclaw/extensions, <workspace>/.openclaw/extensions, plus any
plugins.load.paths entries. Zmiany konfiguracji wymagają ponownego uruchomienia bramy.
Zobacz /plugin, aby uzyskać pełne użycie.
Pola:
enabled: główny przełącznik ładowania wtyczki (domyślnie: true).zezwalaj: opcjonalnie dopuszczalna lista identyfikatorów pluginów; gdy jest ustawiona, tylko wymienione wtyki.deny: opcjonalna odmowa identyfikatorów pluginów (odmowa wygranych).load.paths: dodatkowe pliki lub katalogi pluginów do załadowania (bezwzględne lub~).wpisy.<pluginId>: nadpisywanie wtyczki.enabled: ustawfalseaby wyłączyć.config: obiekt konfiguracyjny specyficzny dla wtyczki (zatwierdzony przez wtyczkę, jeśli jest dostępny).
browser (przeglądarka zarządzana przez openclaw)
OpenClaw może rozpocząć oddzieloną, izolowaną instancję Chrome/Brave/Edge/Chromium dla openclaw i wystawić na działanie małej usługi kontroli pętli.
Profile mogą wskazywać na zdalną przeglądarkę opartą na Chromium poprzez profile.<name>.cdpUrl. Zdalne profile
są tylko dołączone (start/stop/reset są wyłączone).
browser.cdpUrl pozostaje dla starych konfiguracji pojedynczego profilu i jako podstawowy schemat
dla profili, które ustawiają tylko cdpPort.
Domyślne:
- włączone:
true - ocena włączona:
true(ustawfalseaby wyłączyćact:evaluateiwait --fn) - usługa kontroli: tylko pętla (port wynikowy z
gateway.port, domyślny18791) - Adres URL CDP:
http://127.0.0.1:18792(kontrola + 1, starszy jeden profil) - kolor profilu:
#FF4500(lobster-pomarańczy) - Uwaga: serwer kontrolny jest uruchamiany przez uruchomioną bramę (OpenClaw.app menu lub
openclaw gateway). - Automatycznie wykrywaj kolejność: domyślna przeglądarka jeśli jest oparta na chromie; w przeciwnym razie Chrome → Brave → Edge → Chromium → Chrome Canary.
ui (wygląd)
Opcjonalny kolor akcentu używany przez natywne aplikacje dla chromu interfejsu użytkownika (np. znacznik bańki w trybie mówienia).
Jeśli wyłączone, klienci wrócą do wyciszonego jasnoniebieskiego.
gateway (Gateway server mode + bind)
Użyj gateway.mode do wyraźnego stwierdzenia, czy ta maszyna powinna uruchomić bramę.
Domyślne:
- tryb: unset (traktowane jako “nie uruchamiaj automatycznie”)
- bind:
loopback - port:
18789(pojedynczy port dla WS + HTTP)
gateway.controlUi.basePathustawia prefiks URL gdzie jest obsługiwany interfejs sterowania.- Przykłady:
"/ui","/openclaw","/apps/openclaw". - Domyślnie: root (
/) (bez zmian). gateway.controlUi.rootustawia root systemu plików dla zasobów interfejsu użytkownika (domyślnie:dist/control-ui).gateway.controlUi.allowInsecureAuthpozwala na autoryzację tylko tokenem dla interfejsu sterowania, gdy tożsamość urządzenia jest pomijana (zazwyczaj przez HTTP). Domyślnie:false. Preferuj HTTPS (Tailscale Serve) lub127.0.0.1.gateway.controlUi.dangerouslyDisableDeviceAuthwyłącza sprawdzanie tożsamości urządzenia dla Control UI (tylko token/hasło). Domyślnie:false. Wyłącznie szkło pękające.
gateway.trustedProxies: lista odwróconych adresów IP proxy, które kończą TLS przed bramą.- Gdy połączenie pochodzi z jednego z tych adresów IP, OpenClaw używa
x-forwarded-for(lubx-real-ip) do określenia adresu IP klienta dla lokalnych kontroli parowania i HTTP auth/local checks. - Tylko lista proxy które kontrolujesz w pełni i upewnij się, że nadpisuje przychodzące
x-forwarded-for.
openclaw gatewayodmówi rozpoczęcia, chyba żegateway.modejest ustawiony nalocal(lub przemieścisz flagę nadpisu).gateway.portkontroluje pojedynczy wielopleksowy port używany dla WebSocket + HTTP (kontrola UI, hooks, A2UI).- Punkt końcowy Kompletności OpenAI: wyłączony domyślnie; włącz
gateway.http.endpoints.chatCompletions.enabled: true. - Poprzednia:
--port>OPENCLAW_GATEWAY_PORT>gateway.port> domyślny18789. - Autoryzacja bramki jest domyślnie wymagana (token/password lub Tailscale Serve identity). Niepętla binds wymaga współdzielonego tokenu/hasła.
- Kreator wdrożenia generuje domyślny token bramy (nawet przy pętl).
gateway.remote.tokenjest tylko dla zdalnych połączeń CLI; nie włącza lokalnego uwierzytelniania bramy.gateway.tokenjest ignorowany.
gateway.auth.modeustawia wymagania handshake (tokenlubpassword). Gdy wyłączone, zostanie założona autoryzacja tokena.gateway.auth.tokenprzechowuje wspólny token dla uwierzytelniania tokenu (używany przez CLI na tym samym urządzeniu).- Gdy
gateway.auth.modejest ustawiony, tylko ta metoda jest akceptowana (plus opcjonalne nagłówki skali ogonowej). gateway.auth.passwordmożna ustawić tutaj lub za pomocąOPENCLAW_GATEWAY_PASSWORD(zalecane).gateway.auth.allowTailscalepozwala nagłówkom identyfikacyjnym Skala Ogonowa (tailscale-user-login) na spełnienie wymogu, gdy żądanie dotrze do pętli zx-forwarded-for,x-forwarded-proto, ix-forwarded-host. OpenClaw weryfikuje tożsamość, rozwiązując adresx-forwarded-forprzeztailscale whoisprzed zaakceptowaniem go. Gdytrue, Serve requesty nie potrzebują tokenu/hasła; ustawfalseaby wymagać wyraźnych poświadczeń. Domyślnie dlatruegdytailscale.mode = "serve"i tryb autoryzacji nie jesthasłem.gateway.tailscale.mode: "serve"używa Służy Ogonowej (tylko ogon, loopback bind).gateway.tailscale.mode: "funnel"ujawnia kokpit menedżerski; wymaga autoryzacji.gateway.tailscale.resetOnExitresetuje konfigurację Serve/Lenel przy wyłączeniu.
gateway.remote.urlustawia domyślny adres URL bramki WebSocket dla połączeń CLI, gdygateway.mode = "remote".gateway.remote.transportwybiera zdalne transport macOS (domyślniessh,directdla ws/wss). Gdydirect,gateway.remote.urlmusi byćws://lubwss://.ws://hostdomyślnie dla portu18789.gateway.remote.tokendostarcza token dla połączeń zdalnych (pozostaw nieustawione dla braku autora).gateway.remote.passwordzawiera hasło dla połączeń zdalnych (pozostaw nieustawione dla braku autora).
- OpenClaw.app ogląda
~/.openclaw/openclaw.jsoni przełącza tryby na żywo po zmianiegateway.modelubgateway.remote.url. - Jeśli plik
gateway.modejest nieustawiony, ale plikgateway.remote.urljest ustawiony, aplikacja macOS traktuje go jako tryb zdalny. - Po zmianie trybu połączenia w aplikacji macOS, zapisuje on
gateway.mode(igateway.remote.url+gateway.remote.transportw trybie zdalnym) z powrotem do pliku konfiguracyjnego.
gateway.reload (konfig hot reload)
Brama ogląda ~/.openclaw/openclaw.json (lub OPENCLAW_CONFIG_PATH) i wprowadza zmiany automatycznie.
Tryby:
hybrid(domyślnie): Zastosuj bezpieczne zmiany; zrestartuj bramę dla krytycznych zmian.hot: zastosuj tylko zmiany na gorąco; zaloguj się po ponownym uruchomieniu.restart: zrestartuj bramę po każdej zmianie konfiguracji.off: wyłącz gorące przeładowanie.
Gorąca matryca przeładowania (pliki + wpływ)
Oglądane pliki:~/.openclaw/openclaw.json(lubOPENCLAW_CONFIG_PATH)
hooks(webhook auth/path/mappings) +hooks.gmail(ponownie uruchomiono obserwator poczty)browser(ponowne uruchomienie serwera kontrolnego przeglądarki)cron(restart usługi cron + aktualizacja kontualu)agents.defaults.heartbeat(start akcji serca)web(ponowne uruchomienie kanału WhatsApp)telegram,discord,signal,imessage(ponowne uruchomienie kanału)agent,models,routing,messages,session,whatsapp,logging,umiejętności,ui,talk,identity,wizard(dynamiczne czytania)
gateway(port/bind/auth/control UI/tailscale)bridge(legacy)wykrywaniecanvasHostwtyczki- Dowolna nieznana/nieobsługiwana ścieżka konfiguracji (domyślnie do ponownego uruchomienia dla bezpieczeństwa)
Izolacja wielu instancji
Aby uruchomić wiele bramek na jednym hostu (dla redundancji lub botu ratowniczego), oddziel stan każdej instancji + config i użyj unikalnych portów:OPENCLAW_CONFIG_PATH(konfiguracja dla każdej instancji)OPENCLAW_STATE_DIR(sesje/creds)agents.defaults.workspace(pamięci)gateway.port(unikalne dla każdej instancji)
openclaw --dev …→ używa~/.openclaw-dev+ zmienia porty z19001openclaw --profile <name> …→ używa~/.openclaw-<name>(port przez config/env/flags)
hooks (Gateway webhooks)
Włącz prosty punkt końcowy HTTP na serwerze HTTP bramy.
Domyślne:
- Włączony:
false - ścieżka:
/hooks - maxBodyBytes:
262144(256 KB)
Autoryzacja: Bearer <token>lubx-openclaw-token: <token>
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }POST /hooks/<name>→ rozwiązane przezhooks.mappings
/hooks/agent zawsze zamieszcza podsumowanie na sesji głównej (i może opcjonalnie wywołać natychmiastowe bicie serca za pomocą wakeMode: "teraz").
Notatki mapowania:
match.pathpasuje do podścieżki po/hooks(np./hooks/gmail→gmail).match.sourcepasuje do pola payload (np.{ source: "gmail" }), więc możesz użyć generycznej ścieżki/hooks/ingest.- Szablony takie jak
{{messages[0].subject}}czytane z payloadu. transformmoże wskazywać na moduł JS/TS, który zwraca akcję zaczepu.deliver: truewysyła ostateczną odpowiedź do kanału;channeldomyślnie dolast(powróci do WhatsApp).- Jeśli nie ma poprzedniej trasy dostawy, ustaw
channel+dowyraźnie (wymagane dla Telegram/Discord/Google Chat/Slack/Signal/iMessage/MS Teams). modelzastępuje LLM dla tego biegu zaczepu (provider/modellub alias; musi być dozwolone, jeśli ustawionoagents.defaults.models).
openclaw webhooks setup / run):
hooks.gmail.modelokreśla model do przetwarzania hooka Gmail (domyślnie podstawowa sesja).- Akceptuje
provider/modelrefs lub aliases zagents.defaults.models. - Wraca do
agents.defaults.model.fallbacks, a następnieagents.defaults.model.primary, na auth/rate-limit/timeouts. - Jeśli
agents.defaults.modelsjest ustawione, dołącz model hooków do listy dozwolonych. - Przy starcie ostrzega, jeśli skonfigurowany model nie znajduje się w katalogu modeli lub na liście dozwolonych.
hooks.gmail.thinkingustawia domyślny poziom myślenia dla haków Gmail i jest nadpisany przezthinking.
- If
hooks.enabled=trueandhooks.gmail.accountis set, the Gateway startsgog gmail watch serveon boot and auto-renews the watch. - Ustaw
OPENCLAW_SKIP_GMAIL_WATCHER=1aby wyłączyć auto-start (dla ręcznych uruchomień). - Unikaj oddzielnego
gog gmail watch serveobok Gateway; nie powiedzie się znasłuchiwaniem tcp 127.0.0.1:8788: bind: adres już w użyciu.
tailscale.mode jest włączony, OpenClaw domyślnie serve.path do / tak, aby
Gailscale może proxy /gmail-pubsub poprawnie (usuwa prefiks ustawionej ścieżki).
Jeśli potrzebujesz backendu aby otrzymać predefiniowaną ścieżkę, ustaw
hooks.gmail.tailscale.target na pełny adres URL (i wyrównaj serve.path).
canvasHost (LAN/tailnet Canvas file server + reload)
Brama obsługuje katalog HTML/CSS/JS przez HTTP, aby iOS/Android węzły mogły po prostu canvas.navigate.
Domyślny root: ~/. penclaw/workspace/canvasDomyślny port:
18793 (wybrany aby uniknąć portu CDP przeglądarki openclaw 18792)Serwer nasłuchuje **hosta bramy ** (LAN lub Tailnet), aby węzły mogły go dotrzeć. Serwer:
- obsługuje pliki z
canvasHost.root - wstrzykuje malutki klient przeładowania do obsługiwanego HTML
- ogląda katalog i ładuje się ponownie przez punkt końcowy WebSocket w
/__openclaw__/ws - automatycznie tworzy starter
index.htmlgdy katalog jest pusty (więc zobaczysz coś natychmiast) - obsługuje również A2UI w
/__openclaw__/a2ui/i jest reklamowane do węzłów jakocanvasHostUrl(zawsze używane przez węzły dla Canvas/A2UI)
EMFILE:
- konfiguracja:
canvasHost: { liveReload: false }
canvasHost.* wymagają ponownego uruchomienia bramy (konfiguracja przeładuje się ponownie).
Wyłącz:
- konfiguracja:
canvasHost: { enabled: false } - pl:
OPENCLAW_SKIP_CANVAS_HOST=1
bridge (starszy mostek TCP, usunięty)
Bieżące kompilacje nie zawierają już słuchacza mostów TCP; klucze bridge.* są ignorowane.
Węzły łączą się przez WebSocket bramy. Niniejsza sekcja jest przechowywana do celów historycznych odniesienia.
Zachowanie starszego:
- Brama może wystawić prosty most TCP dla węzłów (iOS/Android), zazwyczaj na porcie
18790.
- włączone:
true - port:
18790 - dla:
lan(wiąże z0.0.0.0)
lan:0.0.0(osiągalne na dowolnym interfejsie, w tym LAN/Wi‑Fi i Tailscale)tailnet: zwiąż tylko z adresem IP w skali progowej (zalecane dla Wiednia <unk> Londyn)loopback:127.0.0.1(tylko lokalnie)auto: preferuj IP tailnet, jeśli jest obecny, w przeciwnym razielan
bridge.tls.enabled: włącz TLS dla połączeń mostkowych (TLS-only when enabled).bridge.tls.autoGenerate: wygeneruj samopodpisany certyfikat, gdy nie ma certyfikatu lub klucza (domyślnie: true).bridge.tls.certPath/bridge.tls.keyPath: ścieżki PEM dla certyfikatu mostu + klucz prywatny.bridge.tls.caPath: opcjonalny pakiet CA PEM (własne korzenie lub przyszły mTLS).
bridgeTls=1 i bridgeTlsSha256 w odkryciu TXT
rekordy, aby węzły mogły przypiąć certyfikat. Ręczne połączenia używają zaufania do pierwszego użycia, jeśli nie zapisano jeszcze odcisku palca
.
Automatyczne generowane certy wymagają openssl na PATH; jeśli generowanie się nie powiedzie, most nie uruchomi.
discovery.mdns (tryb nadawania Bonjour / mDNS)
Kontroluje transmisje wyszukiwania LAN mDNS (_openclaw-gw._tcp).
minimal(domyślnie): pomińcliPath+sshPortz rekordów TXTfull: dołączcliPath+sshPortdo rekordów TXToff: całkowicie wyłącz transmisje mDNS- Nazwa hosta: domyślnie
openclaw(reklamujeopenclaw.local). ZastąpOPENCLAW_MDNS_HOSTNAME.
discovery.wideArea (Wide-Area Bonjour / unicast DNS-SD)
Po włączeniu brama zapisuje unicast strefę DNS-SD dla _openclaw-gw._tcp w ~/.openclaw/dns/ przy użyciu skonfigurowanej domeny odkrycia (przykład: openclaw.internal.).
Aby odkryć iOS/Android w sieciach (Wiedeń <unk> Londyn), połącz to z:
- serwer DNS na serwerze bramy obsługującym wybraną domenę (CoreDNS jest zalecany)
- Skala przerw rozdziel DNS, aby klienci rozwiązali tę domenę za pośrednictwem serwera DNS bramy.
Zmienne szablonu modelu mediów
Szablonowe symbole są rozszerzone wtools.media.*.models[].args i tools.media.models[].args (i wszelkie przyszłe pola argumentów szablonów).
| Zmienna | Opis |
| ------------------------------------------------------------------------------- | -------- | ------- | ---------- | ----- | ------ | -------- | ------- | ------- | ------- | --- |
| {{Body}} | Pełne przychodzące treści wiadomości |
| {{RawBody}} | Raw przychodzące treści wiadomości (bez zawijania historii/nadawcy; Najlepsze dla parsowania poleceń) |
| {{BodyStripped}} | Treść z usuniętymi wzmiankami grupy (najlepsze domyślne dla agentów) |
| {{From}} | Identyfikator nadawcy (E. 64 dla WhatsApp; może różnić się w zależności od kanału) |
| {{To}} | Identyfikator miejsca przeznaczenia |
| {{MessageSid}} | Identyfikator wiadomości kanału (jeśli dostępny) |
| {{SessionId}} | Bieżąca sesja UUID |
| {{IsNewSession}} | "true" gdy nowa sesja została utworzona |
| {{MediaUrl}} | Pseudo-URL mediów przychodzących (jeśli obecnie) |
| {{MediaPath}} | Lokalna ścieżka mediów (jeśli pobrana) |
| {{MediaType}} | Typ mediów (image/audio/document/…) |
| {{Transcript}} | Audio transcript (when enabled) |
| {{Prompt}} | Resolved media prompt for CLI entries |
| {{MaxChars}} | Resolved max output chars for CLI entries |
| {{ChatType}} | "direct" or "group" |
| {{GroupSubject}} | Group subject (best effort) |
| {{GroupMembers}} | Group members preview (best effort) |
| {{SenderName}} | Sender display name (best effort) |
| {{SenderE164}} | Sender phone number (best effort) |
| {{Provider}} | Provider hint (whatsapp | telegram | discord | googlechat | slack | signal | imessage | msteams | webchat | …) |
Cron (Gateway scheduler)
Cron jest programistą Bateway dla wybudzeń i zaplanowanych prac. Zobacz Cron jobs, aby uzyskać przegląd funkcji i przykłady CLI.Następne: Agent Runtime 🦞