Gateway
Konfiguracja
OpenClaw odczytuje opcjonalną konfigurację <Tooltip tip="JSON5 obsługuje komentarze i końcowe przecinki">JSON5</Tooltip> z ~/.openclaw/openclaw.json.
Aktywna ścieżka konfiguracji musi być zwykłym plikiem. Układy openclaw.json
z dowiązaniami symbolicznymi nie są obsługiwane dla zapisów należących do OpenClaw; zapis atomowy może zastąpić
ścieżkę zamiast zachować dowiązanie symboliczne. Jeśli przechowujesz konfigurację poza
domyślnym katalogiem stanu, ustaw OPENCLAW_CONFIG_PATH bezpośrednio na rzeczywisty plik.
Jeśli pliku nie ma, OpenClaw używa bezpiecznych wartości domyślnych. Typowe powody dodania konfiguracji:
- Połączenie kanałów i kontrola, kto może wysyłać wiadomości do bota
- Ustawienie modeli, narzędzi, sandboxingu lub automatyzacji (cron, hooki)
- Dostrojenie sesji, multimediów, sieci lub UI
Zobacz pełną dokumentację referencyjną wszystkich dostępnych pól.
Agenci i automatyzacja powinni używać config.schema.lookup, aby uzyskać dokładną
dokumentację na poziomie pól przed edycją konfiguracji. Używaj tej strony do wskazówek zorientowanych na zadania oraz
Dokumentacji referencyjnej konfiguracji do szerszej
mapy pól i wartości domyślnych.
Minimalna konfiguracja
// ~/.openclaw/openclaw.json
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}
Edytowanie konfiguracji
Interaktywny kreator
openclaw onboard # full onboarding flow
openclaw configure # config wizard
CLI (jednolinijkowce)
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
openclaw config unset plugins.entries.brave.config.webSearch.apiKey
UI sterowania
Otwórz http://127.0.0.1:18789 i użyj karty Konfiguracja.
UI sterowania renderuje formularz na podstawie aktywnego schematu konfiguracji, w tym metadane dokumentacji
pól title / description oraz schematy pluginów i kanałów, gdy są dostępne,
z edytorem Surowy JSON jako wyjściem awaryjnym. Dla interfejsów
szczegółowych i innych narzędzi Gateway udostępnia też config.schema.lookup, aby
pobrać jeden węzeł schematu ograniczony do ścieżki oraz podsumowania bezpośrednich elementów podrzędnych.
Bezpośrednia edycja
Edytuj ~/.openclaw/openclaw.json bezpośrednio. Gateway obserwuje plik i automatycznie stosuje zmiany (zobacz hot reload).
Ścisła walidacja
openclaw config schema wypisuje kanoniczny JSON Schema używany przez UI sterowania
i walidację. config.schema.lookup pobiera pojedynczy węzeł ograniczony do ścieżki oraz
podsumowania elementów podrzędnych dla narzędzi szczegółowych. Metadane dokumentacji pól title/description
przechodzą przez zagnieżdżone obiekty, symbole wieloznaczne (*), elementy tablicy ([]) oraz gałęzie anyOf/
oneOf/allOf. Schematy pluginów i kanałów w czasie działania są scalane, gdy
rejestr manifestów jest załadowany.
Gdy walidacja się nie powiedzie:
- Gateway nie uruchamia się
- Działają tylko polecenia diagnostyczne (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Uruchom
openclaw doctor, aby zobaczyć dokładne problemy - Uruchom
openclaw doctor --fix(lub--yes), aby zastosować naprawy
Gateway zachowuje zaufaną kopię ostatniej poprawnej konfiguracji po każdym udanym uruchomieniu,
ale uruchamianie i hot reload nie przywracają jej automatycznie. Jeśli openclaw.json
nie przejdzie walidacji (w tym lokalnej walidacji plugina), uruchomienie Gateway się nie powiedzie lub
przeładowanie zostanie pominięte, a bieżące środowisko wykonawcze zachowa ostatnią zaakceptowaną konfigurację.
Uruchom openclaw doctor --fix (lub --yes), aby naprawić konfigurację z prefiksami/nadpisaną albo
przywrócić ostatnią poprawną kopię. Promowanie do ostatniej poprawnej kopii jest pomijane, gdy
kandydat zawiera zredagowane symbole zastępcze sekretów, takie jak ***.
Typowe zadania
Skonfiguruj kanał (WhatsApp, Telegram, Discord itd.)
Każdy kanał ma własną sekcję konfiguracji w channels.<provider>. Zobacz dedykowaną stronę kanału z krokami konfiguracji:
- WhatsApp -
channels.whatsapp - Telegram -
channels.telegram - Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - Microsoft Teams -
channels.msteams - Slack -
channels.slack - Signal -
channels.signal - iMessage -
channels.imessage - Mattermost -
channels.mattermost
Wszystkie kanały mają ten sam wzorzec zasad DM:
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["tg:123"], // only for allowlist/open
},
},
}
Wybierz i skonfiguruj modele
Ustaw model główny i opcjonalne modele zapasowe:
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-sonnet-4-6",
fallbacks: ["openai/gpt-5.4"],
},
models: {
"anthropic/claude-sonnet-4-6": { alias: "Sonnet" },
"openai/gpt-5.4": { alias: "GPT" },
},
},
},
}
agents.defaults.modelsdefiniuje katalog modeli i działa jako lista dozwolonych dla/model.- Użyj
openclaw config set agents.defaults.models '<json>' --strict-json --merge, aby dodać wpisy do listy dozwolonych bez usuwania istniejących modeli. Zwykłe zastąpienia, które usunęłyby wpisy, są odrzucane, chyba że przekażesz--replace. - Odwołania do modeli używają formatu
provider/model(np.anthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxsteruje zmniejszaniem obrazów z transkrypcji/narzędzi (domyślnie1200); niższe wartości zwykle zmniejszają użycie tokenów wizji w przebiegach z dużą liczbą zrzutów ekranu.- Zobacz CLI modeli, aby przełączać modele w czacie, oraz Przełączanie awaryjne modeli, aby poznać rotację uwierzytelniania i zachowanie zapasowe.
- W przypadku niestandardowych/samodzielnie hostowanych dostawców zobacz Niestandardowi dostawcy w dokumentacji referencyjnej.
Kontroluj, kto może wysyłać wiadomości do bota
Dostęp do wiadomości prywatnych jest kontrolowany osobno dla każdego kanału przez dmPolicy:
"pairing"(domyślnie): nieznani nadawcy otrzymują jednorazowy kod parowania do zatwierdzenia"allowlist": tylko nadawcy wallowFrom(lub w sparowanym magazynie zezwoleń)"open": zezwól na wszystkie przychodzące wiadomości prywatne (wymagaallowFrom: ["*"])"disabled": ignoruj wszystkie wiadomości prywatne
Dla grup użyj groupPolicy + groupAllowFrom albo list zezwoleń specyficznych dla kanału.
Szczegóły dla poszczególnych kanałów znajdziesz w pełnej dokumentacji.
Skonfiguruj bramkowanie wzmianek w czacie grupowym
Wiadomości grupowe domyślnie wymagają wzmianki. Skonfiguruj wzorce wyzwalaczy dla poszczególnych agentów i pozostaw widoczne odpowiedzi w pokoju na domyślnej ścieżce narzędzia wiadomości, chyba że celowo chcesz używać starszych automatycznych odpowiedzi końcowych:
{
messages: {
visibleReplies: "automatic", // ustaw "message_tool", aby wszędzie wymagać wysyłania przez narzędzie wiadomości
groupChat: {
visibleReplies: "message_tool", // domyślnie; użyj "automatic" dla starszych odpowiedzi w pokoju
},
},
agents: {
list: [
{
id: "main",
groupChat: {
mentionPatterns: ["@openclaw", "openclaw"],
},
},
],
},
channels: {
whatsapp: {
groups: { "*": { requireMention: true } },
},
},
}
- Wzmianki w metadanych: natywne @-wzmianki (WhatsApp dotknij-aby-wspomnieć, Telegram @bot itd.)
- Wzorce tekstowe: bezpieczne wzorce regex w
mentionPatterns - Widoczne odpowiedzi:
messages.visibleRepliesmoże globalnie wymagać wysyłania przez narzędzie wiadomości;messages.groupChat.visibleReplieszastępuje to dla grup/kanałów. - Zobacz pełną dokumentację, aby poznać tryby widocznych odpowiedzi, nadpisania dla poszczególnych kanałów i tryb czatu z samym sobą.
Ogranicz Skills dla poszczególnych agentów
Użyj agents.defaults.skills jako wspólnej podstawy, a następnie nadpisz konkretnych
agentów za pomocą agents.list[].skills:
{
agents: {
defaults: {
skills: ["github", "weather"],
},
list: [
{ id: "writer" }, // dziedziczy github, weather
{ id: "docs", skills: ["docs-search"] }, // zastępuje wartości domyślne
{ id: "locked-down", skills: [] }, // brak 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 używać żadnych Skills. - Zobacz Skills, konfigurację Skills oraz Dokumentację konfiguracji.
Dostosuj monitorowanie kondycji kanałów Gateway
Kontroluj, jak agresywnie gateway restartuje kanały, które wyglądają na nieaktywne:
{
gateway: {
channelHealthCheckMinutes: 5,
channelStaleEventThresholdMinutes: 30,
channelMaxRestartsPerHour: 10,
},
channels: {
telegram: {
healthMonitor: { enabled: false },
accounts: {
alerts: {
healthMonitor: { enabled: true },
},
},
},
},
}
- Ustaw
gateway.channelHealthCheckMinutes: 0, aby globalnie wyłączyć restarty monitora kondycji. channelStaleEventThresholdMinutespowinno być większe lub równe interwałowi sprawdzania.- Użyj
channels.<provider>.healthMonitor.enabledalbochannels.<provider>.accounts.<id>.healthMonitor.enabled, aby wyłączyć automatyczne restarty dla jednego kanału lub konta bez wyłączania globalnego monitora. - Zobacz Kontrole kondycji, aby debugować operacyjnie, oraz pełną dokumentację, aby poznać wszystkie pola.
Dostosuj limit czasu uzgadniania WebSocket Gateway
Daj klientom lokalnym więcej czasu na ukończenie przedautoryzacyjnego uzgadniania WebSocket na obciążonych hostach lub hostach o małej mocy:
{
gateway: {
handshakeTimeoutMs: 30000,
},
}
- Wartość domyślna to
15000milisekund. OPENCLAW_HANDSHAKE_TIMEOUT_MSnadal ma pierwszeństwo dla jednorazowych nadpisań usługi lub powłoki.- Najpierw najlepiej naprawić zacięcia uruchamiania/pętli zdarzeń; to ustawienie jest przeznaczone dla hostów, które są zdrowe, ale wolne podczas rozgrzewania.
Skonfiguruj sesje i resetowanie
Sesje kontrolują ciągłość i izolację konwersacji:
{
session: {
dmScope: "per-channel-peer", // zalecane dla wielu użytkowników
threadBindings: {
enabled: true,
idleHours: 24,
maxAgeHours: 0,
},
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 120,
},
},
}
dmScope:main(wspólne) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: globalne wartości domyślne dla trasowania sesji powiązanych z wątkiem (Discord obsługuje/focus,/unfocus,/agents,/session idlei/session max-age).- Zobacz Zarządzanie sesjami, aby poznać zakresy, powiązania tożsamości i zasady wysyłania.
- Zobacz pełną dokumentację, aby poznać wszystkie pola.
Włącz sandboxing
Uruchamiaj sesje agentów w izolowanych środowiskach wykonawczych sandbox:
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // off | non-main | all
scope: "agent", // session | agent | shared
},
},
},
}
Najpierw zbuduj obraz - z checkoutu źródeł uruchom scripts/sandbox-setup.sh, a przy instalacji z npm zobacz wbudowane polecenie docker build w Sandboxing § Obrazy i konfiguracja.
Pełny przewodnik znajdziesz w Sandboxing, a wszystkie opcje w pełnej referencji.
Włącz push wspierany przez relay dla oficjalnych buildów iOS
Push wspierany przez relay konfiguruje się w openclaw.json.
Ustaw to w konfiguracji gateway:
{
gateway: {
push: {
apns: {
relay: {
baseUrl: "https://relay.example.com",
// Optional. Default: 10000
timeoutMs: 10000,
},
},
},
},
}
Odpowiednik w CLI:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
Co to robi:
- Pozwala gateway wysyłać
push.test, pobudki wake nudges i pobudki ponownego połączenia przez zewnętrzny relay. - Używa grantu wysyłania o zakresie rejestracji, przekazanego przez sparowaną aplikację iOS. Gateway nie potrzebuje tokenu relay obowiązującego dla całego wdrożenia.
- Wiąże każdą rejestrację wspieraną przez relay z tożsamością gateway, z którą sparowano aplikację iOS, więc inny gateway nie może ponownie użyć zapisanej rejestracji.
- Pozostawia lokalne/ręczne buildy iOS przy bezpośrednim APNs. Wysyłki wspierane przez relay dotyczą tylko oficjalnie dystrybuowanych buildów, które zarejestrowały się przez relay.
- Musi odpowiadać bazowemu URL relay wbudowanemu w oficjalny/TestFlight build iOS, aby ruch rejestracji i wysyłania trafiał do tego samego wdrożenia relay.
Przepływ end-to-end:
- Zainstaluj oficjalny/TestFlight build iOS skompilowany z tym samym bazowym URL relay.
- Skonfiguruj
gateway.push.apns.relay.baseUrlna gateway. - Sparuj aplikację iOS z gateway i pozwól połączyć się zarówno sesjom node, jak i operatora.
- Aplikacja iOS pobiera tożsamość gateway, rejestruje się w relay z użyciem App Attest oraz paragonu aplikacji, a następnie publikuje payload
push.apns.registerwspierany przez relay do sparowanego gateway. - Gateway zapisuje uchwyt relay i grant wysyłania, a następnie używa ich dla
push.test, pobudek wake nudges i pobudek ponownego połączenia.
Uwagi operacyjne:
- Jeśli przełączysz aplikację iOS na inny gateway, połącz aplikację ponownie, aby mogła opublikować nową rejestrację relay powiązaną z tym gateway.
- Jeśli wydasz nowy build iOS wskazujący inne wdrożenie relay, aplikacja odświeży swoją buforowaną rejestrację relay zamiast ponownie używać starego źródła relay.
Uwaga dotycząca zgodności:
OPENCLAW_APNS_RELAY_BASE_URLiOPENCLAW_APNS_RELAY_TIMEOUT_MSnadal działają jako tymczasowe nadpisania env.OPENCLAW_APNS_RELAY_ALLOW_HTTP=truepozostaje awaryjną furtką deweloperską tylko dla local loopback; nie zapisuj URL-i relay HTTP w konfiguracji.
Zobacz Aplikacja iOS, aby poznać przepływ end-to-end, oraz Uwierzytelnianie i przepływ zaufania, aby poznać model bezpieczeństwa relay.
Skonfiguruj Heartbeat (okresowe meldunki)
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
},
},
},
}
every: ciąg czasu trwania (30m,2h). Ustaw0m, aby wyłączyć.target:last|none|<channel-id>(na przykładdiscord,matrix,telegramlubwhatsapp)directPolicy:allow(domyślnie) alboblockdla celów Heartbeat w stylu DM- Pełny przewodnik znajdziesz w Heartbeat.
Skonfiguruj zadania Cron
{
cron: {
enabled: true,
maxConcurrentRuns: 2, // cron dispatch + isolated cron agent-turn execution
sessionRetention: "24h",
runLog: {
maxBytes: "2mb",
keepLines: 2000,
},
},
}
sessionRetention: usuwa ukończone izolowane sesje uruchomień zsessions.json(domyślnie24h; ustawfalse, aby wyłączyć).runLog: przycinacron/runs/<jobId>.jsonlwedług rozmiaru i zachowywanych wierszy.- Zobacz Zadania Cron, aby poznać przegląd funkcji i przykłady CLI.
Skonfiguruj Webhooki (hooki)
Włącz punkty końcowe HTTP Webhook w Gateway:
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
defaultSessionKey: "hook:ingress",
allowRequestSessionKey: false,
allowedSessionKeyPrefixes: ["hook:"],
mappings: [
{
match: { path: "gmail" },
action: "agent",
agentId: "main",
deliver: true,
},
],
},
}
Uwaga dotycząca bezpieczeństwa:
- Traktuj całą zawartość payloadów hook/Webhook jako niezaufane dane wejściowe.
- Użyj dedykowanego
hooks.token; nie używaj ponownie współdzielonego tokenu Gateway. - Uwierzytelnianie hooków działa tylko przez nagłówki (
Authorization: Bearer ...albox-openclaw-token); tokeny w query string są odrzucane. hooks.pathnie może mieć wartości/; utrzymuj ingress Webhook na dedykowanej podścieżce, takiej jak/hooks.- Pozostaw wyłączone flagi omijania niebezpiecznej zawartości (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), chyba że prowadzisz ściśle ograniczone debugowanie. - Jeśli włączysz
hooks.allowRequestSessionKey, ustaw takżehooks.allowedSessionKeyPrefixes, aby ograniczyć wybierane przez wywołującego klucze sesji. - Dla agentów sterowanych hookami preferuj mocne nowoczesne poziomy modeli i ścisłą politykę narzędzi (na przykład tylko wiadomości plus sandboxing tam, gdzie to możliwe).
Zobacz pełną referencję, aby poznać wszystkie opcje mapowania i integrację z Gmail.
Skonfiguruj routing wielu agentów
Uruchamiaj wielu izolowanych agentów z osobnymi obszarami roboczymi i sesjami:
{
agents: {
list: [
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
{ id: "work", workspace: "~/.openclaw/workspace-work" },
],
},
bindings: [
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
],
}
Zobacz Multi-Agent i pełną referencję, aby poznać reguły powiązań i profile dostępu poszczególnych agentów.
Podziel konfigurację na wiele plików ($include)
Użyj $include, aby uporządkować duże konfiguracje:
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789 },
agents: { $include: "./agents.json5" },
broadcast: {
$include: ["./clients/a.json5", "./clients/b.json5"],
},
}
- Pojedynczy plik: zastępuje zawierający go obiekt
- Tablica plików: głęboko scalana po kolei (późniejszy wygrywa)
- Klucze równorzędne: scalane po include (nadpisują dołączone wartości)
- Zagnieżdżone include: obsługiwane do 10 poziomów głębokości
- Ścieżki względne: rozwiązywane względem pliku zawierającego include
- Zapisy zarządzane przez OpenClaw: gdy zapis zmienia tylko jedną sekcję najwyższego poziomu
opartą na include pojedynczego pliku, takim jak
plugins: { $include: "./plugins.json5" }, OpenClaw aktualizuje ten dołączony plik i pozostawiaopenclaw.jsonbez zmian - Nieobsługiwany zapis przez include: include w katalogu głównym, tablice include oraz include z nadpisaniami równorzędnymi kończą się bezpiecznym błędem dla zapisów zarządzanych przez OpenClaw zamiast spłaszczać konfigurację
- Ograniczenie: ścieżki
$includemuszą rozwiązywać się pod katalogiem zawierającymopenclaw.json. Aby współdzielić drzewo między maszynami lub użytkownikami, ustawOPENCLAW_INCLUDE_ROOTSna listę ścieżek (:w POSIX,;w Windows) do dodatkowych katalogów, do których include mogą się odwoływać. Dowiązania symboliczne są rozwiązywane i ponownie sprawdzane, więc ścieżka, która leksykalnie znajduje się w katalogu konfiguracji, ale której rzeczywisty cel wychodzi poza każdy dozwolony root, nadal jest odrzucana. - Obsługa błędów: czytelne błędy dla brakujących plików, błędów parsowania i cyklicznych include
Przeładowanie konfiguracji na gorąco
Gateway obserwuje ~/.openclaw/openclaw.json i automatycznie stosuje zmiany - dla większości ustawień ręczny restart nie jest potrzebny.
Bezpośrednie edycje pliku są traktowane jako niezaufane, dopóki nie przejdą walidacji. Obserwator czeka,
aż ustanie cykl tymczasowych zapisów/zmian nazw wykonywany przez edytor, odczytuje finalny plik i odrzuca
nieprawidłowe edycje zewnętrzne bez przepisywania openclaw.json. Zapisy konfiguracji zarządzane przez OpenClaw
używają tej samej bramki schematu przed zapisem; destrukcyjne nadpisania, takie jak
usunięcie gateway.mode albo zmniejszenie pliku o więcej niż połowę, są odrzucane i
zapisywane jako .rejected.* do inspekcji.
Jeśli zobaczysz config reload skipped (invalid config) albo uruchomienie zgłosi Invalid config, sprawdź konfigurację, uruchom openclaw config validate, a następnie uruchom openclaw doctor --fix, aby naprawić. Zobacz Rozwiązywanie problemów z Gateway,
aby przejść checklistę.
Tryby przeładowania
| Tryb | Zachowanie |
|---|---|
hybrid (domyślnie) |
Natychmiast stosuje bezpieczne zmiany na gorąco. Automatycznie restartuje przy krytycznych. |
hot |
Stosuje na gorąco tylko bezpieczne zmiany. Loguje ostrzeżenie, gdy potrzebny jest restart - obsługujesz go samodzielnie. |
restart |
Restartuje Gateway przy każdej zmianie konfiguracji, bezpiecznej lub nie. |
off |
Wyłącza obserwowanie pliku. Zmiany zaczynają obowiązywać przy następnym ręcznym restarcie. |
{
gateway: {
reload: { mode: "hybrid", debounceMs: 300 },
},
}
Co stosuje się na gorąco, a co wymaga restartu
Większość pól stosuje się na gorąco bez przestoju. W trybie hybrid zmiany wymagające restartu są obsługiwane automatycznie.
| Kategoria | Pola | Wymagany restart? |
|---|---|---|
| Kanały | channels.*, web (WhatsApp) - wszystkie wbudowane i pluginowe kanały |
Nie |
| Agent i modele | agent, agents, models, routing |
Nie |
| Automatyzacja | hooks, cron, agent.heartbeat |
Nie |
| Sesje i wiadomości | session, messages |
Nie |
| Narzędzia i media | tools, browser, skills, mcp, audio, talk |
Nie |
| UI i różne | ui, logging, identity, bindings |
Nie |
| Serwer Gateway | gateway.* (port, bind, auth, tailscale, TLS, HTTP) |
Tak |
| Infrastruktura | discovery, plugins |
Tak |
Planowanie przeładowania
Gdy edytujesz plik źródłowy, do którego odwołuje się $include, OpenClaw planuje
ponowne wczytanie na podstawie układu autorskiego źródła, a nie spłaszczonego
widoku w pamięci. Dzięki temu decyzje dotyczące hot reload (zastosowanie na
gorąco vs ponowne uruchomienie) pozostają przewidywalne nawet wtedy, gdy jedna
sekcja najwyższego poziomu znajduje się w osobnym dołączonym pliku, takim jak
plugins: { $include: "./plugins.json5" }. Planowanie ponownego wczytania
kończy się bezpieczną odmową, jeśli układ źródła jest niejednoznaczny.
RPC konfiguracji (aktualizacje programowe)
W przypadku narzędzi, które zapisują konfigurację przez API Gateway, preferuj ten przepływ:
config.schema.lookup, aby sprawdzić jedno poddrzewo (płytki węzeł schematu + podsumowania elementów podrzędnych)config.get, aby pobrać bieżącą migawkę orazhashconfig.patchdo aktualizacji częściowych (JSON merge patch: obiekty są scalane,nullusuwa, tablice są zastępowane)config.applytylko wtedy, gdy zamierzasz zastąpić całą konfiguracjęupdate.rundo jawnej samoaktualizacji oraz ponownego uruchomienia; dołączcontinuationMessage, gdy sesja po ponownym uruchomieniu ma wykonać jedną turę kontynuacjiupdate.status, aby sprawdzić najnowszy znacznik ponownego uruchomienia aktualizacji i zweryfikować działającą wersję po restarcie
Agenci powinni traktować config.schema.lookup jako pierwszy punkt sprawdzania
dokładnej dokumentacji i ograniczeń na poziomie pól. Użyj Dokumentacji konfiguracji,
gdy potrzebna jest szersza mapa konfiguracji, wartości domyślne lub linki do
dedykowanych dokumentacji podsystemów.
Przykład częściowej poprawki:
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.patch --params '{
"raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
"baseHash": "<hash>"
}'
Zarówno config.apply, jak i config.patch akceptują raw, baseHash,
sessionKey, note oraz restartDelayMs. baseHash jest wymagany dla obu
metod, gdy konfiguracja już istnieje.
Zmienne środowiskowe
OpenClaw odczytuje zmienne środowiskowe z procesu nadrzędnego oraz z:
.envz bieżącego katalogu roboczego (jeśli istnieje)~/.openclaw/.env(globalna ścieżka awaryjna)
Żaden z tych plików nie nadpisuje istniejących zmiennych środowiskowych. Możesz także ustawić wbudowane zmienne środowiskowe w konfiguracji:
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: { GROQ_API_KEY: "gsk-..." },
},
}
Import środowiska powłoki (opcjonalny)
Jeśli jest włączony, a oczekiwane klucze nie są ustawione, OpenClaw uruchamia powłokę logowania i importuje tylko brakujące klucze:
{
env: {
shellEnv: { enabled: true, timeoutMs: 15000 },
},
}
Odpowiednik zmiennej środowiskowej: OPENCLAW_LOAD_SHELL_ENV=1
Podstawianie zmiennych środowiskowych w wartościach konfiguracji
Odwołuj się do zmiennych środowiskowych w dowolnej wartości tekstowej konfiguracji za pomocą ${VAR_NAME}:
{
gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },
models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },
}
Reguły:
- Dopasowywane są tylko nazwy pisane wielkimi literami:
[A-Z_][A-Z0-9_]* - Brakujące/puste zmienne zgłaszają błąd podczas wczytywania
- Użyj
$${VAR}, aby uzyskać dosłowny wynik - Działa wewnątrz plików
$include - Podstawianie w tekście:
"${BASE}/v1"→"https://api.example.com/v1"
Referencje sekretów (env, file, exec)
W przypadku pól obsługujących obiekty SecretRef możesz użyć:
{
models: {
providers: {
openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } },
},
},
skills: {
entries: {
"image-lab": {
apiKey: {
source: "file",
provider: "filemain",
id: "/skills/entries/image-lab/apiKey",
},
},
},
},
channels: {
googlechat: {
serviceAccountRef: {
source: "exec",
provider: "vault",
id: "channels/googlechat/serviceAccount",
},
},
},
}
Szczegóły SecretRef (w tym secrets.providers dla env/file/exec) znajdują się w Zarządzaniu sekretami.
Obsługiwane ścieżki poświadczeń są wymienione w Powierzchni poświadczeń SecretRef.
Zobacz Środowisko, aby poznać pełną kolejność pierwszeństwa i źródła.
Pełna dokumentacja
Pełną dokumentację każdego pola znajdziesz w Dokumentacji konfiguracji.
Powiązane: Przykłady konfiguracji · Dokumentacja konfiguracji · Doctor