本文へ移動
公開レビュー中(2026-10-22〜2026-11-21 JST)。参加方法(REVIEW.md) · 進捗の issue

エージェントスキルのための契約

SkillPact は、変更しない SKILL.md の横に置く skill.contract.json の小さなオープン規格です。作者は副作用をすべて宣言し、ネットを切って動くテストを付け、ファイルに署名します。ハーネスはインストールの前にそれを読みます。

仕様を読む →なぜ必要かチェッカー

状態
草案 0.8。1.0 前のため、互換性のない変更があり得ます。
契約スキーマ
v0.8.json
ポリシースキーマ
policy-v0.8.json
編集者
Shogo Kajiyama(SEVENTHWELL)
ライセンス
本文 CC BY 4.0 · コード Apache-2.0
skill.contract.jsonL3
{
  "contract_version": "0.8",
  "skill": { "name": "thumbnail-skill", "version": "0.1.0" },
  "permissions": {
    "read":    { "level": "scoped", "scope": ["$INPUT", "$SKILL_DIR/**"] },
    "write":   { "level": "scoped", "scope": ["$OUTPUT"] },
    "network": { "level": "none" },
    "exec":    { "level": "scoped", "scope": ["python3", "ffmpeg"] },
    "spend":   { "level": "none" },
    "send":    { "level": "none" }
  },
  "capabilities": [ … 5 tools … ],
  "tests": { … },
  "integrity": { … }
}
実際の契約の抜粋(thumbnail-skill、L3。why は省略)。6種類の副作用は必ずすべて書きます。「none」は書き忘れではなく「しない」という宣言です。

6種類の副作用

スキルの各ツールが何をし得るかを、この6種類で、レベル(none・scoped・any)と範囲を付けて宣言します。

種類意味scope の書き方
readファイルやデータを読むパスの glob
write作る・変える・消すパスの glob、remote:<host>/<path>
network他のホストと通信するホストの glob、@local
exec他のプログラムを動かすコマンド名
spendお金を使うサービス名
send人に届く(メッセージ、投稿、メール)宛先の種類・サービス名

3つのレベル

レベルは「どこまで確かめたか」を表すもので、安全の保証ではありません。L3 は作者が署名したファイルのままだという意味で、無害だという意味ではありません。

  1. L1宣言済みスキーマに合った契約がある作者が何をすると言っているか
  2. L2テスト済みL1 に加え、サンドボックスでの適合テストに合格(ファイルは読み取り専用、通信は宣言したホストだけ、実行は宣言したプログラムだけ)宣言が実際に試されたこと
  3. L3署名済みL2 に加え、ファイルのハッシュと、信頼できる ed25519 または Sigstore の署名誰が保証し、その後変わっていないこと

受け持つ範囲

SkillPact が受け持つのはインストールの前です。ハーネスが契約を読み、利用者のポリシーと照らし合わせて、許可・確認・拒否を決めます。同じポリシーから Claude Code、Cursor、Codex、Gemini CLI の権限設定を生成できます。実行中の強制は APS、ACS、HushSpec などの仕組みに任せ、HushSpec と Rego への書き出しを用意しています。

コマンドラインから
$ skillpact conformance ./my-skill
$ skillpact policy-compile ./my-skill policy.json --target claude-code
$ skillpact convert ./my-skill --to mda

文書