メインコンテンツへスキップ
ほとんどの Skills 設定は ~/.openclaw/openclaw.jsonskills 配下にあります。エージェント固有の表示可否は agents.defaults.skillsagents.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 },
    },
  },
}
組み込みの画像生成では、skills.entries ではなく agents.defaults.imageGenerationModel とコアの image_generate ツールを使用します。Skill エントリは、カスタムまたはサードパーティの Skill ワークフロー専用です。

読み込み (skills.load)

skills.load.extraDirs
string[]
追加でスキャンする Skills ディレクトリです。優先順位は最も低くなります(バンドルおよび Plugin Skills より下)。パスは ~ サポート付きで展開されます。
シンボリックリンクされた Skill フォルダの解決先として許可する、信頼済みの実ターゲットディレクトリです。 シンボリックリンクが設定済みルートの外にある場合でも適用されます。これは <workspace>/skills/manager -> ~/Projects/manager/skills のような、 意図的な sibling repo レイアウトに使用します。このリストは狭く保ってください。 ~~/Projects のような広いルートを指さないでください。
skills.load.watch
boolean
デフォルト:"true"
Skill フォルダを監視し、SKILL.md ファイルが変更されたときに Skills スナップショットを更新します。 グループ化された Skill ルート配下のネストされたファイルも対象です。
skills.load.watchDebounceMs
number
デフォルト:"250"
Skill ウォッチャーイベントのデバウンス時間(ミリ秒)です。

インストール (skills.install)

skills.install.preferBrew
boolean
デフォルト:"true"
brew が利用可能な場合は Homebrew インストーラーを優先します。
skills.install.nodeManager
"npm" | "pnpm" | "yarn" | "bun"
デフォルト:"\"npm\""
Skill インストールで使用する Node パッケージマネージャーの優先設定です。これは Skill インストールにのみ影響します。Gateway ランタイムでは引き続き Node を使用する必要があります(Bun は WhatsApp/Telegram には推奨されません)。openclaw setup --node-manageropenclaw onboard --node-managernpmpnpm、または bun を受け付けます。 Yarn ベースの Skill インストールには、設定で直接 "yarn" を指定します。
skills.install.allowUploadedArchives
boolean
デフォルト:"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,
      // 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
デフォルト:"false"
オペレーター所有のインストールポリシーを有効にします。有効化されていて有効な exec コマンドがない場合、インストールはフェイルクローズします。
security.installPolicy.targets
("skill" | "plugin")[]
任意のターゲットフィルターです。省略した場合、新しいインストールが予期せずフェイルオープンしないよう、 サポートされるすべてのターゲットにポリシーが適用されます。
security.installPolicy.exec.command
string
信頼済みポリシー実行ファイルへの絶対パスです。OpenClaw はシェルを使わずに実行し、 使用前にパスを検証します。
security.installPolicy.exec.args
string[]
command の後に渡される静的な引数です。
security.installPolicy.exec.timeoutMs
number
デフォルト:"10000"
1 回のポリシー判定に許可される最大実時間です。
security.installPolicy.exec.noOutputTimeoutMs
number
デフォルト:"timeoutMs"
ポリシーがフェイルクローズするまでに stdout または stderr 出力がない状態で許可される最大時間です。
security.installPolicy.exec.maxOutputBytes
number
デフォルト:"1048576"
ポリシープロセスから受け付ける stdout と stderr の合計最大バイト数です。
security.installPolicy.exec.env
Record<string, string>
ポリシープロセスに提供されるリテラル環境変数です。
security.installPolicy.exec.passEnv
string[]
OpenClaw プロセスからポリシープロセスへコピーされる環境変数名です。 名前が指定された変数のみが渡されます。
security.installPolicy.exec.trustedDirs
string[]
ポリシー実行ファイルを含めることができるディレクトリの任意の許可リスト。
security.installPolicy.exec.allowInsecurePath
boolean
デフォルト:"false"
コマンドパスの所有権と権限チェックをバイパスします。このパスが別の仕組みで 保護されている場合にのみ使用してください。
設定されたコマンドパスをシンボリックリンクにすることを許可します。解決されたターゲットも 他のパスチェックを満たす必要があります。インタープリタースクリプト引数は シンボリックリンクではなく、直接の通常ファイルである必要があります。
ポリシーは stdin で protocolVersion: 1openclawVersiontargetTypetargetNamesourcePathsourcePathKind、 任意の構造化 source、構造化 originrequest を含む1つの JSON オブジェクトを受け取ります。stdout には 1つの JSON オブジェクトを書き込む必要があります: { "protocolVersion": 1, "decision": "allow" } または { "protocolVersion": 1, "decision": "block", "reason": "..." }。非ゼロ 終了、タイムアウト、不正な形式の 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: "local plugin paths are not approved on this host",
      }),
    );
    return;
  }
  process.stdout.write(JSON.stringify({ protocolVersion: 1, decision: "allow" }));
});

バンドル済み skill の許可リスト

skills.allowBundled
string[]
バンドル済み skills のみを対象にする任意の許可リスト。設定すると、 リスト内のバンドル済み skills だけが利用対象になります。管理対象、エージェントレベル、ワークスペースの skills には影響しません。

skill ごとのエントリ (skills.entries)

entries 配下のキーは、デフォルトでは skill の name と一致します。skill が metadata.openclaw.skillKey を定義している場合は、代わりにそのキーを使用します。ハイフンを含む名前は 引用符で囲んでください(JSON5 では引用符付きキーが許可されます)。
skills.entries.<key>.enabled
boolean
false は、バンドル済みまたはインストール済みであっても skill を無効にします。 coding-agent バンドル済み skill はオプトインです — true に設定し、 claudecodexopencode、または別の対応 CLI のいずれかがインストール済みで 認証済みであることを確認してください。
skills.entries.<key>.apiKey
string | { source, provider, id }
metadata.openclaw.primaryEnv を宣言する skills 用の便利なフィールド。 平文文字列または SecretRef をサポートします: { source: "env", provider: "default", id: "VAR_NAME" }
skills.entries.<key>.env
Record<string, string>
エージェント実行に注入される環境変数。変数がプロセス内でまだ設定されていない場合にのみ 注入されます。
skills.entries.<key>.config
object
skill ごとのカスタム設定フィールド用の任意の入れ物。

エージェント許可リスト (agents)

同じマシン/ワークスペースの skill ルートを使いながら、エージェントごとに 異なる表示 skill セットを使いたい場合は、エージェント設定を使用します。
{
  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[]
agents.list[].skills を省略したエージェントが継承する共有ベースライン許可リスト。 デフォルトで skills を制限しない場合は、完全に省略してください。
agents.list[].skills
string[]
そのエージェントに対する明示的な最終 skill セット。明示的なリストは 継承されたデフォルトを置き換えます — マージしません。そのエージェントに skills を公開しない場合は [] に設定します。
エージェント skill 許可リストは、OpenClaw の skill 検出、プロンプト、 スラッシュコマンド検出、サンドボックス同期、skill スナップショットに対する 表示と読み込みのフィルターです。シェル実行時の認可境界ではありません。エージェントが ホストの exec を実行できる場合、そのシェルは引き続き外部クライアントを実行したり、 実行ユーザーから見えるホストファイルを読み取ったりできます。これには ~/.openclaw/skills/config/mcporter.json のような MCP クライアント レジストリも含まれます。エージェントごとの MCP 分離には、skill 許可リストを サンドボックス/OS ユーザー分離と組み合わせ、ホスト exec を拒否するか厳密に許可リスト化し、 MCP サーバーではエージェントごとの認証情報を優先してください。

ワークショップ (skills.workshop)

skills.workshop.autonomous.enabled
boolean
デフォルト:"false"
true の場合、エージェントは成功したターンの後、永続的な会話の シグナルから保留中の提案を作成できます。ユーザーがプロンプトで指示したスキル作成は、 この設定に関係なく常に Skill Workshop を経由します。
skills.workshop.approvalPolicy
"pending" | "auto"
デフォルト:"\"pending\""
pending は、エージェントが開始した適用、拒否、または隔離の前に オペレーターの承認を要求します。auto は、それらの操作を承認なしで許可します。
Skill Workshop の適用で、実体のターゲットがすでに skills.load.allowSymlinkTargets によって信頼されているワークスペースのスキルシンボリックリンクを 経由して書き込めるようにします。生成された提案の適用でその共有スキルルートを変更する必要がない限り、 これは無効のままにしてください。
skills.workshop.maxPending
number
デフォルト:"50"
ワークスペースごとに保持される保留中および隔離済みの提案の最大数 (許可範囲: 1-200)。
skills.workshop.maxSkillBytes
number
デフォルト:"40000"
提案本文の最大サイズ(バイト単位、許可範囲: 1024-200000)。提案の説明は 発見と一覧出力に表示されるため、別途 160 バイトの上限が厳格に適用されます。
この設定が制御する提案ライフサイクル、CLI コマンド、エージェントツールのパラメーター、 Gateway メソッドについては、Skill Workshop を参照してください。

シンボリックリンクされたスキルルート

デフォルトでは、ワークスペース、プロジェクトエージェント、追加ディレクトリ、同梱スキルのルートは 包含境界です。<workspace>/skills 配下のシンボリックリンクされたスキルフォルダーが ルート外に解決される場合、ログメッセージとともにスキップされます。 意図的なシンボリックリンクレイアウトを許可するには、信頼済みターゲットを宣言します。
{
  skills: {
    load: {
      extraDirs: ["~/Projects/manager/skills"],
      allowSymlinkTargets: ["~/Projects/manager/skills"],
    },
  },
}
この設定では、<workspace>/skills/manager -> ~/Projects/manager/skills は realpath 解決後に受け入れられます。extraDirs は隣接するリポジトリを 直接スキャンします。allowSymlinkTargets は既存のレイアウト向けに シンボリックリンクされたパスを保持します。 Skill Workshop の適用は、デフォルトではこれらのシンボリックリンク経由で書き込みません。 Workshop の適用で、すでに信頼済みのシンボリックリンクターゲット配下のスキルを変更できるようにするには、 別途オプトインします。
{
  skills: {
    load: {
      allowSymlinkTargets: ["~/Projects/manager/skills"],
    },
    workshop: {
      allowSymlinkTargetWrites: true,
    },
  },
}
管理対象の ~/.openclaw/skills と個人用の ~/.agents/skills ディレクトリは、 スキルディレクトリのシンボリックリンクをすでに無条件で受け入れます (スキルごとの SKILL.md 包含は引き続き適用されます)。allowSymlinkTargets が必要なのは、 ワークスペース、追加ディレクトリ、プロジェクトエージェント (<workspace>/.agents/skills)のルートのみです。

サンドボックス化されたスキルと環境変数

skills.entries.<skill>.envapiKeyホスト 実行にのみ適用されます。 サンドボックス内では効果がありません。GEMINI_API_KEY に依存するスキルは、 サンドボックスにその変数が別途渡されていない限り、apiKey not configured で失敗します。
Docker サンドボックスにシークレットを渡すには、次を使用します。
{
  agents: {
    defaults: {
      sandbox: {
        docker: {
          env: { GEMINI_API_KEY: "your-key-here" },
        },
      },
    },
  },
}
Docker デーモンへのアクセス権を持つユーザーは、Docker メタデータを通じて sandbox.docker.env の値を検査できます。その公開が許容できない場合は、 マウントされたシークレットファイル、カスタムイメージ、または別の配信経路を使用してください。

読み込み順序のリマインダー

workspace/skills      (highest)
workspace/.agents/skills
~/.agents/skills
~/.openclaw/skills
bundled skills
skills.load.extraDirs (lowest)
Skills と設定への変更は、ウォッチャーが有効な場合は次の新しいセッションで、 またはウォッチャーが変更を検出した場合は次のエージェントターンで有効になります。

関連

Skills reference

Skills とは何か、読み込み順序、ゲーティング、SKILL.md 形式。

Creating skills

カスタムワークスペーススキルの作成。

Skill Workshop

エージェントが下書きしたスキルの提案キュー。

Slash commands

ネイティブのスラッシュコマンドカタログとチャットディレクティブ。