Na tej stronie
Na tej stronie
Building plugins
Pluginy narzędziowe
defineToolPlugin tworzy plugin, który dodaje wyłącznie narzędzia wywoływane przez agenta: bez
kanału, dostawcy modeli, haka, usługi ani zaplecza konfiguracji. Generuje
metadane manifestu potrzebne OpenClaw do wykrywania narzędzi bez ładowania
kodu środowiska uruchomieniowego pluginu.
W przypadku pluginów dostawców, kanałów, haków, usług lub pluginów o mieszanych możliwościach należy zamiast tego zacząć od Tworzenie pluginów, Pluginy kanałów lub Pluginy dostawców.
Wymagania
- Node 22.22.3+, Node 24.15+ lub Node 25.9+.
- Pakiet wynikowy TypeScript ESM.
typeboxwdependencies(nie tylkodevDependencies— wygenerowany plugin importuje go w czasie działania).openclaw >=2026.5.17, pierwsza wersja eksportującaopenclaw/plugin-sdk/tool-plugin.- Katalog główny pakietu zawierający
dist/,openclaw.plugin.jsonorazpackage.json.
Szybki start
plugins init tworzy szkielet:
| Plik | Przeznaczenie |
|---|---|
src/index.ts |
Punkt wejścia defineToolPlugin z jednym narzędziem echo |
src/index.test.ts |
Test metadanych sprawdzający listę narzędzi |
tsconfig.json |
Wynik kompilacji TypeScript NodeNext w dist/ |
vitest.config.ts |
Konfiguracja Vitest dla src/**/*.test.ts |
package.json |
Skrypty, zależności środowiska uruchomieniowego, openclaw.extensions: ["./dist/index.js"] |
openclaw.plugin.json |
Wygenerowane metadane manifestu początkowego narzędzia |
npm run plugin:build uruchamia npm run build (tsc), a następnie
openclaw plugins build --entry ./dist/index.js. npm run plugin:validate
ponownie wykonuje kompilację i uruchamia openclaw plugins validate --entry ./dist/index.js.
Pomyślna walidacja wyświetla:
Opcje openclaw plugins init <id>:
| Flaga | Wartość domyślna | Działanie |
|---|---|---|
--directory <path> |
<id> |
Katalog wynikowy |
--name <name> |
<id> zapisany jak tytuł |
Nazwa wyświetlana |
--type <type> |
tool |
Typ szkieletu: tool lub provider |
--force |
wyłączona | Zastąpienie istniejącego katalogu wynikowego |
Tworzenie narzędzia
defineToolPlugin przyjmuje tożsamość pluginu, opcjonalny schemat konfiguracji oraz
statyczną listę narzędzi. Typy parametrów i konfiguracji są wywnioskowywane ze
schematów TypeBox.
Nazwy narzędzi stanowią stabilne API. Należy wybierać nazwy unikatowe, zapisane małymi literami i na tyle szczegółowe, aby uniknąć kolizji z narzędziami podstawowymi lub innymi pluginami.
Narzędzia opcjonalne i fabryczne
Ustaw optional: true, gdy użytkownicy powinni jawnie dodać narzędzie do listy dozwolonych, zanim
zostanie ono wysłane do modelu. openclaw plugins build zapisuje odpowiedni
wpis manifestu toolMetadata.<tool>.optional, dzięki czemu OpenClaw może rozpoznać, że
narzędzie jest opcjonalne, bez ładowania kodu środowiska uruchomieniowego pluginu.
Użyj factory, gdy narzędzie wymaga kontekstu narzędzia środowiska uruchomieniowego, zanim będzie mogło zostać
utworzone — aby zrezygnować z niego dla konkretnego uruchomienia, sprawdzić stan piaskownicy lub powiązać
funkcje pomocnicze środowiska uruchomieniowego. Metadane pozostają statyczne, mimo że konkretne narzędzie jest tworzone
w czasie działania.
Fabryki nadal deklarują z góry stałą nazwę narzędzia. Użyj bezpośrednio definePluginEntry,
gdy plugin dynamicznie oblicza nazwy narzędzi lub łączy narzędzia
z hakami, usługami, dostawcami albo poleceniami.
Wartości zwracane
defineToolPlugin opakowuje zwykłe wartości zwracane w format wyniku narzędzia
OpenClaw:
- Zwróć ciąg znaków, gdy model powinien zobaczyć dokładnie ten tekst.
- Zwróć wartość zgodną z JSON, gdy model powinien zobaczyć sformatowany JSON,
a OpenClaw ma zachować oryginalną wartość w
details.
Użyj narzędzia fabrycznego, gdy potrzebny jest niestandardowy AgentToolResult lub gdy ma zostać ponownie użyta
istniejąca implementacja api.registerTool.
Konfiguracja
configSchema jest opcjonalny. Jeśli zostanie pominięty, OpenClaw zastosuje ścisły schemat pustego obiektu;
wygenerowany manifest nadal będzie zawierał configSchema.
W przypadku configSchema typ drugiego argumentu execute jest z niego wywnioskowywany:
OpenClaw odczytuje konfigurację pluginu z jego wpisu w konfiguracji Gateway. Nie należy wpisywać na stałe sekretów w kodzie źródłowym ani przykładach dokumentacji; należy używać konfiguracji, zmiennych środowiskowych lub SecretRefs zgodnie z modelem zabezpieczeń pluginu.
Wygenerowane metadane
OpenClaw musi odczytać manifest pluginu przed zaimportowaniem kodu jego środowiska uruchomieniowego.
defineToolPlugin udostępnia w tym celu statyczne metadane, a
openclaw plugins build zapisuje je w pakiecie. Generator należy uruchomić ponownie po
zmianie identyfikatora, nazwy, opisu, schematu konfiguracji, aktywacji lub nazw
narzędzi pluginu:
Wygenerowany manifest pluginu z jednym narzędziem:
contracts.tools jest istotnym kontraktem wykrywania: informuje OpenClaw, który
plugin jest właścicielem każdego narzędzia, bez ładowania środowiska uruchomieniowego wszystkich zainstalowanych pluginów. Nieaktualny
manifest może spowodować brak narzędzia w wynikach wykrywania lub przypisanie błędu
rejestracji niewłaściwemu pluginowi.
Metadane pakietu
openclaw plugins build dostosowuje również package.json do wybranego punktu wejścia
środowiska uruchomieniowego:
Należy dostarczać skompilowany JavaScript (./dist/index.js), a nie punkt wejścia kodu źródłowego TypeScript.
Punkty wejścia kodu źródłowego działają tylko podczas programowania lokalnie w obszarze roboczym.
Walidacja w CI
plugins build --check kończy się niepowodzeniem bez przepisywania plików, gdy wygenerowane metadane
są nieaktualne:
plugins validate sprawdza, czy:
openclaw.plugin.jsonistnieje i przechodzi standardowe ładowanie manifestu.- Bieżący punkt wejścia eksportuje metadane
defineToolPlugin. - Pola wygenerowanego manifestu odpowiadają metadanym punktu wejścia.
contracts.toolsodpowiada zadeklarowanym nazwom narzędzi.package.jsonwskazuje za pomocąopenclaw.extensionswybrany punkt wejścia środowiska uruchomieniowego.
Instalacja i lokalna inspekcja
W osobnym repozytorium roboczym OpenClaw lub za pomocą zainstalowanego CLI zainstaluj pakiet ze ścieżki:
Aby wykonać test dymny pakietu, najpierw utwórz pakiet i zainstaluj archiwum tar:
Po instalacji uruchom ponownie lub przeładuj Gateway i poproś agenta o użycie narzędzia. Jeśli narzędzie nie jest widoczne, przed zmianą kodu sprawdź środowisko uruchomieniowe pluginu oraz efektywny katalog narzędzi (zobacz Rozwiązywanie problemów).
Publikowanie
Gdy pakiet będzie gotowy, opublikuj go za pośrednictwem ClawHub. clawhub package publish
przyjmuje źródło: folder lokalny, repozytorium GitHub (owner/repo[@ref]) lub
adres URL archiwum tar.
Zainstaluj przy użyciu jawnego lokalizatora ClawHub:
Podczas przejściowego okresu wdrożenia proste specyfikacje pakietów npm nadal są instalowane z npm, ale ClawHub jest preferowanym miejscem wykrywania i dystrybucji pluginów OpenClaw. Informacje o zakresie właściciela i przeglądzie wydania zawiera Publikowanie w ClawHub.
Rozwiązywanie problemów
plugin entry not found: ./dist/index.js
Wybrany plik punktu wejścia nie istnieje. Uruchom npm run build, a następnie ponownie
openclaw plugins build --entry ./dist/index.js lub
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
Punkt wejścia nie wyeksportował wartości utworzonej przez defineToolPlugin. Upewnij się, że
domyślnym eksportem modułu jest wynik defineToolPlugin(...), lub przekaż
właściwy punkt wejścia za pomocą --entry.
openclaw.plugin.json generated metadata is stale
Manifest nie odpowiada już metadanym punktu wejścia. Uruchom:
Zatwierdź zmiany zarówno w openclaw.plugin.json, jak i package.json.
package.json openclaw.extensions must include ./dist/index.js
Metadane pakietu wskazują inny punkt wejścia środowiska uruchomieniowego. Uruchom
openclaw plugins build --entry ./dist/index.js, aby generator dostosował
metadane pakietu do punktu wejścia, który ma zostać dostarczony.
Cannot find package 'typebox'
Skompilowany plugin importuje typebox w czasie działania. Pozostaw go w dependencies,
zainstaluj ponownie, ponownie skompiluj i uruchom walidację.
Narzędzie nie pojawia się po instalacji
Sprawdź kolejno:
openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonmacontracts.toolsz oczekiwanymi nazwami narzędzi.package.jsonmaopenclaw.extensions: ["./dist/index.js"].- Gateway został ponownie uruchomiony lub przeładowany po zainstalowaniu pluginu.