エージェントスキルのための契約
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": { … }
}6種類の副作用
スキルの各ツールが何をし得るかを、この6種類で、レベル(none・scoped・any)と範囲を付けて宣言します。
| 種類 | 意味 | scope の書き方 |
|---|---|---|
| read | ファイルやデータを読む | パスの glob |
| write | 作る・変える・消す | パスの glob、remote:<host>/<path> |
| network | 他のホストと通信する | ホストの glob、@local |
| exec | 他のプログラムを動かす | コマンド名 |
| spend | お金を使う | サービス名 |
| send | 人に届く(メッセージ、投稿、メール) | 宛先の種類・サービス名 |
3つのレベル
レベルは「どこまで確かめたか」を表すもので、安全の保証ではありません。L3 は作者が署名したファイルのままだという意味で、無害だという意味ではありません。
- L1宣言済みスキーマに合った契約がある作者が何をすると言っているか
- L2テスト済みL1 に加え、サンドボックスでの適合テストに合格(ファイルは読み取り専用、通信は宣言したホストだけ、実行は宣言したプログラムだけ)宣言が実際に試されたこと
- 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