0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Agent Skillsの信頼境界をどう設計するか:配布物・実行権限・承認を分離する

0
Posted at

Agent Skills permission boundary diagram

Agent Skillsを複数の開発者や自動実行環境で共有するとき、レビュー対象をSKILL.mdだけに絞ると、実際に動くスクリプトや参照ファイル、実行環境の権限を見落とす。Skillの配布物と、Skillを実行するエージェントの権限を別々に管理する必要がある。

技術的な問い:Skillを信頼するとは何を信頼することか

Agent Skillsの公開仕様では、SkillはSKILL.mdを必須とし、scripts/、references/、assets/などを含むディレクトリとして定義されている。つまりレビュー対象は指示文だけではない。仕様ではallowed-toolsも定義されているが、これは実験的な項目で、クライアントごとに対応が異なる。

ここから導ける設計上の結論は、Skillの記述を実行権限そのものとして扱わないことだ。Skillは手順を提案し、ホスト側の実行環境がファイル・コマンド・ネットワークの可否を強制する。指示文に「送信しない」と書くだけで、送信権限が消えるわけではない。

設計選択肢:指示文だけで制御するか、実行環境でも制御するか

方式 利点 主な弱点
Skillの指示だけで制限 導入が簡単で移植しやすい 指示の誤読や競合時に、ツール側の権限を止められない
ホストの権限設定だけで制限 実行可能な操作を機械的に絞れる 業務上の判断基準や承認条件は表現しにくい
Skillとホストを分けて併用 手順と強制境界をそれぞれ管理できる 設定の重複・ずれを継続的に点検する必要がある

本番を想定するなら3つ目を採る。SKILL.mdには目的・入力・出力・停止条件を書き、ホストには対象パス、許可コマンド、ネットワーク可否、外部操作の制限を設定する。仕様のallowed-toolsは補助的な宣言として読み、ホストが強制していることを別途確認する。

採用する設計:配布物を固定し、能力を段階的に与える

導入単位を次のように分ける。

  1. 配布物:レビュー済みのコミットやリリースに固定し、SKILL.mdと同梱スクリプトを一緒に検査する。
  2. 能力:最初は読み取りとローカル検証だけにし、書き込みやネットワーク接続は必要な範囲だけ追加する。
  3. 操作:公開、送信、課金、本番変更は別の承認経路に分け、自動実行の許可に含めない。
  4. 記録:実行したSkillの版、対象、呼び出したツール、承認結果、生成物の識別子を残す。

この分離なら、Skillの更新と権限の拡大を同じ変更にせず、差分ごとにレビューできる。特定の実行環境での検証値ではなく、ここでは汎用的な設計案として示している。

実装の要点:導入ゲートを小さく作る

導入前に、配布物と実行環境について以下を確認する。

配布物:
  - 取得元とレビュー済みバージョンを固定したか
  - SKILL.mdが参照する全ファイルを列挙したか
  - スクリプトの依存関係・書き込み先・通信先を確認したか

実行環境:
  - 対象ディレクトリを限定したか
  - 読み取り専用で通る処理を先に分けたか
  - 不要な環境変数や認証情報を渡していないか
  - 外部操作が人間承認を経由するか

テストでは通常入力だけでなく、Skillの指示と矛盾する入力、壊れた参照ファイル、権限外の操作を要求する入力も使う。確認するのは回答文の見た目だけではない。許可されないツール呼び出しが拒否されたか、対象外ファイルに変更がないか、停止理由と実行記録が残ったかを見る。

失敗・トレードオフ:allowed-toolsをアクセス制御と誤認する

仕様上、allowed-toolsの対応は実装ごとに異なる。そこでこの値だけを見て「このSkillは読み取り専用」と判断すると、実際のクライアントで制約されていない可能性が残る。使うクライアントの仕様と設定を確認し、強制されない項目はホスト側の権限設定で補う。

もう一つの失敗は、参照先を増やすたびに配布物全体を再確認しないことだ。SKILL.mdから相対パスで読み込む文書、実行可能ファイル、外部依存を含めて一つのレビュー単位として扱う。自動更新は便利だが、固定版との差分レビューとロールバック手順を省く理由にはならない。

本番運用論点:変更と実行の両方を監視する

  • 変更管理:誰が、どの版を、何の理由で更新したかを記録する。
  • 実行監視:Skill名・版、ツール呼び出し、拒否、承認、失敗を相関できる形で記録する。入力本文や秘密情報は必要以上に保存しない。
  • 停止条件:想定外の書き込み、権限拒否の回避試行、参照先の欠落があれば処理を止め、再試行で外部操作を重ねない。
  • 復旧:最後に承認された版へ戻せるようにし、復旧後は同じ拒否テストを再実行する。

今後の改善

まず読み取り専用のSkillを一つ選び、参照ファイルの棚卸し、権限外操作の拒否、実行記録の確認までを自動テストにする。その後、書き込みや外部連携を一つずつ追加し、各能力に個別の承認条件とロールバック方法を設ける。評価指標は成功率だけでなく、誤った権限付与の検出率や、拒否後に安全に停止できた割合も含める。

同様の仕組みの設計・構築・運用については相談可能。

この記事を書いた人✏️@YushiYamamoto
ITPRODX.com代表 / AIアーキテクト
Next.js / TypeScript / n8nを活用した自律型アーキテクチャ設計を専門としています。
日々の自動化の検証結果や、ビジネス側の視点(ROI等)に関するより深い考察は、以下の公式サイトおよびnoteで発信しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?