{
  "agent_web_index": {
    "citation": "GAIP Agent Web Index, October 2026, gaipagents.com/state-of-agents?month=2026-10, CC BY 4.0",
    "declared_derivations": {
      "as_of_utc": "2026-10-12T00:42:50Z",
      "data_appetite": {
        "agents_with_tools_read": 9041,
        "asking_for_any_sensitive_category": {
          "count": 2068,
          "of": 9041,
          "share": 0.2287
        },
        "by_category": {
          "bank_account": {
            "count": 54,
            "of": 9041,
            "share": 0.006
          },
          "biometric": {
            "count": null,
            "of": 9041,
            "share": null,
            "suppressed": true
          },
          "credentials": {
            "count": 585,
            "of": 9041,
            "share": 0.0647
          },
          "date_of_birth": {
            "count": 89,
            "of": 9041,
            "share": 0.0098
          },
          "email": {
            "count": 1172,
            "of": 9041,
            "share": 0.1296
          },
          "file_upload": {
            "count": 329,
            "of": 9041,
            "share": 0.0364
          },
          "free_text_large": {
            "count": 1852,
            "of": 9041,
            "share": 0.2048
          },
          "government_id": {
            "count": 44,
            "of": 9041,
            "share": 0.0049
          },
          "health": {
            "count": 52,
            "of": 9041,
            "share": 0.0058
          },
          "payment_card": {
            "count": 6,
            "of": 9041,
            "share": 0.0007
          },
          "phone": {
            "count": 469,
            "of": 9041,
            "share": 0.0519
          },
          "postal_address": {
            "count": 303,
            "of": 9041,
            "share": 0.0335
          },
          "precise_location": {
            "count": 376,
            "of": 9041,
            "share": 0.0416
          }
        }
      },
      "dependencies": {
        "agents_with_declarations_read": 20540,
        "distinct_outside_domains": 194,
        "domains_shared_by_at_least_5_agents": 5,
        "named_only": "Service providers on GAIP's published list of well-known services, each depended on by at least 5 agents; every other domain is counted, never named.",
        "pointing_to_an_outside_domain": {
          "count": 9765,
          "of": 20540,
          "share": 0.4754
        },
        "top_shared_service_domains": [
          {
            "agents": {
              "count": 9502,
              "of": 20540,
              "share": 0.4626
            },
            "service_domain": "github.com"
          },
          {
            "agents": {
              "count": 51,
              "of": 20540,
              "share": 0.0025
            },
            "service_domain": "gitlab.com"
          },
          {
            "agents": {
              "count": 8,
              "of": 20540,
              "share": 0.0004
            },
            "service_domain": "supabase.co"
          }
        ]
      },
      "meaning": "Facts GAIP derives, at the time it observed each public MCP server or A2A agent, from what that agent declared: which categories of data its tools' input fields ask for (counts of fields by category, never field names or text), which outside domains its declarations point to (host names only) and how many agents each declared operator runs (operators are never named). Latest record of each public target observed in the last 30 days; counts from 1 to 4 withheld (shown as '<5' or left empty), shares only when both counts are at least 5. Not an assessment of any agent or operator.",
      "minimum_cell_size": 5,
      "operators": {
        "agents_run_by_the_10_largest_operators": {
          "count": 1138,
          "of": 20450,
          "share": 0.0556
        },
        "agents_with_declared_operator": 20450,
        "by_source_kind": {
          "card_provider_organization": 652,
          "card_provider_url": 9,
          "registry_namespace_domain": 13009,
          "registry_namespace_github": 6780
        },
        "named": null,
        "operators": 15755,
        "operators_by_agents_run": {
          "1": 14787,
          "10-49": 87,
          "2-4": 762,
          "5-9": 101,
          "50+": 18
        }
      },
      "rules_version": "gaip.data-appetite-rules.v1",
      "schema_version": "gaip.declared-derivations.v1.aggregate",
      "week": "2026-W41",
      "window_days": 30,
      "writing": {
        "latest_record_written_at_utc": "2026-10-12T00:42:50Z",
        "public_records_in_window": 20540
      }
    },
    "figures": [
      {
        "all_agents": {
          "denominator": "every public MCP server and A2A agent GAIP watched when this copy was built (all sources; hosts an outside caller asked about and GAIP's own agents left out); the agents counted are among them",
          "value": {
            "count": 2322,
            "of": 22735,
            "share": 0.1021
          },
          "weekly_totals": {
            "numerator_by_week": {
              "2026-W41": 1472,
              "2026-W42": 850
            }
          }
        },
        "denominator": "every member of the frozen panel AGENTS-COHORT-2026-10",
        "id": "tools_changed",
        "label": "Agents whose declared tools changed",
        "panel": {
          "denominator": "every member of the frozen panel AGENTS-COHORT-2026-10",
          "id": "AGENTS-COHORT-2026-10",
          "value": {
            "count": 421,
            "of": 4157,
            "share": 0.1013
          },
          "weekly_totals": {
            "numerator_by_week": {
              "2026-W41": 324,
              "2026-W42": 97
            }
          }
        },
        "source": "capability record change log (classified changes to declared tools)",
        "value": {
          "count": 421,
          "of": 4157,
          "share": 0.1013
        }
      },
      {
        "all_agents": {
          "denominator": "every public host whose declared terms GAIP read this month (hosts an outside caller asked about and rows under a method version with a known defect left out)",
          "of_which_x402_prices_changed": {
            "count": null,
            "of": 9812,
            "share": null,
            "withheld": "under 5"
          },
          "value": {
            "count": 708,
            "of": 9812,
            "share": 0.0722
          },
          "weekly_totals": {
            "denominator_by_week": {
              "2026-W41": 8271,
              "2026-W42": 1541
            },
            "numerator_by_week": {
              "2026-W41": 686,
              "2026-W42": 22
            }
          }
        },
        "denominator": "panel hosts whose declared terms GAIP read this month (agent_terms rows)",
        "id": "terms_or_prices_changed",
        "label": "Hosts whose declared terms, limits or prices changed",
        "of_which_x402_prices_changed": {
          "count": null,
          "of": 1786,
          "share": null,
          "withheld": "under 5"
        },
        "panel": {
          "denominator": "panel hosts whose declared terms GAIP read this month (agent_terms rows)",
          "id": "AGENTS-COHORT-2026-10",
          "of_which_x402_prices_changed": {
            "count": null,
            "of": 1786,
            "share": null,
            "withheld": "under 5"
          },
          "value": {
            "count": 322,
            "of": 1786,
            "share": 0.1803
          },
          "weekly_totals": {
            "withheld": "a weekly part is under 5"
          }
        },
        "source": "agent_terms change log against each host's previous row (a host's earliest row is not a change)",
        "value": {
          "count": 322,
          "of": 1786,
          "share": 0.1803
        }
      },
      {
        "all_agents": {
          "denominator": "every public host whose A2A agent card GAIP read this month (latest read; hosts an outside caller asked about and rows under a method version with a known defect left out)",
          "value": {
            "count": 52,
            "of": 713,
            "share": 0.0729
          },
          "weekly_totals": {
            "denominator_by_week": {
              "2026-W41": 60,
              "2026-W42": 653
            },
            "numerator_by_week": {
              "2026-W41": 6,
              "2026-W42": 46
            }
          }
        },
        "denominator": "panel hosts whose A2A agent card GAIP read this month (latest read)",
        "id": "signed_agent_cards",
        "label": "Agent cards carrying a signature",
        "panel": {
          "denominator": "panel hosts whose A2A agent card GAIP read this month (latest read)",
          "id": "AGENTS-COHORT-2026-10",
          "value": {
            "count": 36,
            "of": 482,
            "share": 0.0747
          },
          "weekly_totals": {
            "withheld": "a weekly part is under 5"
          }
        },
        "source": "agent_keys (signatures on A2A agent cards)",
        "value": {
          "count": 36,
          "of": 482,
          "share": 0.0747
        }
      },
      {
        "denominator": "front-door gaip_diagnose answers to outside callers this month",
        "frozen": false,
        "id": "failure_types",
        "label": "Most frequent failure types diagnosed for outside callers",
        "outside_diagnoses": null,
        "population": "every outside caller's diagnosis (not a panel figure)",
        "research_consented_witness_checks": {
          "by_verdict": null,
          "checks": null
        },
        "source": "outcome research ledger (diagnosis classes; no error text, URL or caller kept)",
        "top": []
      },
      {
        "all_agents": {
          "denominator": "every agent host whose robots.txt or responses GAIP read this month (latest read; hosts an outside caller asked about and rows under a method version with a known defect left out)",
          "of_which_ietf_aipref": {
            "count": 22,
            "of": 20020,
            "share": 0.0011
          },
          "value": {
            "count": 1893,
            "of": 20020,
            "share": 0.0946
          },
          "weekly_totals": {
            "denominator_by_week": {
              "2026-W41": 4830,
              "2026-W42": 15190
            },
            "numerator_by_week": {
              "2026-W41": 658,
              "2026-W42": 1235
            }
          }
        },
        "denominator": "panel hosts whose robots.txt or responses GAIP read this month (latest read)",
        "id": "ai_preference_adoption",
        "label": "Hosts carrying any AI-preference signal",
        "of_which_ietf_aipref": {
          "count": 5,
          "of": 3486,
          "share": 0.0014
        },
        "panel": {
          "denominator": "panel hosts whose robots.txt or responses GAIP read this month (latest read)",
          "id": "AGENTS-COHORT-2026-10",
          "of_which_ietf_aipref": {
            "count": 5,
            "of": 3486,
            "share": 0.0014
          },
          "value": {
            "count": 339,
            "of": 3486,
            "share": 0.0972
          },
          "weekly_totals": {
            "withheld": "a weekly part is under 5"
          }
        },
        "source": "ai_permissions: IETF AI preferences Content-Usage, RSL, W3C TDMRep, Content Signals (ai_permission_history.monthly_adoption)",
        "value": {
          "count": 339,
          "of": 3486,
          "share": 0.0972
        }
      }
    ],
    "generated_at_utc": "2026-10-17T23:42:10Z",
    "json": "https://www.gaipagents.com/v1/free/agent-web-index?month=2026-10",
    "licence": "CC BY 4.0",
    "licence_url": "https://creativecommons.org/licenses/by/4.0/",
    "minimum_cell_size": 5,
    "month": "2026-10",
    "name": "GAIP Agent Web Index",
    "not_collected_yet": {
      "agent_prices": {
        "collector_on": false,
        "status": "not collected yet (switched off until the founder confirms the source terms)"
      },
      "erc8004_cards": {
        "collector_on": false,
        "status": "not collected yet (switched off until the founder confirms the source terms)"
      }
    },
    "reliability": {
      "cells": [
        {
          "agents": 18777,
          "agents_reachable_on_95_percent_of_visits": {
            "count": 17658,
            "of": 18777,
            "share": 0.9404
          },
          "cohort": "all",
          "protocol": "ALL",
          "response_time_ms": {
            "agents": 11704,
            "p50": 229,
            "p95": 1129,
            "successful_handshakes": 53894
          },
          "visits": 86350,
          "visits_reachable": {
            "count": 84252,
            "of": 86350,
            "share": 0.9757
          }
        },
        {
          "agents": 17944,
          "agents_reachable_on_95_percent_of_visits": {
            "count": 16876,
            "of": 17944,
            "share": 0.9405
          },
          "cohort": "all",
          "protocol": "MCP",
          "response_time_ms": {
            "agents": 10929,
            "p50": 240,
            "p95": 1159,
            "successful_handshakes": 46079
          },
          "visits": 78338,
          "visits_reachable": {
            "count": 76354,
            "of": 78338,
            "share": 0.9747
          }
        },
        {
          "agents": 833,
          "agents_reachable_on_95_percent_of_visits": {
            "count": 782,
            "of": 833,
            "share": 0.9388
          },
          "cohort": "all",
          "protocol": "A2A",
          "response_time_ms": {
            "agents": 775,
            "p50": 175,
            "p95": 788,
            "successful_handshakes": 7815
          },
          "visits": 8012,
          "visits_reachable": {
            "count": 7898,
            "of": 8012,
            "share": 0.9858
          }
        },
        {
          "agents": 3785,
          "agents_reachable_on_95_percent_of_visits": {
            "count": 3490,
            "of": 3785,
            "share": 0.9221
          },
          "cohort": "panel",
          "protocol": "ALL",
          "response_time_ms": {
            "agents": 2277,
            "p50": 226,
            "p95": 1119,
            "successful_handshakes": 32850
          },
          "visits": 52905,
          "visits_reachable": {
            "count": 51750,
            "of": 52905,
            "share": 0.9782
          }
        },
        {
          "agents": 3324,
          "agents_reachable_on_95_percent_of_visits": {
            "count": 3044,
            "of": 3324,
            "share": 0.9158
          },
          "cohort": "panel",
          "protocol": "MCP",
          "response_time_ms": {
            "agents": 1824,
            "p50": 243,
            "p95": 1162,
            "successful_handshakes": 25629
          },
          "visits": 45563,
          "visits_reachable": {
            "count": 44480,
            "of": 45563,
            "share": 0.9762
          }
        },
        {
          "agents": 461,
          "agents_reachable_on_95_percent_of_visits": {
            "count": 446,
            "of": 461,
            "share": 0.9675
          },
          "cohort": "panel",
          "protocol": "A2A",
          "response_time_ms": {
            "agents": 453,
            "p50": 173,
            "p95": 794,
            "successful_handshakes": 7221
          },
          "visits": 7342,
          "visits_reachable": {
            "count": 7270,
            "of": 7342,
            "share": 0.9902
          }
        }
      ],
      "citation": "GAIP Agent Reliability Index, the 30 days to 17 October 2026, gaipagents.com/state-of-agents, CC BY 4.0",
      "download": "https://www.gaipagents.com/data/reliability-index.csv",
      "method": "Built on the Observatory's cycle from the stored status observations of public MCP servers and A2A agents. A visit is an observation in which GAIP sent a request (reachable recorded as true or false); observations where GAIP sent nothing (withdrawn, opted out, robots.txt refused, not active in its source) are not visits. Reachable: the host answered with any HTTP status. A successful handshake is a reachable visit with an HTTP 2xx answer (MCP: the initialize answer; A2A: the agent card), with its response time in milliseconds. Per cell: the share of visits reachable; the share of agents with at least one visit that were reachable on at least 95% of their visits; the p50 and p95 response time of successful handshakes (nearest rank). Cells: protocol MCP, A2A or both, for all public agents GAIP watches and for the frozen reference panel AGENTS-COHORT-2026-10. A cell is shown when it has at least 5 agents (response times: 5 agents with a successful handshake) and any count under 5 is withheld. GAIP's own agents, hosts read because an outside caller asked about them, and withdrawn or unpublished agents are left out. A month runs from the Monday of its earliest ISO week to the Monday after its last (as the Agent Web Index) and is frozen once that window ends; the current block covers the last 30 days and is rebuilt hourly. GAIP keeps the newest 60 raw observations of each agent, so an agent visited more often than that in a window counts its newest 60. Facts as observed; not an assessment of any party.",
      "name": "GAIP Agent Reliability Index",
      "period": {
        "kind": "rolling_30_days",
        "label": "the 30 days to 17 October 2026",
        "rebuilt": "at most hourly",
        "status": "provisional",
        "window_utc": [
          "2026-09-17T22:57:08Z",
          "2026-10-17T22:57:08Z"
        ]
      }
    },
    "reproduce": {
      "queries": "https://www.gaipagents.com/v1/free/agent-web-index/queries",
      "script": "https://www.gaipagents.com/v1/free/agent-web-index/reproduce.py"
    },
    "rules": "Aggregates only: a count is shown only when it and its total are at least 5; no host, agent or caller is named; facts are as observed by GAIP at the stated time and assess no one. A month is final only after it ends; until then it is provisional.",
    "sample_frame": {
      "all_agents": {
        "as_of_utc": "2026-10-17T23:42:10Z",
        "rule": "Each figure's headline counts every public MCP server, A2A agent or host GAIP watched or read in the month, from every source; its denominator is stated beside it. Left out: hosts an outside caller asked about, GAIP's own agents and rows under a method version with a known defect.",
        "watched_public_agents": 22735
      },
      "left_out": "Hosts GAIP read only because an outside caller asked about them, and rows read under a method version with a known defect (https://www.gaipagents.com/v1/free/observatory/methods).",
      "official_mcp_registry": {
        "basis": "Server entries listed in GAIP's last complete walk of the Official MCP Registry (each registry page counted as served).",
        "entries": {
          "count": 44477,
          "from": "walk record",
          "meaning": "(a) Server entries the Official MCP Registry listed across every page of GAIP's last complete walk of it (the walk asks for the latest version of each server, so each server name counts once; package-only servers count too).",
          "walk_completed_at_utc": "2026-10-17T19:29:51Z"
        },
        "read_at_utc": "2026-10-17T19:29:51Z",
        "read_last_7_days": {
          "as_of_utc": "2026-10-17T23:42:10Z",
          "count": 21830,
          "meaning": "(d) Of (c), servers GAIP read (an observation attempt was recorded) in the last 7 days."
        },
        "reconcile_note": "(d) <= (c) <= (b) <= (a).",
        "reconciles": true,
        "remote": {
          "count": 27634,
          "meaning": "(b) Of (a), entries with a remote endpoint GAIP can read: a streamable-http or SSE remote with a public https URL, counted in the same walk."
        },
        "servers_listed": 44477,
        "walk_in_progress": {
          "entries_read_so_far": 2000,
          "meaning": "The walk now under way has read this many entries so far: a lower bound on the registry's size, not its size. It resumes by cursor at most 20 pages of 100 every 2 hours, and holds on a page while the admission allowance has no room, so a complete walk can take days.",
          "remote_so_far": 1788
        },
        "watched": {
          "as_of_utc": "2026-10-17T23:42:10Z",
          "count": 21873,
          "meaning": "(c) Official MCP Registry servers GAIP watches when this copy was built: active in the registry, inside the 50-per-host cap and not opted out. Admission is limited by the request budget, so (c) can trail (b); servers admitted since the walk ended can also put (c) above (b) until the next complete walk."
        }
      },
      "panel": {
        "cohort": "2026-10",
        "hosts": 3676,
        "id": "AGENTS-COHORT-2026-10",
        "ids": "https://www.gaipagents.com/v1/free/data/releases",
        "issued_at_utc": "2026-10-02T15:52:39Z",
        "mcp_servers_from_official_mcp_registry": 3629,
        "mcp_servers_from_official_mcp_registry_meaning": "Panel members that came from the Official MCP Registry. This is part of the panel, not the registry's size (see official_mcp_registry).",
        "members": 4157,
        "membership_sha256": "2233a448bbd86b8bad7ba29f7cf1532f7dca5bfbe5e851e72d976e4ef7dcb5b5",
        "rule": "Every public MCP server and A2A agent GAIP watched when the panel was frozen (October 2026); none is removed or replaced, so a member that stops answering still counts. Shown beside each figure so the same agents can be followed month to month.",
        "size_at_freeze": 4157
      }
    },
    "schema_version": "gaip.agent-web-index.v1",
    "status": "provisional",
    "title": "GAIP Agent Web Index \u2014 October 2026",
    "weekly_totals_rule": "Each month figure is split into ISO-week parts that add up to it exactly: tools by the week of an agent's first tool change in the month (the denominator is not split); terms by the week of the host's first read in the month; signed cards and AI preferences by the week of the host's latest read in the month. Parts are published only when every one of them (numerator and denominator) is at least 5; otherwise all of that figure's parts are withheld, so no part under 5 can be worked out by subtraction. A week with no part is left out.",
    "weeks": [
      "2026-W41",
      "2026-W42",
      "2026-W43",
      "2026-W44"
    ],
    "window_utc": [
      "2026-10-05",
      "2026-11-02"
    ]
  },
  "aipref_adoption": {
    "agent_hosts": {
      "aipref_content_usage": {
        "count": 22,
        "of": 20019,
        "share": 0.0011
      },
      "aipref_training_refused": {
        "count": 8,
        "of": 20019,
        "share": 0.0004
      },
      "any_signal": {
        "count": 1893,
        "of": 20019,
        "share": 0.0946
      },
      "content_signal": {
        "count": 1863,
        "of": 20019,
        "share": 0.0931
      },
      "content_signal_ai_train_no": {
        "count": 541,
        "of": 20019,
        "share": 0.027
      },
      "hosts": 20019,
      "robots_read": 12843,
      "rsl_licence": {
        "count": 33,
        "of": 20019,
        "share": 0.0016
      },
      "tdmrep_file": {
        "count": null,
        "of": null,
        "suppressed": true
      },
      "tdmrep_header": {
        "count": 29,
        "of": 20019,
        "share": 0.0014
      }
    },
    "meaning": "Hosts whose files or responses carried the signal when GAIP last read them in the month, observed at the stated time. Not an assessment of any site and not legal advice.",
    "methods": "/v1/free/observatory/methods",
    "minimum_cell_size": 5,
    "month": "2026-10",
    "parser_follows": {
      "aipref_attach": "draft-ietf-aipref-attach-05 (19 Aug 2026)",
      "aipref_vocab": "draft-ietf-aipref-vocab-08 (14 Sep 2026)",
      "content_signals": "Content Signals Policy (contentsignals.org)",
      "rsl": "RSL 1.0 (RSL-SPEC-1.0, 10 Dec 2025)",
      "tdmrep": "W3C TDM Reservation Protocol, Final Community Group Report"
    },
    "rows_excluded_known_method_defect": 0,
    "shop_panel_hosts": {
      "aipref_content_usage": {
        "count": null,
        "of": 9106,
        "suppressed": true
      },
      "aipref_training_refused": {
        "count": null,
        "of": 9106,
        "suppressed": true
      },
      "any_signal": {
        "count": 95,
        "of": 9106,
        "share": 0.0104
      },
      "content_signal": {
        "count": 88,
        "of": 9106,
        "share": 0.0097
      },
      "content_signal_ai_train_no": {
        "count": 59,
        "of": 9106,
        "share": 0.0065
      },
      "hosts": 9106,
      "robots_read": 8643,
      "rsl_licence": {
        "count": null,
        "of": 9106,
        "suppressed": true
      },
      "tdmrep_file": {
        "count": null,
        "of": 8942,
        "suppressed": true
      },
      "tdmrep_header": {
        "count": 5,
        "of": 9106,
        "share": 0.0005
      }
    },
    "signals": {
      "aipref_content_usage": "IETF AI preferences: a Content-Usage line in robots.txt or a Content-Usage header",
      "aipref_training_refused": "IETF AI preferences: a Content-Usage preference with train in its key set to n",
      "any_signal": "Any of the four",
      "content_signal": "Content Signals: a Content-Signal line in robots.txt",
      "content_signal_ai_train_no": "Content Signals: ai-train=no",
      "rsl_licence": "RSL: a licence link (robots.txt License:, Link header or HTML link)",
      "tdmrep_file": "W3C TDMRep: /.well-known/tdmrep.json published (shop hosts only; agent hosts are not asked)",
      "tdmrep_header": "W3C TDMRep: a TDM-Reservation response header seen"
    },
    "weeks": [
      "2026-W41",
      "2026-W42"
    ]
  },
  "automatic_evidence_credit": false,
  "capability_change_log": {
    "earlier_pruned_anchor_sha256": null,
    "entries": 34521,
    "head_sha256": "cccb299b02cb1f015b31c6792123e85a5ab6f978e9cd952a22ecbd3b8e83ab41",
    "last_sequence": 34529
  },
  "citation": "GAIP Agent Observatory, State of public AI agents, October 2026. https://www.gaipagents.com/state-of-agents?month=2026-10 (weekly snapshots 2026-W41; latest SHA-256 0c9b250ad662e1d3e835ba4a5ac77f5d27aabdb0032fca10b2cc61bee4432781) Capability change-log head SHA-256 cccb299b02cb1f015b31c6792123e85a5ab6f978e9cd952a22ecbd3b8e83ab41 (34521 entries).",
  "collection_record": {
    "available": true,
    "boundary": "GAIP's own run record: when its Observatory ran and what it managed to collect. It describes GAIP's collection, not any agent, site or party.",
    "chain": {
      "anchored_in": "the daily signed anchor (unique_datasets.collection_ledger)",
      "entries": 13,
      "genesis": "0000000000000000000000000000000000000000000000000000000000000000",
      "head_sha256": "4dbbcccd48a13636b69fc3490e2535def01d9e20a443aa17b761d6701df3c586"
    },
    "days_frozen": 13,
    "downloads": {
      "csv": "https://www.gaipagents.com/data/collection-ledger.csv",
      "json": "https://www.gaipagents.com/data/collection-ledger.json"
    },
    "first_day": "2026-10-04",
    "gap_rule": "an interval between Observatory tick starts longer than 1800 seconds (2 x 900)",
    "gaps_last_24_hours": [],
    "generated_at_utc": "2026-10-17T22:45:59Z",
    "known_gaps": [
      {
        "cause": "Registry walks read up to 20 pages from one host while the outbound gate allows 10 requests a minute per host; the 11th page raised _BudgetExhausted out of the walk, the cursor was never saved and the cycle returned before observing, on every tick (the refresh livelock).",
        "end_is_estimate": true,
        "end_utc": "2026-10-03T07:52:15Z",
        "estimate_note": "The end is when PR #824 (the fix) was merged to main, 2026-10-03T07:52:15Z (git merge commit f0ae6601). Railway deployed it a few minutes later; the exact deploy time is not recorded in the repository, so observing resumed at about this time. The handover log calls it about 8 hours.",
        "fix_pr": "#824",
        "id": "observatory-refresh-livelock-2026-10-02",
        "not_collected": "Observatory observations: every tick claimed and observed 0 targets (tick lines showed budget_exhausted or TimeoutError), so no status observations, manifest changes or capability records were written.",
        "scope": "observatory",
        "sources": [
          "agent_economy/governance/archive/GAIP_OPERATOR_HANDOVER_LOG_2026_09_28_TO_10_03.md section '3 Oct 2026, 08:00: Observatory stopped observing for ~8 h'",
          "git: merge of PR #824 (claude/observatory-refresh-livelock-20261003-0800) at 2026-10-03T07:52:15Z; test agent_economy/tests/test_observatory_refresh_livelock_v1.py"
        ],
        "start_is_estimate": false,
        "start_utc": "2026-10-02T23:16:00Z"
      },
      {
        "cause": "The in-memory buffer evicted entries waiting for an extra read before they were written; the shop panel did not read tdmrep.json itself.",
        "end_is_estimate": true,
        "end_utc": "2026-10-03T10:02:34Z",
        "estimate_note": "Start: the long-run datasets (PR #750) were merged at 2026-10-01T21:09:04Z and deployed shortly after; the eviction is assumed from then. End: PR #826 (data4-dataset-queue) was merged at 2026-10-03T10:02:34Z; Railway deployed it shortly after (exact deploy time not recorded). The share lost (about 75%) is the data4 deep dive's estimate, not a count.",
        "fix_pr": "#826",
        "id": "shop-panel-ai-permission-eviction-2026-10-01",
        "not_collected": "About 75% (estimate) of shop-host AI-permission facts (ai_permissions dataset, shop hosts) were evicted from an in-memory queue before they were written; the rest were written.",
        "scope": "unique_datasets.ai_permissions (shop hosts)",
        "share_lost_estimate": 0.75,
        "sources": [
          "agent_economy/governance/GAIP_DATA4_DEEP_DIVE_2026_10_02.md ('It loses data silently. About 75% of shop-host AI-permission facts are evicted ...')",
          "agent_economy/governance/archive/GAIP_OPERATOR_HANDOVER_LOG_2026_09_28_TO_10_03.md ('Merged 3 Oct morning: #826 data4-dataset-queue')",
          "git: merge of PR #750 at 2026-10-01T21:09:04Z; merge of PR #826 at 2026-10-03T10:02:34Z"
        ],
        "start_is_estimate": true,
        "start_utc": "2026-10-01T21:09:04Z"
      },
      {
        "cause": "Deploy overlap during the PR #843 deploy (as recorded in the handover); no code fix was needed, the next tick was clean.",
        "end_is_estimate": false,
        "end_utc": "2026-10-03T17:14:00Z",
        "estimate_note": "The failed tick's start is approximate: PR #843 was merged at 2026-10-03T16:49:43Z and the tick right after its deploy ended DatabaseError; the next tick, at 17:14, was clean. Ticks start every 15 minutes, so the failed tick started at about 16:55-16:59Z.",
        "fix_pr": null,
        "id": "data5-deploy-tick-database-error-2026-10-03",
        "not_collected": "One Observatory tick observed nothing: the tick right after the data5 deploy ended with DatabaseError.",
        "scope": "observatory",
        "sources": [
          "agent_economy/governance/GAIP_OPERATOR_HANDOVER.md section '3 Oct 2026, 19:30: data5' ('The first tick after the 843 deploy logged DatabaseError (deploy overlap); the next tick (17:14) was clean')",
          "git: merge of PR #843 at 2026-10-03T16:49:43Z"
        ],
        "start_is_estimate": true,
        "start_utc": "2026-10-03T16:55:00Z"
      },
      {
        "cause": "The anchor workflow's runs on 28 Sep failed twice and were then cancelled; it ran on GitHub Actions only on a push or by hand until the COO schedule dispatcher began running it daily on 1 Oct 2026 (moat moves), and dated anchor files began the same day (record durability).",
        "end_is_estimate": false,
        "end_utc": "2026-10-01T19:30:20Z",
        "estimate_note": "Start: the day GAIP's record begins (28 Sep 2026); no daily anchor was kept on or after it until 1 Oct. End: the anchored_at_utc of the oldest anchor kept in the repository (agent_economy/anchors/2026/10/01/193020Z.anchor.json). An anchor run did succeed at 2026-10-01T07:35:45Z (workflow_dispatch), before anchors were kept as dated files; only its Actions artifact holds it.",
        "fix_pr": null,
        "id": "history-anchor-not-yet-daily-2026-09-28",
        "not_collected": "No independent daily timestamp (Sigstore/Rekor anchor) of the history log's chain head was kept for 28, 29 and 30 Sep 2026 or the morning of 1 Oct. The history log itself kept every entry; the 1 Oct anchor's chain head covers every entry before it, so those entries are dated no later than 1 Oct by an outside witness, not day by day.",
        "scope": "history_anchor",
        "sources": [
          "GitHub Actions runs of gaip-history-anchor-v1.yml: 36446933181 (2026-09-28T15:52:56Z, failure), 36448751427 (2026-09-28T16:07:37Z, failure), 36450139863 (2026-09-28T16:19:03Z, cancelled), 36831230611 (2026-10-01T07:35:45Z, success)",
          "agent_economy/governance/GAIP_OPERATOR_HANDOVER.md, 'Moat moves (1 Oct ...)': the schedule dispatcher now runs gaip-history-anchor-v1.yml daily",
          "agent_economy/anchors/2026/10/01/193020Z.anchor.json (the oldest anchor kept as a dated file)"
        ],
        "start_is_estimate": true,
        "start_utc": "2026-09-28T00:00:00Z"
      }
    ],
    "last_30_days": {
      "days": 13,
      "from_day": "2026-10-04",
      "fully_covered_days": 11,
      "gaps": [
        {
          "end_utc": "2026-10-09T17:32:32Z",
          "restart_in_gap": null,
          "runtime_restarts_in_gap": [],
          "seconds": 3500.3,
          "start_utc": "2026-10-09T16:34:12Z"
        }
      ],
      "share_of_15_minute_windows_with_a_tick": 0.986,
      "ticks": 1336,
      "ticks_with_error": 171,
      "to_day": "2026-10-16",
      "windows_possible": 1214,
      "windows_with_tick": 1197
    },
    "last_7_days": [
      {
        "day": "2026-10-10",
        "fully_covered": true,
        "gaps": 0,
        "share_of_15_minute_windows_with_a_tick": 0.9896,
        "ticks": 106
      },
      {
        "day": "2026-10-11",
        "fully_covered": true,
        "gaps": 0,
        "share_of_15_minute_windows_with_a_tick": 0.9896,
        "ticks": 98
      },
      {
        "day": "2026-10-12",
        "fully_covered": true,
        "gaps": 0,
        "share_of_15_minute_windows_with_a_tick": 0.9688,
        "ticks": 103
      },
      {
        "day": "2026-10-13",
        "fully_covered": true,
        "gaps": 0,
        "share_of_15_minute_windows_with_a_tick": 1.0,
        "ticks": 119
      },
      {
        "day": "2026-10-14",
        "fully_covered": true,
        "gaps": 0,
        "share_of_15_minute_windows_with_a_tick": 0.9896,
        "ticks": 116
      },
      {
        "day": "2026-10-15",
        "fully_covered": true,
        "gaps": 0,
        "share_of_15_minute_windows_with_a_tick": 1.0,
        "ticks": 102
      },
      {
        "day": "2026-10-16",
        "fully_covered": true,
        "gaps": 0,
        "share_of_15_minute_windows_with_a_tick": 0.9896,
        "ticks": 101
      }
    ],
    "last_frozen_day": "2026-10-16",
    "last_tick_at_utc": "2026-10-17T22:42:03Z",
    "message": null,
    "method": "https://www.gaipagents.com/observatory#2s-collection-ledger-and-known-gaps",
    "name": "GAIP collection ledger",
    "runtime_restarts": {
      "last_7_days": [
        "2026-10-10T22:47:18Z",
        "2026-10-11T01:27:45Z",
        "2026-10-11T01:44:39Z",
        "2026-10-11T01:59:17Z",
        "2026-10-11T03:02:45Z",
        "2026-10-11T07:26:19Z",
        "2026-10-11T07:38:53Z",
        "2026-10-11T10:12:15Z",
        "2026-10-11T11:45:15Z",
        "2026-10-11T11:45:27Z",
        "2026-10-11T11:46:06Z",
        "2026-10-11T11:53:41Z",
        "2026-10-11T11:55:58Z",
        "2026-10-11T14:49:05Z",
        "2026-10-11T14:56:36Z",
        "2026-10-11T17:43:23Z",
        "2026-10-11T17:57:08Z",
        "2026-10-11T20:33:22Z",
        "2026-10-11T22:42:50Z",
        "2026-10-12T06:19:20Z",
        "2026-10-12T06:32:29Z",
        "2026-10-12T08:13:17Z",
        "2026-10-12T08:16:27Z",
        "2026-10-12T08:37:34Z",
        "2026-10-12T08:54:26Z",
        "2026-10-12T12:19:06Z",
        "2026-10-12T14:03:42Z",
        "2026-10-12T17:34:31Z",
        "2026-10-12T17:42:08Z",
        "2026-10-12T17:51:44Z",
        "2026-10-12T18:01:59Z",
        "2026-10-12T18:08:33Z",
        "2026-10-12T18:12:37Z",
        "2026-10-12T18:21:08Z",
        "2026-10-12T18:26:21Z",
        "2026-10-12T18:29:18Z",
        "2026-10-12T19:19:33Z",
        "2026-10-12T19:22:36Z",
        "2026-10-12T19:28:25Z",
        "2026-10-12T20:02:07Z",
        "2026-10-12T21:49:24Z",
        "2026-10-12T21:54:25Z",
        "2026-10-12T22:00:44Z",
        "2026-10-12T22:23:47Z",
        "2026-10-13T04:08:57Z",
        "2026-10-13T08:24:25Z",
        "2026-10-13T09:01:39Z",
        "2026-10-13T09:41:46Z",
        "2026-10-13T09:43:22Z",
        "2026-10-13T09:48:33Z",
        "2026-10-13T09:50:33Z",
        "2026-10-13T09:59:33Z",
        "2026-10-13T10:05:03Z",
        "2026-10-13T10:44:13Z",
        "2026-10-13T10:51:56Z",
        "2026-10-13T11:01:39Z",
        "2026-10-13T11:08:53Z",
        "2026-10-13T11:09:00Z",
        "2026-10-13T11:12:14Z",
        "2026-10-13T11:21:47Z",
        "2026-10-13T11:37:39Z",
        "2026-10-13T11:38:50Z",
        "2026-10-13T11:49:59Z",
        "2026-10-13T11:50:01Z",
        "2026-10-13T11:50:02Z",
        "2026-10-13T11:50:54Z",
        "2026-10-13T12:03:20Z",
        "2026-10-13T12:52:44Z",
        "2026-10-13T12:53:49Z",
        "2026-10-13T13:05:06Z",
        "2026-10-13T13:07:16Z",
        "2026-10-13T13:15:08Z",
        "2026-10-13T13:49:46Z",
        "2026-10-13T13:52:36Z",
        "2026-10-13T13:56:13Z",
        "2026-10-13T14:08:35Z",
        "2026-10-13T14:23:21Z",
        "2026-10-13T14:33:19Z",
        "2026-10-13T14:46:20Z",
        "2026-10-13T15:16:31Z",
        "2026-10-13T15:23:57Z",
        "2026-10-13T15:34:12Z",
        "2026-10-13T15:42:03Z",
        "2026-10-13T15:44:52Z",
        "2026-10-13T15:56:35Z",
        "2026-10-13T16:46:19Z",
        "2026-10-13T16:56:35Z",
        "2026-10-13T17:19:26Z",
        "2026-10-13T17:28:34Z",
        "2026-10-13T17:36:57Z",
        "2026-10-13T18:20:32Z",
        "2026-10-13T18:20:34Z",
        "2026-10-13T18:20:36Z",
        "2026-10-13T18:21:12Z",
        "2026-10-13T18:23:11Z",
        "2026-10-13T18:58:33Z",
        "2026-10-13T19:20:16Z",
        "2026-10-13T19:32:58Z",
        "2026-10-13T19:50:10Z",
        "2026-10-13T19:57:46Z",
        "2026-10-13T20:16:07Z",
        "2026-10-13T20:23:21Z",
        "2026-10-13T20:31:27Z",
        "2026-10-13T20:41:38Z",
        "2026-10-13T20:49:52Z",
        "2026-10-13T20:56:33Z",
        "2026-10-13T21:04:59Z",
        "2026-10-13T21:21:11Z",
        "2026-10-13T21:44:57Z",
        "2026-10-13T21:52:06Z",
        "2026-10-13T22:17:10Z",
        "2026-10-13T23:06:06Z",
        "2026-10-13T23:12:31Z",
        "2026-10-13T23:13:32Z",
        "2026-10-13T23:36:52Z",
        "2026-10-14T00:22:43Z",
        "2026-10-14T00:30:19Z",
        "2026-10-14T00:38:53Z",
        "2026-10-14T04:27:43Z",
        "2026-10-14T04:32:34Z",
        "2026-10-14T05:35:58Z",
        "2026-10-14T05:52:32Z",
        "2026-10-14T06:28:58Z",
        "2026-10-14T06:55:07Z",
        "2026-10-14T06:56:58Z",
        "2026-10-14T07:51:15Z",
        "2026-10-14T08:18:28Z",
        "2026-10-14T08:50:01Z",
        "2026-10-14T09:06:18Z",
        "2026-10-14T09:16:01Z",
        "2026-10-14T09:20:14Z",
        "2026-10-14T09:26:34Z",
        "2026-10-14T09:34:11Z",
        "2026-10-14T10:06:24Z",
        "2026-10-14T10:14:25Z",
        "2026-10-14T10:47:26Z",
        "2026-10-14T11:21:40Z",
        "2026-10-14T11:27:27Z",
        "2026-10-14T11:31:37Z",
        "2026-10-14T11:40:14Z",
        "2026-10-14T11:55:52Z",
        "2026-10-14T12:26:24Z",
        "2026-10-14T13:01:28Z",
        "2026-10-14T13:14:05Z",
        "2026-10-14T13:29:12Z",
        "2026-10-14T13:32:48Z",
        "2026-10-14T13:40:21Z",
        "2026-10-14T13:41:33Z",
        "2026-10-14T13:51:15Z",
        "2026-10-14T14:23:10Z",
        "2026-10-14T14:23:15Z",
        "2026-10-14T14:47:06Z",
        "2026-10-14T15:00:00Z",
        "2026-10-14T15:27:22Z",
        "2026-10-14T16:08:08Z",
        "2026-10-14T16:21:36Z",
        "2026-10-14T17:04:56Z",
        "2026-10-14T17:13:11Z",
        "2026-10-14T17:56:25Z",
        "2026-10-14T18:02:47Z",
        "2026-10-14T18:05:05Z",
        "2026-10-14T18:09:40Z",
        "2026-10-14T18:19:34Z",
        "2026-10-14T18:37:52Z",
        "2026-10-14T18:45:19Z",
        "2026-10-14T19:01:49Z",
        "2026-10-14T19:21:22Z",
        "2026-10-14T19:29:37Z",
        "2026-10-14T19:47:45Z",
        "2026-10-14T19:55:30Z",
        "2026-10-14T20:06:14Z",
        "2026-10-14T20:06:57Z",
        "2026-10-14T20:16:38Z",
        "2026-10-14T20:17:15Z",
        "2026-10-14T20:46:55Z",
        "2026-10-14T20:55:08Z",
        "2026-10-14T21:04:37Z",
        "2026-10-14T21:05:14Z",
        "2026-10-14T21:30:08Z",
        "2026-10-14T21:46:01Z",
        "2026-10-14T23:25:14Z",
        "2026-10-14T23:53:27Z",
        "2026-10-15T00:01:01Z",
        "2026-10-15T01:56:02Z",
        "2026-10-15T01:59:14Z",
        "2026-10-15T06:26:29Z",
        "2026-10-15T06:27:48Z",
        "2026-10-15T06:42:13Z",
        "2026-10-15T07:38:29Z",
        "2026-10-15T08:51:59Z",
        "2026-10-15T09:12:32Z",
        "2026-10-15T09:55:37Z",
        "2026-10-15T10:23:05Z",
        "2026-10-15T10:57:00Z",
        "2026-10-15T12:11:05Z",
        "2026-10-15T12:14:53Z",
        "2026-10-15T12:34:04Z",
        "2026-10-15T13:14:34Z",
        "2026-10-15T13:24:07Z",
        "2026-10-15T19:55:58Z",
        "2026-10-15T20:18:18Z",
        "2026-10-15T20:21:55Z",
        "2026-10-15T22:08:29Z",
        "2026-10-15T23:30:10Z",
        "2026-10-15T23:30:17Z",
        "2026-10-16T00:45:23Z",
        "2026-10-16T04:17:01Z",
        "2026-10-16T04:41:28Z",
        "2026-10-16T06:03:35Z",
        "2026-10-16T06:05:57Z",
        "2026-10-16T07:40:10Z",
        "2026-10-16T07:48:39Z",
        "2026-10-16T07:49:10Z",
        "2026-10-16T13:13:07Z",
        "2026-10-16T13:19:10Z",
        "2026-10-16T21:54:44Z",
        "2026-10-17T07:20:34Z",
        "2026-10-17T07:22:50Z",
        "2026-10-17T07:49:53Z",
        "2026-10-17T10:20:12Z",
        "2026-10-17T12:09:14Z",
        "2026-10-17T12:14:51Z",
        "2026-10-17T19:47:11Z",
        "2026-10-17T21:57:31Z",
        "2026-10-17T22:42:03Z"
      ],
      "meaning": "When the Railway runtime that runs the tick started (each merge to main redeploys it). A tick cut short by a restart is not noted, so a gap with a restart in it can come from the restart rather than a stopped tick.",
      "recorded_from": "2026-10-10"
    },
    "schema_version": "gaip.collection-ledger.v1.record",
    "served": {
      "age_seconds": 3371,
      "meaning": "STORED: built by the Observatory runtime at stored_at_utc and served from the database (figures are as of that time). stale is true when the stored copy is older than 5400 seconds (the hourly rebuild plus two Observatory cycles).",
      "source": "STORED",
      "stale": false,
      "stale_after_seconds": 5400,
      "stored_at_utc": "2026-10-17T22:45:59Z"
    },
    "today_so_far": {
      "day": "2026-10-17",
      "gaps": [],
      "ticks": 92
    }
  },
  "corrections": "https://www.gaipagents.com/corrections",
  "declaration_drift": {
    "drift": {
      "agent_terms_hosts_changed_this_week": {
        "by_class": {
          "data_retention:changed": 56,
          "data_retention:declared": 21,
          "data_retention:no_longer_declared": 10,
          "first_observation": 2543,
          "mcp_tool_prices:changed": 10,
          "other": 459,
          "other_categories_under_5_each": 10,
          "pricing:changed": 517,
          "pricing:declared": 124,
          "pricing:no_longer_declared": 98,
          "rate_limit:changed": 30,
          "rate_limit:declared": 23,
          "rate_limit:no_longer_declared": 24,
          "terms_of_service:declared": 10,
          "terms_of_service:no_longer_declared": 7,
          "uptime_sla:declared": 10,
          "uptime_sla:no_longer_declared": 7
        },
        "entries": 3822
      },
      "all_watched_agents": {
        "agents_by_kind": {
          "behaviour_labels_changed": 166,
          "declared_version_changed": 1141,
          "input_or_output_format_changed": 973,
          "other_categories_under_5_each": 5,
          "other_declared_fields_changed": 380,
          "protocol_version_changed": 62,
          "sign_in_changed": 19,
          "tool_changed_past_the_64_kept_in_full": 31,
          "tool_descriptions_reworded": 1166,
          "tools_added": 519,
          "tools_removed": 124
        },
        "agents_change_not_classified": 17,
        "agents_changed": {
          "count": 2156,
          "of": 20673,
          "share": 0.1043
        },
        "agents_changed_means": "agents with at least one change other than the protocol version they answered with; protocol-version-only agents are counted separately",
        "agents_protocol_version_only": {
          "count": 0,
          "of": 20673,
          "share": null,
          "suppressed": true
        },
        "agents_watched": 20673,
        "agents_with_any_change_entry": 2173,
        "substantive": {
          "agents": {
            "count": 1510,
            "of": 20673,
            "share": 0.073
          },
          "kinds": [
            "behaviour_labels_changed",
            "endpoint_moved_host",
            "input_or_output_format_changed",
            "sign_in_changed",
            "terms_or_prices_changed",
            "tool_changed_past_the_64_kept_in_full",
            "tool_descriptions_reworded",
            "tools_added",
            "tools_removed"
          ],
          "silent_no_declared_version_change": {
            "count": 994,
            "of": 1510,
            "share": 0.6583
          },
          "version_change_not_known": {
            "count": 0,
            "of": 1510,
            "share": null,
            "suppressed": true
          },
          "with_a_declared_version_change": {
            "count": 516,
            "of": 1510,
            "share": 0.3417
          }
        }
      },
      "method": "Computed when the weekly snapshot is frozen, from the week's public capability change-log entries and the public targets' stored capability records. Per agent, kinds are the union over its entries in the week. 'agents_changed' leaves out agents whose only change was the protocol version they answered with (counted on their own). A substantive change (tools, descriptions, formats, behaviour labels, sign-in, terms or prices, endpoint host) is silent when no declared version (registry or card version, serverInfo.version) moved that week. Categories under 5 are folded; shares need both counts at 5 or more. No host, agent or tool is named.",
      "minimum_cell_size": 5,
      "panel": {
        "agents_by_kind": {
          "behaviour_labels_changed": 44,
          "declared_version_changed": 320,
          "input_or_output_format_changed": 182,
          "other_categories_under_5_each": 4,
          "other_declared_fields_changed": 168,
          "protocol_version_changed": 6,
          "sign_in_changed": 9,
          "tool_changed_past_the_64_kept_in_full": 6,
          "tool_descriptions_reworded": 256,
          "tools_added": 119,
          "tools_removed": 31
        },
        "agents_change_not_classified": 6,
        "agents_changed": {
          "count": 520,
          "of": 4145,
          "share": 0.1255
        },
        "agents_changed_means": "agents with at least one change other than the protocol version they answered with; protocol-version-only agents are counted separately",
        "agents_protocol_version_only": {
          "count": 0,
          "of": 4145,
          "share": null,
          "suppressed": true
        },
        "agents_watched": 4145,
        "agents_with_any_change_entry": 526,
        "cohort": "2026-10",
        "id": "AGENTS-COHORT-2026-10",
        "substantive": {
          "agents": {
            "count": 328,
            "of": 4145,
            "share": 0.0791
          },
          "kinds": [
            "behaviour_labels_changed",
            "endpoint_moved_host",
            "input_or_output_format_changed",
            "sign_in_changed",
            "terms_or_prices_changed",
            "tool_changed_past_the_64_kept_in_full",
            "tool_descriptions_reworded",
            "tools_added",
            "tools_removed"
          ],
          "silent_no_declared_version_change": {
            "count": 189,
            "of": 328,
            "share": 0.5762
          },
          "version_change_not_known": {
            "count": 0,
            "of": 328,
            "share": null,
            "suppressed": true
          },
          "with_a_declared_version_change": {
            "count": 139,
            "of": 328,
            "share": 0.4238
          }
        }
      },
      "schema_version": "gaip.declaration-drift.v1"
    },
    "totals": {
      "behaviour_hints": {
        "mcp_servers_with_any_hint": {
          "count": 5400,
          "of": 9376,
          "share": 0.5759
        },
        "note": "Up to 64 tools per server are kept in full; hints are read from those entries.",
        "tool_entries_examined": 95314,
        "tool_entries_with_hint": {
          "destructiveHint": {
            "count": 47377,
            "of": 95314,
            "share": 0.4971
          },
          "idempotentHint": {
            "count": 41080,
            "of": 95314,
            "share": 0.431
          },
          "openWorldHint": {
            "count": 52660,
            "of": 95314,
            "share": 0.5525
          },
          "readOnlyHint": {
            "count": 57684,
            "of": 95314,
            "share": 0.6052
          }
        }
      },
      "mcp_servers_with_a_tool_list": 9381,
      "method": "Computed when the weekly snapshot is frozen from the public targets' stored capability records and the week's registry-history entries. Aggregates only; categories under 5 are folded and shares need both counts at 5 or more.",
      "minimum_cell_size": 5,
      "output_schemas": {
        "mcp_servers_declaring_one_on_at_least_one_tool": {
          "count": 2803,
          "of": 9376,
          "share": 0.299
        },
        "note": "Only servers whose full tool list GAIP read since 1 Oct 2026 count (earlier records do not say)."
      },
      "registry_churn_this_week": {
        "entries_changed": 1804,
        "entries_listed_new": 2414,
        "entries_relisted": 77,
        "entries_removed": 142,
        "new_server_json_versions_archived": 9200
      },
      "schema_version": "gaip.declaration-drift.v1.totals",
      "sign_in_declared": {
        "a2a_cards_by_security_scheme_type": {
          "apiKey": 89,
          "http": 59,
          "httpAuth": 30,
          "none_declared": 49,
          "oauth2": 12,
          "other_categories_under_5_each": 7,
          "x402": 19
        },
        "a2a_cards_with_known_schemes": 239,
        "mcp_servers_by_registry_header_kind": {
          "api_key_or_token_header": 560,
          "authorization_header": 1970,
          "none_declared": 12660,
          "other_header": 231
        },
        "note": "MCP: the kind of header the server's registry entry asks callers to send (header names are grouped, never published). A2A: the security scheme types the card declares. OAuth protected-resource metadata is counted under standards_adoption; the share of MCP servers that answered with 401/403 is under observatory."
      },
      "tools_per_mcp_server": {
        "0": 5,
        "1": 552,
        "101_or_more": 33,
        "11-20": 1438,
        "2-5": 3624,
        "21-50": 905,
        "51-100": 183,
        "6-10": 2641
      },
      "x402_and_prices": {
        "a2a_cards_mentioning_x402": {
          "count": 245,
          "of": 753,
          "share": 0.3254
        },
        "a2a_cards_read": 753,
        "a2a_cards_read_in_full": 753,
        "a2a_cards_with_a_price_field": {
          "count": 92,
          "of": 753,
          "share": 0.1222
        },
        "note": "Declared x402 prices of agent hosts are in unique_datasets.agent_terms."
      }
    },
    "week": "2026-W41"
  },
  "declared_derivations": {
    "as_of_utc": "2026-10-12T00:42:50Z",
    "data_appetite": {
      "agents_with_tools_read": 9041,
      "asking_for_any_sensitive_category": {
        "count": 2068,
        "of": 9041,
        "share": 0.2287
      },
      "by_category": {
        "bank_account": {
          "count": 54,
          "of": 9041,
          "share": 0.006
        },
        "biometric": {
          "count": null,
          "of": 9041,
          "share": null,
          "suppressed": true
        },
        "credentials": {
          "count": 585,
          "of": 9041,
          "share": 0.0647
        },
        "date_of_birth": {
          "count": 89,
          "of": 9041,
          "share": 0.0098
        },
        "email": {
          "count": 1172,
          "of": 9041,
          "share": 0.1296
        },
        "file_upload": {
          "count": 329,
          "of": 9041,
          "share": 0.0364
        },
        "free_text_large": {
          "count": 1852,
          "of": 9041,
          "share": 0.2048
        },
        "government_id": {
          "count": 44,
          "of": 9041,
          "share": 0.0049
        },
        "health": {
          "count": 52,
          "of": 9041,
          "share": 0.0058
        },
        "payment_card": {
          "count": 6,
          "of": 9041,
          "share": 0.0007
        },
        "phone": {
          "count": 469,
          "of": 9041,
          "share": 0.0519
        },
        "postal_address": {
          "count": 303,
          "of": 9041,
          "share": 0.0335
        },
        "precise_location": {
          "count": 376,
          "of": 9041,
          "share": 0.0416
        }
      }
    },
    "dependencies": {
      "agents_with_declarations_read": 20540,
      "distinct_outside_domains": 194,
      "domains_shared_by_at_least_5_agents": 5,
      "named_only": "Service providers on GAIP's published list of well-known services, each depended on by at least 5 agents; every other domain is counted, never named.",
      "pointing_to_an_outside_domain": {
        "count": 9765,
        "of": 20540,
        "share": 0.4754
      },
      "top_shared_service_domains": [
        {
          "agents": {
            "count": 9502,
            "of": 20540,
            "share": 0.4626
          },
          "service_domain": "github.com"
        },
        {
          "agents": {
            "count": 51,
            "of": 20540,
            "share": 0.0025
          },
          "service_domain": "gitlab.com"
        },
        {
          "agents": {
            "count": 8,
            "of": 20540,
            "share": 0.0004
          },
          "service_domain": "supabase.co"
        }
      ]
    },
    "meaning": "Facts GAIP derives, at the time it observed each public MCP server or A2A agent, from what that agent declared: which categories of data its tools' input fields ask for (counts of fields by category, never field names or text), which outside domains its declarations point to (host names only) and how many agents each declared operator runs (operators are never named). Latest record of each public target observed in the last 30 days; counts from 1 to 4 withheld (shown as '<5' or left empty), shares only when both counts are at least 5. Not an assessment of any agent or operator.",
    "minimum_cell_size": 5,
    "operators": {
      "agents_run_by_the_10_largest_operators": {
        "count": 1138,
        "of": 20450,
        "share": 0.0556
      },
      "agents_with_declared_operator": 20450,
      "by_source_kind": {
        "card_provider_organization": 652,
        "card_provider_url": 9,
        "registry_namespace_domain": 13009,
        "registry_namespace_github": 6780
      },
      "named": null,
      "operators": 15755,
      "operators_by_agents_run": {
        "1": 14787,
        "10-49": 87,
        "2-4": 762,
        "5-9": 101,
        "50+": 18
      }
    },
    "rules_version": "gaip.data-appetite-rules.v1",
    "schema_version": "gaip.declared-derivations.v1.aggregate",
    "week": "2026-W41",
    "window_days": 30,
    "writing": {
      "latest_record_written_at_utc": "2026-10-12T00:42:50Z",
      "public_records_in_window": 20540
    }
  },
  "delivery_outcomes": {
    "boundary": "Aggregate facts about GAIP's own service, observed by GAIP. No caller, input, handle or third party is named or scored. Not a measure of independent adoption.",
    "by_agent": {
      "front-door": {
        "outcomes": {
          "blocked": {
            "count": null,
            "of": null,
            "share": null,
            "suppressed": true
          },
          "completed": {
            "count": null,
            "of": null,
            "share": null,
            "suppressed": true
          },
          "error": {
            "count": 0,
            "of": null,
            "share": null,
            "suppressed": true
          },
          "needs_input": {
            "count": 0,
            "of": null,
            "share": null,
            "suppressed": true
          }
        },
        "outside_calls": 3
      },
      "integration-protocol": {
        "outcomes": {
          "blocked": {
            "count": 59,
            "of": 123,
            "share": 0.4797
          },
          "completed": {
            "count": 64,
            "of": 123,
            "share": 0.5203
          },
          "error": {
            "count": 0,
            "of": 123,
            "share": null,
            "suppressed": true
          },
          "needs_input": {
            "count": 0,
            "of": 123,
            "share": null,
            "suppressed": true
          }
        },
        "outside_calls": 123
      },
      "integration-repair": {
        "outcomes": {
          "blocked": {
            "count": 5,
            "of": 6,
            "share": 0.8333
          },
          "completed": {
            "count": null,
            "of": 6,
            "share": null,
            "suppressed": true
          },
          "error": {
            "count": 0,
            "of": 6,
            "share": null,
            "suppressed": true
          },
          "needs_input": {
            "count": 0,
            "of": 6,
            "share": null,
            "suppressed": true
          }
        },
        "outside_calls": 6
      },
      "listing-observer": {
        "outcomes": {
          "blocked": {
            "count": null,
            "of": null,
            "share": null,
            "suppressed": true
          },
          "completed": {
            "count": 0,
            "of": null,
            "share": null,
            "suppressed": true
          },
          "error": {
            "count": 0,
            "of": null,
            "share": null,
            "suppressed": true
          },
          "needs_input": {
            "count": 0,
            "of": null,
            "share": null,
            "suppressed": true
          }
        },
        "outside_calls": 3
      },
      "procurement-verify": {
        "outcomes": {
          "blocked": {
            "count": 284,
            "of": 285,
            "share": 0.9965
          },
          "completed": {
            "count": null,
            "of": 285,
            "share": null,
            "suppressed": true
          },
          "error": {
            "count": 0,
            "of": 285,
            "share": null,
            "suppressed": true
          },
          "needs_input": {
            "count": 0,
            "of": 285,
            "share": null,
            "suppressed": true
          }
        },
        "outside_calls": 285
      },
      "trust-assurance": {
        "outcomes": {
          "blocked": {
            "count": 10,
            "of": 36,
            "share": 0.2778
          },
          "completed": {
            "count": 26,
            "of": 36,
            "share": 0.7222
          },
          "error": {
            "count": 0,
            "of": 36,
            "share": null,
            "suppressed": true
          },
          "needs_input": {
            "count": 0,
            "of": 36,
            "share": null,
            "suppressed": true
          }
        },
        "outside_calls": 36
      },
      "unattributed": {
        "outcomes": {
          "blocked": {
            "count": 182,
            "of": 1305,
            "share": 0.1395
          },
          "completed": {
            "count": 786,
            "of": 1305,
            "share": 0.6023
          },
          "error": {
            "count": 71,
            "of": 1305,
            "share": 0.0544
          },
          "needs_input": {
            "count": 266,
            "of": 1305,
            "share": 0.2038
          }
        },
        "outside_calls": 1305
      },
      "witness": {
        "outcomes": {
          "blocked": {
            "count": 54,
            "of": 88,
            "share": 0.6136
          },
          "completed": {
            "count": 30,
            "of": 88,
            "share": 0.3409
          },
          "error": {
            "count": null,
            "of": 88,
            "share": null,
            "suppressed": true
          },
          "needs_input": {
            "count": 0,
            "of": 88,
            "share": null,
            "suppressed": true
          }
        },
        "outside_calls": 88
      }
    },
    "definitions": {
      "agent": "The GAIP public agent that answered (front-door and unattributed as in /v1/free/north-star).",
      "cells": "Every cell is a count. A share is shown only when both the count and its total are at least 5.",
      "history": "Rows written before 1 Oct 2026 carry no agent and, on Railway /mcp, no post-call outcome; earlier months may overcount completed calls.",
      "outcomes": "completed, needs_input, blocked and error follow funnel_events.outcome_of_result, the one completion rule GAIP uses everywhere.",
      "outside_call": "Caller class UNKNOWN_CALLER and not declared synthetic; Witness checks also need an outside activity origin. Directories, monitors, marketing agents, GAIP's own clients and test runs are left out. It can still include unidentified automated callers.",
      "source": "GAIP's own records only. Call outcomes: the per-call funnel events GET /v1/free/north-star counts (gaip.traction-event.v2 rows named tool_call:<tool> or tool_outcome:<tool>). Delivery verdicts: Witness delivery checks (service WITNESS_DELIVERY) kept in GAIP's history.",
      "verdicts": "met and not_met are the Witness verdict of a delivery against the terms the caller registered; unknown is an INDETERMINATE verdict. A verdict describes one delivery check, not a party."
    },
    "delivery_verdicts": {
      "met": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "not_met": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "unknown": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      }
    },
    "licence": "Aggregate figures are licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/): reuse them freely with credit to the GAIP Agent Observatory and the citation shown. Founder decision #13, 1 Oct 2026.",
    "licence_url": "https://creativecommons.org/licenses/by/4.0/",
    "minimum_cell_size": 5,
    "month": "2026-10",
    "outcomes": {
      "blocked": {
        "count": 599,
        "of": 1849,
        "share": 0.324
      },
      "completed": {
        "count": 909,
        "of": 1849,
        "share": 0.4916
      },
      "error": {
        "count": 75,
        "of": 1849,
        "share": 0.0406
      },
      "needs_input": {
        "count": 266,
        "of": 1849,
        "share": 0.1439
      }
    },
    "outside_calls": 1849,
    "witness_delivery_checks": 0
  },
  "generated_at_utc": "2026-10-17T23:42:10Z",
  "headline": {
    "answered_at_least_once": {
      "count": 15345,
      "of": 20603,
      "share": 0.7448
    },
    "declared_in_package_not_observed_live": 27058,
    "mcp_asked_for_credentials": {
      "count": 4322,
      "of": 19755,
      "share": 0.2188
    },
    "mcp_tools_listed_without_credentials": {
      "count": 10254,
      "of": 19755,
      "share": 0.5191
    },
    "new_targets": 2414,
    "protocol_versions_reported": {
      "0.2.5": 5,
      "0.3": 22,
      "0.3.0": 344,
      "1.0": 90,
      "1.0.0": 12,
      "2024-11-05": 507,
      "2025-03-26": 474,
      "2025-06-18": 1533,
      "2025-11-25": 6587,
      "2026-07-28": 123,
      "other_categories_under_5_each": 14
    },
    "response_time_ms_median": 231,
    "snapshot_sha256": "0c9b250ad662e1d3e835ba4a5ac77f5d27aabdb0032fca10b2cc61bee4432781",
    "standards_documents": {
      "a2a_agent_card": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "a2a_agent_card_legacy": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_commerce": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_mandates": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_preferences": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_representation": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agentic_resource_discovery": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "ai_catalog": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "ai_txt": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "csaf_provider_metadata": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "erc8004_registration": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "gaip_notices": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "llms_txt": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "mcp_server_card": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "oauth_authorization_server": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "oauth_protected_resource": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "openid_configuration": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "web_bot_auth_directory": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "x402": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      }
    },
    "standards_hosts_probed": 0,
    "targets_by_kind": {
      "A2A_CARD": 870,
      "MCP_REMOTE": 19803
    },
    "targets_observed": 20603,
    "targets_public": 20673,
    "targets_with_a_new_manifest_version": 5530,
    "url": "https://www.gaipagents.com/v1/free/ecosystem/snapshots?week=2026-W41",
    "week": "2026-W41",
    "weekly_coverage_known_public_remote_agents": 20599,
    "weekly_coverage_share": 0.9985,
    "weekly_coverage_target_met": true,
    "weekly_coverage_target_share": 0.95
  },
  "licence": "Aggregate figures are licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/): reuse them freely with credit to the GAIP Agent Observatory and the citation shown. Founder decision #13, 1 Oct 2026.",
  "licence_url": "https://creativecommons.org/licenses/by/4.0/",
  "method": "https://www.gaipagents.com/methodology",
  "month": "2026-10",
  "notice": "Aggregate facts observed by GAIP at the stated time (UTC). Not an assessment of any named party. Counts under 5 are not turned into shares.",
  "outcome_ledger": {
    "chain": {
      "head_sha256": null,
      "rows": 0,
      "valid": true
    },
    "configured": true,
    "frozen": false,
    "head_sha256": null,
    "month": "2026-10",
    "note": "This month's row is frozen once the month has ended (from 1 November 2026)."
  },
  "price_gbp": 0,
  "reliability_index": {
    "cells": [
      {
        "agents": 18777,
        "agents_reachable_on_95_percent_of_visits": {
          "count": 17658,
          "of": 18777,
          "share": 0.9404
        },
        "cohort": "all",
        "protocol": "ALL",
        "response_time_ms": {
          "agents": 11704,
          "p50": 229,
          "p95": 1129,
          "successful_handshakes": 53894
        },
        "visits": 86350,
        "visits_reachable": {
          "count": 84252,
          "of": 86350,
          "share": 0.9757
        }
      },
      {
        "agents": 17944,
        "agents_reachable_on_95_percent_of_visits": {
          "count": 16876,
          "of": 17944,
          "share": 0.9405
        },
        "cohort": "all",
        "protocol": "MCP",
        "response_time_ms": {
          "agents": 10929,
          "p50": 240,
          "p95": 1159,
          "successful_handshakes": 46079
        },
        "visits": 78338,
        "visits_reachable": {
          "count": 76354,
          "of": 78338,
          "share": 0.9747
        }
      },
      {
        "agents": 833,
        "agents_reachable_on_95_percent_of_visits": {
          "count": 782,
          "of": 833,
          "share": 0.9388
        },
        "cohort": "all",
        "protocol": "A2A",
        "response_time_ms": {
          "agents": 775,
          "p50": 175,
          "p95": 788,
          "successful_handshakes": 7815
        },
        "visits": 8012,
        "visits_reachable": {
          "count": 7898,
          "of": 8012,
          "share": 0.9858
        }
      },
      {
        "agents": 3785,
        "agents_reachable_on_95_percent_of_visits": {
          "count": 3490,
          "of": 3785,
          "share": 0.9221
        },
        "cohort": "panel",
        "protocol": "ALL",
        "response_time_ms": {
          "agents": 2277,
          "p50": 226,
          "p95": 1119,
          "successful_handshakes": 32850
        },
        "visits": 52905,
        "visits_reachable": {
          "count": 51750,
          "of": 52905,
          "share": 0.9782
        }
      },
      {
        "agents": 3324,
        "agents_reachable_on_95_percent_of_visits": {
          "count": 3044,
          "of": 3324,
          "share": 0.9158
        },
        "cohort": "panel",
        "protocol": "MCP",
        "response_time_ms": {
          "agents": 1824,
          "p50": 243,
          "p95": 1162,
          "successful_handshakes": 25629
        },
        "visits": 45563,
        "visits_reachable": {
          "count": 44480,
          "of": 45563,
          "share": 0.9762
        }
      },
      {
        "agents": 461,
        "agents_reachable_on_95_percent_of_visits": {
          "count": 446,
          "of": 461,
          "share": 0.9675
        },
        "cohort": "panel",
        "protocol": "A2A",
        "response_time_ms": {
          "agents": 453,
          "p50": 173,
          "p95": 794,
          "successful_handshakes": 7221
        },
        "visits": 7342,
        "visits_reachable": {
          "count": 7270,
          "of": 7342,
          "share": 0.9902
        }
      }
    ],
    "citation": "GAIP Agent Reliability Index, the 30 days to 17 October 2026, gaipagents.com/state-of-agents, CC BY 4.0",
    "generated_at_utc": "2026-10-17T22:57:08Z",
    "headline": {
      "agents": 18777,
      "agents_reachable_on_95_percent_of_visits": {
        "count": 17658,
        "of": 18777,
        "share": 0.9404
      },
      "cohort": "all",
      "protocol": "ALL",
      "response_time_ms": {
        "agents": 11704,
        "p50": 229,
        "p95": 1129,
        "successful_handshakes": 53894
      },
      "visits": 86350,
      "visits_reachable": {
        "count": 84252,
        "of": 86350,
        "share": 0.9757
      }
    },
    "licence": "CC BY 4.0",
    "method": "Built on the Observatory's cycle from the stored status observations of public MCP servers and A2A agents. A visit is an observation in which GAIP sent a request (reachable recorded as true or false); observations where GAIP sent nothing (withdrawn, opted out, robots.txt refused, not active in its source) are not visits. Reachable: the host answered with any HTTP status. A successful handshake is a reachable visit with an HTTP 2xx answer (MCP: the initialize answer; A2A: the agent card), with its response time in milliseconds. Per cell: the share of visits reachable; the share of agents with at least one visit that were reachable on at least 95% of their visits; the p50 and p95 response time of successful handshakes (nearest rank). Cells: protocol MCP, A2A or both, for all public agents GAIP watches and for the frozen reference panel AGENTS-COHORT-2026-10. A cell is shown when it has at least 5 agents (response times: 5 agents with a successful handshake) and any count under 5 is withheld. GAIP's own agents, hosts read because an outside caller asked about them, and withdrawn or unpublished agents are left out. A month runs from the Monday of its earliest ISO week to the Monday after its last (as the Agent Web Index) and is frozen once that window ends; the current block covers the last 30 days and is rebuilt hourly. GAIP keeps the newest 60 raw observations of each agent, so an agent visited more often than that in a window counts its newest 60. Facts as observed; not an assessment of any party.",
    "methods_file": "https://www.gaipagents.com/v1/free/observatory/methods",
    "minimum_cell_size": 5,
    "name": "GAIP Agent Reliability Index",
    "notice": "Aggregate facts observed by GAIP at the stated times: how often public agents answered and how fast. Not an assessment of any party; no agent or host is named.",
    "panel": {
      "cohort": "2026-10",
      "id": "AGENTS-COHORT-2026-10"
    },
    "period": {
      "kind": "rolling_30_days",
      "label": "the 30 days to 17 October 2026",
      "rebuilt": "at most hourly",
      "status": "provisional",
      "window_utc": [
        "2026-09-17T22:57:08Z",
        "2026-10-17T22:57:08Z"
      ]
    },
    "schema_version": "gaip.reliability-index.v1",
    "served": {
      "age_seconds": 2702,
      "meaning": "STORED: built by the Observatory runtime at stored_at_utc and served from the database (figures are as of that time). stale is true when the stored copy is older than 5400 seconds (the hourly rebuild plus two Observatory cycles).",
      "source": "STORED",
      "stale": false,
      "stale_after_seconds": 5400,
      "stored_at_utc": "2026-10-17T22:57:08Z"
    },
    "shown_because": "the month's final figures are frozen once it ends; until then the latest 30 days are shown",
    "shown_for_month": "2026-10"
  },
  "schema_version": "gaip.state-of-agents.v1",
  "served": {
    "age_seconds": 3108,
    "meaning": "STORED: built by the Observatory runtime at stored_at_utc and served from the database (figures are as of that time). stale is true when the stored copy is older than 5400 seconds (the hourly rebuild plus two Observatory cycles).",
    "source": "STORED",
    "stale": false,
    "stale_after_seconds": 5400,
    "stored_at_utc": "2026-10-17T23:42:10Z"
  },
  "shop_panel": {
    "acp_ap2_note": "No ACP or AP2 /.well-known path is published in those specifications as of 1 Oct 2026; AP2 is counted from A2A agent-card extensions.",
    "ap2_declared_in_agent_card": {
      "count": 0,
      "of": 360,
      "share": null,
      "suppressed": true
    },
    "build": {
      "classified": 278667,
      "classified_by_state": {
        "FETCH_DEADLINE_EXCEEDED": 17,
        "FETCH_FAILED:IncompleteRead": 9,
        "FETCH_FAILED:RemoteDisconnected": 17,
        "FETCH_FAILED:SSLEOFError": 5,
        "FETCH_FAILED:TimeoutError": 718,
        "HTTP_301": 6962,
        "HTTP_302": 4596,
        "HTTP_303": 69,
        "HTTP_307": 923,
        "HTTP_308": 173,
        "HTTP_400": 55,
        "HTTP_401": 127,
        "HTTP_402": 20,
        "HTTP_403": 17978,
        "HTTP_404": 823,
        "HTTP_405": 100,
        "HTTP_406": 52,
        "HTTP_409": 8,
        "HTTP_410": 54,
        "HTTP_418": 39,
        "HTTP_421": 7,
        "HTTP_429": 461,
        "HTTP_444": 43,
        "HTTP_451": 295,
        "HTTP_468": 8,
        "HTTP_500": 241,
        "HTTP_502": 40,
        "HTTP_503": 146,
        "HTTP_520": 11,
        "HTTP_521": 25,
        "HTTP_523": 14,
        "HTTP_525": 5,
        "HTTP_526": 9,
        "LIVE_PROBE_DNS_FAILED": 20541,
        "LIVE_PROBE_NON_PUBLIC_ADDRESS_BLOCKED": 219,
        "NOT_A_SHOP": 96415,
        "RESPONSE_TOO_LARGE": 12877,
        "ROBOTS_DISALLOWED": 99929,
        "SHOP": 14568,
        "other_categories_under_5_each": 68
      },
      "imported": 300000,
      "pending": 21333,
      "q4_frozen": false,
      "shops": 14568,
      "shops_by_platform": {
        "bigcommerce": 156,
        "custom": 424,
        "magento": 420,
        "prestashop": 120,
        "shopify": 2085,
        "shopware": 86,
        "squarespace": 862,
        "wix": 20,
        "woocommerce": 10395
      },
      "shops_by_region": {
        "EU": 2296,
        "OTHER": 3277,
        "UK": 935,
        "US": 8060
      }
    },
    "candidate_sources_attribution": [
      "Majestic Million by Majestic-12 (CC BY 3.0)"
    ],
    "change_log_at_freeze": {
      "entries": 582,
      "head_sha256": "8392a10dac5dff5e32320b28108e98a4025e8f9e8a3f5a7c3131bfca8cd320a5"
    },
    "changes_this_week": {
      "by_class": {
        "other_categories_under_5_each": 8,
        "product:price_agreement_changed": 38,
        "product:price_values_changed": 80,
        "product:stock_agreement_changed": 39,
        "product:stock_values_changed": 73,
        "robots:changed": 6,
        "ucp:changed": 90
      },
      "entries": 150
    },
    "cohort": "shops-2026-10",
    "cohorts": {},
    "configured": true,
    "discovery_documents": {
      "a2a_agent_card": {
        "count": 0,
        "of": 360,
        "share": null,
        "suppressed": true
      },
      "llms_txt": {
        "count": 235,
        "of": 360,
        "share": 0.6528
      },
      "ucp": {
        "count": 247,
        "of": 360,
        "share": 0.6861
      },
      "x402": {
        "count": 0,
        "of": 360,
        "share": null,
        "suppressed": true
      }
    },
    "full_checks": 360,
    "method": "Every week per panel shop, through the Listing Observer's fetch path (same User-Agent, robots.txt honoured, exclusion and opt-out lists enforced, no cart, checkout, account or sign-in pages): robots.txt rules for named AI crawlers, the UCP profile, A2A agent card, llms.txt and /.well-known/x402 (status, well-formed or not, fingerprint) and x402 on the declared UCP REST endpoint; and, weekly for the 2026-10 cohort and a stratified sub-sample and every fourth week for the rest, the Listing Observer's comparison facts for 2 fixed products. Documents and pages are not kept. From method v3 (decision #35) each read also keeps what the UCP profile declares (capability and service names, transports, whether each endpoint is on the shop's own site) and, on at most 50 panel shops a week, the tool names and input-schema structure the shop's on-site UCP MCP endpoint lists (one tools/list request, no credentials), never descriptions.",
    "methods_file": "/v1/free/observatory/methods",
    "minimum_cell_size": 5,
    "panel": {
      "frozen_at_utc": "2026-10-01T19:02:51Z",
      "meaning": "Shops in the Listing Observer's seed list on 1 Oct 2026 (less marketplaces and opted-out shops). None is removed or replaced; a shop that stops answering stays with that status.",
      "membership_sha256": "5f5ebd61bf989c85cd3968aef195b511bc4afb44c7ade9e0345c18ecc1e1874f",
      "size": 392,
      "size_at_freeze": 392,
      "status_this_week": {
        "OBSERVED": 360,
        "ROBOTS_DISALLOWED": 27,
        "UNREACHABLE": 5
      }
    },
    "products": {
      "agreement": {
        "price": {
          "all_sources": {
            "NOT_OBSERVED": 78,
            "SAME": 187,
            "other_categories_under_5_each": 4
          },
          "structured_data_vs_other_page_sources": {
            "SAME": 150,
            "other_categories_under_5_each": 3
          },
          "ucp_catalog_vs_page_sources": {}
        },
        "stock": {
          "all_sources": {
            "NOT_OBSERVED": 156,
            "SAME": 111,
            "other_categories_under_5_each": 2
          },
          "structured_data_vs_other_page_sources": {
            "SAME": 102,
            "other_categories_under_5_each": 2
          },
          "ucp_catalog_vs_page_sources": {}
        }
      },
      "observed": 310,
      "page_readable": 269,
      "with_ucp_catalog_source": 163
    },
    "robots_ai_rules": {
      "by_token": {
        "Amazonbot": {
          "home_disallowed": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 10,
            "of": 336,
            "share": 0.0298
          }
        },
        "Applebot-Extended": {
          "home_disallowed": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 5,
            "of": 336,
            "share": 0.0149
          }
        },
        "Bytespider": {
          "home_disallowed": {
            "count": 7,
            "of": 336,
            "share": 0.0208
          },
          "named": {
            "count": 14,
            "of": 336,
            "share": 0.0417
          }
        },
        "CCBot": {
          "home_disallowed": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 11,
            "of": 336,
            "share": 0.0327
          }
        },
        "ChatGPT-User": {
          "home_disallowed": {
            "count": 0,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 17,
            "of": 336,
            "share": 0.0506
          }
        },
        "Claude-SearchBot": {
          "home_disallowed": {
            "count": 0,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          }
        },
        "Claude-User": {
          "home_disallowed": {
            "count": 0,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 5,
            "of": 336,
            "share": 0.0149
          }
        },
        "ClaudeBot": {
          "home_disallowed": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 18,
            "of": 336,
            "share": 0.0536
          }
        },
        "GPTBot": {
          "home_disallowed": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 26,
            "of": 336,
            "share": 0.0774
          }
        },
        "Google-Extended": {
          "home_disallowed": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 17,
            "of": 336,
            "share": 0.0506
          }
        },
        "OAI-SearchBot": {
          "home_disallowed": {
            "count": 0,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 21,
            "of": 336,
            "share": 0.0625
          }
        },
        "Perplexity-User": {
          "home_disallowed": {
            "count": 0,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 5,
            "of": 336,
            "share": 0.0149
          }
        },
        "PerplexityBot": {
          "home_disallowed": {
            "count": 0,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 21,
            "of": 336,
            "share": 0.0625
          }
        },
        "meta-externalagent": {
          "home_disallowed": {
            "count": null,
            "of": 336,
            "share": null,
            "suppressed": true
          },
          "named": {
            "count": 12,
            "of": 336,
            "share": 0.0357
          }
        }
      },
      "robots_excluded_known_method_defect": 0,
      "robots_read": 336
    },
    "shopify_terms_opt_in": {
      "members_by_platform": {
        "shopify": 32,
        "unknown": 360
      },
      "opted_in_hosts": 2,
      "robots_txt_reads_before_platform_known": 0,
      "rule": "Shopify-hosted shops are read on a schedule only where the merchant opted in (installed the app or published the agent-commerce record), until Shopify answers the Partner-support question in writing. Single reads on a caller's request are unchanged. Counts only; no shop is named.",
      "scheduled_reads_skipped": 0,
      "scheduled_reads_skipped_by_platform": {},
      "shopify_hosted_read_without_consent": 0,
      "shopify_hosted_read_without_consent_target": 0,
      "skip_reason": "SHOPIFY_TERMS_OPT_IN_REQUIRED",
      "week": "2026-W41"
    },
    "shops_observed": 360,
    "ucp_profile": {
      "lookup_advertised": {
        "count": 244,
        "of": 247,
        "share": 0.9879
      },
      "rest_endpoint_on_site": {
        "count": null,
        "of": 247,
        "share": null,
        "suppressed": true
      }
    },
    "week": "2026-W41",
    "x402_402_on_ucp_endpoint": {
      "count": 0,
      "of": null,
      "share": null,
      "suppressed": true
    }
  },
  "snapshots": "https://www.gaipagents.com/v1/free/ecosystem/snapshots",
  "this_week_so_far": {
    "answered_at_least_once": {
      "count": 13367,
      "of": 17829,
      "share": 0.7497
    },
    "declared_in_package_not_observed_live": 29016,
    "mcp_asked_for_credentials": {
      "count": 3863,
      "of": 16959,
      "share": 0.2278
    },
    "mcp_tools_listed_without_credentials": {
      "count": 8714,
      "of": 16959,
      "share": 0.5138
    },
    "meaning": "The current ISO week so far; it is frozen and hash-chained after the week ends.",
    "new_targets": 2311,
    "protocol_versions_reported": {
      "0.2.5": 5,
      "0.3": 22,
      "0.3.0": 337,
      "1.0": 101,
      "1.0.0": 12,
      "2024-11-05": 385,
      "2025-03-26": 404,
      "2025-06-18": 1315,
      "2025-11-25": 5536,
      "2026-07-28": 116,
      "other_categories_under_5_each": 13
    },
    "provisional": true,
    "response_time_ms_median": 227,
    "standards_documents": {
      "a2a_agent_card": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "a2a_agent_card_legacy": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_commerce": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_mandates": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_preferences": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agent_representation": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "agentic_resource_discovery": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "ai_catalog": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "ai_txt": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "csaf_provider_metadata": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "erc8004_registration": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "gaip_notices": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "llms_txt": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "mcp_server_card": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "oauth_authorization_server": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "oauth_protected_resource": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "openid_configuration": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "web_bot_auth_directory": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      },
      "x402": {
        "count": 0,
        "of": null,
        "share": null,
        "suppressed": true
      }
    },
    "standards_hosts_probed": 0,
    "targets_by_kind": {
      "A2A_CARD": 937,
      "MCP_REMOTE": 22045
    },
    "targets_observed": 17829,
    "targets_public": 22982,
    "targets_with_a_new_manifest_version": 3786,
    "week": "2026-W42",
    "weekly_coverage_known_public_remote_agents": 22746,
    "weekly_coverage_share": 0.9981,
    "weekly_coverage_target_met": true,
    "weekly_coverage_target_share": 0.95
  },
  "title": "State of public AI agents, October 2026",
  "unique_datasets": {
    "agent_keys": {
      "agent_cards_seen": 642,
      "agent_cards_signed": {
        "count": 47,
        "of": 642,
        "share": 0.0732
      },
      "change_log": {
        "entries": 5245,
        "head_sha256": "6cd246b409bb6bf7c24d5267678e4986a2b0a1046e2e27c4d1049d90c6ccb455"
      },
      "changes_this_week": {
        "by_class": {
          "card:signature_changed": 59,
          "card:signed": 9,
          "card:unsigned": 6,
          "first_observation": 1972,
          "jwks:key_added": 29,
          "jwks:published": 35,
          "jwks:withdrawn": 543,
          "other_categories_under_5_each": 1,
          "protected_resource:changed": 341
        },
        "entries": 2633
      },
      "hosts_observed": 4152,
      "jwks_key_types": {
        "EC:P-256": 22,
        "EC:secp256k1": 5,
        "OKP:Ed25519": 17,
        "RSA:RS256": 21,
        "other_categories_under_5_each": 2
      },
      "jwks_published": {
        "count": 72,
        "of": 1506,
        "share": 0.0478
      },
      "jwks_with_private_or_symmetric_members": {
        "count": 1,
        "of": 1506,
        "share": null,
        "suppressed": true
      },
      "mcp_servers_answering_401": 3518,
      "method": "Per agent host and ISO week: A2A agent-card signatures (algorithm, key id, key-URL host, signature hash), the keys at /.well-known/jwks.json (type, curve, algorithm, use, key id, RFC 7638 thumbprint) and, for MCP servers that ask for credentials, the RFC 9728 protected-resource metadata (authorization-server and JWKS hosts). Public keys and declarations only.",
      "methods_file": "/v1/free/observatory/methods",
      "protected_resource_metadata_published": {
        "count": 1003,
        "of": 3518,
        "share": 0.2851
      },
      "requested_hosts_not_counted": {
        "change_entries": 0,
        "rows": 0
      },
      "signature_algorithms": {
        "ES256": 17,
        "EdDSA": 29,
        "other_categories_under_5_each": 2
      },
      "web_bot_auth": {
        "hosts_publishing_a_directory": {
          "count": 0,
          "of": 0,
          "share": null,
          "suppressed": true
        },
        "hosts_rotating_keys": {
          "count": 0,
          "of": 0,
          "share": null,
          "suppressed": true
        },
        "hosts_with_only_a_directory": 0,
        "key_types": {},
        "keys_published": null,
        "keys_published_suppressed": true,
        "rows_with_a_directory_reading": 0,
        "with_signature_agent_card": {
          "count": 0,
          "of": 0,
          "share": null,
          "suppressed": true
        }
      }
    },
    "agent_prices": {
      "change_log": {
        "entries": 0,
        "head_sha256": null
      },
      "changes_this_week": {
        "by_class": {},
        "entries": 0
      },
      "declared_in_documents": {
        "hosts_declaring_x402_prices": 4,
        "median_by_network_and_asset": {},
        "price_points_by_network_and_asset": {
          "other_categories_under_5_each": 4
        },
        "stored_in": "agent_terms (not stored twice)"
      },
      "meaning": "Prices as the listings and documents declared them when read this week, in each asset's atomic units. Medians only for cells of 5 or more price points from 5 or more hosts. No host is named; not a price comparison or an assessment of any service.",
      "method": "Per resource host and ISO week, from the x402 Bazaar discovery catalogue (when switched on): each listed resource's path, type, declared category, x402 price requirements (scheme, network, asset, amount in atomic units; never the pay-to address) and a description excerpt of at most 300 characters. Prices declared in agent cards, MCP answers and x402 documents GAIP already reads are kept once, in agent_terms, and counted here. Medians are published only for cells of 5 or more price points from 5 or more hosts.",
      "methods_file": "/v1/free/observatory/methods",
      "requested_hosts_not_counted": {
        "change_entries": 0,
        "rows": 0
      },
      "sources": [
        {
          "decision": "ENABLED",
          "enabled": true,
          "name": "Prices declared in A2A cards, MCP answers and x402 documents GAIP reads",
          "source_id": "declared-in-documents-gaip-reads",
          "switch_env": null,
          "terms_basis": "No extra request: the documents the Observatory, the Listing Observer and the shop panel already read (robots.txt honoured). Stored once, in the agent_terms dataset.",
          "terms_checked_at": "2026-10-02",
          "terms_url": null,
          "url": null
        },
        {
          "decision": "SWITCH",
          "enabled": false,
          "name": "x402 Bazaar discovery catalogue (Coinbase facilitator)",
          "source_id": "x402-bazaar-cdp",
          "switch_env": "GAIP_SOURCE_X402_BAZAAR",
          "terms_basis": "Documented, unauthenticated, read-only catalogue API published so agents can discover paid resources ('these GET .../discovery/* routes are read-only catalog APIs and do not require CDP API keys'). The Coinbase Developer Platform terms and the API host's robots.txt could not be read from the build sandbox on 2026-10-02, so whether keeping a weekly archive is allowed is unconfirmed: off until the founder confirms and sets the switch. robots.txt is checked again by safe_fetch before every read.",
          "terms_checked_at": "2026-10-02",
          "terms_url": "https://www.coinbase.com/legal/developer-platform/terms-of-service",
          "url": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources"
        },
        {
          "decision": "REFUSED",
          "enabled": false,
          "name": "Apify Store actor prices",
          "source_id": "apify-store",
          "switch_env": null,
          "terms_basis": "Not read: founder decision #20 parks Apify, and its terms were not shown to allow bulk reuse of store listings. Enable only with a confirmed licence and a new founder decision.",
          "terms_checked_at": "2026-10-02",
          "terms_url": "https://docs.apify.com/legal/general-terms-and-conditions",
          "url": null
        }
      ],
      "x402_bazaar": {
        "hosts": 0,
        "listings": 0,
        "listings_by_category": {},
        "median_by_category_network_and_asset": {},
        "price_points": 0,
        "price_points_by_network_and_asset": {}
      }
    },
    "agent_terms": {
      "change_log": {
        "entries": 10621,
        "head_sha256": "83a07ae0551d3e71d7abe3510e55c7f70c3035581cbf3b019662082a487a1906"
      },
      "changes_this_week": {
        "by_class": {
          "data_retention:changed": 56,
          "data_retention:declared": 21,
          "data_retention:no_longer_declared": 10,
          "first_observation": 2543,
          "mcp_tool_prices:changed": 10,
          "other": 459,
          "other_categories_under_5_each": 10,
          "pricing:changed": 517,
          "pricing:declared": 124,
          "pricing:no_longer_declared": 98,
          "rate_limit:changed": 30,
          "rate_limit:declared": 23,
          "rate_limit:no_longer_declared": 24,
          "terms_of_service:declared": 10,
          "terms_of_service:no_longer_declared": 7,
          "uptime_sla:declared": 10,
          "uptime_sla:no_longer_declared": 7
        },
        "entries": 3822
      },
      "declaring": {
        "data_retention": {
          "count": 134,
          "of": 8271,
          "share": 0.0162
        },
        "pricing": {
          "count": 1742,
          "of": 8271,
          "share": 0.2106
        },
        "privacy_policy": {
          "count": 28,
          "of": 8271,
          "share": 0.0034
        },
        "rate_limit": {
          "count": 265,
          "of": 8271,
          "share": 0.032
        },
        "terms_of_service": {
          "count": 22,
          "of": 8271,
          "share": 0.0027
        },
        "uptime_sla": {
          "count": 22,
          "of": 8271,
          "share": 0.0027
        }
      },
      "hosts_with_declarations": 8271,
      "mcp_tool_price_index": {},
      "meaning": "Declared by the hosts themselves when read this week; observed counts are GAIP's own reads. Amounts are in the asset's atomic units as declared. A price cell is published only with at least 5 distinct hosts, none supplying more than half of its price points.",
      "method": "Per host and ISO week: promises declared in A2A agent cards and MCP initialize instructions (rate limits, uptime/SLA, data retention, privacy and terms links, pricing; 300-character excerpts), x402 price declarations (402 answers and /.well-known/x402; scheme, network, asset, amount, never the pay-to address) and what GAIP observed of the host that week (responses, 429, 5xx, failed reads).",
      "methods_file": "/v1/free/observatory/methods",
      "of_those_with_429_5xx_or_failed_read_seen_by_gaip": {
        "count": 14,
        "of": 284,
        "share": 0.0493
      },
      "price_index_meaning": "Median of prices declared to GAIP's reader that week; not a market rate.",
      "promised_rate_limit_or_uptime": 284,
      "publishing_a_machine_readable_price": {
        "count": 9,
        "of": 8271,
        "share": 0.0011
      },
      "requested_hosts_not_counted": {
        "change_entries": 0,
        "rows": 0
      },
      "x402_price_index": {},
      "x402_price_points_by_network_and_asset": {
        "other_categories_under_5_each": 4
      }
    },
    "ai_permissions": {
      "agent_hosts": {
        "any_ai_token_blocked_from_home": {
          "count": 1125,
          "of": 10766,
          "share": 0.1045
        },
        "content_signal_ai_input_no": {
          "count": 19,
          "of": 10766,
          "share": 0.0018
        },
        "content_signal_ai_train_no": {
          "count": 451,
          "of": 10766,
          "share": 0.0419
        },
        "content_signal_published": {
          "count": 1633,
          "of": 10766,
          "share": 0.1517
        },
        "content_usage_declared": {
          "count": 18,
          "of": 17118,
          "share": 0.0011
        },
        "content_usage_training_refused": {
          "count": 7,
          "of": 17118,
          "share": 0.0004
        },
        "home_blocked_by_token": {
          "Amazonbot": {
            "count": 725,
            "of": 10766,
            "share": 0.0673
          },
          "Applebot-Extended": {
            "count": 744,
            "of": 10766,
            "share": 0.0691
          },
          "Bytespider": {
            "count": 976,
            "of": 10766,
            "share": 0.0907
          },
          "CCBot": {
            "count": 897,
            "of": 10766,
            "share": 0.0833
          },
          "ChatGPT-User": {
            "count": 536,
            "of": 10766,
            "share": 0.0498
          },
          "Claude-SearchBot": {
            "count": 524,
            "of": 10766,
            "share": 0.0487
          },
          "Claude-User": {
            "count": 526,
            "of": 10766,
            "share": 0.0489
          },
          "ClaudeBot": {
            "count": 765,
            "of": 10766,
            "share": 0.0711
          },
          "Diffbot": {
            "count": 679,
            "of": 10766,
            "share": 0.0631
          },
          "DuckAssistBot": {
            "count": 524,
            "of": 10766,
            "share": 0.0487
          },
          "FacebookBot": {
            "count": 603,
            "of": 10766,
            "share": 0.056
          },
          "GPTBot": {
            "count": 819,
            "of": 10766,
            "share": 0.0761
          },
          "Google-CloudVertexBot": {
            "count": 556,
            "of": 10766,
            "share": 0.0516
          },
          "Google-Extended": {
            "count": 719,
            "of": 10766,
            "share": 0.0668
          },
          "MistralAI-User": {
            "count": 528,
            "of": 10766,
            "share": 0.049
          },
          "OAI-SearchBot": {
            "count": 531,
            "of": 10766,
            "share": 0.0493
          },
          "Perplexity-User": {
            "count": 529,
            "of": 10766,
            "share": 0.0491
          },
          "PerplexityBot": {
            "count": 534,
            "of": 10766,
            "share": 0.0496
          },
          "Timpibot": {
            "count": 585,
            "of": 10766,
            "share": 0.0543
          },
          "YouBot": {
            "count": 543,
            "of": 10766,
            "share": 0.0504
          },
          "anthropic-ai": {
            "count": 672,
            "of": 10766,
            "share": 0.0624
          },
          "cohere-ai": {
            "count": 648,
            "of": 10766,
            "share": 0.0602
          },
          "meta-externalagent": {
            "count": 776,
            "of": 10766,
            "share": 0.0721
          },
          "omgili": {
            "count": 602,
            "of": 10766,
            "share": 0.0559
          }
        },
        "hosts": 17118,
        "llms_txt_answered": {
          "count": 0,
          "of": 0,
          "share": null,
          "suppressed": true
        },
        "llms_txt_checked": 0,
        "robots_read": 10766,
        "rsl_licence_declared": {
          "count": 31,
          "of": 17118,
          "share": 0.0018
        },
        "tdm_reservation_header_seen": {
          "count": 25,
          "of": 17118,
          "share": 0.0015
        },
        "tdmrep_checked": 0,
        "tdmrep_published": {
          "count": 0,
          "of": 0,
          "share": null,
          "suppressed": true
        },
        "tdmrep_site_reserved": {
          "count": 0,
          "of": 0,
          "share": null,
          "suppressed": true
        }
      },
      "change_log": {
        "entries": 185049,
        "head_sha256": "4897d23b0e157252a6437e38cdec0412d248ab207f827c00b5c7a0e9f6e51307"
      },
      "changes_this_week": {
        "by_class": {
          "content_signal:changed": 32,
          "first_observation": 129268,
          "llms_txt:added": 174,
          "llms_txt:removed": 31,
          "method_change:robots_rfc9309": 16,
          "other": 219,
          "other_categories_under_5_each": 11,
          "robots:ai_token_blocked": 26,
          "robots:ai_token_unblocked": 12,
          "robots:other_change": 645,
          "robots:readable": 256,
          "robots:unreadable": 126,
          "tdmrep:changed": 66
        },
        "entries": 130823
      },
      "hosts_observed": 142140,
      "meaning": "Shares of hosts whose files said so when read this week. The shop-panel cohort is the fixed shops-2026-10 panel; agent hosts are the hosts of the Observatory's MCP servers and agents. Rows read under a method version with a known defect are left out of the shares.",
      "method": "Per host and ISO week: robots.txt rules for named AI crawlers and assistants (named, home page allowed), Content-Signal lines, the W3C TDMRep document (/.well-known/tdmrep.json) and TDM-Reservation header, whether /llms.txt answered, RSL licence links (robots.txt License:, Link header, HTML link) and IETF AI-preference Content-Usage lines and headers. From robots.txt files and pages GAIP already reads; tdmrep.json from the shop panel's own weekly checks for the shops it reads, else one extra request per shop host and week. A host whose extra read did not happen within two ticks is written with that part listed under unread (unknown, not absent); no host GAIP read is left out.",
      "methods": "/v1/free/observatory/methods",
      "methods_file": "/v1/free/observatory/methods",
      "requested_hosts_not_counted": {
        "change_entries": 0,
        "rows": 1
      },
      "rows_excluded_known_method_defect": 0,
      "shop_panel_hosts": {
        "any_ai_token_blocked_from_home": {
          "count": 14,
          "of": 373,
          "share": 0.0375
        },
        "content_signal_ai_input_no": {
          "count": 0,
          "of": 373,
          "share": null,
          "suppressed": true
        },
        "content_signal_ai_train_no": {
          "count": 2,
          "of": 373,
          "share": null,
          "suppressed": true
        },
        "content_signal_published": {
          "count": 6,
          "of": 373,
          "share": 0.0161
        },
        "content_usage_declared": {
          "count": 0,
          "of": 479,
          "share": null,
          "suppressed": true
        },
        "content_usage_training_refused": {
          "count": 0,
          "of": 479,
          "share": null,
          "suppressed": true
        },
        "home_blocked_by_token": {
          "Amazonbot": {
            "count": 4,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "Applebot-Extended": {
            "count": 5,
            "of": 373,
            "share": 0.0134
          },
          "Bytespider": {
            "count": 12,
            "of": 373,
            "share": 0.0322
          },
          "CCBot": {
            "count": 5,
            "of": 373,
            "share": 0.0134
          },
          "ChatGPT-User": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "Claude-SearchBot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "Claude-User": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "ClaudeBot": {
            "count": 5,
            "of": 373,
            "share": 0.0134
          },
          "Diffbot": {
            "count": 4,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "DuckAssistBot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "FacebookBot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "GPTBot": {
            "count": 5,
            "of": 373,
            "share": 0.0134
          },
          "Google-CloudVertexBot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "Google-Extended": {
            "count": 4,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "MistralAI-User": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "OAI-SearchBot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "Perplexity-User": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "PerplexityBot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "Timpibot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "YouBot": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "anthropic-ai": {
            "count": 3,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "cohere-ai": {
            "count": 2,
            "of": 373,
            "share": null,
            "suppressed": true
          },
          "meta-externalagent": {
            "count": 5,
            "of": 373,
            "share": 0.0134
          },
          "omgili": {
            "count": 1,
            "of": 373,
            "share": null,
            "suppressed": true
          }
        },
        "hosts": 479,
        "llms_txt_answered": {
          "count": 237,
          "of": 309,
          "share": 0.767
        },
        "llms_txt_checked": 309,
        "robots_read": 373,
        "rsl_licence_declared": {
          "count": 0,
          "of": 479,
          "share": null,
          "suppressed": true
        },
        "tdm_reservation_header_seen": {
          "count": 0,
          "of": 479,
          "share": null,
          "suppressed": true
        },
        "tdmrep_checked": 332,
        "tdmrep_published": {
          "count": 0,
          "of": 332,
          "share": null,
          "suppressed": true
        },
        "tdmrep_site_reserved": {
          "count": 0,
          "of": 332,
          "share": null,
          "suppressed": true
        }
      },
      "tdmrep_method_overlap": {
        "compared": 320,
        "different": {
          "count": 2,
          "of": 320,
          "share": null,
          "suppressed": true
        },
        "meaning": "Overlap week of ai_permissions method v3: tdmrep.json read by the shop panel (Listing Observer user agent) beside the v2 extra read (Observatory user agent) on the same hosts. Published TDMRep shares this week still use the v2 reading.",
        "panel_reading_only": 66,
        "same": {
          "count": 318,
          "of": 320,
          "share": 0.9938
        }
      }
    },
    "client_behaviour": {
      "change_log": {
        "entries": 26,
        "head_sha256": "df37087576102009a0ed3310b439e5dc3fbeee441c9ee86db0e967dee79a7739"
      },
      "changes_this_week": {
        "by_class": {
          "week_frozen": 14
        },
        "entries": 14
      },
      "families": {
        "APPLEBOT": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {},
          "requests": 47,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 10,
            "of": 43,
            "share": 0.2326
          },
          "robots_txt_read_first": {
            "count": 10,
            "of": 43,
            "share": 0.2326
          },
          "sessions": 43,
          "status_classes": {
            "2xx": 47
          }
        },
        "BROWSER": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {},
          "requests": 250,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 47,
            "of": 125,
            "share": 0.376
          },
          "robots_txt_read_first": {
            "count": 47,
            "of": 125,
            "share": 0.376
          },
          "sessions": 125,
          "status_classes": {
            "2xx": 161,
            "4xx": 89
          }
        },
        "CLAUDE_USER": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {},
          "requests": 64,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 9,
            "of": 15,
            "share": 0.6
          },
          "robots_txt_read_first": {
            "count": 9,
            "of": 15,
            "share": 0.6
          },
          "sessions": 15,
          "status_classes": {
            "2xx": 62,
            "4xx": 2
          }
        },
        "GOOGLEBOT": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {},
          "requests": 7,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 4,
            "of": 6,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read_first": {
            "count": 4,
            "of": 6,
            "share": null,
            "suppressed": true
          },
          "sessions": 6,
          "status_classes": {
            "2xx": 6,
            "4xx": 1
          }
        },
        "NODE": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {},
          "requests": 32,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 2,
            "of": 2,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read_first": {
            "count": 0,
            "of": 2,
            "share": null,
            "suppressed": true
          },
          "sessions": 2,
          "status_classes": {
            "2xx": 12,
            "4xx": 20
          }
        },
        "NONE": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {},
          "requests": 64,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 0,
            "of": 16,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read_first": {
            "count": 0,
            "of": 16,
            "share": null,
            "suppressed": true
          },
          "sessions": 16,
          "status_classes": {
            "4xx": 64
          }
        },
        "OAI_SEARCHBOT": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {},
          "requests": 11,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 11,
            "of": 11,
            "share": 1.0
          },
          "robots_txt_read_first": {
            "count": 11,
            "of": 11,
            "share": 1.0
          },
          "sessions": 11,
          "status_classes": {
            "2xx": 11
          }
        },
        "OTHER": {
          "disallowed_after_reading_robots_txt": 0,
          "frozen": true,
          "mcp_protocol_versions": {
            "NONE": 29
          },
          "requests": 319,
          "requests_to_disallowed_paths": 0,
          "responses_402": 0,
          "responses_429": 0,
          "retry_after_kept": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "retry_storm_episodes": 0,
          "returned_after_402_with_payment_header": {
            "count": 0,
            "of": 0,
            "share": null,
            "suppressed": true
          },
          "robots_txt_read": {
            "count": 64,
            "of": 129,
            "share": 0.4961
          },
          "robots_txt_read_first": {
            "count": 63,
            "of": 129,
            "share": 0.4884
          },
          "sessions": 129,
          "status_classes": {
            "2xx": 171,
            "4xx": 148
          }
        }
      },
      "meaning": "GAIP's own gateway, by coarse client family (software, never a person or an address). Families with fewer than 5 requests in the week are folded together; GAIP's own canaries are left out.",
      "method": "First party, by client family only: requests, sessions, robots.txt read first or at all, requests to paths GAIP's robots.txt disallows, Retry-After kept or not after a 429, a payment header after a 402, MCP protocol versions, retry storms, status and path classes. No IP address, User-Agent string, path or body is stored.",
      "methods_file": "/v1/free/observatory/methods",
      "requested_hosts_not_counted": {
        "change_entries": 0,
        "rows": 0
      },
      "requests_from_families_under_5": 9
    },
    "configured": true,
    "erc8004_cards": {
      "agents_by_declared_service": {},
      "agents_recorded": 0,
      "by_read_status": {},
      "by_uri_kind": {},
      "change_log": {
        "entries": 0,
        "head_sha256": null
      },
      "changes_this_week": {
        "by_class": {},
        "entries": 0
      },
      "collector_on": false,
      "declaring_x402_support": {
        "count": 0,
        "of": 0,
        "share": null,
        "suppressed": true
      },
      "files_read": {
        "count": 0,
        "of": 0,
        "share": null,
        "suppressed": true
      },
      "marked_active": {
        "count": 0,
        "of": 0,
        "share": null,
        "suppressed": true
      },
      "meaning": "ERC-8004 agents on Base mainnet whose registration file GAIP read this week. Counts only; no agent, owner or wallet is named. Not an assessment of any agent.",
      "method": "Per ERC-8004 agent (Identity Registry on Base mainnet) and ISO week, when switched on: the agentURI's kind, host and SHA-256, the registration file's read status and SHA-256, an excerpt of at most 300 characters of its name and description, its declared service names and endpoint hosts, x402Support and active. Never an owner or wallet address. From Registered and URIUpdated events read in bounded block ranges from a public RPC; files read through safe_fetch (robots.txt honoured).",
      "methods_file": "/v1/free/observatory/methods",
      "requested_hosts_not_counted": {
        "change_entries": 0,
        "rows": 0
      },
      "rpc_source": {
        "decision": "SWITCH",
        "source_id": "base-mainnet-public-rpc",
        "switch_env": "GAIP_ERC8004_ARCHIVE",
        "terms_basis": "Base's public JSON-RPC endpoint, documented as rate-limited and not for production systems. Its terms could not be read from the build sandbox on 2026-10-02, so the reader is off until the founder confirms them (or names a provider through GAIP_ERC8004_RPC_URL). Read-only eth_blockNumber and eth_getLogs, at most one call a minute, charged to the Observatory budget; nothing is signed or sent on-chain.",
        "terms_checked_at": "2026-10-02",
        "terms_url": "https://docs.base.org/base-chain/quickstart/connecting-to-base",
        "url": "https://mainnet.base.org"
      }
    },
    "minimum_cell_size": 5,
    "package_history": {
      "advisories": {
        "days_from_advisory_published_to_first_fixed_version": {
          "advisories": 26,
          "fixed_version_published_before_advisory": {
            "count": 24,
            "of": 26,
            "share": 0.9231
          },
          "median_days": -5.2,
          "packages": 14
        },
        "distinct_advisories": 31,
        "packages_with_advisories_read": 4844,
        "packages_with_an_advisory_affecting_latest": {
          "count": 0,
          "of": 4844,
          "share": null,
          "suppressed": true
        },
        "packages_with_any_advisory": {
          "count": 19,
          "of": 4844,
          "share": 0.0039
        }
      },
      "by_ecosystem": {
        "npm": 4844
      },
      "by_read_state": {
        "not_found": 18,
        "ok": 4823,
        "other_categories_under_5_each": 3
      },
      "change_log": {
        "entries": 5757,
        "head_sha256": "44797b8c85bcdead6e3bc034c9c538bbef1610273f5e1486bd4975c58ee0f833"
      },
      "changes_this_week": {
        "by_class": {
          "first_observation": 4844
        },
        "entries": 4844
      },
      "collector_on": true,
      "latest_version_deprecated": {
        "count": 50,
        "of": 4823,
        "share": 0.0104
      },
      "meaning": "Public package facts of MCP server packages on npm and PyPI as read this week, and the security advisories OSV publishes for them. Counts and shares only (cells of 5 or more); no package, maintainer or party is named, ranked or assessed. Maintainers are counted, never named. Days to the first fix can be negative when the fixed version was published before the advisory.",
      "method": "Per MCP server package (npm and PyPI packages GAIP knows from npm keyword search and the Official MCP Registry) and ISO week: latest version and dist-tag, version count and list, versions published this week with publish times, versions added, removed or yanked since the previous row, the latest version's deprecated flag, install scripts and provenance (npm dist.attestations, PyPI Integrity API), the maintainer count and a SHA-256 of the sorted maintainer usernames (never names or e-mail addresses), npm weekly downloads, the repository host name, and OSV advisories (ids, published, modified and withdrawn dates, fixed versions, days from publication to the first fix, whether the latest version is affected). Unknown is recorded as null, never guessed. Read through safe_fetch within the Observatory budget.",
      "methods_file": "/v1/free/observatory/methods",
      "npm_weekly_downloads_read": {
        "count": 4806,
        "of": 4823,
        "share": 0.9965
      },
      "packages_recorded": 4844,
      "packages_with_a_maintainer_set_change": {
        "count": 0,
        "of": 4844,
        "share": null,
        "suppressed": true
      },
      "requested_hosts_not_counted": {
        "change_entries": 0,
        "rows": 0
      },
      "sources": [
        {
          "docs_url": "https://github.com/npm/registry/blob/main/docs/responses/package-metadata.md",
          "host": "registry.npmjs.org",
          "source_id": "npm-registry",
          "terms_basis": "Public registry API, no key; npm's acceptable-use guidance allows up to 5 million registry requests a month (this reader: at most about 1,000 a day). robots.txt checked before reads.",
          "terms_checked_at": "2026-10-03",
          "terms_url": "https://docs.npmjs.com/policies/terms",
          "url": "https://registry.npmjs.org/"
        },
        {
          "docs_url": "https://github.com/npm/registry/blob/main/docs/download-counts.md",
          "host": "api.npmjs.org",
          "source_id": "npm-downloads",
          "terms_basis": "Documented public download-counts API, no key; bulk requests of up to 128 unscoped packages.",
          "terms_checked_at": "2026-10-03",
          "terms_url": "https://docs.npmjs.com/policies/terms",
          "url": "https://api.npmjs.org/downloads/point/last-week/"
        },
        {
          "docs_url": "https://docs.pypi.org/api/",
          "host": "pypi.org",
          "source_id": "pypi-json-and-integrity",
          "terms_basis": "Documented public JSON and Integrity APIs, no key. robots.txt is checked before every read; when it does not allow a path, the PyPI facts are recorded as not read (advisories still come from OSV).",
          "terms_checked_at": "2026-10-03",
          "terms_url": "https://pypi.org/policy/terms-of-use/",
          "url": "https://pypi.org/pypi/<project>/json"
        },
        {
          "docs_url": "https://google.github.io/osv.dev/api/",
          "host": "api.osv.dev",
          "source_id": "osv",
          "terms_basis": "Public, documented API, no key. Advisory records are published by OSV.dev from their sources, each under its source's licence; GAIP keeps ids, dates and versions only, never advisory text.",
          "terms_checked_at": "2026-10-03",
          "terms_url": "https://osv.dev/",
          "url": "https://api.osv.dev/v1/querybatch"
        }
      ],
      "with_a_version_published_this_week": {
        "count": 823,
        "of": 4823,
        "share": 0.1706
      },
      "with_a_version_removed_since_previous_row": {
        "count": 0,
        "of": 4823,
        "share": null,
        "suppressed": true
      },
      "with_install_scripts": {
        "count": 179,
        "of": 4823,
        "share": 0.0371
      },
      "with_provenance": {
        "count": 1359,
        "of": 4818,
        "share": 0.2821
      }
    },
    "week": "2026-W41"
  },
  "weeks_frozen": [
    {
      "answered_at_least_once": {
        "count": 15345,
        "of": 20603,
        "share": 0.7448
      },
      "declared_in_package_not_observed_live": 27058,
      "mcp_asked_for_credentials": {
        "count": 4322,
        "of": 19755,
        "share": 0.2188
      },
      "mcp_tools_listed_without_credentials": {
        "count": 10254,
        "of": 19755,
        "share": 0.5191
      },
      "new_targets": 2414,
      "protocol_versions_reported": {
        "0.2.5": 5,
        "0.3": 22,
        "0.3.0": 344,
        "1.0": 90,
        "1.0.0": 12,
        "2024-11-05": 507,
        "2025-03-26": 474,
        "2025-06-18": 1533,
        "2025-11-25": 6587,
        "2026-07-28": 123,
        "other_categories_under_5_each": 14
      },
      "response_time_ms_median": 231,
      "snapshot_sha256": "0c9b250ad662e1d3e835ba4a5ac77f5d27aabdb0032fca10b2cc61bee4432781",
      "standards_documents": {
        "a2a_agent_card": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "a2a_agent_card_legacy": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "agent_commerce": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "agent_mandates": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "agent_preferences": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "agent_representation": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "agentic_resource_discovery": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "ai_catalog": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "ai_txt": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "csaf_provider_metadata": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "erc8004_registration": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "gaip_notices": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "llms_txt": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "mcp_server_card": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "oauth_authorization_server": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "oauth_protected_resource": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "openid_configuration": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "web_bot_auth_directory": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        },
        "x402": {
          "count": 0,
          "of": null,
          "share": null,
          "suppressed": true
        }
      },
      "standards_hosts_probed": 0,
      "targets_by_kind": {
        "A2A_CARD": 870,
        "MCP_REMOTE": 19803
      },
      "targets_observed": 20603,
      "targets_public": 20673,
      "targets_with_a_new_manifest_version": 5530,
      "url": "https://www.gaipagents.com/v1/free/ecosystem/snapshots?week=2026-W41",
      "week": "2026-W41",
      "weekly_coverage_known_public_remote_agents": 20599,
      "weekly_coverage_share": 0.9985,
      "weekly_coverage_target_met": true,
      "weekly_coverage_target_share": 0.95
    }
  ]
}