Skills
Skills
Skillsは、エージェントにツールの使い方と使用するタイミングを教えるMarkdown形式の指示ファイルです。各Skillは、YAMLフロントマターとMarkdown本文を含むSKILL.mdファイルが置かれたディレクトリに格納されます。OpenClawは、同梱されたSkillsとローカルのオーバーライドを読み込み、環境、設定、バイナリの有無に基づいて読み込み時にフィルタリングします。
カスタムSkillをゼロから作成してテストします。
エージェントが作成したSkillの提案を確認し、承認します。
skills.*の完全な設定スキーマとエージェント許可リストです。
コミュニティのSkillsを閲覧してインストールします。
読み込み順序
OpenClawは、以下のソースから優先順位の高い順に読み込みます。同じSkill名が複数の場所に存在する場合は、最も優先順位の高いソースが使用されます。
| 優先順位 | ソース | パス |
|---|---|---|
| 1 — 最高 | ワークスペースのSkills | <workspace>/skills |
| 2 | プロジェクトエージェントのSkills | <workspace>/.agents/skills |
| 3 | 個人エージェントのSkills | ~/.agents/skills |
| 4 | 管理対象/ローカルのSkills | ~/.openclaw/skills |
| 5 | 同梱されたSkills | インストールに同梱 |
| 6 — 最低 | 追加ディレクトリ | skills.load.extraDirs + PluginのSkills |
Skillルートではグループ化されたレイアウトを使用できます。OpenClawは、設定されたルート以下(最大6階層)にSKILL.mdがあれば、そのSkillを検出します。
<workspace>/skills/research/SKILL.md ✓ 「research」として検出<workspace>/skills/personal/research/SKILL.md ✓ これも「research」として検出フォルダパスは整理のためだけに使用されます。Skill名とスラッシュコマンドは、フロントマターのnameフィールドから取得されます(nameがない場合はディレクトリ名)。以下のエージェント許可リストも、このnameに対して照合されます。
NodeでホストされるSkills
接続中のヘッドレスNodeは、アクティブなOpenClaw Skillsディレクトリ(既定では~/.openclaw/skills。プロファイル環境によるオーバーライドが適用されます)にインストールされたSkillsを公開できます。Nodeが接続されている間は通常のエージェントSkill一覧に表示され、切断されると表示されなくなります。名前が衝突した場合、ローカルまたはGatewayのSkillはその名前を維持し、NodeのSkillには決定論的なNodeプレフィックス付きの名前が割り当てられます。Nodeホスト型v1では、ディレクトリ名がSkillのフロントマターにあるnameフィールドと一致している必要があります。
SkillエントリにはNodeロケーターが含まれます。そのファイル、相対参照、バイナリはNode上に存在するため、exec host=node node=<node-id>を使用して読み込み、実行してください。Skillファイルを変更した後は、Nodeホストを再起動してください。ペアリングと無効化スイッチについては、Nodesを参照してください。
エージェントごとのSkillsと共有Skills
マルチエージェント構成では、各エージェントにそれぞれ独自のワークスペースがあります。希望する公開範囲に合うパスを使用してください。
| スコープ | パス | 表示対象 |
|---|---|---|
| エージェントごと | <workspace>/skills |
そのエージェントのみ |
| プロジェクトエージェント | <workspace>/.agents/skills |
そのワークスペースのエージェントのみ |
| 個人エージェント | ~/.agents/skills |
このマシン上のすべてのエージェント |
| 共有管理対象 | ~/.openclaw/skills |
このマシン上のすべてのエージェント |
| 追加ディレクトリ | skills.load.extraDirs |
このマシン上のすべてのエージェント |
エージェント許可リスト
Skillの場所(優先順位)とSkillの可視性(どのエージェントが使用できるか)は、別々に制御されます。Skillsがどこから読み込まれたかに関係なく、エージェントに表示されるSkillsを制限するには許可リストを使用します。
{ agents: { defaults: { skills: ["github", "weather"], // 共有ベースライン }, list: [ { id: "writer" }, // github、weatherを継承 { id: "docs", skills: ["docs-search"] }, // 既定値を完全に置換 { id: "locked-down", skills: [] }, // Skillsなし ], },}許可リストのルール
- 既定ですべてのSkillsを無制限にするには、
agents.defaults.skillsを省略します。 agents.defaults.skillsを継承するには、agents.list[].skillsを省略します。- そのエージェントにSkillsを一切公開しない場合は、
agents.list[].skills: []を設定します。 - 空でない
agents.list[].skillsリストが最終的なセットです。既定値とはマージされません。 - 有効な許可リストは、プロンプトの構築、スラッシュコマンドの検出、サンドボックスの同期、Skillスナップショットのすべてに適用されます。
- これはホストシェルの認可境界ではありません。同じエージェントが
execを使用できる場合は、サンドボックス化、OSユーザーの分離、execの拒否/許可リスト、リソースごとの認証情報を使用して、そのシェルを別途制限してください。
PluginとSkills
Pluginは、openclaw.plugin.jsonにskillsディレクトリ(Pluginルートからの相対パス)を列挙することで、独自のSkillsを同梱できます。PluginのSkillsは、そのPluginが有効な場合に読み込まれます。たとえば、ブラウザーPluginには、複数ステップのブラウザー操作に使用するbrowser-automation Skillが同梱されています。
PluginのSkillディレクトリはskills.load.extraDirsと同じ低い優先順位でマージされるため、同名の同梱、管理対象、エージェント、またはワークスペースのSkillがそれらをオーバーライドします。ほかのSkillと同様に、フロントマターのmetadata.openclaw.requiresを使用してPluginのSkill自体の適格性を制御します。
Pluginシステム全体については、Pluginsとツールを参照してください。
Skill Workshop
Skill Workshopは、エージェントとアクティブなSkillファイルの間に置かれる提案キューです。エージェントが再利用可能な作業を見つけると、SKILL.mdに直接書き込む代わりに提案の下書きを作成します。何かが変更される前に、その提案を確認して承認します。
openclaw skills workshop listopenclaw skills workshop inspect <proposal-id>openclaw skills workshop apply <proposal-id>ライフサイクル全体、CLIリファレンス、設定については、Skill Workshopを参照してください。
ClawHubからのインストール
ClawHubは公開Skillsレジストリです。インストールと更新にはopenclaw skillsコマンドを、公開と同期にはclawhub CLIを使用します。
| 操作 | コマンド |
|---|---|
| Skillをワークスペースにインストール | openclaw skills install @owner/<slug> |
| Gitリポジトリからインストール | openclaw skills install git:owner/repo@ref |
| ローカルSkillディレクトリをインストール | openclaw skills install ./path/to/skill --as my-tool |
| すべてのローカルエージェント用にインストール | openclaw skills install @owner/<slug> --global |
| ワークスペースのすべてのSkillsを更新 | openclaw skills update --all |
| 共有管理対象Skillを更新 | openclaw skills update @owner/<slug> --global |
| 共有管理対象のすべてのSkillsを更新 | openclaw skills update --all --global |
| Skillの信頼エンベロープを検証 | openclaw skills verify @owner/<slug> |
| 生成されたSkill Cardを出力 | openclaw skills verify @owner/<slug> --card |
| ClawHub CLI経由で公開/同期 | clawhub sync --all |
インストールの詳細
openclaw skills installは、既定でアクティブなワークスペースのskills/ディレクトリにインストールします。--globalを追加すると、共有の~/.openclaw/skillsディレクトリにインストールされ、エージェント許可リストで制限されない限り、すべてのローカルエージェントに表示されます。
Gitおよびローカルからのインストールでは、ソースルートにSKILL.mdが必要です。有効な場合、スラッグにはSKILL.mdのフロントマターにあるnameが使用され、それ以外の場合はディレクトリ名またはリポジトリ名が使用されます。上書きするには--as <slug>を使用します。
openclaw skills updateが追跡するのはClawHubからのインストールのみです。Gitまたはローカルソースを更新するには、再インストールしてください。
検証とセキュリティスキャン
openclaw skills verify @owner/<slug>は、Skillのclawhub.skill.verify.v1信頼エンベロープをClawHubに要求します。インストール済みのClawHub Skillsは、.clawhub/origin.jsonに記録されたバージョンとレジストリに対して検証されます。
所有者を含まないスラッグも、既存のインストール済みSkillまたは一意に特定できるSkillでは引き続き受け付けられますが、所有者で修飾した参照を使用すると公開者の曖昧さを避けられます。
ClawHubのSkillページでは、インストール前に最新のセキュリティスキャン状態が表示され、VirusTotal、ClawScan、静的解析の詳細ページも提供されます。ClawHubが検証を失敗と判定した場合、コマンドは0以外の終了コードで終了します。公開者は、ClawHubダッシュボードまたはclawhub skill rescan @owner/<slug>を使用して誤検知から復旧できます。
プライベートアーカイブからのインストール
ClawHub以外の配信が必要なGatewayクライアントは、skills.upload.begin、skills.upload.chunk、skills.upload.commitを使用してzip形式のSkillアーカイブをステージングし、その後skills.install({ source: "upload", ... })でインストールできます。この経路は既定で無効になっており、openclaw.jsonでskills.install.allowUploadedArchives: trueを設定する必要があります。通常のClawHubからのインストールでは、この設定は不要です。
セキュリティ
パスの封じ込め
ワークスペース、プロジェクトエージェント、追加ディレクトリでのSkill検出では、skills.load.allowSymlinkTargetsによって対象ルートが明示的に信頼されている場合を除き、解決後のrealpathが設定されたルート内に収まるSkillルートのみを受け付けます。
Skill Workshopは、skills.workshop.allowSymlinkTargetWritesが有効な場合に限り、それらの信頼された対象を通じて書き込みます。
管理対象の~/.openclaw/skillsと個人用の~/.agents/skillsにはシンボリックリンクされたSkillフォルダを含められますが、すべてのSKILL.mdのrealpathは、解決後のSkillディレクトリ内に収まる必要があります。
運用者のインストールポリシー
Skillのインストールを続行する前に、信頼されたローカルポリシーコマンドを実行するようsecurity.installPolicyを設定します。ポリシーはメタデータとステージング済みソースパスを受け取り、ClawHub、アップロード、Git、ローカル、更新、依存関係インストーラーの各経路に適用されます。コマンドが有効な判定を返せない場合は、拒否側に倒れます。
シークレット注入のスコープ
skills.entries.*.envとskills.entries.*.apiKeyは、そのエージェントターンの間だけ、シークレットをホストプロセスに注入します。サンドボックスには注入されません。プロンプトやログにシークレットを含めないでください。
より広範な脅威モデルとセキュリティチェックリストについては、セキュリティを参照してください。
SKILL.mdの形式
すべてのSkillには、少なくともフロントマターにnameとdescriptionが必要です。
---name: image-labdescription: プロバイダーを使用する画像ワークフローで画像を生成または編集する--- ユーザーが画像の生成を依頼した場合は、`image_generate`ツールを使用します...省略可能なフロントマターキー
homepagestringmacOS の Skills UI で「ウェブサイト」として表示される URL。metadata.openclaw.homepage
でも指定できます。
user-invocablebooleandefault: truetrue の場合、スキルはユーザーが呼び出せるスラッシュコマンドとして公開されます。
disable-model-invocationbooleandefault: falsetrue の場合、OpenClaw はスキルの指示をエージェントの通常の
プロンプトに含めません。user-invocable も true の場合、
スキルは引き続きスラッシュコマンドとして使用できます。
command-dispatch"tool"tool に設定すると、スラッシュコマンドはモデルを経由せず、
登録済みツールへ直接ディスパッチされます。
command-toolstringcommand-dispatch: tool が設定されている場合に呼び出すツール名。
command-arg-mode"raw"default: rawツールへのディスパッチでは、コア側で解析せず、生の引数文字列をツールへ
転送します。ツールは
{ command: "<raw args>", commandName: "<slash command>", skillName: "<skill name>" }
を受け取ります。
ゲーティング
OpenClaw は、フロントマターに埋め込まれた JSON5 オブジェクトである
metadata.openclaw を使用して、読み込み時にスキルを絞り込みます
(上記の解析に関する注記を参照)。metadata.openclaw ブロックがないスキルは、
明示的に無効化されていない限り、常に使用対象になります。
---name: image-labdescription: プロバイダーを利用した画像ワークフローで画像を生成または編集するmetadata: { "openclaw": { "requires": { "bins": ["uv"], "env": ["GEMINI_API_KEY"], "config": ["browser.enabled"] }, "primaryEnv": "GEMINI_API_KEY", }, }---alwaysbooleantrue の場合、常にスキルを含め、ほかのすべてのゲートをスキップします。
emojistringmacOS の Skills UI に表示される省略可能な絵文字。
homepagestringmacOS の Skills UI で「ウェブサイト」として表示される省略可能な URL。
os("darwin" | "linux" | "win32")[]プラットフォームフィルター。設定すると、一覧に含まれる OS 上でのみスキルが使用対象になります。
requires.binsstring[]各バイナリが PATH 上に存在する必要があります。
requires.anyBinsstring[]少なくとも 1 つのバイナリが PATH 上に存在する必要があります。
requires.envstring[]各環境変数がプロセス内に存在するか、設定から提供される必要があります。
requires.configstring[]各 openclaw.json パスが真値である必要があります。
primaryEnvstringskills.entries.<name>.apiKey に関連付けられる環境変数名。
installobject[]macOS の Skills UI で使用される省略可能なインストーラー仕様(brew / node / go / uv / download)。
インストーラー仕様
インストーラー仕様は、依存関係のインストール方法を macOS の Skills UI に伝えます。
---name: geminidescription: コーディング支援と Google 検索の参照に Gemini CLI を使用する。metadata: { "openclaw": { "emoji": "♊️", "requires": { "bins": ["gemini"] }, "install": [ { "id": "brew", "kind": "brew", "formula": "gemini-cli", "bins": ["gemini"], "label": "Gemini CLI をインストール(brew)", }, ], }, }---インストーラーの選択規則
- 複数のインストーラーが指定されている場合、Gateway は優先する 選択肢を 1 つ選びます(利用可能なら brew、そうでなければ node)。
- すべてのインストーラーが
downloadの場合、OpenClaw は利用可能な すべての成果物を確認できるよう、各エントリーを一覧表示します。 - 仕様に
os: ["darwin"|"linux"|"win32"]を含めると、プラットフォームで絞り込めます。 - Node のインストールでは、
openclaw.jsonのskills.install.nodeManagerが使用されます(デフォルト: npm、選択肢: npm / pnpm / yarn / bun)。これはスキルの インストールにのみ影響します。Gateway ランタイムには引き続き Node を使用してください。 - Gateway のインストーラー優先順位: Homebrew → uv → 設定済みの node マネージャー → go → download。
インストーラーごとの詳細
- Homebrew: OpenClaw は Homebrew を自動インストールせず、brew の
formula をシステムパッケージコマンドに変換することもありません。
brewのない Linux コンテナでは brew 専用インストーラーは非表示になります。カスタムイメージを使用するか、 依存関係を手動でインストールしてください。 - Go: OpenClaw によるスキルの自動インストールには Go 1.21 以降が必要です。
goがなく Homebrew が利用可能な場合、OpenClaw はまず Homebrew 経由で Go をインストールします。Homebrew のない Linux では、更新後のgolang-go候補が最低バージョンを満たしていれば、root として、またはパスワード不要のsudo経由でapt-getを使用できます。依存関係に対する実際のgo installは、 設定済みのGOBINではなく、常に OpenClaw が管理する専用の bin ディレクトリ (新規インストール時は Homebrew のbin、それ以外は~/.local/bin)を対象とします。 独自のGOBIN、GOPATH、GOTOOLCHAIN環境変数は読み取られますが、 上書きされることはありません。 - ダウンロード:
url(必須)、archive(tar.gz|tar.bz2|zip)、extract(デフォルト: アーカイブ検出時に自動)、stripComponents、targetDir(デフォルト:~/.openclaw/tools/<skillKey>)。
サンドボックス化に関する注記
requires.bins はスキルの読み込み時に ホスト 上で確認されます。エージェントが
サンドボックス内で実行される場合、バイナリは コンテナ内 にも存在する必要があります。
agents.defaults.sandbox.docker.setupCommand またはカスタムイメージを使用して
インストールしてください。setupCommand はコンテナ作成後に一度だけ実行され、
外部へのネットワーク接続、書き込み可能なルートファイルシステム、サンドボックス内の root ユーザーが必要です。
設定による上書き
~/.openclaw/openclaw.json の skills.entries で、バンドル済みまたは
管理対象のスキルを有効化し、設定します。
{ skills: { entries: { "image-lab": { enabled: true, apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, config: { endpoint: "https://example.invalid", model: "nano-pro", }, }, peekaboo: { enabled: true }, sag: { enabled: false }, }, },}enabledbooleanfalse にすると、バンドル済みまたはインストール済みであってもスキルが無効になります。
バンドル済みの coding-agent スキルは明示的な有効化が必要です。
skills.entries.coding-agent.enabled: true を設定し、claude、codex、
opencode、または対応する別の CLI のいずれかがインストール済みかつ
認証済みであることを確認してください。
apiKeystring | { source, provider, id }metadata.openclaw.primaryEnv を宣言するスキル向けの便利なフィールドです。
平文文字列または SecretRef オブジェクトを指定できます。
env"Record<string,configobjectスキルごとのカスタム設定フィールド用の省略可能なコンテナ。
allowBundledstring[]バンドル済み スキルのみを対象とする省略可能な許可リスト。設定すると、リスト内の バンドル済みスキルだけが使用対象になります。管理対象スキルとワークスペーススキルには影響しません。
環境変数の注入
エージェント実行が開始されると、OpenClaw は次の処理を行います。
スキルメタデータを読み取る
OpenClaw は、ゲーティング規則、許可リスト、設定による上書きを適用し、 エージェントに対する有効なスキル一覧を解決します。
環境変数と API キーを注入する
skills.entries.<key>.env と skills.entries.<key>.apiKey が、実行中のみ
process.env に適用されます。
システムプロンプトを構築する
使用対象のスキルがコンパクトな XML ブロックにまとめられ、 システムプロンプトへ注入されます。
環境を復元する
実行終了後、元の環境が復元されます。
バンドル済みの claude-cli バックエンドでは、OpenClaw は同じ使用対象スキルの
スナップショットを一時的な Claude Code Plugin として実体化し、--plugin-dir
経由で渡します。ほかの CLI バックエンドはプロンプトカタログのみを使用します。
スナップショットと更新
OpenClaw は セッション開始時 に使用対象スキルのスナップショットを作成し、 そのセッション内の後続のすべてのターンで同じ一覧を再利用します。スキルまたは設定への変更は、 次に新しいセッションを開始したときに反映されます。
次の 2 つの場合、セッションの途中で Skills が更新されます。
- Skills ウォッチャーが
SKILL.mdの変更を検出した場合。 - 新しい使用対象のリモート node が接続した場合。
更新された一覧は、次のエージェントターンで使用されます。エージェントの有効な 許可リストが変更された場合、OpenClaw は表示されるスキルの整合性を保つために スナップショットを更新します。
Skills ウォッチャー
デフォルトでは、OpenClaw はスキルフォルダーを監視し、SKILL.md ファイルが
変更されるとスナップショットを更新します。skills.load 配下で設定します。
{ skills: { load: { extraDirs: ["~/Projects/agent-scripts/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], watch: true, // デフォルト watchDebounceMs: 250, // デフォルト }, },}スキルルートのシンボリックリンクが設定済みルートの外部を指す、意図的な
シンボリックリンク構成では allowSymlinkTargets を使用してください。例:
<workspace>/skills/manager -> ~/Projects/manager/skills。
Skill Workshop からも、信頼されたそれらのシンボリックリンクパスを通じて提案を
適用する必要がある場合にのみ、skills.workshop.allowSymlinkTargetWrites を有効にしてください。
リモート macOS node(Linux Gateway)
Gateway が Linux 上で動作していても、system.run が許可された macOS node
が接続されている場合、必要なバイナリがその node に存在すれば、OpenClaw は
macOS 専用スキルを使用対象として扱えます。エージェントは host=node を指定した
exec ツール経由で、それらのスキルを実行する必要があります。
オフラインの node では、リモート専用スキルは表示されません。node が バイナリのプローブに応答しなくなると、OpenClaw はキャッシュされたバイナリ一致情報を消去します。
トークンへの影響
使用対象のスキルがある場合、OpenClaw はコンパクトな XML ブロックを システムプロンプトに注入します。コストは決定論的で、スキル数に比例して増加します。
- 基本オーバーヘッド(1 つ以上のスキルが使用対象の場合のみ): 導入説明の
固定ブロックと
<available_skills>ラッパー。 - スキルごと: 約 97 文字 +
name、description、locationフィールドの文字数。 - XML エスケープでは
& < > " 'がエンティティに展開され、出現するたびに 数文字が追加されます。 - 1 トークンあたり約 4 文字とすると、フィールドの文字数を含める前の時点で、 97 文字 ≈ スキルごとに 24 トークンです。
レンダリングされたブロックが設定済みのプロンプト予算
(skills.limits.maxSkillsPromptChars)を超える場合、OpenClaw はまず、説明を含まない
コンパクト形式に収まる限り多くのスキル識別情報(名前、場所、バージョン)を保持します。
次に、残りの予算を短縮した説明に使用します。説明用の予算が残っていない場合、
説明は省略されます。コンパクト形式またはリストの切り詰めが必要な場合、
プロンプトには openclaw skills check を案内する注記が含まれます。
プロンプトのオーバーヘッドを最小限に抑えるため、説明は短く明確にしてください。