Skills

Konfiguracja Skills

Większość konfiguracji Skills znajduje się w sekcji skills w pliku ~/.openclaw/openclaw.json. Widoczność właściwa dla poszczególnych agentów jest określana w agents.defaults.skills i agents.list[].skills.

json5
{  skills: {    allowBundled: ["gemini", "peekaboo"],    load: {      extraDirs: ["~/Projects/agent-scripts/skills"],      allowSymlinkTargets: ["~/Projects/manager/skills"],      watch: true,      watchDebounceMs: 250,    },    install: {      preferBrew: true,      nodeManager: "npm",      allowUploadedArchives: false,    },    workshop: {      autonomous: { enabled: false },      allowSymlinkTargetWrites: false,      approvalPolicy: "pending",      maxPending: 50,      maxSkillBytes: 40000,    },    entries: {      "image-lab": {        enabled: true,        apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" },        env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },      },      peekaboo: { enabled: true },      sag: { enabled: false },    },  },}

Ładowanie (skills.load)

skills.load.extraDirsstring[]

Dodatkowe katalogi Skills do skanowania, o najniższym priorytecie (poniżej wbudowanych Skills i Skills Pluginów). Ścieżki są rozwijane z obsługą ~.

skills.load.allowSymlinkTargetsstring[]

Zaufane rzeczywiste katalogi docelowe, do których mogą prowadzić dowiązania symboliczne folderów Skills, nawet gdy dowiązanie znajduje się poza skonfigurowanym katalogiem głównym. Używaj tej opcji w przypadku celowych układów sąsiadujących repozytoriów, takich jak <workspace>/skills/manager -> ~/Projects/manager/skills. Zachowaj tę listę wąską — nie wskazuj ogólnych katalogów głównych, takich jak ~ lub ~/Projects.

skills.load.watchbooleandefault: true

Obserwuje foldery Skills i odświeża migawkę Skills po zmianie plików SKILL.md. Obejmuje zagnieżdżone pliki w pogrupowanych katalogach głównych Skills.

skills.load.watchDebounceMsnumberdefault: 250

Okno eliminowania nadmiarowych zdarzeń obserwatora Skills w milisekundach.

Instalowanie (skills.install)

skills.install.preferBrewbooleandefault: true

Preferuje instalatory Homebrew, gdy dostępne jest polecenie brew.

skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"

Preferowany menedżer pakietów Node do instalowania Skills. Wpływa to wyłącznie na instalowanie Skills — środowisko uruchomieniowe Gateway nadal powinno używać Node (Bun nie jest zalecany dla WhatsApp/Telegram). Polecenia openclaw setup --node-manager i openclaw onboard --node-manager akceptują npm, pnpm lub bun; aby instalować Skills przy użyciu Yarn, ustaw "yarn" bezpośrednio w konfiguracji.

skills.install.allowUploadedArchivesbooleandefault: false

Zezwala zaufanym klientom Gateway z uprawnieniem operator.admin na instalowanie prywatnych archiwów zip przygotowanych za pośrednictwem skills.upload.*. Zwykłe instalacje z ClawHub nie wymagają tego ustawienia.

Zasady instalacji operatora (security.installPolicy)

Użyj security.installPolicy, gdy operatorzy potrzebują zaufanego lokalnego polecenia do zatwierdzania lub blokowania instalacji Skills i Pluginów zgodnie z zasadami właściwymi dla hosta. Zasady są wykonywane po przygotowaniu materiałów źródłowych przez OpenClaw, a przed kontynuowaniem instalacji lub aktualizacji. Obejmują Skills z ClawHub, przesłane Skills, Skills z Git/lokalne, instalatory zależności Skills oraz źródła instalacji i aktualizacji Pluginów.

json5
{  security: {    installPolicy: {      enabled: true,      // Pomiń targets, aby objąć każdy obsługiwany cel.      targets: ["skill", "plugin"],      exec: {        source: "exec",        command: "/usr/local/bin/openclaw-install-policy",        args: ["--json"],        timeoutMs: 10000,        noOutputTimeoutMs: 10000,        maxOutputBytes: 1048576,        passEnv: ["OPENCLAW_STATE_DIR", "PATH"],        env: { POLICY_MODE: "strict" },        trustedDirs: ["/usr/local/bin"],      },    },  },}
security.installPolicy.enabledbooleandefault: false

Włącza zarządzane przez operatora zasady instalacji. Po włączeniu bez prawidłowego polecenia exec instalacje są blokowane w razie błędu.

security.installPolicy.targets("skill" | "plugin")[]

Opcjonalny filtr celów. W przypadku pominięcia zasady mają zastosowanie do każdego obsługiwanego celu, dzięki czemu nowe instalacje nie zostaną nieoczekiwanie dozwolone w razie błędu.

security.installPolicy.exec.commandstring

Bezwzględna ścieżka do zaufanego pliku wykonywalnego zasad. OpenClaw uruchamia go bez powłoki i przed użyciem sprawdza poprawność ścieżki.

security.installPolicy.exec.argsstring[]

Statyczne argumenty przekazywane po command.

security.installPolicy.exec.timeoutMsnumberdefault: 10000

Maksymalny rzeczywisty czas wykonania jednej decyzji zasad.

security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMs

Maksymalny czas bez danych wyjściowych w stdout lub stderr, po którym zasady blokują operację w razie błędu.

security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576

Maksymalna łączna liczba bajtów stdout i stderr akceptowana z procesu zasad.

security.installPolicy.exec.envRecord<string, string ���-.+^��h�����z�������,���jw�����
security.installPolicy.exec.passEnvstring[]

Nazwy zmiennych środowiskowych kopiowanych z procesu OpenClaw do procesu zasad. Przekazywane są wyłącznie zmienne o podanych nazwach.

security.installPolicy.exec.trustedDirsstring[]

Opcjonalna lista dozwolonych katalogów, które mogą zawierać plik wykonywalny zasad.

security.installPolicy.exec.allowInsecurePathbooleandefault: false

Pomija sprawdzanie właściciela i uprawnień ścieżki polecenia. Używaj tylko wtedy, gdy ścieżka jest chroniona innym mechanizmem.

security.installPolicy.exec.allowSymlinkCommandbooleandefault: false

Zezwala, aby skonfigurowana ścieżka polecenia była dowiązaniem symbolicznym. Rozwiązany cel nadal musi spełniać pozostałe wymogi dotyczące ścieżki. Argumenty skryptów interpretera muszą być bezpośrednimi zwykłymi plikami, a nie dowiązaniami symbolicznymi.

Zasady otrzymują na standardowym wejściu jeden obiekt JSON zawierający protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, opcjonalne ustrukturyzowane pola source, origin oraz request. Muszą zapisać na standardowym wyjściu jeden obiekt JSON: { "protocolVersion": 1, "decision": "allow" } albo { "protocolVersion": 1, "decision": "block", "reason": "..." }. Niezerowy kod zakończenia, przekroczenie limitu czasu, nieprawidłowy JSON, brakujące pola lub nieobsługiwane wersje protokołu powodują zablokowanie operacji w razie błędu.

OpenClaw nie wykonuje zasad instalacji podczas zwykłego uruchamiania Gateway. Instalacje i aktualizacje są blokowane w razie błędu, gdy zasady są włączone, ale niedostępne. openclaw doctor przeprowadza walidację statyczną; openclaw doctor --deep wykonuje syntetyczną próbę instalacji przy użyciu skonfigurowanego polecenia.

Aktualizacje zbiorcze stosują zasady osobno do każdego celu: zablokowanie aktualizacji Skills lub Pluginu powoduje niepowodzenie tego celu bez wyłączania zasad ani pomijania kolejnych celów w partii.

Przykładowe dane standardowego wejścia:

json
{  "protocolVersion": 1,  "openclawVersion": "2026.6.1",  "targetType": "skill",  "targetName": "weather",  "sourcePath": "/var/folders/.../openclaw-skill-clawhub/root",  "sourcePathKind": "directory",  "source": {    "kind": "clawhub",    "authority": "openclaw",    "mutable": false,    "network": true  },  "origin": {    "type": "clawhub",    "registry": "https://clawhub.openclaw.ai",    "slug": "weather",    "version": "1.0.0"  },  "request": {    "kind": "skill-install",    "mode": "install",    "requestedSpecifier": "clawhub:weather@1.0.0"  },  "skill": {    "installId": "clawhub"  }}

Minimalne polecenie zasad:

js
#!/usr/bin/env node let input = "";process.stdin.setEncoding("utf8");process.stdin.on("data", (chunk) => {  input += chunk;});process.stdin.on("end", () => {  const request = JSON.parse(input);  if (request.targetType === "plugin" && request.source?.kind === "local-path") {    process.stdout.write(      JSON.stringify({        protocolVersion: 1,        decision: "block",        reason: "local plugin paths are not approved on this host",      }),    );    return;  }  process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));});

Lista dozwolonych wbudowanych Skills

skills.allowBundledstring[]

Opcjonalna lista dozwolonych wyłącznie dla wbudowanych Skills. Po jej ustawieniu dostępne są tylko wbudowane Skills znajdujące się na liście. Nie wpływa to na zarządzane Skills, Skills na poziomie agenta ani Skills obszaru roboczego.

Wpisy poszczególnych Skills (skills.entries)

Klucze w entries domyślnie odpowiadają polu name Skills. Jeśli Skills definiują metadata.openclaw.skillKey, użyj zamiast tego tego klucza. Nazwy z łącznikami ujmij w cudzysłowy (JSON5 zezwala na klucze w cudzysłowach).

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .enabled" type="boolean"> false wyłącza Skills, nawet gdy są wbudowane lub zainstalowane. Wbudowane Skills coding-agent wymagają jawnego włączenia — ustaw tę wartość na true i upewnij się, że zainstalowano i uwierzytelniono claude, codex, opencode albo inne obsługiwane CLI.

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .apiKey" type='string | { source, provider, id }'> Pole pomocnicze dla Skills deklarujących metadata.openclaw.primaryEnv. Obsługuje zwykły ciąg tekstowy lub SecretRef: { source: "env", provider: "default", id: "VAR_NAME" }.

"skills.entries.<key�����r�
"skills.entries.<key�w₫��ܩ

Listy dozwolonych Skills agentów (agents)

Użyj konfiguracji agenta, jeśli chcesz zachować te same katalogi główne Skills maszyny lub obszaru roboczego, ale ustawić inny widoczny zestaw Skills dla każdego agenta.

json5
{  agents: {    defaults: {      skills: ["github", "weather"], // shared baseline    },    list: [      { id: "writer" }, // inherits github, weather      { id: "docs", skills: ["docs-search"] }, // replaces defaults entirely      { id: "locked-down", skills: [] }, // no skills    ],  },}
agents.defaults.skillsstring[]

Wspólna bazowa lista dozwolonych dziedziczona przez agentów, którzy pomijają agents.list[].skills. Pomiń ją całkowicie, aby domyślnie nie ograniczać Skills.

agents.list[].skillsstring[]

Jawny końcowy zestaw Skills dla danego agenta. Jawne listy zastępują dziedziczone wartości domyślne — nie są z nimi scalane. Ustaw [], aby nie udostępniać danemu agentowi żadnych Skills.

Warsztat (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

Gdy ustawiono true, agenci mogą po pomyślnych turach tworzyć oczekujące propozycje na podstawie trwałych sygnałów z rozmowy. Tworzenie umiejętności zainicjowane przez użytkownika zawsze odbywa się za pośrednictwem Skill Workshop, niezależnie od tego ustawienia.

skills.workshop.approvalPolicy"pending" | "auto"default: "pending"

pending wymaga zatwierdzenia przez operatora, zanim agent zainicjuje zastosowanie, odrzucenie lub kwarantannę. auto zezwala na te działania bez zatwierdzenia.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

Zezwala funkcji zastosowania w Skill Workshop na zapis poprzez dowiązania symboliczne umiejętności w obszarze roboczym, których rzeczywisty cel jest już zaufany przez skills.load.allowSymlinkTargets. Pozostaw tę opcję wyłączoną, chyba że zastosowanie wygenerowanych propozycji ma modyfikować ten współdzielony katalog główny umiejętności.

skills.workshop.maxPendingnumberdefault: 50

Maksymalna liczba oczekujących i poddanych kwarantannie propozycji przechowywanych dla każdego obszaru roboczego (dozwolony zakres: 1–200).

skills.workshop.maxSkillBytesnumberdefault: 40000

Maksymalny rozmiar treści propozycji w bajtach (dozwolony zakres: 1024–200000). Opisy propozycji mają osobny, nieprzekraczalny limit 160 bajtów, ponieważ pojawiają się w wynikach wykrywania i wyświetlania list.

Zobacz Skill Workshop, aby poznać cykl życia propozycji, polecenia CLI, parametry narzędzi agenta oraz metody Gateway kontrolowane przez tę konfigurację.

Katalogi główne umiejętności z dowiązaniami symbolicznymi

Domyślnie katalogi główne umiejętności obszaru roboczego, agenta projektu, katalogów dodatkowych i umiejętności wbudowanych stanowią granice zawierania. Folder umiejętności z dowiązaniem symbolicznym w <workspace>/skills, który prowadzi poza katalog główny, jest pomijany, a informacja o tym trafia do dziennika.

Aby zezwolić na zamierzony układ dowiązań symbolicznych, zadeklaruj zaufany cel:

json5
{  skills: {    load: {      extraDirs: ["~/Projects/manager/skills"],      allowSymlinkTargets: ["~/Projects/manager/skills"],    },  },}

Przy tej konfiguracji dowiązanie <workspace>/skills/manager -> ~/Projects/manager/skills jest akceptowane po ustaleniu ścieżki rzeczywistej. extraDirs skanuje bezpośrednio sąsiednie repozytorium, natomiast allowSymlinkTargets zachowuje ścieżkę z dowiązaniem symbolicznym na potrzeby istniejących układów.

Funkcja zastosowania w Skill Workshop domyślnie nie zapisuje poprzez te dowiązania symboliczne. Aby zezwolić Workshop na modyfikowanie umiejętności w już zaufanych celach dowiązań symbolicznych, włącz tę opcję osobno:

json5
{  skills: {    load: {      allowSymlinkTargets: ["~/Projects/manager/skills"],    },    workshop: {      allowSymlinkTargetWrites: true,    },  },}

Zarządzane katalogi ~/.openclaw/skills i osobiste katalogi ~/.agents/skills już bezwarunkowo akceptują dowiązania symboliczne katalogów umiejętności (nadal obowiązuje ograniczenie zawierania pliku SKILL.md dla każdej umiejętności) — allowSymlinkTargets jest potrzebne tylko dla katalogów głównych obszaru roboczego, katalogów dodatkowych i agenta projektu (<workspace>/.agents/skills).

Umiejętności w piaskownicy i zmienne środowiskowe

Przekaż dane poufne do piaskownicy Docker za pomocą:

json5
{  agents: {    defaults: {      sandbox: {        docker: {          env: { GEMINI_API_KEY: "your-key-here" },        },      },    },  },}

Przypomnienie o kolejności ładowania

text
workspace/skills      (najwyższy priorytet)workspace/.agents/skills~/.agents/skills~/.openclaw/skillswbudowane umiejętnościskills.load.extraDirs (najniższy priorytet)

Zmiany umiejętności i konfiguracji zaczynają obowiązywać w następnej nowej sesji, gdy obserwator jest włączony, albo w następnej turze agenta, gdy obserwator wykryje zmianę.

Powiązane

Was this useful?
On this page

On this page