Skills

Skills-Konfiguration

Der Großteil der Skills-Konfiguration befindet sich unter skills in ~/.openclaw/openclaw.json. Agent-spezifische Sichtbarkeit befindet sich unter agents.defaults.skills und 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 },    },  },}

Laden (skills.load)

skills.load.extraDirsstring[]

Zusätzliche Skill-Verzeichnisse, die mit der niedrigsten Priorität durchsucht werden (nach gebündelten Skills und Plugin-Skills). Pfade werden mit Unterstützung für ~ erweitert.

skills.load.allowSymlinkTargetsstring[]

Vertrauenswürdige reale Zielverzeichnisse, in die symbolisch verknüpfte Skill-Ordner aufgelöst werden dürfen, auch wenn der Symlink außerhalb des konfigurierten Stammverzeichnisses liegt. Verwenden Sie dies für bewusst angelegte Layouts mit benachbarten Repositorys wie <workspace>/skills/manager -> ~/Projects/manager/skills. Halten Sie diese Liste eng gefasst — verweisen Sie nicht auf breite Stammverzeichnisse wie ~ oder ~/Projects.

skills.load.watchbooleandefault: true

Skill-Ordner überwachen und den Skills-Snapshot aktualisieren, wenn sich SKILL.md-Dateien ändern. Deckt verschachtelte Dateien unter gruppierten Skill-Stammverzeichnissen ab.

skills.load.watchDebounceMsnumberdefault: 250

Debounce-Fenster für Skill-Watcher-Ereignisse in Millisekunden.

Installieren (skills.install)

skills.install.preferBrewbooleandefault: true

Homebrew-Installer bevorzugen, wenn brew verfügbar ist.

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

Bevorzugter Node-Paketmanager für Skill-Installationen. Dies betrifft nur Skill-Installationen — die Gateway-Laufzeit sollte weiterhin Node verwenden (Bun wird für WhatsApp/Telegram nicht empfohlen). Verwenden Sie openclaw setup --node-manager für npm, pnpm oder bun; setzen Sie "yarn" manuell für Yarn-gestützte Skill-Installationen.

skills.install.allowUploadedArchivesbooleandefault: false

Vertrauenswürdigen operator.admin-Gateway-Clients erlauben, private Zip-Archive zu installieren, die über skills.upload.* bereitgestellt wurden. Normale ClawHub-Installationen benötigen diese Einstellung nicht.

Operator-Installationsrichtlinie (security.installPolicy)

Verwenden Sie security.installPolicy, wenn Operatoren einen vertrauenswürdigen lokalen Befehl benötigen, um Skill- und Plugin-Installationen mit hostspezifischer Richtlinie zu genehmigen oder zu blockieren. Die Richtlinie wird ausgeführt, nachdem OpenClaw Quellmaterial bereitgestellt hat und bevor die Installation oder Aktualisierung fortgesetzt wird. Sie gilt für ClawHub-Skills, hochgeladene Skills, Git-/lokale Skills, Skill-Abhängigkeitsinstaller sowie Quellen für Plugin-Installationen und -Aktualisierungen.

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

Aktiviert die vom Operator verwaltete Installationsrichtlinie. Wenn sie ohne gültigen exec-Befehl aktiviert ist, schlagen Installationen geschlossen fehl.

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

Optionaler Zielfilter. Wenn ausgelassen, gilt die Richtlinie für jedes unterstützte Ziel, damit neue Installationen nicht unerwartet offen fehlschlagen.

security.installPolicy.exec.commandstring

Absoluter Pfad zur vertrauenswürdigen ausführbaren Richtliniendatei. OpenClaw führt sie ohne Shell aus und validiert den Pfad vor der Verwendung.

security.installPolicy.exec.argsstring[]

Statische Argumente, die nach command übergeben werden.

security.installPolicy.exec.timeoutMsnumberdefault: 10000

Maximale Wanduhr-Laufzeit für eine Richtlinienentscheidung.

security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMs

Maximale Zeit ohne stdout- oder stderr-Ausgabe, bevor die Richtlinie geschlossen fehlschlägt.

security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576

Maximal akzeptierte kombinierte stdout- und stderr-Bytes vom Richtlinienprozess.

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

Namen von Umgebungsvariablen, die aus dem OpenClaw-Prozess in den Richtlinienprozess kopiert werden. Nur benannte Variablen werden übergeben.

security.installPolicy.exec.trustedDirsstring[]

Optionale Zulassungsliste von Verzeichnissen, die die ausführbare Richtliniendatei enthalten dürfen.

security.installPolicy.exec.allowInsecurePathbooleandefault: false

Umgeht Prüfungen von Eigentümerschaft und Berechtigungen des Befehlspfads. Nur verwenden, wenn der Pfad durch einen anderen Mechanismus geschützt ist.

security.installPolicy.exec.allowSymlinkCommandbooleandefault: false

Erlaubt, dass der konfigurierte Befehlspfad ein Symlink ist. Das aufgelöste Ziel muss weiterhin die anderen Pfadprüfungen erfüllen. Argumente für Interpreter-Skripte müssen direkte reguläre Dateien sein, keine Symlinks.

Die Richtlinie erhält ein JSON-Objekt auf stdin mit protocolVersion: 1, openclawVersion, targetType, targetName, sourcePath, sourcePathKind, optionalem strukturiertem source, strukturiertem origin und request. Sie muss ein JSON-Objekt auf stdout schreiben: { "protocolVersion": 1, "decision": "allow" } oder { "protocolVersion": 1, "decision": "block", "reason": "..." }. Exit ungleich null, Timeout, fehlerhaftes JSON, fehlende Felder oder nicht unterstützte Protokollversionen schlagen geschlossen fehl.

OpenClaw führt die Installationsrichtlinie beim normalen Gateway-Start nicht aus. Installationen und Aktualisierungen schlagen geschlossen fehl, wenn die Richtlinie aktiviert, aber nicht verfügbar ist. openclaw doctor führt eine statische Validierung durch, und openclaw doctor --deep führt eine synthetische Installationsprüfung gegen den konfigurierten Befehl aus.

Massenaktualisierungen wenden die Richtlinie pro Ziel an: Eine blockierte Skill- oder Plugin-Aktualisierung schlägt für dieses Ziel fehl, ohne die Richtlinie zu deaktivieren oder spätere Ziele im Batch zu überspringen.

Beispiel für 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"  }}

Minimaler Richtlinienbefehl:

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

Zulassungsliste für gebündelte Skills

skills.allowBundledstring[]

Optionale Zulassungsliste nur für gebündelte Skills. Wenn gesetzt, sind nur gebündelte Skills in der Liste zulässig. Verwaltete Skills, agentenbezogene Skills und Workspace-Skills bleiben unberührt.

Einträge pro Skill (skills.entries)

Schlüssel unter entries entsprechen standardmäßig dem Skill-name. Wenn ein Skill metadata.openclaw.skillKey definiert, verwenden Sie stattdessen diesen Schlüssel. Setzen Sie Namen mit Bindestrich in Anführungszeichen (JSON5 erlaubt Schlüssel in Anführungszeichen).

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .enabled" type="boolean"> false deaktiviert den Skill, selbst wenn er gebündelt oder installiert ist. Der gebündelte Skill coding-agent ist Opt-in — setzen Sie ihn auf true und stellen Sie sicher, dass claude, codex, opencode oder eine andere unterstützte CLI installiert und authentifiziert ist.

OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk .apiKey" type='string | { source, provider, id }'> Komfortfeld für Skills, die metadata.openclaw.primaryEnv deklarieren. Unterstützt eine Klartextzeichenfolge oder eine SecretRef: { source: "env", provider: "default", id: "VAR_NAME" }.

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

Agent-Zulassungslisten (agents)

Verwenden Sie die Agentenkonfiguration, wenn Sie dieselben Skill-Stammverzeichnisse für Maschine/Workspace, aber pro Agent einen anderen sichtbaren Skill-Satz verwenden möchten.

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

Gemeinsame Basis-Zulassungsliste, die von Agenten geerbt wird, die agents.list[].skills auslassen. Ganz auslassen, damit Skills standardmäßig nicht eingeschränkt werden.

agents.list[].skillsstring[]

Expliziter endgültiger Skill-Satz für diesen Agenten. Explizite Listen ersetzen geerbte Standardwerte — sie werden nicht zusammengeführt. Auf [] setzen, um für diesen Agenten keine Skills verfügbar zu machen.

Workshop (skills.workshop)

skills.workshop.autonomous.enabledbooleandefault: false

Wenn true, können Agenten nach erfolgreichen Durchläufen aus dauerhaften Gesprächssignalen ausstehende Vorschläge erstellen. Vom Benutzer ausgelöste Skill-Erstellung läuft unabhängig von dieser Einstellung immer über Skill Workshop.

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

pending erfordert die Genehmigung durch eine Bedienperson, bevor ein vom Agent initiiertes Anwenden, Ablehnen oder Quarantänisieren erfolgt. auto erlaubt diese Aktionen ohne Genehmigung.

skills.workshop.allowSymlinkTargetWritesbooleandefault: false

Erlauben Sie Skill Workshop Apply, über Workspace-Skill-Symlinks zu schreiben, deren echtes Ziel bereits durch skills.load.allowSymlinkTargets als vertrauenswürdig eingestuft ist. Lassen Sie dies deaktiviert, außer angewendete generierte Vorschläge sollen diesen gemeinsamen Skill- Root verändern.

skills.workshop.maxPendingnumberdefault: 50

Maximale Anzahl ausstehender und quarantänisierter Vorschläge, die pro Workspace aufbewahrt werden.

skills.workshop.maxSkillBytesnumberdefault: 40000

Maximale Größe des Vorschlagstexts in Byte. Vorschlagsbeschreibungen sind hart auf 160 Byte begrenzt, da sie in Discovery- und Listen-Ausgaben erscheinen.

Standardmäßig sind Workspace-, Projekt-Agent-, Extra-Verzeichnis- und gebündelte Skill-Roots Einschlussgrenzen. Ein per Symlink verknüpfter Skill-Ordner unter <workspace>/skills, der außerhalb des Roots aufgelöst wird, wird mit einer Logmeldung übersprungen.

Um ein beabsichtigtes Symlink-Layout zu erlauben, deklarieren Sie das vertrauenswürdige Ziel:

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

Mit dieser Konfiguration wird <workspace>/skills/manager -> ~/Projects/manager/skills nach der Realpath-Auflösung akzeptiert. extraDirs scannt das benachbarte Repo direkt; allowSymlinkTargets behält den Symlink-Pfad für bestehende Layouts bei.

Skill Workshop Apply schreibt standardmäßig nicht über diese Symlinks. Damit Workshop Apply Skills unter bereits vertrauenswürdigen Symlink-Zielen verändern darf, aktivieren Sie dies separat:

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

Verwaltete Verzeichnisse ~/.openclaw/skills und persönliche Verzeichnisse ~/.agents/skills akzeptieren bereits Skill-Verzeichnis-Symlinks (die Einschlussregel pro Skill-SKILL.md gilt weiterhin).

Sandboxed Skills und Umgebungsvariablen

Übergeben Sie Secrets mit Folgendem an eine Docker-Sandbox:

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

Hinweis zur Ladereihenfolge

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

Änderungen an Skills und Konfiguration werden in der nächsten neuen Sitzung wirksam, wenn der Watcher aktiviert ist, oder im nächsten Agent-Turn, wenn der Watcher eine Änderung erkennt.

Verwandte Themen

Was this useful?
On this page

On this page