{
  "schema_version": "gaip.bots.v1",
  "html": "https://www.gaipagents.com/bots",
  "operator": "GAIP (operated by its founder)",
  "contact": "https://www.gaipagents.com/contact",
  "opt_out": "https://www.gaipagents.com/corrections",
  "observatory_corrections": "https://www.gaipagents.com/v1/free/observatory/corrections",
  "user_agent_format": "<token>/<version> (+https://www.gaipagents.com/bots)",
  "general": [
    "No login, credentials or access-control bypass.",
    "Private, loopback and link-local addresses are refused.",
    "GAIP does not test for vulnerabilities or load-test anyone's systems."
  ],
  "clients": [
    {
      "token": "GAIP-Observatory",
      "user_agent": "GAIP-Observatory/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Agent Observatory: reads public Official MCP Registry listings, sends the MCP discovery handshake (initialize, tools/list; never tools/call) to remote endpoints listed there, and reads public A2A agent cards in GAIP's readiness index.",
      "when": "Scheduled. Registry listing at most 3 pages every 6 hours; each target at most once every 24 hours.",
      "rate_limits": "At most 400 requests per hour in total and 8 per target observation; at least 60 seconds between targets on the same host.",
      "robots_txt": "Honoured: the GAIP-Observatory group, otherwise the * group. If robots.txt cannot be read (other than 404/410), the host is skipped. Hosts on the opt-out list are skipped.",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Conformance-Check",
      "user_agent": "GAIP-Conformance-Check/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Check an agent by URL: reads the agent card, MCP server or OpenAPI document a caller submitted and checks it against the published conformance rules.",
      "when": "Only when a caller asks for a check.",
      "rate_limits": "One bounded read per submitted URL and discovery path.",
      "robots_txt": "Reads only the public URL a caller submitted (and its standard discovery paths).",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Citation-Witness",
      "user_agent": "GAIP-Citation-Witness/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Citation witness: checks that pages cited by a caller exist and contain the quoted text.",
      "when": "Only when a caller asks, up to 20 citations per call.",
      "rate_limits": "At most 10 page reads per host per call and 256 KiB per page; keeps a hash and at most 300 characters of matched excerpt.",
      "robots_txt": "Honoured (RFC 9309) for the GAIP-Citation-Witness group, otherwise the * group.",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Supplier-Watch",
      "user_agent": "GAIP-Supplier-Watch/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Supplier Watch: compares published agent cards of a small public cohort over time for material change.",
      "when": "Scheduled, once a day.",
      "rate_limits": "At most 20 targets per run and 64 KiB per response; redirects are not followed.",
      "robots_txt": "Reads only public agent-card discovery paths (/.well-known/agent-card.json, /.well-known/agent.json).",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Watch",
      "user_agent": "GAIP-Watch/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Watch-lists: re-checks an agent card, supplier interface or delivery terms that a caller registered, and sends a signed webhook POST to the caller's own endpoint when it changes.",
      "when": "Scheduled per watch, at most once every 24 hours.",
      "rate_limits": "At least 600 seconds between reads of the same host; at most 120 webhook attempts per hour in total.",
      "robots_txt": "Reads only the URL the caller registered.",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only GET; change webhooks are POSTs to the caller's own endpoint"
    },
    {
      "token": "GAIP-Broker",
      "user_agent": "GAIP-Broker/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Opportunity Broker: reads public agent cards to check which candidates declare a fit for a bounded task.",
      "when": "Only when a caller asks.",
      "rate_limits": "At most 256 KiB per document; 5-second timeout.",
      "robots_txt": "Reads only the public URL a caller submitted (and its standard discovery paths).",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Discovery",
      "user_agent": "GAIP-Discovery/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Discovery: reads public agent registry listings to find public agent cards for the aggregate readiness index.",
      "when": "Scheduled.",
      "rate_limits": "A bounded number of listing pages per run.",
      "robots_txt": "Reads public registry listing pages only.",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Adoption-Evidence",
      "user_agent": "GAIP-Adoption-Evidence/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Evidence records: a bounded public reachability read made while recording a caller-requested check.",
      "when": "Only when a caller asks.",
      "rate_limits": "One read of at most 32 KiB; public HTTPS on port 443 only.",
      "robots_txt": "Reads only the public URL a caller submitted (and its standard discovery paths).",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Venture-Scout",
      "user_agent": "GAIP-Venture-Scout/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Internal planning: reads GAIP's own public aggregate of requested task kinds.",
      "when": "Scheduled.",
      "rate_limits": "One read per run.",
      "robots_txt": "Reads GAIP's own endpoint only.",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Shadow-Qualification",
      "user_agent": "GAIP-Shadow-Qualification/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Service qualification: a bounded live read of the public services GAIP is listed on (for example registry listings) to record whether they respond as declared.",
      "when": "Scheduled.",
      "rate_limits": "One read per listed service per run.",
      "robots_txt": "Reads only explicitly approved public service URLs.",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Capability-Assurance",
      "user_agent": "GAIP-Capability-Assurance/1.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Capability assurance: runs bounded synthetic tasks against GAIP's own public routes.",
      "when": "Scheduled.",
      "rate_limits": "A bounded number of synthetic cases per run.",
      "robots_txt": "Calls GAIP's own endpoints only.",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    },
    {
      "token": "GAIP-Verify-Before-Call",
      "user_agent": "GAIP-Verify-Before-Call/2.0 (+https://www.gaipagents.com/bots)",
      "purpose": "Verify before call: a single optional reachability read of the endpoint a caller named, only when the caller sets live_public_probe.",
      "when": "Only when a caller asks.",
      "rate_limits": "One read of at most 32 KiB; public HTTPS on port 443 only; redirects are not followed.",
      "robots_txt": "Reads only the public URL a caller submitted (and its standard discovery paths).",
      "opt_out": "https://www.gaipagents.com/corrections",
      "credentials_sent": false,
      "method": "Read-only requests"
    }
  ]
}