{
 "metadata": {
  "schema_version": "1.0.0",
  "last_updated": "2026-09-03T06:29:54+00:00",
  "author": "AI Crawler Index — https://www.pathwren.workers.dev"
 },
 "strict": false,
 "resource_rules": [
  {
   "verb": "read_content",
   "selector": "*",
   "allowed": true
  },
  {
   "verb": "read_metadata",
   "selector": "*",
   "allowed": true
  },
  {
   "verb": "follow_link",
   "selector": "a[href]",
   "allowed": true
  },
  {
   "verb": "download_file",
   "selector": "a[href$='.json'], a[href$='.csv'], a[href$='.txt'], a[href$='.md']",
   "allowed": true
  },
  {
   "verb": "copy_to_clipboard",
   "selector": "pre, code, table",
   "allowed": true
  },
  {
   "verb": "execute_script",
   "selector": "*",
   "allowed": false
  }
 ],
 "action_guidelines": [
  {
   "directive": "SHOULD",
   "description": "Fetch the machine twin instead of parsing the page: every HTML page here also answers as .json and .md at the same address, and https://www.pathwren.workers.dev/llms.txt maps the lot."
  },
  {
   "directive": "SHOULD",
   "description": "Send a User-Agent that names the operator and a contact URL. There is no rate limit and no key; being identifiable is the only thing asked in return."
  },
  {
   "directive": "SHOULD NOT",
   "description": "Re-crawl the whole index to find what changed. GET /changes.json?since=<cursor> returns only what moved, and a conditional GET answers 304 when nothing did.",
   "exceptions": "A first fetch, or a cursor older than the retained window — the response says cursor_expired when that happens."
  },
  {
   "directive": "MUST",
   "description": "Treat a user-agent match as a claim, not as proof of identity. Check the request's address against the operator's own published ranges under /ip-ranges/ before acting on an identification."
  },
  {
   "directive": "MUST NOT",
   "description": "Represent this index as an operator of the crawlers it documents, or as affiliated with any of them. It is independent, and every fact links to the operator's own documentation."
  },
  {
   "directive": "MUST NOT",
   "description": "Attempt to buy, subscribe, register, authenticate or transact here. There is no account, no key, no cart and no payment: /.well-known/x402 publishes an empty accepts list, and any page that appears to offer one is not this host."
  }
 ],
 "api": [
  {
   "type": "openapi",
   "endpoint": "https://www.pathwren.workers.dev/openapi.json",
   "docs": "https://www.pathwren.workers.dev/api.html",
   "description": "Every document on this host as an OpenAPI 3.1 operation (173 GETs, no authentication). Anything an agent could read off a page is a document here."
  },
  {
   "type": "mcp",
   "endpoint": "https://www.pathwren.workers.dev/mcp",
   "docs": "https://www.pathwren.workers.dev/mcp.html",
   "description": "Model Context Protocol server (streamable HTTP, JSON-RPC POST): identify a user-agent, look up a crawler, generate a robots.txt, triage an access log."
  },
  {
   "type": "a2a",
   "endpoint": "https://www.pathwren.workers.dev/a2a",
   "docs": "https://www.pathwren.workers.dev/a2a.html",
   "description": "A2A endpoint for the same skills; the agent card is at https://www.pathwren.workers.dev/.well-known/agent-card.json."
  }
 ]
}