Skills

Configuration Skills

La majeure partie de la configuration des Skills se trouve sous skills dans ~/.openclaw/openclaw.json. La visibilité propre aux agents se trouve sous agents.defaults.skills et 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 },    },  },}

Chargement (skills.load)

skills.load.extraDirsstring[]

Répertoires de Skills supplémentaires à analyser, avec la priorité la plus basse (après les Skills groupés et de Plugin). Les chemins sont développés avec la prise en charge de ~.

skills.load.allowSymlinkTargetsstring[]

Répertoires cibles réels et approuvés vers lesquels les dossiers de Skills sous forme de liens symboliques peuvent résoudre, même lorsque le lien symbolique se trouve hors de la racine configurée. Utilisez ceci pour les dispositions intentionnelles de dépôts voisins, comme <workspace>/skills/manager -> ~/Projects/manager/skills. Gardez cette liste restreinte — ne la faites pas pointer vers des racines larges comme ~ ou ~/Projects.

skills.load.watchbooleandefault: true

Surveille les dossiers de Skills et actualise l’instantané des Skills lorsque les fichiers SKILL.md changent. Couvre les fichiers imbriqués sous les racines de Skills groupées.

skills.load.watchDebounceMsnumberdefault: 250

Fenêtre d’anti-rebond pour les événements de surveillance des Skills, en millisecondes.

Installation (skills.install)

skills.install.preferBrewbooleandefault: true

Privilégie les installateurs Homebrew lorsque brew est disponible.

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

Préférence de gestionnaire de paquets Node pour les installations de Skills. Cela n’affecte que les installations de Skills — le runtime Gateway doit toujours utiliser Node (Bun n’est pas recommandé pour WhatsApp/Telegram). Utilisez openclaw setup --node-manager pour npm, pnpm ou bun ; définissez "yarn" manuellement pour les installations de Skills reposant sur Yarn.

skills.install.allowUploadedArchivesbooleandefault: false

Autorise les clients Gateway operator.admin approuvés à installer des archives zip privées préparées via skills.upload.*. Les installations ClawHub normales n’ont pas besoin de ce paramètre.

Politique d’installation opérateur (security.installPolicy)

Utilisez security.installPolicy lorsque les opérateurs ont besoin d’une commande locale approuvée pour autoriser ou bloquer les installations de Skills et de Plugins avec une politique propre à l’hôte. La politique s’exécute après qu’OpenClaw a préparé les sources et avant que l’installation ou la mise à jour ne continue. Elle s’applique aux Skills ClawHub, aux Skills téléversés, aux Skills Git/locaux, aux installateurs de dépendances de Skills et aux sources d’installation/mise à jour de Plugins.

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

Active la politique d’installation détenue par l’opérateur. Lorsqu’elle est activée sans commande exec valide, les installations échouent en mode fermé.

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

Filtre de cible facultatif. Lorsqu’il est omis, la politique s’applique à toutes les cibles prises en charge afin que les nouvelles installations ne s’ouvrent pas de façon inattendue.

security.installPolicy.exec.commandstring

Chemin absolu vers l’exécutable de politique approuvé. OpenClaw l’exécute sans shell et valide le chemin avant utilisation.

security.installPolicy.exec.argsstring[]

Arguments statiques transmis après command.

security.installPolicy.exec.timeoutMsnumberdefault: 10000

Durée maximale en temps réel pour une décision de politique.

security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMs

Durée maximale sans sortie stdout ou stderr avant que la politique échoue en mode fermé.

security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576

Nombre maximal d’octets stdout et stderr combinés acceptés depuis le processus de politique.

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

Noms des variables d’environnement copiées du processus OpenClaw vers le processus de politique. Seules les variables nommées sont transmises.

security.installPolicy.exec.trustedDirsstring[]

Liste d’autorisation facultative des répertoires pouvant contenir l’exécutable de politique.

security.installPolicy.exec.allowInsecurePathbooleandefault: false

Contourne les vérifications de propriété et d’autorisations du chemin de la commande. À utiliser uniquement lorsque le chemin est protégé par un autre mécanisme.

security.installPolicy.exec.allowSymlinkCommandbooleandefault: false

Autorise le chemin de commande configuré à être un lien symbolique. La cible résolue doit tout de même satisfaire les autres vérifications de chemin. Les arguments de script d’interpréteur doivent être des fichiers réguliers directs, et non des liens symboliques.

La politique reçoit un objet JSON sur stdin avec protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, un champ structuré facultatif source, ainsi que origin et request structurés. Elle doit écrire un objet JSON sur stdout : { "protocolVersion": 1, "decision": "allow" } ou { "protocolVersion": 1, "decision": "block", "reason": "..." }. Une sortie non nulle, un délai d’expiration, un JSON mal formé, des champs manquants ou des versions de protocole non prises en charge échouent en mode fermé.

OpenClaw n’exécute pas la politique d’installation pendant le démarrage normal du Gateway. Les installations et mises à jour échouent en mode fermé lorsque la politique est activée mais indisponible. openclaw doctor effectue une validation statique, et openclaw doctor --deep exécute une sonde d’installation synthétique contre la commande configurée.

Les mises à jour en masse appliquent la politique par cible : une mise à jour de Skill ou de Plugin bloquée échoue pour cette cible sans désactiver la politique ni ignorer les cibles suivantes du lot.

Exemple 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"  }}

Commande de politique minimale :

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

Liste d’autorisation des Skills groupés

skills.allowBundledstring[]

Liste d’autorisation facultative pour les Skills groupés uniquement. Une fois définie, seuls les Skills groupés de la liste sont éligibles. Les Skills gérés, au niveau de l’agent et de l’espace de travail ne sont pas affectés.

Entrées par Skill (skills.entries)

Les clés sous entries correspondent par défaut au name du Skill. Si un Skill définit metadata.openclaw.skillKey, utilisez cette clé à la place. Mettez les noms avec trait d’union entre guillemets (JSON5 autorise les clés entre guillemets).

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .enabled" type="boolean"> false désactive le Skill même lorsqu’il est groupé ou installé. Le Skill groupé coding-agent est opt-in — définissez-le sur true et assurez-vous que l’un de claude, codex, opencode ou une autre CLI prise en charge est installé et authentifié.

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .apiKey" type='string | { source, provider, id }'> Champ pratique pour les Skills qui déclarent metadata.openclaw.primaryEnv. Prend en charge une chaîne en clair ou un SecretRef : { source: "env", provider: "default", id: "VAR_NAME" }.

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

Listes d’autorisation des agents (agents)

Utilisez la configuration d’agent lorsque vous voulez les mêmes racines de Skills pour une machine/un espace de travail, mais un ensemble de Skills visible différent par agent.

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

Liste d’autorisation de référence partagée héritée par les agents qui omettent agents.list[].skills. Omettez-la entièrement pour laisser les Skills sans restriction par défaut.

agents.list[].skillsstring[]

Ensemble final explicite de Skills pour cet agent. Les listes explicites remplacent les valeurs par défaut héritées — elles ne fusionnent pas. Définissez sur [] pour n’exposer aucun Skill à cet agent.

Workshop (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

Lorsque true, les agents peuvent créer des propositions en attente à partir de signaux de conversation durables après des tours réussis. La création de Skills demandée par l’utilisateur passe toujours par Skill Workshop, quel que soit ce paramètre.

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

pending exige l’approbation de l’opérateur avant une application, un rejet ou une mise en quarantaine initiés par l’agent. auto autorise ces actions sans approbation.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

Autoriser l’application de Skill Workshop à écrire à travers les liens symboliques de Skills de l’espace de travail dont la cible réelle est déjà approuvée par skills.load.allowSymlinkTargets. Gardez cette option désactivée sauf si les applications de propositions générées doivent modifier cette racine de Skill partagée.

skills.workshop.maxPendingnumberdefault: 50

Nombre maximal de propositions en attente et mises en quarantaine conservées par espace de travail.

skills.workshop.maxSkillBytesnumberdefault: 40000

Taille maximale du corps de proposition en octets. Les descriptions de propositions sont strictement limitées à 160 octets, car elles apparaissent dans la découverte et la sortie de listage.

Racines de Skills liées par lien symbolique

Par défaut, les racines de Skills d’espace de travail, d’agent de projet, de répertoire supplémentaire et groupées sont des limites de confinement. Un dossier de Skill lié par lien symbolique sous <workspace>/skills qui se résout en dehors de la racine est ignoré avec un message de journal.

Pour autoriser une disposition intentionnelle avec lien symbolique, déclarez la cible approuvée :

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

Avec cette configuration, <workspace>/skills/manager -> ~/Projects/manager/skills est accepté après résolution realpath. extraDirs analyse directement le dépôt voisin ; allowSymlinkTargets préserve le chemin lié par lien symbolique pour les dispositions existantes.

Par défaut, l’application de Skill Workshop n’écrit pas à travers ces liens symboliques. Pour permettre à Workshop apply de modifier des Skills sous des cibles de liens symboliques déjà approuvées, activez cette option séparément :

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

Les répertoires gérés ~/.openclaw/skills et personnels ~/.agents/skills acceptent déjà les liens symboliques de répertoires de Skills (le confinement SKILL.md par Skill s’applique toujours).

Skills sandboxés et variables d’environnement

Transmettez des secrets à un sandbox Docker avec :

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

Rappel de l’ordre de chargement

text
workspace/skills      (highest)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsbundled skillsskills.load.extraDirs (lowest)

Les modifications apportées aux Skills et à la configuration prennent effet lors de la nouvelle session suivante lorsque le watcher est activé, ou lors du tour d’agent suivant lorsque le watcher détecte une modification.

Associés

Was this useful?
On this page

On this page