Skills

Configuration des Skills

La plupart des paramètres de configuration des Skills se trouvent sous skills dans ~/.openclaw/openclaw.json. La visibilité propre à chaque agent 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: "auto",      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 faible (après les Skills intégrés et ceux des Plugins). 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 liés symboliquement peuvent pointer, même lorsque le lien symbolique se trouve hors de la racine configurée. Utilisez ce paramètre pour les structures intentionnelles de dépôts frères telles que <workspace>/skills/manager -> ~/Projects/manager/skills. Limitez strictement cette liste — n’indiquez pas de racines étendues comme ~ ou ~/Projects.

skills.load.watchbooleandefault: true

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

skills.load.watchDebounceMsnumberdefault: 250

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

Installation (skills.install)

skills.install.preferBrewbooleandefault: true

Privilégie les programmes d’installation Homebrew lorsque brew est disponible.

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

Préférence de gestionnaire de paquets Node pour l’installation des Skills. Cela concerne uniquement l’installation des Skills : la CLI OpenClaw et l’environnement d’exécution du Gateway nécessitent Node, car le magasin d’état canonique utilise node:sqlite. openclaw setup --node-manager et openclaw onboard --node-manager acceptent npm, pnpm ou bun ; définissez "yarn" directement dans la configuration 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 ordinaires ne nécessitent pas ce paramètre.

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

Utilisez security.installPolicy lorsque les opérateurs ont besoin d’une commande locale approuvée pour autoriser ou bloquer l’installation de Skills et de Plugins selon une politique propre à l’hôte. La politique s’exécute après qu’OpenClaw a préparé les fichiers sources et avant la poursuite de l’installation ou de la mise à jour. Elle s’applique aux Skills ClawHub, aux Skills téléversés, aux Skills Git/locaux, aux programmes d’installation des dépendances de Skills et aux sources d’installation ou de mise à jour des 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 gérée par l’opérateur. Lorsqu’elle est activée sans commande exec valide, les installations sont bloquées par défaut.

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

Filtre de cibles facultatif. Lorsqu’il est omis, la politique s’applique à toutes les cibles prises en charge afin que les nouvelles installations ne soient pas autorisées par défaut de manière 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 de l’utiliser.

security.installPolicy.exec.argsstring[]

Arguments statiques transmis après command.

security.installPolicy.exec.timeoutMsnumberdefault: 10000

Durée d’exécution réelle maximale d’une décision de politique.

security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMs

Durée maximale sans sortie sur stdout ou stderr avant le blocage par défaut de la politique.

security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576

Nombre maximal d’octets combinés de stdout et stderr acceptés du 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 toujours satisfaire les autres vérifications de chemin. Les arguments de script d’interpréteur doivent être des fichiers ordinaires directs, et non des liens symboliques.

La politique reçoit sur stdin un objet JSON comprenant protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, un champ structuré facultatif source, un champ structuré origin et request. Elle doit écrire un objet JSON sur stdout : { "protocolVersion": 1, "decision": "allow" } ou { "protocolVersion": 1, "decision": "block", "reason": "..." }. Un code de sortie différent de zéro, un dépassement de délai, un JSON mal formé, des champs manquants ou des versions de protocole non prises en charge entraînent un blocage par défaut.

OpenClaw n’exécute pas la politique d’installation au démarrage normal du Gateway. Les installations et les mises à jour sont bloquées par défaut lorsque la politique est activée mais indisponible. openclaw doctor effectue une validation statique ; openclaw doctor --deep exécute une sonde d’installation synthétique avec la commande configurée.

Les mises à jour groupées appliquent la politique à chaque cible : le blocage de la mise à jour d’un Skill ou d’un Plugin fait échouer cette cible sans désactiver la politique ni ignorer les cibles suivantes du lot.

Exemple d’entrée 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 intégrés

skills.allowBundledstring[]

Liste d’autorisation facultative réservée aux Skills intégrés. Lorsqu’elle est définie, seuls les Skills intégrés figurant dans la liste sont admissibles. Les Skills gérés, propres aux agents et de l’espace de travail ne sont pas concernés.

Entrées par Skill (skills.entries)

Les clés sous entries correspondent par défaut au champ name du Skill. Si un Skill définit metadata.openclaw.skillKey, utilisez cette clé à la place. Placez les noms contenant des traits 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 s’il est intégré ou installé. Le Skill intégré coding-agent est facultatif : définissez-le sur true et assurez-vous que l’un des outils 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. Accepte une chaîne en texte brut ou une 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 de l’agent lorsque vous souhaitez conserver les mêmes racines de Skills pour la machine ou l’espace de travail, mais définir un ensemble de Skills visibles différent pour chaque 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 ne pas restreindre les Skills par défaut.

agents.list[].skillsstring[]

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

Atelier (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

Lorsque true, OpenClaw peut créer des propositions en attente à partir de corrections durables et peut examiner les travaux achevés substantiels et réussis une fois que le système devient inactif. Cela peut ajouter une exécution du modèle en arrière-plan après les tours admissibles. La création de Skills demandée par l’utilisateur et /learn continuent de fonctionner lorsque le paramètre est défini sur false.

Consultez Auto-apprentissage pour connaître les critères d’admissibilité, la confidentialité, le coût, les autorisations limitées aux propositions et la résolution des problèmes.

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

auto permet à l’agent d’appliquer, de rejeter ou de mettre en quarantaine sans demande d’approbation supplémentaire. pending exige l’approbation de l’opérateur.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

Autorise l’application de Skill Workshop à écrire par l’intermédiaire des liens symboliques de Skills de l’espace de travail dont la cible réelle est déjà approuvée par skills.load.allowSymlinkTargets. Laissez cette option désactivée, sauf si l’application des propositions générées doit modifier cette racine de Skills partagée.

skills.workshop.maxPendingnumberdefault: 50

Nombre maximal de propositions en attente et mises en quarantaine conservées par espace de travail (plage autorisée : 1-200).

skills.workshop.maxSkillBytesnumberdefault: 40000

Taille maximale du corps d’une proposition en octets (plage autorisée : 1024-200000). Les descriptions des propositions sont plafonnées séparément à 160 octets, car elles apparaissent dans les résultats de découverte et de liste.

Consultez Skill Workshop pour connaître le cycle de vie des propositions, les commandes CLI, les paramètres des outils de l’agent et les méthodes du Gateway contrôlés par cette configuration.

Racines de Skills liées symboliquement

Par défaut, les racines de Skills de l’espace de travail, de l’agent de projet, des répertoires supplémentaires et des Skills intégrés constituent des limites de confinement. Un dossier de Skill lié symboliquement sous <workspace>/skills qui se résout hors de la racine est ignoré et un message est consigné dans le journal.

Pour autoriser intentionnellement une structure de liens symboliques, 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 la résolution du chemin réel. extraDirs analyse directement le dépôt voisin ; allowSymlinkTargets conserve le chemin lié symboliquement pour les structures existantes.

Par défaut, l’application de Skill Workshop n’écrit pas par l’intermédiaire de ces liens symboliques. Pour permettre à l’application de Workshop de modifier les 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 ~/.openclaw/skills gérés et ~/.agents/skills personnels acceptent déjà sans condition les liens symboliques vers des répertoires de Skills (le confinement SKILL.md par Skill reste applicable) — allowSymlinkTargets n’est nécessaire que pour les racines de l’espace de travail, des répertoires supplémentaires et de l’agent de projet (<workspace>/.agents/skills).

Skills en bac à sable et variables d’environnement

Transmettez des secrets à un bac à sable Docker avec :

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

Rappel de l’ordre de chargement

text
workspace/skills      (priorité la plus élevée)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsSkills intégrésskills.load.extraDirs (priorité la plus faible)

Les modifications apportées aux Skills et à la configuration prennent effet lors de la prochaine nouvelle session si l’observateur est activé, ou lors du prochain tour de l’agent lorsque l’observateur détecte une modification.

Voir aussi

Was this useful?
On this page

On this page