Wtyczki (Rozszerzenia)
Szybki start (nowy w wtyczkach?)
Wtyczka to po prostu niewielki moduł kodu, który rozszerza OpenClaw o dodatkowe funkcje (polecenia, narzędzia oraz RPC Gateway). Najczęściej będziesz używać wtyczek wtedy, gdy potrzebujesz funkcji, która nie jest jeszcze wbudowana w rdzeń OpenClaw (albo chcesz trzymać funkcje opcjonalne poza główną instalacją). Szybka ścieżka:- Sprawdź, co jest już załadowane:
- Zainstaluj oficjalną wtyczkę (przykład: Voice Call):
- Zrestartuj Gateway, a następnie skonfiguruj w
plugins.entries.<id>.config.
Dostępne wtyczki (oficjalne)
- Microsoft Teams jest dostępny wyłącznie jako wtyczka od 2026.1.15; zainstaluj
@openclaw/msteams, jeśli korzystasz z Teams. - Memory (Core) — dołączona wtyczka wyszukiwania pamięci (włączona domyślnie przez
plugins.slots.memory) - Memory (LanceDB) — dołączona wtyczka pamięci długoterminowej (automatyczne przywoływanie/przechwytywanie; ustaw
plugins.slots.memory = "memory-lancedb") - Voice Call —
@openclaw/voice-call - Zalo Personal —
@openclaw/zalouser - Matrix —
@openclaw/matrix - Nostr —
@openclaw/nostr - Zalo —
@openclaw/zalo - Microsoft Teams —
@openclaw/msteams - Google Antigravity OAuth (uwierzytelnianie dostawcy) — dołączone jako
google-antigravity-auth(domyślnie wyłączone) - Gemini CLI OAuth (uwierzytelnianie dostawcy) — dołączone jako
google-gemini-cli-auth(domyślnie wyłączone) - Qwen OAuth (uwierzytelnianie dostawcy) — dołączone jako
qwen-portal-auth(domyślnie wyłączone) - Copilot Proxy (uwierzytelnianie dostawcy) — lokalny most VS Code Copilot Proxy; odrębny od wbudowanego logowania urządzenia
github-copilot(dołączone, domyślnie wyłączone)
- Metody RPC Gateway
- Procedury HTTP Gateway
- Narzędzia agenta
- Polecenia CLI
- Usługi działające w tle
- Opcjonalną walidację konfiguracji
- Skills (poprzez wskazanie katalogów
skillsw manifeście wtyczki) - Polecenia auto-odpowiedzi (wykonywane bez wywoływania agenta AI)
Pomocnicy Runtime
Wtyczki mogą uzyskiwać dostęp do wybranych pomocników rdzenia poprzezapi.runtime. Dla TTS w telefonii:
- Używa podstawowej konfiguracji
messages.tts(OpenAI lub ElevenLabs). - Zwraca bufor audio PCM + częstotliwość próbkowania. Wtyczki muszą same wykonać resampling/kodowanie dla dostawców.
- Edge TTS nie jest obsługiwany dla telefonii.
Wykrywanie i priorytety
OpenClaw skanuje, w kolejności:- Ścieżki konfiguracji
plugins.load.paths(plik lub katalog)
- Rozszerzenia obszaru roboczego
<workspace>/.openclaw/extensions/*.ts<workspace>/.openclaw/extensions/*/index.ts
- Rozszerzenia globalne
~/.openclaw/extensions/*.ts~/.openclaw/extensions/*/index.ts
- Rozszerzenia dołączone (dostarczane z OpenClaw, domyślnie wyłączone)
<openclaw>/extensions/*
plugins.entries.<id>.enabled
lub openclaw plugins enable <id>. Zainstalowane wtyczki są domyślnie włączone,
ale można je wyłączyć w ten sam sposób.
Każda wtyczka musi zawierać plik openclaw.plugin.json w katalogu głównym. Jeśli ścieżka
wskazuje na plik, katalogiem głównym wtyczki jest katalog tego pliku i musi on
zawierać manifest.
Jeśli wiele wtyczek rozwiązuje się do tego samego identyfikatora, wygrywa pierwsze
dopasowanie według powyższej kolejności, a kopie o niższym priorytecie są ignorowane.
Pakiety zbiorcze
Katalog wtyczki może zawieraćpackage.json z openclaw.extensions:
name/<fileBase>.
Jeśli wtyczka importuje zależności npm, zainstaluj je w tym katalogu, aby
node_modules było dostępne (npm install / pnpm install).
Uwaga dotycząca bezpieczeństwa: openclaw plugins install instaluje zależności wtyczek za pomocą
npm install --ignore-scripts (bez skryptów cyklu życia). Utrzymuj drzewa zależności wtyczek
“czyste JS/TS” i unikaj pakietów wymagających kompilacji w postinstall.
Metadane katalogu kanałów
Wtyczki kanałów mogą ogłaszać metadane onboardingu poprzezopenclaw.channel oraz
wskazówki instalacyjne poprzez openclaw.install. Dzięki temu rdzeń pozostaje wolny
od danych katalogowych.
Przykład:
~/.openclaw/mpm/plugins.json~/.openclaw/mpm/catalog.json~/.openclaw/plugins/catalog.json
OPENCLAW_PLUGIN_CATALOG_PATHS (lub OPENCLAW_MPM_CATALOG_PATHS) jeden
lub więcej plików JSON (rozdzielonych przecinkami/średnikami/PATH). Każdy
plik powinien zawierać { "entries": [ { "name": "@scope/pkg", "openclaw": { "channel": {...}, "install": {...} } } ] }.
ID wtyczek
Domyślne identyfikatory wtyczek:- Pakiety zbiorcze:
package.jsonname - Pojedynczy plik: nazwa bazowa pliku (
~/.../voice-call.ts→voice-call)
id, OpenClaw używa go, ale zgłasza ostrzeżenie,
gdy nie pasuje do skonfigurowanego identyfikatora.
Konfiguracja
enabled: przełącznik główny (domyślnie: true)allow: lista dozwolonych (opcjonalne)deny: lista blokowanych (opcjonalne; blokada ma pierwszeństwo)load.paths: dodatkowe pliki/katalogi wtyczekentries.<id>: przełączniki per wtyczka + konfiguracja
- Nieznane identyfikatory wtyczek w
entries,allow,denylubslotssą błędami. - Nieznane klucze
channels.<id>są błędami, chyba że manifest wtyczki deklaruje identyfikator kanału. - Konfiguracja wtyczki jest walidowana przy użyciu schematu JSON osadzonego w
openclaw.plugin.json(configSchema). - Jeśli wtyczka jest wyłączona, jej konfiguracja jest zachowana i emitowane jest ostrzeżenie.
Sloty wtyczek (kategorie wyłączne)
Niektóre kategorie wtyczek są wyłączne (tylko jedna aktywna naraz). Użyjplugins.slots, aby wybrać, która wtyczka posiada dany slot:
kind: "memory", ładuje się tylko wybrana. Pozostałe
są wyłączane wraz z diagnostyką.
Interfejs sterowania (schemat + etykiety)
Interfejs sterowania używaconfig.schema (schemat JSON + uiHints) do
renderowania lepszych formularzy.
OpenClaw rozszerza uiHints w czasie działania na podstawie wykrytych wtyczek:
- Dodaje etykiety per wtyczka dla
plugins.entries.<id>/.enabled/.config - Scala opcjonalne podpowiedzi pól konfiguracji dostarczone przez wtyczki pod:
plugins.entries.<id>.config.<field>
uiHints obok schematu
JSON w manifeście wtyczki.
Przykład:
CLI
plugins update działa tylko dla instalacji npm śledzonych w plugins.installs.
Wtyczki mogą także rejestrować własne polecenia najwyższego poziomu (przykład: openclaw voicecall).
API wtyczek (przegląd)
Wtyczki eksportują jedno z dwóch:- Funkcję:
(api) => { ... } - Obiekt:
{ id, name, configSchema, register(api) { ... } }
Hooki wtyczek
Wtyczki mogą dostarczać hooki i rejestrować je w czasie działania. Pozwala to pakować automatyzacje zdarzeniowe bez instalowania osobnego pakietu hooków.Przykład
- Katalogi hooków stosują standardową strukturę hooków (
HOOK.md+handler.ts). - Zasady kwalifikowalności hooków nadal obowiązują (wymagania OS/bin/env/config).
- Hooki zarządzane przez wtyczki pojawiają się w
openclaw hooks listzplugin:<id>. - Nie można włączać/wyłączać hooków zarządzanych przez wtyczki przez
openclaw hooks; należy włączyć/wyłączyć całą wtyczkę.
Wtyczki dostawców (uwierzytelnianie modeli)
Wtyczki mogą rejestrować przepływy uwierzytelniania dostawców modeli, aby użytkownicy mogli uruchamiać konfigurację OAuth lub klucza API bezpośrednio w OpenClaw (bez zewnętrznych skryptów). Zarejestruj dostawcę przezapi.registerProvider(...). Każdy dostawca udostępnia jedną lub
więcej metod uwierzytelniania (OAuth, klucz API, kod urządzenia itp.). Metody te
zasilają:
openclaw models auth login --provider <id> [--method <id>]
runotrzymujeProviderAuthContextz pomocnikamiprompter,runtime,openUrlorazoauth.createVpsAwareHandlers.- Zwróć
configPatch, gdy trzeba dodać domyślne modele lub konfigurację dostawcy. - Zwróć
defaultModel, aby--set-defaultmogło zaktualizować domyślne ustawienia agentów.
Rejestrowanie kanału komunikacyjnego
Wtyczki mogą rejestrować wtyczki kanałów, które zachowują się jak kanały wbudowane (WhatsApp, Telegram itd.). Konfiguracja kanału znajduje się podchannels.<id> i jest walidowana przez kod wtyczki kanału.
- Umieść konfigurację pod
channels.<id>(nieplugins.entries). meta.labeljest używane jako etykieta w listach CLI/UI.meta.aliasesdodaje alternatywne identyfikatory do normalizacji i wejść CLI.meta.preferOverwymienia identyfikatory kanałów, które należy pominąć przy automatycznym włączaniu, gdy oba są skonfigurowane.meta.detailLabelimeta.systemImagepozwalają interfejsom wyświetlać bogatsze etykiety/ikony kanałów.
Pisanie nowego kanału komunikacyjnego (krok po kroku)
Użyj tego, gdy chcesz stworzyć nową powierzchnię czatu („kanał komunikacyjny”), a nie dostawcę modeli. Dokumentacja dostawców modeli znajduje się pod/providers/*.
- Wybierz identyfikator i kształt konfiguracji
- Cała konfiguracja kanału znajduje się pod
channels.<id>. - Preferuj
channels.<id>.accounts.<accountId>dla konfiguracji wielokontowych.
- Zdefiniuj metadane kanału
meta.label,meta.selectionLabel,meta.docsPath,meta.blurbkontrolują listy CLI/UI.meta.docsPathpowinno wskazywać stronę dokumentacji, taką jak/channels/<id>.meta.preferOverpozwala wtyczce zastąpić inny kanał (auto‑włączanie preferuje go).meta.detailLabelimeta.systemImagesą używane przez interfejsy do tekstów szczegółowych/ikon.
- Dodaj opcjonalne adaptery według potrzeb
config.listAccountIds+config.resolveAccountcapabilities(typy czatu, media, wątki itd.)outbound.deliveryMode+outbound.sendText(dla podstawowego wysyłania)
- Zaimplementuj wymagane adaptery
setup(kreator),security(polityka DM),status(zdrowie/diagnostyka)gateway(start/stop/login),mentions,threading,streamingactions(akcje wiadomości),commands(natywne zachowanie poleceń)
- Zarejestruj kanał w swojej wtyczce
api.registerChannel({ plugin })
plugins.load.paths), zrestartuj gateway,
a następnie skonfiguruj channels.<id> w swojej konfiguracji.
Narzędzia agenta
Zobacz dedykowany przewodnik: Narzędzia agenta wtyczek.Rejestrowanie metody RPC Gateway
Rejestrowanie poleceń CLI
Rejestrowanie poleceń auto-odpowiedzi
Wtyczki mogą rejestrować niestandardowe polecenia ukośnika, które wykonują się bez wywoływania agenta AI. Jest to przydatne dla poleceń przełączających, sprawdzania statusu lub szybkich akcji, które nie wymagają przetwarzania przez LLM.senderId: identyfikator nadawcy (jeśli dostępny)channel: kanał, w którym wysłano polecenieisAuthorizedSender: czy nadawca jest autoryzowanym użytkownikiemargs: argumenty przekazane po poleceniu (jeśliacceptsArgs: true)commandBody: pełny tekst poleceniaconfig: bieżąca konfiguracja OpenClaw
name: nazwa polecenia (bez wiodącego/)description: tekst pomocy wyświetlany na listach poleceńacceptsArgs: czy polecenie akceptuje argumenty (domyślnie: false). Jeśli false, a argumenty zostaną podane, polecenie nie zostanie dopasowane i wiadomość trafi do innych handlerówrequireAuth: czy wymaga autoryzowanego nadawcy (domyślnie: true)handler: funkcja zwracająca{ text: string }(może być asynchroniczna)
- Polecenia wtyczek są przetwarzane przed poleceniami wbudowanymi i agentem AI
- Polecenia są rejestrowane globalnie i działają we wszystkich kanałach
- Nazwy poleceń są niewrażliwe na wielkość liter (
/MyStatuspasuje do/mystatus) - Nazwy poleceń muszą zaczynać się literą i zawierać wyłącznie litery, cyfry, myślniki oraz podkreślenia
- Zastrzeżone nazwy poleceń (takie jak
help,status,resetitd.) nie mogą być nadpisywane przez wtyczki - Zduplikowana rejestracja poleceń pomiędzy wtyczkami zakończy się błędem diagnostycznym
Rejestrowanie usług w tle
Konwencje nazewnictwa
- Metody Gateway:
pluginId.action(przykład:voicecall.status) - Narzędzia:
snake_case(przykład:voice_call) - Polecenia CLI: kebab lub camel, ale unikaj kolizji z poleceniami rdzenia
Skills
Wtyczki mogą dostarczać skill w repozytorium (skills/<name>/SKILL.md).
Włącz go przez plugins.entries.<id>.enabled (lub inne bramki konfiguracyjne) i upewnij się,
że znajduje się w lokalizacjach skills obszaru roboczego/zarządzanych.
Dystrybucja (npm)
Zalecane pakowanie:- Pakiet główny:
openclaw(to repozytorium) - Wtyczki: osobne pakiety npm pod
@openclaw/*(przykład:@openclaw/voice-call)
- Wtyczka
package.jsonmusi zawieraćopenclaw.extensionsz jednym lub wieloma plikami wejściowymi. - Pliki wejściowe mogą być
.jslub.ts(jiti ładuje TS w czasie działania). openclaw plugins install <npm-spec>używanpm pack, wypakowuje do~/.openclaw/extensions/<id>/i włącza w konfiguracji.- Stabilność kluczy konfiguracji: pakiety z zakresem są normalizowane do identyfikatora bez zakresu dla
plugins.entries.*.
Przykładowa wtyczka: Voice Call
To repozytorium zawiera wtyczkę połączeń głosowych (Twilio lub tryb logowania):- Źródło:
extensions/voice-call - Skill:
skills/voice-call - CLI:
openclaw voicecall start|status - Narzędzie:
voice_call - RPC:
voicecall.start,voicecall.status - Konfiguracja (twilio):
provider: "twilio"+twilio.accountSid/authToken/from(opcjonalniestatusCallbackUrl,twimlUrl) - Konfiguracja (dev):
provider: "log"(bez sieci)
extensions/voice-call/README.md w celu konfiguracji i użycia.
Uwagi dotyczące bezpieczeństwa
Wtyczki działają w tym samym procesie co Gateway. Traktuj je jako zaufany kod:- Instaluj tylko wtyczki, którym ufasz.
- Preferuj listy dozwolonych
plugins.allow. - Restartuj Gateway po zmianach.
Testowanie wtyczek
Wtyczki mogą (i powinny) dostarczać testy:- Wtyczki w repozytorium mogą trzymać testy Vitest pod
src/**(przykład:src/plugins/voice-call.plugin.test.ts). - Wtyczki publikowane osobno powinny uruchamiać własne CI (lint/build/test) i weryfikować, że
openclaw.extensionswskazuje na zbudowany punkt wejścia (dist/index.js).