Skills
Skills 設定
Skills の設定の大半は ~/.openclaw/openclaw.json 内の
skills にあります。エージェント固有の可視性は
agents.defaults.skills と agents.entries.*.skills にあります。
{ skills: { allowBundled: ["gemini", "peekaboo"], load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], watch: true, }, 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 }, }, },}読み込み(skills.load)
skills.load.extraDirsstring[]スキャン対象に追加する Skill ディレクトリです。優先順位は最も低く(バンドルおよび
Plugin の Skills より下)、パスは ~ をサポートして展開されます。
skills.load.allowSymlinkTargetsstring[]シンボリックリンクされた Skill フォルダーの解決先として許可する、信頼済みの実体ディレクトリです。
シンボリックリンクが設定済みルートの外部にある場合でも使用できます。
<workspace>/skills/manager -> ~/Projects/manager/skills のような意図的な兄弟リポジトリ構成に使用してください。
このリストは限定的に保ち、~ や ~/Projects のような
広範なルートを指定しないでください。
skills.load.watchbooleandefault: trueSkill フォルダーを監視し、SKILL.md ファイルが変更されたときに
Skills のスナップショットを更新します。グループ化された Skill ルート配下のネストされたファイルも対象です。
インストール(skills.install)
skills.install.preferBrewbooleandefault: truebrew が利用可能な場合は、Homebrew インストーラーを優先します。
skills.install.nodeManager"npm" | "pnpm" | "yarn" | "bun"default: "npm"Skill のインストールに使用する Node パッケージマネージャーの優先設定です。これは Skill の
インストールのみに影響します。正規の状態ストアが node:sqlite を使用するため、
OpenClaw CLI と Gateway ランタイムには Node が必要です。openclaw setup --node-manager と
openclaw onboard --node-manager は npm、pnpm、bun を受け付けます。
Yarn を使用する Skill のインストールでは、設定内で "yarn" を直接指定してください。
skills.install.allowUploadedArchivesbooleandefault: false信頼済みの operator.admin Gateway クライアントが、skills.upload.* を通じて
ステージングされた非公開 zip アーカイブをインストールできるようにします。
通常の ClawHub インストールでは、この設定は不要です。
オペレーターのインストールポリシー(security.installPolicy)
ホスト固有のポリシーに基づいて Skill と Plugin のインストールを承認またはブロックする、
信頼済みのローカルコマンドがオペレーターに必要な場合は、security.installPolicy を使用します。
このポリシーは、OpenClaw がソース素材をステージングした後、インストールまたは更新を続行する前に実行されます。
ClawHub の Skills、アップロードされた Skills、Git/ローカルの Skills、Skill の依存関係インストーラー、
および Plugin のインストール/更新ソースに適用されます。
{ security: { installPolicy: { enabled: true, // サポートされているすべての対象を含める場合は、targets を省略します。 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オペレーターが管理するインストールポリシーを有効にします。有効な exec
コマンドがない状態で有効にすると、インストールはフェイルクローズします。
security.installPolicy.targets("skill" | "plugin")[]省略可能な対象フィルターです。省略した場合は、すべてのサポート対象にポリシーが適用されるため、 新しいインストールが予期せずフェイルオープンすることはありません。
security.installPolicy.exec.commandstring信頼済みポリシー実行ファイルへの絶対パスです。OpenClaw はシェルを介さずに実行し、 使用前にパスを検証します。
security.installPolicy.exec.argsstring[]command の後に渡す固定引数です。
security.installPolicy.exec.timeoutMsnumberdefault: 100001 回のポリシー判定に許可する最大実時間です。
security.installPolicy.exec.noOutputTimeoutMsnumberdefault: timeoutMsstdout または stderr からの出力がない状態で許可する最大時間です。 超過するとポリシーはフェイルクローズします。
security.installPolicy.exec.maxOutputBytesnumberdefault: 1048576ポリシープロセスから受け付ける stdout と stderr の合計最大バイト数です。
security.installPolicy.exec.env"Record<string,security.installPolicy.exec.passEnvstring[]OpenClaw プロセスからポリシープロセスへコピーする環境変数名です。 指定された変数のみが渡されます。
security.installPolicy.exec.trustedDirsstring[]ポリシー実行ファイルの配置を許可するディレクトリの省略可能な許可リストです。
security.installPolicy.exec.allowInsecurePathbooleandefault: falseコマンドパスの所有権および権限チェックを回避します。 パスが別の仕組みによって保護されている場合にのみ使用してください。
security.installPolicy.exec.allowSymlinkCommandbooleandefault: false設定されたコマンドパスがシンボリックリンクであることを許可します。解決後の対象は、 引き続き他のパスチェックを満たす必要があります。インタープリターのスクリプト引数は、 シンボリックリンクではなく、直接の通常ファイルでなければなりません。
ポリシーは stdin で、protocolVersion: 1、openclawVersion、targetType、
targetName、sourcePath、sourcePathKind、省略可能な構造化
source、構造化 origin、および request を含む
1 つの JSON オブジェクトを受け取ります。stdout には、{ "protocolVersion": 1, "decision": "allow" }
または { "protocolVersion": 1, "decision": "block", "reason": "..." } の 1 つの JSON オブジェクトを書き込む必要があります。
ゼロ以外の終了コード、タイムアウト、不正な JSON、フィールド不足、または未対応のプロトコルバージョンでは
フェイルクローズします。
OpenClaw は通常の Gateway 起動時にはインストールポリシーを実行しません。
ポリシーが有効であるにもかかわらず利用できない場合、インストールと更新はフェイルクローズします。
openclaw doctor は静的検証を実行し、openclaw doctor --deep は
設定されたコマンドに対して合成インストールプローブを実行します。
一括更新では対象ごとにポリシーが適用されます。ブロックされた Skill または Plugin の更新は、 ポリシーを無効化したり、バッチ内の後続対象をスキップしたりすることなく、その対象のみ失敗します。
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" }}最小限のポリシーコマンド:
#!/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: "このホストではローカル Plugin パスは承認されていません", }), ); return; } process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));});バンドルされた Skill の許可リスト
skills.allowBundledstring[]バンドルされた Skills のみに適用される省略可能な許可リストです。設定すると、 リスト内のバンドルされた Skills のみが使用可能になります。管理対象、エージェントレベル、 およびワークスペースの Skills には影響しません。
Skill ごとのエントリ(skills.entries)
entries 配下のキーは、デフォルトでは Skill の name と一致します。
Skill が metadata.openclaw.skillKey を定義している場合は、代わりにそのキーを使用します。
ハイフンを含む名前は引用符で囲んでください(JSON5 では引用符付きキーを使用できます)。
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.enabled" type="boolean">
false にすると、バンドル済みまたはインストール済みであっても Skill を無効にします。
バンドルされた coding-agent Skill はオプトインです。true に設定し、
claude、codex、opencode、または別のサポート対象 CLI のいずれかが
インストールおよび認証済みであることを確認してください。
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9InNraWxscy5lbnRyaWVzLjxrZXk
.apiKey" type='string | { source, provider, id }'>
metadata.openclaw.primaryEnv を宣言する Skills 向けの便利なフィールドです。
平文文字列または SecretRef({ source: "env", provider: "default", id: "VAR_NAME" })をサポートします。
"skills.entries.<key�����r�"skills.entries.<key�w₫��ܩエージェントの許可リスト(agents)
同じマシン/ワークスペースの Skill ルートを使用しながら、エージェントごとに表示する Skill セットを 変えたい場合は、エージェント設定を使用します。
{ agents: { defaults: { skills: ["github", "weather"], // 共有ベースライン }, list: [ { id: "writer" }, // github、weather を継承 { id: "docs", skills: ["docs-search"] }, // デフォルトを完全に置換 { id: "locked-down", skills: [] }, // Skills なし ], },}agents.defaults.skillsstring[]agents.entries.*.skills を省略したエージェントが継承する共有ベースライン許可リストです。
デフォルトで Skills を制限しない場合は、設定自体を省略してください。
agents.entries.*.skillsstring[]そのエージェントに対する明示的な最終 Skill セットです。明示的なリストは継承したデフォルトを
置き換え、マージしません。そのエージェントに Skills を一切公開しない場合は、
[] に設定します。
Workshop(skills.workshop)
skills.workshop.autonomous.enabledbooleandefault: falsetrue の場合、OpenClaw は永続的な修正から保留中の提案を作成し、
システムがアイドル状態になった後、正常に完了した実質的な作業をレビューできます。
これにより、対象となるターンの後にバックグラウンドでモデルが実行される場合があります。
この設定が false の場合でも、ユーザーが指示した
skill の作成と /learn は引き続き機能します。
対象条件、プライバシー、コスト、提案のみに付与される権限、トラブルシューティングについては、 自己学習を参照してください。
skills.workshop.approvalPolicy"pending" | "auto"default: "auto"auto では、追加の承認プロンプトなしで、エージェントが適用、却下、
または隔離を開始できます。pending ではオペレーターの承認が必要です。
skills.workshop.allowSymlinkTargetWritesbooleandefault: falseSkill Workshop の適用時に、実体のターゲットが skills.load.allowSymlinkTargets によって
すでに信頼されているワークスペース skill のシンボリックリンクを介した書き込みを許可します。
生成された提案の適用によって、その共有 skill ルートを変更する必要がある場合を除き、
この設定は無効のままにしてください。
skills.workshop.maxPendingnumberdefault: 50ワークスペースごとに保持する保留中および隔離済みの提案の最大数 (許容範囲: 1-200)。
skills.workshop.maxSkillBytesnumberdefault: 40000提案本文の最大サイズ(バイト単位、許容範囲: 1024-200000)。 提案の説明は検出結果と一覧出力に表示されるため、これとは別に 160 バイトにハード制限されます。
この設定で制御される提案のライフサイクル、CLI コマンド、エージェントツールのパラメーター、 Gateway メソッドについては、Skill Workshopを参照してください。
シンボリックリンクされた skill ルート
デフォルトでは、ワークスペース、プロジェクトエージェント、追加ディレクトリ、
およびバンドル済みの skill ルートが包含境界になります。<workspace>/skills 配下にある
シンボリックリンクされた skill フォルダーがルート外に解決される場合は、
ログメッセージを出力してスキップされます。
意図的なシンボリックリンク構成を許可するには、信頼するターゲットを宣言します。
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}この設定では、realpath の解決後に <workspace>/skills/manager -> ~/Projects/manager/skills が許可されます。
extraDirs は隣接するリポジトリを直接スキャンし、
allowSymlinkTargets は既存の構成のためにシンボリックリンクされたパスを維持します。
デフォルトでは、Skill Workshop の適用処理はこれらのシンボリックリンクを介して 書き込みません。すでに信頼されているシンボリックリンクのターゲット配下にある skill を Workshop の適用処理で変更できるようにするには、別途オプトインします。
{ skills: { load: { allowSymlinkTargets: ["~/Projects/manager/skills"], }, workshop: { allowSymlinkTargetWrites: true, }, },}管理対象の ~/.openclaw/skills ディレクトリと個人用の ~/.agents/skills
ディレクトリでは、skill ディレクトリのシンボリックリンクがすでに無条件で許可されています
(skill ごとの SKILL.md 包含は引き続き適用されます)。
allowSymlinkTargets が必要なのは、ワークスペース、追加ディレクトリ、
およびプロジェクトエージェント(<workspace>/.agents/skills)のルートだけです。
サンドボックス化された skill と環境変数
Docker サンドボックスにシークレットを渡すには、次のようにします。
{ agents: { defaults: { sandbox: { docker: { env: { GEMINI_API_KEY: "your-key-here" }, }, }, }, },}読み込み順序の再確認
workspace/skills (最高)workspace/.agents/skills~/.agents/skills~/.openclaw/skillsバンドル済みの skillskills.load.extraDirs (最低)skill と設定への変更は、ウォッチャーが有効な場合は次の新規セッションで、 またはウォッチャーが変更を検出した場合は次のエージェントターンで反映されます。