Skip to main content
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.
  • typebox w dependencies (nie tylko devDependencies — wygenerowany plugin importuje go w czasie działania).
  • openclaw >=2026.5.17, pierwsza wersja eksportująca openclaw/plugin-sdk/tool-plugin.
  • Katalog główny pakietu zawierający dist/, openclaw.plugin.json oraz package.json.

Szybki start

plugins init tworzy szkielet: 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>:

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.json istnieje i przechodzi standardowe ładowanie manifestu.
  • Bieżący punkt wejścia eksportuje metadane defineToolPlugin.
  • Pola wygenerowanego manifestu odpowiadają metadanym punktu wejścia.
  • contracts.tools odpowiada zadeklarowanym nazwom narzędzi.
  • package.json wskazuje za pomocą openclaw.extensions wybrany 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:
  1. openclaw plugins inspect <plugin-id> --runtime
  2. openclaw plugins validate --root <plugin-root> --entry ./dist/index.js
  3. openclaw.plugin.json ma contracts.tools z oczekiwanymi nazwami narzędzi.
  4. package.json ma openclaw.extensions: ["./dist/index.js"].
  5. Gateway został ponownie uruchomiony lub przeładowany po zainstalowaniu pluginu.

Zobacz także