Zum Hauptinhalt springen
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.
{
  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 },
    },
  },
}
Für die integrierte Bildgenerierung verwenden Sie agents.defaults.imageGenerationModel zusammen mit dem zentralen Tool image_generate statt skills.entries. Skill-Einträge sind nur für benutzerdefinierte oder Drittanbieter-Skill-Workflows vorgesehen.

Laden (skills.load)

skills.load.extraDirs
string[]
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.
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.watch
boolean
Standard:"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.watchDebounceMs
number
Standard:"250"
Debounce-Fenster für Skill-Watcher-Ereignisse in Millisekunden.

Installieren (skills.install)

skills.install.preferBrew
boolean
Standard:"true"
Homebrew-Installer bevorzugen, wenn brew verfügbar ist.
skills.install.nodeManager
"npm" | "pnpm" | "yarn" | "bun"
Standard:"\"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.allowUploadedArchives
boolean
Standard:"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.
{
  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.enabled
boolean
Standard:"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.command
string
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.args
string[]
Statische Argumente, die nach command übergeben werden.
security.installPolicy.exec.timeoutMs
number
Standard:"10000"
Maximale Wanduhr-Laufzeit für eine Richtlinienentscheidung.
security.installPolicy.exec.noOutputTimeoutMs
number
Standard:"timeoutMs"
Maximale Zeit ohne stdout- oder stderr-Ausgabe, bevor die Richtlinie geschlossen fehlschlägt.
security.installPolicy.exec.maxOutputBytes
number
Standard:"1048576"
Maximal akzeptierte kombinierte stdout- und stderr-Bytes vom Richtlinienprozess.
security.installPolicy.exec.env
Record<string, string>
Literale Umgebungsvariablen, die dem Richtlinienprozess bereitgestellt werden.
security.installPolicy.exec.passEnv
string[]
Namen von Umgebungsvariablen, die aus dem OpenClaw-Prozess in den Richtlinienprozess kopiert werden. Nur benannte Variablen werden übergeben.
security.installPolicy.exec.trustedDirs
string[]
Optionale Zulassungsliste von Verzeichnissen, die die ausführbare Richtliniendatei enthalten dürfen.
security.installPolicy.exec.allowInsecurePath
boolean
Standard:"false"
Umgeht Prüfungen von Eigentümerschaft und Berechtigungen des Befehlspfads. Nur verwenden, wenn der Pfad durch einen anderen Mechanismus geschützt ist.
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:
{
  "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:
#!/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.allowBundled
string[]
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).
skills.entries.<key>.enabled
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.
skills.entries.<key>.apiKey
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>.env
Record<string, string>
Umgebungsvariablen, die für den Agentenlauf injiziert werden. Nur injiziert, wenn die Variable im Prozess noch nicht gesetzt ist.
skills.entries.<key>.config
object
Optionale Sammlung für benutzerdefinierte Konfigurationsfelder pro Skill.

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.
{
  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.skills
string[]
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[].skills
string[]
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.
Agent-Skill-Zulassungslisten sind ein Sichtbarkeits- und Ladefilter für die Skill-Erkennung von OpenClaw, Prompts, Slash-Command-Erkennung, Sandbox-Synchronisierung und Skill-Snapshots. Sie sind keine Autorisierungsgrenze zur Shell-Laufzeit. Wenn ein Agent Host-exec ausführen kann, kann diese Shell weiterhin externe Clients ausführen oder Host-Dateien lesen, die für den ausführenden Benutzer sichtbar sind, einschließlich MCP-Client-Registrierungen wie ~/.openclaw/skills/config/mcporter.json. Für MCP-Isolation pro Agent kombinieren Sie Skill-Zulassungslisten mit Sandbox-/OS-Benutzer-Isolation, verweigern oder beschränken Sie Host-Exec streng per Zulassungsliste und bevorzugen Sie agentenspezifische Anmeldedaten am MCP-Server.

Workshop (skills.workshop)

skills.workshop.autonomous.enabled
boolean
Standard:"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"
Standard:"\"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.
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.maxPending
number
Standard:"50"
Maximale Anzahl ausstehender und quarantänisierter Vorschläge, die pro Workspace aufbewahrt werden.
skills.workshop.maxSkillBytes
number
Standard:"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:
{
  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:
{
  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

skills.entries.<skill>.env und apiKey gelten nur für Host-Ausführungen. Innerhalb einer Sandbox haben sie keine Wirkung — ein Skill, der von GEMINI_API_KEY abhängt, schlägt mit apiKey not configured fehl, sofern der Sandbox die Variable nicht separat übergeben wird.
Übergeben Sie Secrets mit Folgendem an eine Docker-Sandbox:
{
  agents: {
    defaults: {
      sandbox: {
        docker: {
          env: { GEMINI_API_KEY: "your-key-here" },
        },
      },
    },
  },
}
Benutzer mit Zugriff auf den Docker-Daemon können sandbox.docker.env-Werte über Docker-Metadaten einsehen. Verwenden Sie eine eingehängte Secret-Datei, ein benutzerdefiniertes Image oder einen anderen Bereitstellungspfad, wenn diese Offenlegung nicht akzeptabel ist.

Hinweis zur Ladereihenfolge

workspace/skills      (highest)
workspace/.agents/skills
~/.agents/skills
~/.openclaw/skills
bundled skills
skills.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

Skills-Referenz

Was Skills sind, Ladereihenfolge, Gating und das Format von SKILL.md.

Skills erstellen

Benutzerdefinierte Workspace-Skills erstellen.

Skill Workshop

Vorschlagswarteschlange für vom Agent entworfene Skills.

Slash-Befehle

Nativer Slash-Befehlskatalog und Chat-Direktiven.