Skills

Configurazione Skills

La maggior parte della configurazione delle skill si trova sotto skills in ~/.openclaw/openclaw.json. La visibilità specifica dell'agente si trova sotto agents.defaults.skills e 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 },    },  },}

Caricamento (skills.load)

skills.load.extraDirsstring[]

Directory di skill aggiuntive da analizzare, con la precedenza più bassa (dopo le skill in bundle e dei Plugin). I percorsi vengono espansi con supporto per ~.

skills.load.allowSymlinkTargetsstring[]

Directory di destinazione reali attendibili in cui possono risolversi le cartelle di skill con symlink, anche quando il symlink si trova fuori dalla radice configurata. Usalo per layout intenzionali di repository affiancati, come <workspace>/skills/manager -> ~/Projects/manager/skills. Mantieni questo elenco ristretto: non puntare a radici ampie come ~ o ~/Projects.

skills.load.watchbooleandefault: true

Monitora le cartelle di skill e aggiorna lo snapshot delle skill quando i file SKILL.md cambiano. Copre i file annidati sotto le radici di skill raggruppate.

skills.load.watchDebounceMsnumberdefault: 250

Finestra di debounce per gli eventi del watcher delle skill in millisecondi.

Installazione (skills.install)

skills.install.preferBrewbooleandefault: true

Preferisce gli installer Homebrew quando brew è disponibile.

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

Preferenza del gestore pacchetti Node per le installazioni di skill. Questo influisce solo sulle installazioni di skill: il runtime Gateway deve comunque usare Node (Bun non è consigliato per WhatsApp/Telegram). Usa openclaw setup --node-manager per npm, pnpm o bun; imposta "yarn" manualmente per installazioni di skill basate su Yarn.

skills.install.allowUploadedArchivesbooleandefault: false

Consente ai client Gateway operator.admin attendibili di installare archivi zip privati predisposti tramite skills.upload.*. Le normali installazioni ClawHub non richiedono questa impostazione.

Criterio di installazione dell'operatore (security.installPolicy)

Usa security.installPolicy quando gli operatori hanno bisogno di un comando locale attendibile per approvare o bloccare installazioni di skill e Plugin con criteri specifici dell'host. Il criterio viene eseguito dopo che OpenClaw ha predisposto il materiale sorgente e prima che l'installazione o l'aggiornamento continui. Si applica alle skill ClawHub, alle skill caricate, alle skill Git/locali, agli installer delle dipendenze delle skill e alle sorgenti di installazione/aggiornamento dei 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

Abilita il criterio di installazione di proprietà dell'operatore. Quando è abilitato senza un comando exec valido, le installazioni falliscono in modo chiuso.

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

Filtro di destinazione facoltativo. Quando viene omesso, il criterio si applica a ogni destinazione supportata in modo che le nuove installazioni non falliscano inaspettatamente in modo aperto.

security.installPolicy.exec.commandstring

Percorso assoluto dell'eseguibile del criterio attendibile. OpenClaw lo esegue senza una shell e convalida il percorso prima dell'uso.

security.installPolicy.exec.argsstring[]

Argomenti statici passati dopo command.

security.installPolicy.exec.timeoutMsnumberdefault: 10000

Tempo massimo di esecuzione effettivo per una decisione del criterio.

security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMs

Tempo massimo senza output su stdout o stderr prima che il criterio fallisca in modo chiuso.

security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576

Numero massimo di byte combinati di stdout e stderr accettati dal processo del criterio.

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

Nomi di variabili d'ambiente copiati dal processo OpenClaw nel processo del criterio. Vengono passate solo le variabili nominate.

security.installPolicy.exec.trustedDirsstring[]

Allowlist facoltativa di directory che possono contenere l'eseguibile del criterio.

security.installPolicy.exec.allowInsecurePathbooleandefault: false

Aggira i controlli di proprietà e permessi del percorso del comando. Usalo solo quando il percorso è protetto da un altro meccanismo.

security.installPolicy.exec.allowSymlinkCommandbooleandefault: false

Consente al percorso del comando configurato di essere un symlink. La destinazione risolta deve comunque soddisfare gli altri controlli del percorso. Gli argomenti degli script interprete devono essere file regolari diretti, non symlink.

Il criterio riceve un oggetto JSON su stdin con protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, source strutturato facoltativo, origin strutturato e request. Deve scrivere un oggetto JSON su stdout: { "protocolVersion": 1, "decision": "allow" } oppure { "protocolVersion": 1, "decision": "block", "reason": "..." }. Uscita diversa da zero, timeout, JSON malformato, campi mancanti o versioni di protocollo non supportate falliscono in modo chiuso.

OpenClaw non esegue il criterio di installazione durante il normale avvio del Gateway. Installazioni e aggiornamenti falliscono in modo chiuso quando il criterio è abilitato ma non disponibile. openclaw doctor esegue la convalida statica, e openclaw doctor --deep esegue una prova sintetica di installazione contro il comando configurato.

Gli aggiornamenti in blocco applicano il criterio per destinazione: un aggiornamento bloccato di skill o Plugin fallisce per quella destinazione senza disabilitare il criterio o saltare le destinazioni successive nel batch.

Esempio di 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"  }}

Comando di criterio minimo:

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

Allowlist delle skill in bundle

skills.allowBundledstring[]

Allowlist facoltativa solo per le skill in bundle. Quando è impostata, sono idonee solo le skill in bundle nell'elenco. Le skill gestite, a livello di agente e del workspace non sono interessate.

Voci per skill (skills.entries)

Le chiavi sotto entries corrispondono per impostazione predefinita al name della skill. Se una skill definisce metadata.openclaw.skillKey, usa invece quella chiave. Metti tra virgolette i nomi con trattino (JSON5 consente chiavi tra virgolette).

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .enabled" type="boolean"> false disabilita la skill anche quando è in bundle o installata. La skill in bundle coding-agent è opt-in: impostala su true e assicurati che uno tra claude, codex, opencode o un'altra CLI supportata sia installato e autenticato.

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .apiKey" type='string | { source, provider, id }'> Campo di comodità per le skill che dichiarano metadata.openclaw.primaryEnv. Supporta una stringa in testo normale o una SecretRef: { source: "env", provider: "default", id: "VAR_NAME" }.

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

Allowlist degli agenti (agents)

Usa la configurazione dell'agente quando vuoi le stesse radici di skill di macchina/workspace ma un insieme di skill visibili diverso per agente.

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[]

Allowlist di base condivisa ereditata dagli agenti che omettono agents.list[].skills. Omettila del tutto per lasciare le skill senza restrizioni per impostazione predefinita.

agents.list[].skillsstring[]

Insieme finale esplicito di skill per quell'agente. Gli elenchi espliciti sostituiscono i default ereditati: non vengono uniti. Imposta su [] per non esporre alcuna skill a quell'agente.

Workshop (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

Quando è true, gli agenti possono creare proposte in sospeso da segnali durevoli della conversazione dopo turni riusciti. La creazione di skill richiesta dall'utente passa sempre tramite Skill Workshop indipendentemente da questa impostazione.

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

pending richiede l'approvazione dell'operatore prima di applicare, rifiutare o mettere in quarantena su iniziativa dell'agente. auto consente queste azioni senza approvazione.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

Consenti a Skill Workshop di applicare scritture tramite symlink Skills dell'area di lavoro il cui target reale è già attendibile per skills.load.allowSymlinkTargets. Mantieni questa opzione disabilitata a meno che l'applicazione delle proposte generate debba modificare quella radice Skills condivisa.

skills.workshop.maxPendingnumberdefault: 50

Numero massimo di proposte in sospeso e in quarantena conservate per area di lavoro.

skills.workshop.maxSkillBytesnumberdefault: 40000

Dimensione massima del corpo della proposta in byte. Le descrizioni delle proposte hanno un limite rigido di 160 byte perché compaiono nell'output di individuazione ed elenco.

Per impostazione predefinita, le radici Skills di area di lavoro, agente di progetto, directory extra e incluse sono confini di contenimento. Una cartella Skills con symlink sotto <workspace>/skills che si risolve fuori dalla radice viene ignorata con un messaggio di log.

Per consentire un layout con symlink intenzionale, dichiara il target attendibile:

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

Con questa configurazione, <workspace>/skills/manager -> ~/Projects/manager/skills viene accettato dopo la risoluzione realpath. extraDirs scansiona direttamente il repository adiacente; allowSymlinkTargets conserva il percorso con symlink per i layout esistenti.

Per impostazione predefinita, l'applicazione di Skill Workshop non scrive attraverso quei symlink. Per consentire a Workshop di modificare Skills sotto target symlink già attendibili, abilitalo separatamente:

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

Le directory gestite ~/.openclaw/skills e personali ~/.agents/skills accettano già symlink a directory Skills (il contenimento SKILL.md per singola Skill continua ad applicarsi).

Skills in sandbox e variabili env

Passa i segreti in una sandbox Docker con:

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

Promemoria sull'ordine di caricamento

text
workspace/skills      (più alto)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsSkills incluseskills.load.extraDirs (più basso)

Le modifiche a Skills e configurazione hanno effetto nella nuova sessione successiva quando il watcher è abilitato, oppure nel turno agente successivo quando il watcher rileva una modifica.

Correlati

Was this useful?
On this page

On this page