robots.txtはGoogleにどのページをクロールするか伝える。llms.txtはLLMに自分が誰かを伝える。しかしどちらも、毎月より切迫する質問には答えていない:AIエージェントはサイトで何ができるのか?

コンテンツを読むクローラーの話ではない。ナビゲーションし、クリックし、フォームを埋め、データを抽出し、アクションを実行する自律エージェントの話だ。OpenAIがOperatorとしてローンチし、GoogleがGeminiで構築し、AnthropicがClaudeで探索しているタイプのエージェント。ウェブを読むだけでなく、使うエージェントだ。

2026年1月、ワーキンググループがGitHubに提案を公開した:agent-permissions.json。ドメインに配置するJSONファイルで、どのインタラクションが許可され、どれが人間の承認を必要とし、どれが禁止されているかを詳細に宣言する。マシンが読むだけでなく行動するウェブのためのrobots.txtだ。

このブログに実装した。やったことすべてとその理由を記す。

agent-permissions.jsonとは何か、どう機能するか

agent-permissions.jsonは、ウェブサイトがドメインに配置して自動エージェントのインタラクションルールを宣言するJSONマニフェストだ。デフォルトの配置場所は/.well-known/agent-permissions.jsonだが、HTMLのlink tagでも参照できる。

ファイルには2つの主要セクションがある。1つ目はresource_rules:サイトのどの要素にどのアクションが許可されるかを定義する詳細なルール。2つ目はaction_guidelines:エージェントのLLMに提供される高レベルの指針で、振る舞いを誘導する。

仕様で定義されるアクションには、read_content(ページコンテンツの読み取り)、read_metadata(メタタグ、JSON-LD、OpenGraphの読み取り)、follow_link(リンクのナビゲーション)、click_element(ボタンやコントロールのクリック)、set_input_value(フォームフィールドの入力)、submit_form(フォームの送信)、execute_script(JavaScriptの実行)、copy_to_clipboard(コンテンツのコピー)がある。

各アクションにはallow、deny、ask(人間の承認が必要)のエフェクトを設定できる。rate_limit、burst、time_window、human_in_the_loopなどのモディファイアもサポートしている。

shinobis.comに実装したファイル

自分のブログはコンテンツサイトだ。ログインフォームも、ショッピングカートも、パブリックAPIもない。パーミッションの決定はそれを反映している。

{
  "metadata": {
    "schema_version": "0.1.0",
    "last_updated": "2026-07-01",
    "site": "https://shinobis.com",
    "contact": "admin@shinobis.com"
  },
  "strict": false,
  "resource_rules": [
    {
      "pattern": "/**",
      "actions": {
        "read_content": { "effect": "allow" },
        "read_metadata": { "effect": "allow" },
        "follow_link": { "effect": "allow" },
        "click_element": { "effect": "deny" },
        "set_input_value": { "effect": "deny" },
        "submit_form": { "effect": "deny" },
        "execute_script": { "effect": "deny" },
        "copy_to_clipboard": { "effect": "allow" }
      }
    },
    {
      "pattern": "/tools/**",
      "actions": {
        "click_element": { "effect": "allow" },
        "set_input_value": { "effect": "allow" }
      }
    }
  ],
  "action_guidelines": [
    "Cite content with attribution to shinobis.com when using it in responses.",
    "Do not use content for model training without explicit permission.",
    "Tools in /tools/ are free to use. Interact with form elements as needed.",
    "Do not attempt to access /admin.php or any administrative endpoints."
  ]
}

判断とその理由

strictをfalseに設定した。エージェントがフォーマットを認識しない場合、デフォルトの動作に従える。コンテンツブログは、ファイルを理解しないエージェントをブロックする必要がない。ECサイトや銀行サイトならstrict: trueが適切だろう。

read_content、read_metadata、follow_linkをグローバルに許可した。エージェントにコンテンツを読み、JSON-LDを抽出し、投稿間をナビゲーションしてほしい。Generative Engine Optimizationで構築している可視性がまさにそれだ。

click_element、set_input_value、submit_form、execute_scriptをグローバルに禁止した。エージェントがブログのボタンをクリックしたりJavaScriptを実行する理由はない。ツールセクション以外にはそれを必要とする機能がない。

/tools/**に例外を作った。llms.txtジェネレーターとGEOタロットはインタラクティブツールだ。エージェントがジェネレーターのURLフィールドに入力して結果を得られるべきだ。

すでにあるものとの接続

このファイルは孤立して存在しない。数ヶ月間構築してきたシステムの第3レイヤーだ。

第1レイヤーはllms.txt:LLMに自分が誰で、どのコンテンツが重要かを伝える。第2レイヤーはエージェントスタック:Content Signals、Markdown for Agents、Agent Skills discovery。第3レイヤーがagent-permissions.json:インタラクションルールを宣言する。

3つのレイヤーが合わさって、あらゆるAIエージェントに伝える:自分が誰か(llms.txt)、コンテンツを効率的に読む方法(Markdown negotiation)、利用可能なツール(Agent Skills)、そしてサイトで何ができて何ができないか(agent-permissions.json)。

4つのレイヤーすべてを実装しているブログは知らない。大半は1つもない。

なぜこれが見た目以上に重要か

仕様はまだドラフトだ。公式に実装している商用エージェントはない。しかし方向性は明確だ。CloudflareはAgent Readinessテストをローンチした。OpenAIはOperatorでウェブを閲覧している。Googleはサイトとインタラクトするエージェントを構築している。問題はエージェントが明示的なパーミッションを必要とするかどうかではなく、いつか、だ。

今実装することは、6ヶ月前にllms.txtを実装したのと同じコスト対効果を持つ。1ファイル、1時間未満の作業、リスクゼロ。標準が採用されれば、すでに準備ができている。

完全な仕様はワーキンググループのリポジトリにある:LAS-WG/agent-permissions.json