Tworzenie wtyczek
Wtyczki rozszerzają OpenClaw o nowe możliwości: kanały, providerów modeli, mowę, transkrypcję w czasie rzeczywistym, głos w czasie rzeczywistym, rozumienie mediów, generowanie obrazów, generowanie wideo, pobieranie treści z internetu, wyszukiwanie w internecie, narzędzia agenta lub dowolną kombinację tych elementów. Nie musisz dodawać swojej wtyczki do repozytorium OpenClaw. Opublikuj ją w ClawHub lub npm, a użytkownicy zainstalują ją za pomocąopenclaw plugins install <package-name>. OpenClaw najpierw próbuje użyć ClawHub,
a następnie automatycznie przechodzi do npm.
Wymagania wstępne
- Node >= 22 i menedżer pakietów (npm lub pnpm)
- Znajomość TypeScript (ESM)
- Dla wtyczek w repozytorium: sklonowane repozytorium i wykonane
pnpm install
Jaki rodzaj wtyczki?
Wtyczka kanału
Połącz OpenClaw z platformą komunikacyjną (Discord, IRC itp.)
Wtyczka providera
Dodaj providera modeli (LLM, proxy lub niestandardowy endpoint)
Wtyczka narzędzia / hooka
Rejestruj narzędzia agenta, hooki zdarzeń lub usługi — czytaj dalej poniżej
createOptionalChannelSetupSurface(...) z
openclaw/plugin-sdk/channel-setup. Tworzy ona parę adaptera konfiguracji i kreatora,
która informuje o wymaganiu instalacji i bezpiecznie blokuje rzeczywiste zapisy konfiguracji,
dopóki wtyczka nie zostanie zainstalowana.
Szybki start: wtyczka narzędzia
Ten przewodnik tworzy minimalną wtyczkę, która rejestruje narzędzie agenta. Wtyczki kanałów i providerów mają osobne przewodniki, do których prowadzą linki powyżej.Utwórz pakiet i manifest
docs/snippets/plugin-publish/.Napisz punkt wejścia
definePluginEntry służy do wtyczek innych niż kanały. Dla kanałów użyj
defineChannelPluginEntry — zobacz Wtyczki kanałów.
Pełne opcje punktów wejścia znajdziesz w Punktach wejścia.Przetestuj i opublikuj
Wtyczki zewnętrzne: zweryfikuj i opublikuj za pomocą ClawHub, a następnie zainstaluj:OpenClaw sprawdza też ClawHub przed npm dla zwykłych specyfikacji pakietów, takich jak
@myorg/openclaw-my-plugin.Wtyczki w repozytorium: umieść je w drzewie workspace wtyczek dołączonych do projektu — zostaną wykryte automatycznie.Możliwości wtyczek
Pojedyncza wtyczka może zarejestrować dowolną liczbę możliwości za pomocą obiektuapi:
| Możliwość | Metoda rejestracji | Szczegółowy przewodnik |
|---|---|---|
| Inferencja tekstu (LLM) | api.registerProvider(...) | Wtyczki providerów |
| Backend inferencji CLI | api.registerCliBackend(...) | Backendy CLI |
| Kanał / komunikacja | api.registerChannel(...) | Wtyczki kanałów |
| Mowa (TTS/STT) | api.registerSpeechProvider(...) | Wtyczki providerów |
| Transkrypcja w czasie rzeczywistym | api.registerRealtimeTranscriptionProvider(...) | Wtyczki providerów |
| Głos w czasie rzeczywistym | api.registerRealtimeVoiceProvider(...) | Wtyczki providerów |
| Rozumienie mediów | api.registerMediaUnderstandingProvider(...) | Wtyczki providerów |
| Generowanie obrazów | api.registerImageGenerationProvider(...) | Wtyczki providerów |
| Generowanie wideo | api.registerVideoGenerationProvider(...) | Wtyczki providerów |
| Pobieranie treści z internetu | api.registerWebFetchProvider(...) | Wtyczki providerów |
| Wyszukiwanie w internecie | api.registerWebSearchProvider(...) | Wtyczki providerów |
| Narzędzia agenta | api.registerTool(...) | Poniżej |
| Polecenia niestandardowe | api.registerCommand(...) | Punkty wejścia |
| Hooki zdarzeń | api.registerHook(...) | Punkty wejścia |
| Trasy HTTP | api.registerHttpRoute(...) | Elementy wewnętrzne |
| Podpolecenia CLI | api.registerCli(...) | Punkty wejścia |
config.*,
exec.approvals.*, wizard.*, update.*) pozostają zarezerwowane i zawsze są rozwiązywane do
operator.admin, nawet jeśli wtyczka prosi o węższy zakres.
Semantyka ochrony hooków, o której warto pamiętać:
before_tool_call:{ block: true }jest terminalne i zatrzymuje handlery o niższym priorytecie.before_tool_call:{ block: false }jest traktowane jak brak decyzji.before_tool_call:{ requireApproval: true }wstrzymuje wykonanie agenta i prosi użytkownika o zatwierdzenie przez nakładkę zatwierdzania wykonania, przyciski Telegram, interakcje Discord lub polecenie/approvena dowolnym kanale.before_install:{ block: true }jest terminalne i zatrzymuje handlery o niższym priorytecie.before_install:{ block: false }jest traktowane jak brak decyzji.message_sending:{ cancel: true }jest terminalne i zatrzymuje handlery o niższym priorytecie.message_sending:{ cancel: false }jest traktowane jak brak decyzji.
/approve obsługuje zarówno zatwierdzenia wykonania, jak i zatwierdzenia wtyczek z ograniczonym fallbackiem: gdy identyfikator zatwierdzenia wykonania nie zostanie znaleziony, OpenClaw ponawia próbę z tym samym identyfikatorem w zatwierdzeniach wtyczek. Przekazywanie zatwierdzeń wtyczek można konfigurować niezależnie przez approvals.plugin w konfiguracji.
Jeśli niestandardowa logika zatwierdzania musi wykrywać ten sam przypadek ograniczonego fallbacku,
użyj isApprovalNotFoundError z openclaw/plugin-sdk/error-runtime
zamiast ręcznie dopasowywać ciągi dotyczące wygaśnięcia zatwierdzenia.
Szczegóły znajdziesz w sekcji Semantyka decyzji hooków w przeglądzie SDK.
Rejestrowanie narzędzi agenta
Narzędzia to typowane funkcje, które może wywołać LLM. Mogą być wymagane (zawsze dostępne) albo opcjonalne (wymagają zgody użytkownika):- Nazwy narzędzi nie mogą kolidować z podstawowymi narzędziami (konflikty są pomijane)
- Użyj
optional: truedla narzędzi z efektami ubocznymi lub dodatkowymi wymaganiami binarnymi - Użytkownicy mogą włączyć wszystkie narzędzia z wtyczki, dodając identyfikator wtyczki do
tools.allow
Konwencje importu
Zawsze importuj z ukierunkowanych ścieżekopenclaw/plugin-sdk/<subpath>:
api.ts, runtime-api.ts) do
importów wewnętrznych — nigdy nie importuj własnej wtyczki przez jej ścieżkę SDK.
W przypadku wtyczek providerów trzymaj helpery specyficzne dla providera w tych barrelach
w katalogu głównym pakietu, chyba że dany interfejs jest naprawdę ogólny. Obecne przykłady dołączone do projektu:
- Anthropic: wrappery strumieni Claude oraz helpery
service_tier/ beta - OpenAI: kreatory providerów, helpery modeli domyślnych, providery realtime
- OpenRouter: kreator providera oraz helpery onboardingu/konfiguracji
openclaw/plugin-sdk/*.
Niektóre generowane interfejsy helperów openclaw/plugin-sdk/<bundled-id> nadal istnieją do
utrzymania dołączonych wtyczek i zgodności, na przykład
plugin-sdk/feishu-setup lub plugin-sdk/zalo-setup. Traktuj je jako powierzchnie
zarezerwowane, a nie jako domyślny wzorzec dla nowych wtyczek zewnętrznych.
Lista kontrolna przed zgłoszeniem
package.json ma poprawne metadane
openclawManifest openclaw.plugin.json jest obecny i prawidłowy
Punkt wejścia używa
defineChannelPluginEntry lub definePluginEntryWszystkie importy używają ukierunkowanych ścieżek
plugin-sdk/<subpath>Importy wewnętrzne używają lokalnych modułów, a nie samoodwołań przez SDK
Testy przechodzą (
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check przechodzi (dla wtyczek w repozytorium)Testowanie wydań beta
- Obserwuj tagi wydań GitHub w openclaw/openclaw i subskrybuj przez
Watch>Releases. Tagi beta mają postaćv2026.3.N-beta.1. Możesz też włączyć powiadomienia dla oficjalnego konta OpenClaw na X @openclaw, aby otrzymywać informacje o wydaniach. - Przetestuj swoją wtyczkę z tagiem beta, gdy tylko się pojawi. Okno przed wydaniem stabilnym zwykle trwa tylko kilka godzin.
- Po testach napisz w wątku swojej wtyczki na kanale Discord
plugin-forum, wpisującall goodalbo opisując, co się zepsuło. Jeśli nie masz jeszcze wątku, utwórz go. - Jeśli coś się zepsuje, otwórz lub zaktualizuj issue o tytule
Beta blocker: <plugin-name> - <summary>i nadaj mu etykietębeta-blocker. Umieść link do issue w swoim wątku. - Otwórz PR do
maino tytulefix(<plugin-id>): beta blocker - <summary>i dodaj link do issue zarówno w PR, jak i w swoim wątku na Discordzie. Współtwórcy nie mogą nadawać etykiet PR-om, więc tytuł jest sygnałem po stronie PR dla maintainerów i automatyzacji. Blokery z PR są scalane; blokery bez PR mogą mimo to zostać wydane. Maintainerzy obserwują te wątki podczas testów beta. - Cisza oznacza zielone światło. Jeśli przegapisz okno, poprawka najpewniej trafi do następnego cyklu.
Następne kroki
Wtyczki kanałów
Zbuduj wtyczkę kanału komunikacyjnego
Wtyczki providerów
Zbuduj wtyczkę providera modeli
Przegląd SDK
Mapa importów i dokumentacja API rejestracji
Helpery runtime
TTS, wyszukiwanie, subagent przez api.runtime
Testowanie
Narzędzia i wzorce testowe
Manifest wtyczki
Pełna dokumentacja schematu manifestu
Powiązane
- Architektura wtyczek — szczegółowe omówienie architektury wewnętrznej
- Przegląd SDK — dokumentacja Plugin SDK
- Manifest — format manifestu wtyczki
- Wtyczki kanałów — tworzenie wtyczek kanałów
- Wtyczki providerów — tworzenie wtyczek providerów