Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

スキルバンドルの作成

スキルバンドルは、WebAssemblyをまったく同梱しない唯一のプラグイン種別です。マークダウンスキルのディレクトリであり、プラグイン機構を通じてパッケージ化および配布されます。同じマニフェスト、同じ検出、同じ署名ポリシー、同じ zeroclaw plugin install です。追加する機能がコードではなく指示、プロンプト、ワークフローであり、スキルディレクトリ内のばらばらのファイルではなくプラグイン配布セマンティクス(署名、レジストリインストール、バージョニング)が必要な場合に使用します。

まずバイナリを確認してください。 スキルバンドルはプラグイン機構に依存しており、インストーラーが配布するビルド済みリリースバイナリは plugins-wasm フィーチャなしでビルドされています。標準バイナリでは zeroclaw plugin ... は認識されないサブコマンドであり、プラグインが配布するスキルは読み込まれません。このページのバンドルを使用するには、プラグイン実行バックエンドを指定してソースからビルドしてください。例: cargo build --release --features plugins-wasm-cranelift。標準バイナリで単にスキルの共有ディレクトリが欲しいだけであれば、代わりに Skills で説明されているネイティブバンドルを使用してください。zeroclaw skills bundle add <alias> でバンドルを作成し、zeroclaw skills install <source> --bundle <alias> でそこにインストールすると、プラグイン配布のセマンティクスなしで同じスキルを利用できます。

このガイドは、crates/zeroclaw-plugins/src/host.rsvalidate_skill_bundlevalidate_skill_md_frontmatter)の検証パスと、crates/zeroclaw-runtime/src/skills/mod.rs のローダーに照らして確認されています。

スキルそのものが何か、およびエージェントがそれらをどう使うかについては、まず Skills を読んでください。このページではバンドルのパッケージングのみを扱います。

レイアウト

スキルのみのプラグインは wasm_path を省略し、agentskills.io 形式の skills/ ディレクトリを含みます:

my-toolkit/
  manifest.toml           # capabilities = skill only, no wasm_path
  README.md               # optional bundle-level overview
  skills/
    design-review/
      SKILL.md
      scripts/            # optional
      references/         # optional
    code-review/
      SKILL.md
    data-analysis/
      SKILL.md
      references/

検証: discovery が強制する内容

ホストは検出時とインストール時にバンドルの構造を検証し、最初の失敗でプラグイン全体を拒否します(host.rsvalidate_skill_bundle)。具体的なルールは次のとおりです。

  1. skills/ は存在し、ディレクトリである必要があります。
  2. 少なくとも1つのサブディレクトリを含んでいる必要があります。空の skills/ は無効なマニフェストであり、空のバンドルではありません。
  3. すべてのサブディレクトリには SKILL.md が含まれている必要があります。
  4. すべての SKILL.md は YAML フロントマターで始まる必要があります(1行目に --- フェンスがあり、閉じる --- で終端)。そのフロントマターは空でない namedescription キーを宣言する必要があります。

frontmatter チェックは意図的に検出時に実行されます。スキルが name または description を省略しているバンドルは、エージェントが会話の途中でスキルを初めて呼び出したときではなく、プラグインの読み込み時に失敗します。

有効なスキルヘッダー:

---
name: design-review
description: Structured design review workflow for architecture proposals.
---

# Design Review

...instructions...

名前空間化

読み込まれたバンドルスキルは、プラグイン修飾IDの下に登録されます: plugin:<plugin-name>/<skill-name>、例: plugin:my-toolkit/design-reviewskills/mod.rsnamespace_plugin_skill)。各スキルは plugin:<plugin-name> タグも受け取ります。これにより、ユーザー作成スキルとの衝突およびバンドル間の衝突を防ぎます。2つのバンドルがどちらも code-review スキルを同梱して共存できます。

名前空間はスキルの優先順位と相互に作用します。エージェントの実効スキル解決では、異なるソース由来の同名スキルは優先順位に基づいて重複排除され、敗れた側は shadowed として記録されます。プラグイン修飾子を使えば、同じバンドル名の別のコピーが存在しない限り、あなたのバンドルはこの競合に一切巻き込まれません。

スクリプト

スキルは scripts/ ディレクトリを含む場合があります。スクリプトを含むスキルが読み込まれるかどうかは、オペレーターの skills.allow_scripts 設定によって制御され、プラグインスキルローダーはこれを変更せずに通過させます(skills/mod.rs 内の discover_plugin_skills):スクリプトを含むバンドルスキルは、ワークスペーススキルとまったく同じ監査およびドロップのルールの対象となります。バンドルがインストールされたからといって、スクリプトが実行されると想定しないでください。

マニフェスト

マニフェストとは、プラグインディレクトリ内にある manifest.toml という名前のファイルです。そのフィールドは crates/zeroclaw-plugins/src/lib.rs 内の PluginManifest の serde サーフェスであり、これが信頼できる情報源となります。

フィールド必須意味
nameyes一意の正規パッケージスラッグであり、派生する各インスタンス設定キーのパッケージ部分です。これはそれ自体がオペレーター設定キーではありません。1~128文字の小文字 ASCII 文字を使用し、先頭と末尾は [a-z0-9] とし、その間には [a-z0-9._-] のみを使用します。検出時に無効な名前や重複した名前は拒否されます。
versionyesバージョン文字列(例:0.1.0)。
descriptionいいえzeroclaw plugin list によって表示される人間が読める説明。
authorいいえ作者名または組織。
wasm_pathWASM 機能についてコンポーネントのファイル名(プラグインディレクトリからの相対パス)。唯一の capability が skill の場合を除き必須。指定されたファイルが存在しない場合、検出はプラグインをスキップします。
capabilitiesはい、空ではありませんプラグインの種類: toolchannelmemoryobserverskill のいずれか(PluginCapability、snake_case でシリアライズ)。
permissionsいいえコードがアクセスできるホストサービス: http_clientconfig_readfile_readfile_writememory_readmemory_writePluginPermission)。現在強制されるのは最初の2つのみで、残りは受け付けられますが機能しません。config_read の宣言には config_schema が必要で、現在これを提供するのはツール/チャネルアダプターのみです。
config_schemaconfig_read と完全に一致してこのプラグインのプライベート設定用の Draft 2020-12 JSON Schema を作成します。これは正規マニフェストのバイト列に含まれるため、マニフェストへの署名によって保護されます。ルートは properties マップを持ち、additionalProperties = false であるオブジェクトでなければなりません。トップレベルのすべてのプロパティには、直接またはローカル JSON Pointer を介して、サポート対象の型を 1 つ明示しなければなりません。型は stringbooleanintegernumberarray、または object です。ツールおよびチャネルの利用側は、トップレベルの文字列プロパティに直接 x-secret = true を設定して、そのプロパティを公開設定から削除し、スコープ付きの secrets.get ホストインポートを介して公開できます。ツールは __config 配下で公開設定を受け取り、execute 中にシークレットを読み取れます。チャネルは、configure および運用呼び出し中に、config.get を通じて現在の公開オブジェクトを読み取り、secrets.get を通じてシークレットを読み取ります。両方のインポートは、インスタンス化および静的メタデータ検出中は利用できません。ネストされたシークレットマーカー、false のシークレットマーカー、または boolean でないシークレットマーカー、および文字列以外のシークレットプロパティは拒否されます。config_read のないスキーマ、またはスキーマのない config_read は拒否されます。
signatureいいえ正規化されたマニフェストバイト列に対する Base64url Ed25519 署名。配布用に署名する際に設定されます。
publisher_keyいいえ署名者の16進数エンコードされたEd25519公開鍵。

コードが実際に使用する権限のみを宣言してください。宣言されていない権限はコンポーネントが到達できないホストサーフェスであり、不要に宣言された権限は自ら求めた攻撃対象領域であり、プラグインをレビューする人にとっての監査負担です。

オペレーター値は plugins.entries 内では文字列のまま保持され、永続化時には、ホスト所有のパッケージ、ケイパビリティ、バインディングの識別情報から導出されたバージョン付きの zpi1_… 文字列をキーとして暗号化されます(インストール時に出力され、デフォルトのツールバインディングのフルインスタンスキーにシードされます)。文字列はそのまま保存され、ブール値と数値には JSON スカラーのテキストが使用され、配列とオブジェクトには JSON テキストが使用されます。ゲストコードが実行される前に、ホストはそれらの文字列をパッケージスキーマの型に実体化し、ツールアダプターとチャンネルアダプターについてオブジェクト全体を検証します。シークレットではないツールプロパティで __config が構成され、チャンネルは config.get を介してシークレットではないオブジェクトを取得します。x-secret = true とマークされたプロパティは両方の公開サーフェスから省略され、認可されたサービスフレーム内で secrets.get("property") を介してのみ利用できます。1 回の呼び出し中のチャンネルの公開読み取りとシークレット読み取りは単一の正規リビジョンを共有し、ホストは呼び出しの終了時にその実体化されたビューを破棄します。準拠するチャンネルプラグインは、利用する各時点でその両方を 必ず 解決し、ウォームなゲスト状態に設定や資格情報の値を保持してはなりません。ゲストに平文を返すと、ホストは悪意のあるコードに対して値を保持しないことを強制できなくなります。config_read が要求されたものの実効的に許可されなかった場合、ホストは空のオブジェクトを検証します。そのため、必須プロパティを持つスキーマは、必須設定なしで起動するのではなくフェイルクローズします。空のオブジェクトが有効な場合、ツールは空の __config を省略し、チャンネルの設定/シークレットインポートは access-denied を返します。認可されたフレーム外の呼び出し、解決失敗、ホスト呼び出し予算の枯渇は unavailable を返します。

スキルバンドルの場合: capabilities に正確に skill のみが含まれ、wasm_path はなく、通常は permissions もまったくない。バンドルはデータであり、パーミッションセットは markdown が決して呼び出さないホスト関数をゲートする。

混合ケイパビリティのプラグイン(たとえば tool + skill)は許可されます。その場合、ツールワールド用の有効な wasm_path and 有効な skills/ バンドルを備え、両方の検証が実行されます。

インストールと検証

これらのコマンドには、プラグインホストをコンパイルして組み込んだバイナリが必要です。 インストーラーが配布するビルド済みリリースバイナリは plugins-wasm 機能なしでビルドされているため、そこでは zeroclaw plugin ... は認識されないサブコマンドとなり、インストール済みのプラグインは検出されません。プラグイン実行バックエンドを指定してソースからビルドしてください。例: cargo build --release --features plugins-wasm-cranelift

各プラグインは、プラグインディレクトリ(デフォルト ~/.zeroclaw/plugins/plugins.plugins_dir を通じて解決)の独自のサブディレクトリに配置され、マニフェストとマニフェストの wasm_path に一致する名前のコンポーネントを保持します:

~/.zeroclaw/plugins/
└── my-plugin/
    ├── manifest.toml
    └── my-plugin.wasm

ローカルディレクトリからインストール(これはマニフェストの形状を検証し、何かをコピーする前に署名ポリシーを実行します):

zeroclaw plugin install ./my-plugin/

プラグインシステムを有効にして検出を確認する:

zeroclaw config set plugins.enabled true
zeroclaw plugin list
zeroclaw plugin info my-plugin

zeroclaw plugin listzeroclaw plugin info は、パッケージがインストールされ、検出可能であることを確認しますが、検出は有効化を意味しません。plugins.enabled = true によってプラグインホストが有効になります。自動検出されたツールおよびスキルの機能は、plugins.auto_discover = true も設定されている場合にのみ実行時に読み込まれ、このフラグはデフォルトでは false です(フェイルクローズド):

zeroclaw config set plugins.auto_discover true

したがって、plugins.enabled = true だけでは、[channels.plugin.<alias>] の下で宣言したチャンネルのみが有効になり、プラグインのツールやスキルは有効になりません。ツールまたはスキルのパッケージが zeroclaw plugin list に表示されていても、実行時には何も提供しないことがあります。明示的なチャンネルバインディングは自動検出ではなくオペレーターが名前を指定するものなので、auto_discover は不要です。このフラグが制御するのは、自動検出されたツールとスキルだけです。

zeroclaw plugin list にないプラグインは検出時にスキップされました: 起動ログでスキップ警告を確認してください(形式が不正なマニフェスト、wasm_path ファイルの欠落、または署名ポリシーによる拒否)。

検出後、スキルはスキルサーフェス(スキルリスト、ダッシュボード)に plugin:<your-bundle>/<skill> として名前空間付きで表示されます。エンドツーエンドで確認するために、エージェントに1つを使用するよう依頼してください。

次へ

  • プラグインの配布: スキルバンドルは公開が最も簡単で、署名の仕組みは WASM プラグインと同一です。