Skills

Konfiguracja Skills

Większość konfiguracji Skills znajduje się w sekcji skills w ~/.openclaw/openclaw.json. Widoczność specyficzna dla agenta znajduje się w agents.defaults.skills oraz 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, z najniższym priorytetem (po Skills wbudowanych i pochodzących z Plugin). Ścieżki są rozwijane z obsługą ~.

skills.load.allowSymlinkTargetsstring[]

Zaufane rzeczywiste katalogi docelowe, do których mogą wskazywać dowiązane symbolicznie foldery Skills, nawet gdy dowiązanie symboliczne znajduje się poza skonfigurowanym katalogiem głównym. Użyj tego w celowych układach repozytoriów równoległych, takich jak <workspace>/skills/manager -> ~/Projects/manager/skills. Utrzymuj tę listę wąską — nie wskazuj szerokich katalogów głównych, takich jak ~ lub ~/Projects.

skills.load.watchbooleandefault: true

Obserwuj foldery Skills i odświeżaj migawkę Skills, gdy pliki SKILL.md ulegną zmianie. Obejmuje zagnieżdżone pliki pod pogrupowanymi katalogami głównymi Skills.

skills.load.watchDebounceMsnumberdefault: 250

Okno debounce dla zdarzeń obserwatora Skills w milisekundach.

Instalacja (skills.install)

skills.install.preferBrewbooleandefault: true

Preferuj instalatory Homebrew, gdy brew jest dostępny.

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

Preferowany menedżer pakietów Node dla instalacji Skills. Wpływa to tylko na instalacje Skills — środowisko uruchomieniowe Gateway nadal powinno używać Node (Bun nie jest zalecany dla WhatsApp/Telegram). Użyj openclaw setup --node-manager dla npm, pnpm lub bun; ustaw "yarn" ręcznie dla instalacji Skills opartych na Yarn.

skills.install.allowUploadedArchivesbooleandefault: false

Pozwól zaufanym klientom Gateway operator.admin instalować prywatne archiwa zip przygotowane przez 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 przy użyciu zasad specyficznych dla hosta. Zasady uruchamiają się po tym, jak OpenClaw przygotuje materiał źródłowy, 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/aktualizacji Plugin.

json5
{  security: {    installPolicy: {      enabled: true,      // Omit targets to cover every supported target.      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 zasady instalacji należące do operatora. Gdy są włączone bez poprawnego polecenia exec, instalacje kończą się bezpieczną odmową.

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

Opcjonalny filtr celów. Gdy go pominięto, zasady dotyczą każdego obsługiwanego celu, aby nowe instalacje nie zostały nieoczekiwanie dopuszczone.

security.installPolicy.exec.commandstring

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

security.installPolicy.exec.argsstring[]

Statyczne argumenty przekazywane po command.

security.installPolicy.exec.timeoutMsnumberdefault: 10000

Maksymalny czas zegarowy wykonania jednej decyzji zasad.

security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMs

Maksymalny czas bez danych na stdout lub stderr, po którym zasady kończą się bezpieczną odmową.

security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576

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

security.installPolicy.exec.env"Record<string,
security.installPolicy.exec.passEnvstring[]

Nazwy zmiennych środowiskowych kopiowane z procesu OpenClaw do procesu zasad. Przekazywane są tylko nazwane zmienne.

security.installPolicy.exec.trustedDirsstring[]

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

security.installPolicy.exec.allowInsecurePathbooleandefault: false

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

security.installPolicy.exec.allowSymlinkCommandbooleandefault: false

Pozwala, aby skonfigurowana ścieżka polecenia była dowiązaniem symbolicznym. Rozwiązany cel nadal musi spełniać pozostałe sprawdzenia ścieżki. Argumenty skryptu interpretera muszą być bezpośrednimi zwykłymi plikami, nie dowiązaniami symbolicznymi.

Zasady otrzymują na stdin jeden obiekt JSON z protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, opcjonalnym ustrukturyzowanym source, ustrukturyzowanym origin oraz request. Muszą zapisać na stdout jeden obiekt JSON: { "protocolVersion": 1, "decision": "allow" } lub { "protocolVersion": 1, "decision": "block", "reason": "..." }. Niezerowy kod wyjścia, przekroczenie czasu, niepoprawny JSON, brakujące pola lub nieobsługiwane wersje protokołu kończą się bezpieczną odmową.

OpenClaw nie wykonuje zasad instalacji podczas zwykłego uruchamiania Gateway. Instalacje i aktualizacje kończą się bezpieczną odmową, gdy zasady są włączone, ale niedostępne. openclaw doctor wykonuje statyczną walidację, a openclaw doctor --deep uruchamia syntetyczną próbę instalacji względem skonfigurowanego polecenia.

Aktualizacje zbiorcze stosują zasady osobno dla każdego celu: zablokowana aktualizacja Skills lub Plugin kończy się niepowodzeniem dla tego celu bez wyłączania zasad ani pomijania późniejszych celów w partii.

Przykładowy stdin:

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" }));});

Allowlista wbudowanych Skills

skills.allowBundledstring[]

Opcjonalna allowlista wyłącznie dla wbudowanych Skills. Gdy jest ustawiona, kwalifikują się tylko wbudowane Skills znajdujące się na liście. Skills zarządzane, na poziomie agenta i z przestrzeni roboczej pozostają bez zmian.

Wpisy poszczególnych Skills (skills.entries)

Klucze w entries domyślnie odpowiadają name danego Skills. Jeśli Skills definiuje metadata.openclaw.skillKey, użyj zamiast tego tego klucza. Nazwy z łącznikami ujmuj w cudzysłowy (JSON5 dopuszcza klucze w cudzysłowach).

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .enabled" type="boolean"> false wyłącza Skills nawet wtedy, gdy jest wbudowany lub zainstalowany. Wbudowany Skills coding-agent jest opcjonalny — ustaw go na true i upewnij się, że jeden z claude, codex, opencode albo inny obsługiwany CLI jest zainstalowany i uwierzytelniony.

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

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

Allowlisty agentów (agents)

Użyj konfiguracji agenta, gdy chcesz mieć te same katalogi główne Skills dla maszyny/przestrzeni roboczej, ale 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 allowlista dziedziczona przez agentów, którzy pomijają agents.list[].skills. Pomiń całkowicie, aby domyślnie nie ograniczać Skills.

agents.list[].skillsstring[]

Jawny ostateczny zestaw Skills dla tego agenta. Jawne listy zastępują odziedziczone wartości domyślne — nie są z nimi scalane. Ustaw [], aby nie udostępniać temu agentowi żadnych Skills.

Workshop (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

Gdy true, agenci mogą tworzyć oczekujące propozycje na podstawie trwałych sygnałów konwersacji po udanych turach. Tworzenie Skills zainicjowane przez użytkownika zawsze przechodzi przez Skill Workshop niezależnie od tego ustawienia.

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

pending wymaga zatwierdzenia operatora przed zainicjowanym przez agenta zastosowaniem, odrzuceniem lub kwarantanną. auto zezwala na te działania bez zatwierdzenia.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

Zezwól zastosowaniu Skill Workshop na zapis przez dowiązania symboliczne Skills w obszarze roboczym, których rzeczywisty cel jest już zaufany przez skills.load.allowSymlinkTargets. Pozostaw tę opcję wyłączoną, chyba że zastosowania wygenerowanych propozycji powinny modyfikować ten współdzielony katalog główny Skills.

skills.workshop.maxPendingnumberdefault: 50

Maksymalna liczba oczekujących i poddanych kwarantannie propozycji przechowywanych dla każdego obszaru roboczego.

skills.workshop.maxSkillBytesnumberdefault: 40000

Maksymalny rozmiar treści propozycji w bajtach. Opisy propozycji mają twardy limit 160 bajtów, ponieważ pojawiają się w danych wyjściowych odkrywania i listowania.

Korzenie Skills jako dowiązania symboliczne

Domyślnie korzenie Skills obszaru roboczego, agenta projektu, dodatkowego katalogu i pakietowe są granicami izolacji. Folder Skills będący dowiązaniem symbolicznym pod <workspace>/skills, który wskazuje poza katalog główny, jest pomijany z komunikatem w logu.

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 <workspace>/skills/manager -> ~/Projects/manager/skills jest akceptowane po rozwiązaniu realpath. extraDirs skanuje bezpośrednio sąsiednie repozytorium; allowSymlinkTargets zachowuje ścieżkę z dowiązaniem symbolicznym dla istniejących układów.

Zastosowanie Skill Workshop domyślnie nie zapisuje przez te dowiązania symboliczne. Aby pozwolić Workshop apply modyfikować Skills pod już zaufanymi celami dowiązań symbolicznych, włącz to osobno:

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

Zarządzane katalogi ~/.openclaw/skills i osobiste katalogi ~/.agents/skills już akceptują dowiązania symboliczne katalogów Skills (izolacja per-Skill SKILL.md nadal obowiązuje).

Skills w piaskownicy i zmienne środowiskowe

Przekaż sekrety 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      (highest)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsbundled skillsskills.load.extraDirs (lowest)

Zmiany w Skills 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