{
  "version": "0.1.0",
  "rubricVersion": "0.7",
  "target": "https://github.com",
  "host": "github.com",
  "https": true,
  "scannedAt": "2026-10-12T22:55:05.926Z",
  "durationMs": 7493,
  "requests": 112,
  "score": 32.7,
  "grade": "BB",
  "gradeLabel": "thin",
  "previous": {
    "score": 32.7,
    "grade": "BB",
    "level": 1,
    "fingerprint": "e463da77ee4ca8e89e580430b495fe998bed0fd16090dcbbbf48997670b2d372",
    "scannedAt": "2026-10-11T21:56:04.309Z",
    "counts": {
      "pass": 13,
      "warn": 11,
      "fail": 27,
      "na": 10,
      "total": 61
    },
    "rubricVersion": "0.6"
  },
  "level": 1,
  "levelName": "Basic Web Presence",
  "levelBlurb": "The site is reachable, but there are no agent-specific signals.",
  "verdict": "Basic Web Presence",
  "tiers": {
    "essential": {
      "score": 25.29777777777778,
      "pool": 80,
      "counted": 16,
      "total": 16
    },
    "recommended": {
      "score": 7.481349206349207,
      "pool": 20,
      "counted": 20,
      "total": 28
    },
    "emerging": {
      "score": 1.5562500000000004,
      "pool": 5,
      "counted": 15,
      "total": 17
    }
  },
  "confidence": 99,
  "confidenceLabel": "high",
  "fingerprint": "2f401ac8f899489f4d7f230f490d80c24c4932a035b9e0d43895d17a90fdc867",
  "isCommerce": true,
  "commerceSignals": [
    "commerce path (/cart)"
  ],
  "blocked": null,
  "blockedNote": null,
  "deadline": {
    "ms": 60000,
    "reached": false
  },
  "profile": {
    "id": "general",
    "identified": false,
    "declared": false,
    "ambiguous": [
      "api",
      "ecommerce"
    ],
    "evidence": [
      "Two profiles are too close to separate: api (4) and ecommerce (4), margin 0 < 2.",
      "Profile-scoped checks were not scored rather than guessed at."
    ],
    "scores": [
      {
        "id": "api",
        "score": 4,
        "signals": [
          "A documentation path responds",
          "A developer portal responds"
        ]
      },
      {
        "id": "ecommerce",
        "score": 4,
        "signals": [
          "A cart path responds",
          "A product listing path responds",
          "A shop path responds"
        ]
      },
      {
        "id": "saas",
        "score": 4,
        "signals": [
          "A pricing page responds",
          "A documentation path responds"
        ]
      },
      {
        "id": "marketplace",
        "score": 3,
        "signals": [
          "Describes itself as a marketplace"
        ]
      },
      {
        "id": "services",
        "score": 2,
        "signals": [
          "A contact path responds",
          "A pricing path responds"
        ]
      },
      {
        "id": "publisher",
        "score": 1,
        "signals": [
          "Subscription copy"
        ]
      }
    ]
  },
  "categories": [
    {
      "id": "protocol",
      "label": "Protocol Discovery",
      "weight": 0.25,
      "score": 12.5,
      "counted": true,
      "pass": 1,
      "warn": 3,
      "fail": 10,
      "na": 3,
      "total": 17
    },
    {
      "id": "content",
      "label": "Content Accessibility",
      "weight": 0.22,
      "score": 45.5,
      "counted": true,
      "pass": 6,
      "warn": 1,
      "fail": 5,
      "na": 3,
      "total": 15
    },
    {
      "id": "discoverability",
      "label": "Discoverability",
      "weight": 0.2,
      "score": 43.2,
      "counted": true,
      "pass": 3,
      "warn": 2,
      "fail": 6,
      "na": 0,
      "total": 11
    },
    {
      "id": "botaccess",
      "label": "Bot Access Control",
      "weight": 0.18,
      "score": 39.3,
      "counted": true,
      "pass": 3,
      "warn": 2,
      "fail": 3,
      "na": 0,
      "total": 8
    },
    {
      "id": "commerce",
      "label": "Commerce Protocols",
      "weight": 0.15,
      "score": 27.1,
      "counted": true,
      "pass": 0,
      "warn": 3,
      "fail": 3,
      "na": 4,
      "total": 10
    }
  ],
  "checks": [
    {
      "id": "reachable",
      "category": "discoverability",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Homepage open to agent access",
      "why": "If an agent cannot read your site, every other check is moot. Cloudflare began blocking AI crawlers by default in 2025, with signed agents routed separately.",
      "skill": "agent-access",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "HTTP 200 text/html; charset=utf-8 with 572789 bytes and 1091 words of visible text.",
      "evidence": "HTTP 200 · text/html; charset=utf-8 · 572789 bytes · 110 ms",
      "fix": null
    },
    {
      "id": "robots-txt",
      "category": "discoverability",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "robots.txt with agent directives",
      "why": "The front door for agent traffic (RFC 9309).",
      "skill": "robots-txt",
      "standards": [
        "RFC 9309"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "8 groups, 496 rules and 12 named agent groups, but no Sitemap directive.",
      "evidence": "HTTP 200 · text/plain · 16739 bytes · 178 ms · # If you would like to crawl GitHub contact us via https://support.github.com?tags=dotcom-robots # We also provide an extensive API: https:…",
      "fix": "# https://example.com/robots.txt  (RFC 9309)\nUser-agent: *\nAllow: /\nDisallow: /admin/\n\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nSitemap: https://example.com/sitemap.xml"
    },
    {
      "id": "sitemap-xml",
      "category": "discoverability",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "sitemap.xml valid and current",
      "why": "The primary URL discovery source for agent crawlers.",
      "skill": "sitemap",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "sitemap.xml answered HTTP 406 with 0 bytes.",
      "evidence": "HTTP 406 · application/xml · 246 ms",
      "fix": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n  <url>\n    <loc>https://example.com/</loc>\n    <lastmod>2026-01-15</lastmod>\n  </url>\n  <url>\n    <loc>https://example.com/docs/quickstart</loc>\n    <lastmod>2026-01-15</lastmod>\n  </url>\n</urlset>"
    },
    {
      "id": "llms-txt",
      "category": "discoverability",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "/llms.txt published and well-structured",
      "why": "The most widely adopted contract for making a site legible to agents. In the curated corpus we measured, 46% of sites published one and the average quality score was 37 out of 100 — adoption is not the same as usefulness.",
      "skill": "llms-txt",
      "standards": [
        "llmstxt.org"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "H1 \"GitHub\", blockquote summary, 12 H2 sections with 117 markdown links, 28658 bytes. The scan requested 1 link it names, and it answered 2xx. Not requested: 116 links on another origin.",
      "evidence": "HTTP 200 · text/plain · 28658 bytes · 191 ms · headings: GitHub | How to use | Building with GitHub, for coding agents and automation | GitHub Copilot | Authentication | Get st…",
      "fix": null
    },
    {
      "id": "link-headers",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Discovery via Link response headers",
      "why": "RFC 8288 Link headers let an agent find your discovery resources without parsing HTML.",
      "skill": "link-headers",
      "standards": [
        "RFC 8288"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Link header on the homepage response (HTTP 200, 572789 bytes).",
      "evidence": "HTTP 200 · text/html; charset=utf-8 · 572789 bytes · 110 ms",
      "fix": "# nginx: advertise discovery resources on the homepage response.\nadd_header Link '</llms.txt>; rel=\"describedby\"; type=\"text/plain\", </sitemap.xml>; rel=\"alternate\"; type=\"application/xml\"' always;\n\n# Raw header, one comma-separated field:\nLink: </llms.txt>; rel=\"describedby\"; type=\"text/plain\", </sitemap.xml>; rel=\"alternate\"; type=\"application/xml\""
    },
    {
      "id": "dns-aid",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "DNS-AID discovery record",
      "why": "Lets agents read discovery information over DNS without an HTTP round trip. Cloudflare added it to its readiness checklist.",
      "skill": "dns-aid",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "0 SVCB records and 0 TXT records resolve at _index._agents.github.com and _agent.github.com.",
      "evidence": "DNS-AID names queried for SVCB and TXT records: _index._agents.github.com and _agent.github.com",
      "fix": "; DNS-AID (draft-mozleywilliams-dnsop-dnsaid)\n_index._agents.example.com. 3600 IN SVCB 1 agent-index.example.com (\n    alpn=\"h2\"\n    port=443\n    well-known=agent-card.json\n)\n\nassistant.example.com. 3600 IN SVCB 1 . (\n    alpn=\"mcp,h2\"\n    port=443\n    well-known=agent-card.json\n    cap=https://example.com/.well-known/agent-card.json\n)"
    },
    {
      "id": "canonical",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Canonical and hreflang discipline",
      "why": "An agent needs one consistent URL per important page.",
      "skill": "canonical",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "1 canonical, absolute and self-referential on https, 26 hreflang alternates including x-default.",
      "evidence": "<link rel=\"canonical\" href=\"https://github.com\"> · hreflang: en-us, pt-br, es-ar, es-bo, es-cl, es-co, es-cr, es-cu, es-do, es-ec, es-gt, es-hn, es-mx, es-ni, es-pa, es-pe, es-pr, es-py, es-sv, es-uy, es-ve, ja, ko-kr, fr-fr, de-de, x-default",
      "fix": null
    },
    {
      "id": "llms-full",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/llms-full.txt expanded context",
      "why": "Lets an agent take in the full context in a single request instead of walking the site step by step.",
      "skill": "llms-full-txt",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "2778 words of text and 117 link lines in 28658 bytes, which is a list of links rather than expanded page content.",
      "evidence": "HTTP 200 · text/plain · 28658 bytes · 179 ms · # GitHub > GitHub is a developer platform for building, shipping, and maintaining software. It provides cloud-based Git…",
      "fix": "# In /llms.txt, under Docs:\n- [Full context](https://example.com/llms-full.txt): Every key page as one document\n\n# /llms-full.txt\n# Example Inc - full context\n\n> Complete text of the pages an agent needs, in a single request. Regenerated on deploy.\n\n## https://example.com/ (Home)\n\nExample Inc runs a payments API for marketplaces. Production traffic is served from three regions.\n\n## https://example.com/pricing (Pricing)\n\nStarter is $0 for 1,000 calls per month. Growth is $99 for 100,000 calls."
    },
    {
      "id": "agents-md",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "AGENTS.md with the required sections",
      "why": "The instruction file for coding and operations agents. It fails more often than any other check in the curated corpus we measured, and the usual reason is not a missing file but a file without the sections an agent needs.",
      "skill": "agents-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Not found (HTTP 406, 0 bytes).",
      "evidence": "HTTP 406 · text/html · 224 ms",
      "fix": "# AGENTS.md\n\n## Project overview\nExample Inc is a payments API for marketplaces. Docs: https://example.com/docs\n\n## Setup and build\n- `pnpm install`\n- `pnpm dev` -> http://localhost:3000\n- `pnpm build`\n\n## Testing\n- `pnpm test`; lint and types: `pnpm lint && pnpm typecheck`\n\n## Conventions\n- TypeScript strict mode; no `any` in exported signatures.\n- Public API routes live in `src/routes/api/`.\n\n## Security and contact\n- Never commit secrets; use `.env.local`.\n- Report vulnerabilities to security@example.com."
    },
    {
      "id": "sitemap-md",
      "category": "discoverability",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/sitemap.md markdown site map",
      "why": "Lets an agent read your site structure as markdown in a single file. Adoption is still very low, so this is an early-mover advantage.",
      "skill": "sitemap-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "HTML was returned for /sitemap.md with HTTP 200 by a catch-all route, 191911 bytes.",
      "evidence": "HTTP 200 · text/html; charset=utf-8 · 191911 bytes · 240 ms · <!DOCTYPE html> <html lang=\"en\" data-color-mode=\"light\" data-light-theme=\"light…",
      "fix": "# Sitemap\n\n- [Home](https://example.com/): What Example Inc does and who it is for\n- [Quickstart](https://example.com/docs/quickstart): First API call in five minutes\n- [API reference](https://example.com/docs/api): Every endpoint and response field\n- [Pricing](https://example.com/pricing): Plans, limits and overage rates\n- [Status](https://example.com/status): Live service status and incident history\n- [Contact](https://example.com/contact): Sales and support routes"
    },
    {
      "id": "markdown-negotiation",
      "category": "content",
      "tier": "recommended",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Markdown content negotiation",
      "why": "Agents can request a markup-free version with \"Accept: text/markdown\", which cuts token cost.",
      "skill": "markdown-negotiation",
      "standards": [
        "RFC 9110"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The homepage answered Accept: text/markdown with Content-Type text/html; charset=utf-8 (HTTP 200), so the HTML document is served to every client.",
      "evidence": "status: 200; content-type: text/html; charset=utf-8; vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With, X-GitHub-Client-Version, Accept-Language, Sec-Fetch-Site,Accept-Encoding, Accept, X-Requested-With; markdown body: no",
      "fix": "// server.js - one URL, two representations (RFC 9110).\nimport express from 'express';\nimport { readFile } from 'node:fs/promises';\n\nconst app = express();\napp.use(async (req, res, next) => {\n  if (req.method !== 'GET') return next();\n  res.vary('Accept'); // the HTML response must carry this too\n  if (req.accepts(['text/html', 'text/markdown']) !== 'text/markdown') return next();\n  try {\n    const file = `public${req.path.replace(/\\/$/, '/index')}.md`;\n    res.type('text/markdown').send(await readFile(file, 'utf8'));\n  } catch {\n    next(); // no markdown twin for this path: fall back to HTML\n  }\n});\napp.use(express.static('public'));\napp.listen(3000);"
    },
    {
      "id": "headings",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Semantic heading structure",
      "why": "A single H1 and a consistent H2 structure let the content be split correctly.",
      "skill": "semantic-headings",
      "standards": [
        "WCAG 2.2"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "1 H1 with 9 H2s and 16 H3s, and no level in the outline is skipped.",
      "evidence": "outline: H2 H1 H2 H2 H2 H3 H3 H3 H3 H3 H2 H3 H2 H3 H3 H3 H3 H3 H2 H2 H2 H3 H3 H3 H3 H3",
      "fix": null
    },
    {
      "id": "meta",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Title and summary metadata",
      "why": "This is how an agent learns what a page is about without opening it.",
      "skill": "page-metadata",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Both carriers are present but outside the band: title 70 characters (band 50-60) and description 186 characters (band 120-160).",
      "evidence": "title(70): GitHub · Change is constant. GitHub keeps you ahead. · GitHub · GitHub | description(186): Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.",
      "fix": "<head>\n  <meta charset=\"utf-8\" />\n  <title>Agent readiness audit for e-commerce teams | Acme Inc</title>\n  <meta\n    name=\"description\"\n    content=\"Acme audits how well your store serves AI agents: 52 checks across discovery, content, bot access and commerce, each paired with a paste-ready fix.\"\n  />\n</head>"
    },
    {
      "id": "jsonld",
      "category": "content",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "JSON-LD structured data",
      "why": "The entity type becomes unambiguous to a machine. Without authoritative data, an agent answers from whatever it can scrape.",
      "skill": "structured-data",
      "standards": [
        "schema.org"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No JSON-LD script block on the homepage (0 blocks found).",
      "evidence": "blocks: 0 total, 0 non-empty, 0 parsed; schema.org @context: no; @types: none",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"WebSite\",\n  \"name\": \"Acme Agent Readiness\",\n  \"url\": \"https://www.example.com/\",\n  \"description\": \"Audits how well a website serves autonomous AI agents.\",\n  \"publisher\": {\n    \"@type\": \"Organization\",\n    \"name\": \"Acme\",\n    \"url\": \"https://www.example.com/\",\n    \"logo\": \"https://www.example.com/logo.svg\"\n  }\n}\n</script>"
    },
    {
      "id": "faq-schema",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "FAQ / question-answer schema",
      "why": "Question-and-answer content is the type agents quote most.",
      "skill": "faq-schema",
      "standards": [
        "schema.org/FAQPage"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No FAQPage entity among 0 parsed JSON-LD blocks on the homepage.",
      "evidence": "@types: none",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What does an agent readiness audit measure?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Fifty-two checks across discovery, content, bot access, protocol and commerce, each scored and paired with a fix.\"\n      }\n    }\n  ]\n}\n</script>"
    },
    {
      "id": "breadcrumb",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Breadcrumb / navigation schema",
      "why": "Helps an agent make sense of where a page sits in your site.",
      "skill": "breadcrumb-schema",
      "standards": [
        "schema.org/BreadcrumbList"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No BreadcrumbList entity among 0 parsed JSON-LD blocks on the homepage.",
      "evidence": "@types: none",
      "fix": "<script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [\n    { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": \"https://www.example.com/\" },\n    { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Checks\", \"item\": \"https://www.example.com/checks\" },\n    { \"@type\": \"ListItem\", \"position\": 3, \"name\": \"Structured data\", \"item\": \"https://www.example.com/checks/jsonld\" }\n  ]\n}\n</script>"
    },
    {
      "id": "summary",
      "category": "content",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Prominent summary block",
      "why": "The llms.txt contract recommends a short summary at the top of every page; agents quote it directly.",
      "skill": "page-summary",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Block with class=\"lp-IntroHero\" holds 256 characters before the first H2.",
      "evidence": "<section class=\"Primer_Brand__Hero-module__Hero___It6gj Primer_Brand__Hero-module__Hero--variant-default___lNgHw Primer_Brand__Hero-module__Hero--align-center___6FMoH lp-IntroHero-hero\" aria-labelledby=\"hero-section-brand-heading\" data-testid=\"Hero\" data-h",
      "fix": null
    },
    {
      "id": "lang",
      "category": "content",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Language declaration and multilingual access",
      "why": "A wrong language tag makes an agent misread the content.",
      "skill": "language-declaration",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "html lang=\"en\" with 26 hreflang alternates, all with absolute hrefs plus a self-reference and x-default.",
      "evidence": "html lang=\"en\"; alternates: en-us -> https://github.com, pt-br -> https://github.com?locale=pt-br, es-ar -> https://github.com?locale=es-419, es-bo -> https://github.com?locale=es-419, es-cl -> https://github.com?locale=es-419, es-co -> https://github.com?locale=es-419, es-cr -> https://github.com?locale=es-419, es-cu -> https://github.com?locale=es-419, es-do -> https://githu…",
      "fix": null
    },
    {
      "id": "no-js-fallback",
      "category": "content",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Content that needs no JavaScript",
      "why": "If content is only produced client-side, the page is empty for agents that do not run JavaScript.",
      "skill": "server-rendering",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "7396 characters of static text and 1 H1 is in the HTML before any JavaScript runs.",
      "evidence": "static characters: 7396; H1 in static HTML: 1; characters inside noscript: 0; markup characters: 572689",
      "fix": null
    },
    {
      "id": "spa-fallback",
      "category": "content",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Per-page content separation (no SPA fallback)",
      "why": "A catch-all route returning the same skeleton for every URL makes pages indistinguishable to an agent.",
      "skill": "server-rendering",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Homepage and /about ship different titles (\"GitHub · Change is constant. GitHub kee…\" vs \"About GitHub · GitHub\") and different main text (12% word overlap).",
      "evidence": "compared / vs /about; titles \"GitHub · Change is constant. GitHub keeps you ahe…\" / \"About GitHub · GitHub\"; skeleton 55%; main-text word overlap 12%; main text 2137 characters",
      "fix": null
    },
    {
      "id": "token-efficiency",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Token efficiency (content-to-markup ratio)",
      "why": "A bloated DOM wastes an agent's context window.",
      "skill": "token-efficiency",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Content-to-markup ratio 1.2% (7396 visible of 572689 markup characters, ~1473 tokens), below the 8% floor where markup outweighs the content.",
      "evidence": "visible characters: 7396; markup characters: 572689; words: 1091; estimated tokens: 1473",
      "fix": "// scripts/tighten-html.mjs - run after the build over every emitted page.\nimport { readdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { minify } from 'html-minifier-terser';\n\nconst pages = readdirSync('dist', { recursive: true, encoding: 'utf8' }).filter((p) => p.endsWith('.html'));\n\nfor (const page of pages) {\n  const file = `dist/${page}`;\n  const before = readFileSync(file, 'utf8');\n  const after = await minify(before, {\n    collapseWhitespace: true,\n    removeComments: true,\n    removeRedundantAttributes: true,\n    minifyCSS: true,\n    minifyJS: true,\n  });\n  writeFileSync(file, after);\n}"
    },
    {
      "id": "viewport",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Responsive markup",
      "why": "Agent browsers mostly run at mobile scale.",
      "skill": "responsive-markup",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "viewport content \"width=device-width\" sets width=device-width and leaves zoom unrestricted.",
      "evidence": "viewport meta: width=device-width; media queries on the page: 0",
      "fix": null
    },
    {
      "id": "webbotauth",
      "category": "botaccess",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Web Bot Auth key directory",
      "why": "RFC 9421 with Ed25519: the mechanism that lets a site verify which agent is calling rather than guessing from a user-agent string. Adoption in the curated corpus we measured is around one site in a hundred.",
      "skill": "web-bot-auth",
      "standards": [
        "RFC 9421"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "/.well-known/http-message-signatures-directory answered HTTP 404, not a JWK Set.",
      "evidence": "<!DOCTYPE html> <html lang=\"en\" data-color-mode=\"auto\" data-light-theme=\"light\" data-dark-theme=\"dark\" data-a11y-animated-images=\"system\" data-a11y-link-underlines=\"true\" > <head> <meta charset=\"utf-8\"> <link rel=\"dns-p…",
      "fix": null
    },
    {
      "id": "agent-permissions",
      "category": "botaccess",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": false,
      "label": "Agent permission model (agent-permissions.json)",
      "why": "Declares which actions an agent may take, which are refused, and which need a person. It is the difference between a policy and a wish: in the curated corpus we measured, roughly one site in a hundred publishes one.",
      "skill": "agent-permissions",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Neither path served a permission document (/.well-known/agent-permissions.json HTTP 404, /agent-permissions.json HTTP 410).",
      "evidence": null,
      "fix": null
    },
    {
      "id": "ai-rules",
      "category": "botaccess",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Named AI bot rules in robots.txt",
      "why": "Naming agent crawlers explicitly is the first step to being visible in agent traffic.",
      "skill": "ai-rules",
      "standards": [
        "RFC 9309"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "6 of 18 named AI bots addressed with their own Allow or Disallow rules (GPTBot, OAI-SearchBot, ClaudeBot, anthropic-ai, PerplexityBot); Bytespider is blocked outright.",
      "evidence": "User-agent: gptbot, oai-searchbot, claudebot, anthropic-ai, perplexitybot | rules 195 ;; User-agent: bytespider | rules 1",
      "fix": null
    },
    {
      "id": "content-signal",
      "category": "discoverability",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Content-Signal usage signals",
      "why": "Declares how your content may be used, inside robots.txt. Cloudflare included this in its readiness checks.",
      "skill": "content-signals",
      "standards": [
        "contentsignals.org"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Content-Signal line in robots.txt (16739 bytes) and none in the homepage response headers.",
      "evidence": "HTTP 200 · text/plain · 16739 bytes · 178 ms",
      "fix": "# https://example.com/robots.txt - Content Signals Policy (contentsignals.org)\n# search   = index the content and return links and short excerpts\n# ai-input = use the content in a model at answer time (grounding)\n# ai-train = use the content to train or fine-tune a model\n\nUser-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no\nAllow: /\n\nUser-agent: GPTBot\nContent-Signal: search=yes, ai-input=yes, ai-train=no\nAllow: /"
    },
    {
      "id": "ai-policy",
      "category": "botaccess",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "AI usage policy page",
      "why": "States the rules agents must follow and reduces licensing ambiguity.",
      "skill": "ai-policy",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "AI policy at /ai covers 2 of 3 expected topics (prohibited uses and a contact route stated; permitted uses missing) and is not linked from the home page.",
      "evidence": "ai (andrey sitnik) · github skip to content navigation menu sign in appearance settings platform ai code creation github copilot write better code with ai github copilot app direct agents from issue to merge mcp registry integrate external tools developer wor…",
      "fix": "<!doctype html>\n<html lang=\"en\">\n<head><meta charset=\"utf-8\"><title>AI usage policy</title></head>\n<body>\n  <h1>AI usage policy</h1>\n  <h2>Permitted</h2>\n  <p>Indexing, retrieval and citation by identified search and answer engines.</p>\n  <h2>Not permitted</h2>\n  <p>Do not train, fine-tune or distil a model on this content; no bulk scraping or resale.</p>\n  <h2>Contact</h2>\n  <p><a href=\"mailto:agents@example.com\">agents@example.com</a></p>\n</body>\n</html>"
    },
    {
      "id": "bot-page",
      "category": "botaccess",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Crawler and agent policy page",
      "why": "Explains which agents are permitted and how they are verified.",
      "skill": "bot-policy",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "Bot policy at /bot covers 3 of 4 expected topics (refused agents, identity verification and a contact route stated; welcomed agents missing) and is not linked from the home page.",
      "evidence": "bot · github skip to content navigation menu sign in appearance settings platform ai code creation github copilot write better code with ai github copilot app direct agents from issue to merge mcp registry integrate external tools developer workflows actions …",
      "fix": "<!doctype html>\n<html lang=\"en\">\n<head><meta charset=\"utf-8\"><title>Bot policy</title></head>\n<body>\n<h1>Bot and agent policy</h1>\n<h2>Welcome</h2>\n<p>Identified search and answer engines that cite the source.</p>\n<h2>Refused</h2>\n<p>Training crawlers, spoofed User-Agents, clients that ignore robots.txt.</p>\n<h2>How we verify identity</h2>\n<p>Signed requests are checked against our key directory at /.well-known/http-message-signatures-directory; unsigned clients by published IP ranges.</p>\n<h2>Contact</h2>\n<p><a href=\"mailto:agents@example.com\">agents@example.com</a></p>\n</body>\n</html>"
    },
    {
      "id": "security-txt",
      "category": "botaccess",
      "tier": "recommended",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "security.txt (RFC 9116)",
      "why": "Provides a responsible disclosure channel for agent-related security incidents.",
      "skill": "security-txt",
      "standards": [
        "RFC 9116"
      ],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "security.txt at /.well-known/security.txt declares 1 Contact and an Expires 2026-11-11T22:55:00z in the future. Not scored: its Policy URL is on bounty.github.com, which this scan does not request.",
      "evidence": "Contact: https://hackerone.com/github Acknowledgments: https://hackerone.com/github/hacktivity Preferred-Languages: en Canonical: https://github.com/.well-known/security.txt Policy: https://bounty.github.com Hiring: https://github.careers Expires: 2026-11-11T…",
      "fix": null
    },
    {
      "id": "crawl-delay",
      "category": "botaccess",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Crawl rate declaration",
      "why": "Cloudflare's Verified Bots policy drops AI crawlers that ignore crawl-delay.",
      "skill": "crawl-delay",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Crawl-delay: 1s for User-agent: GPTBot, OAI-SearchBot, ClaudeBot, anthropic-ai, PerplexityBot (1 of 2 declared Crawl-delay lines applies to an AI crawler or *).",
      "evidence": "# If you would like to crawl GitHub contact us via https://support.github.com?tags=dotcom-robots # We also provide an extensive API: https://docs.github.com User-agent: GPTBot User-agent: OAI-SearchBot User-agent: ClaudeBot User-agent: ant…",
      "fix": null
    },
    {
      "id": "ai-txt",
      "category": "botaccess",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "/ai.txt access declaration",
      "why": "Some agent ecosystems read an /ai.txt contract alongside robots.txt.",
      "skill": "ai-txt",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "/ai.txt answered HTTP 406, not an access declaration.",
      "evidence": "",
      "fix": null
    },
    {
      "id": "mcp-card",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "MCP server card",
      "why": "Since MCP 2026-07-28, agents discover tool servers through a published declaration.",
      "skill": "mcp-server-card",
      "standards": [
        "MCP 2026-07-28"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No MCP server card was served as JSON at the 3 declared paths (/.well-known/mcp/server-card.json 404 application/json; /.well-known/mcp.json 404 application/json; /mcp.json 200 application/json).",
      "evidence": null,
      "fix": "{\n  \"$schema\": \"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json\",\n  \"name\": \"com.example/weather\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Live weather and forecast data for partner agents.\",\n  \"title\": \"Example Weather\",\n  \"websiteUrl\": \"https://your-domain.example/developers\",\n  \"remotes\": [\n    {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://your-domain.example/mcp\",\n      \"supportedProtocolVersions\": [\"2026-07-28\"]\n    }\n  ]\n}"
    },
    {
      "id": "openapi",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "OpenAPI definition",
      "why": "A machine-readable contract so an agent can discover your API and generate correct calls.",
      "skill": "openapi",
      "standards": [
        "OpenAPI 3.x"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No OpenAPI document was found: 5 candidate paths (0 advertised, 5 standard) returned no JSON OpenAPI 3.x document.",
      "evidence": "tried: /openapi.json 410 | /openapi.yaml 406 | /.well-known/openapi.json 404 | /api/openapi.json 404 | /swagger.json 410",
      "fix": "{\n  \"openapi\": \"3.1.0\",\n  \"info\": { \"title\": \"Example Public API\", \"version\": \"1.4.0\" },\n  \"servers\": [{ \"url\": \"https://api.your-domain.example/v1\" }],\n  \"paths\": {\n    \"/orders/{orderId}\": {\n      \"get\": {\n        \"operationId\": \"getOrder\",\n        \"summary\": \"Get the status of one order\",\n        \"parameters\": [{ \"name\": \"orderId\", \"in\": \"path\", \"required\": true, \"schema\": { \"type\": \"string\" } }],\n        \"responses\": { \"200\": { \"description\": \"The order\" } }\n      }\n    }\n  }\n}"
    },
    {
      "id": "oauth-discovery",
      "category": "protocol",
      "tier": "essential",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "OAuth discovery documents",
      "why": "Required for agents to connect to your authenticated API on their own (RFC 8414 / RFC 9728).",
      "skill": "oauth-discovery",
      "standards": [
        "RFC 8414",
        "RFC 9728"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "None of the 3 OAuth discovery paths returned a JSON document (/.well-known/oauth-authorization-server 404 text/html; /.well-known/openid-configuration 404 text/html; /.well-known/oauth-protected-resource 404 text/html).",
      "evidence": null,
      "fix": "{\n  \"resource\": \"https://api.your-domain.example/\",\n  \"resource_name\": \"Example API\",\n  \"resource_logo_uri\": \"https://your-domain.example/logo.png\",\n  \"authorization_servers\": [\"https://auth.your-domain.example/\"],\n  \"scopes_supported\": [\"api.read\", \"api.write\"],\n  \"bearer_methods_supported\": [\"header\"]\n}"
    },
    {
      "id": "api-catalog",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "API catalog",
      "why": "Lets an agent see which capabilities are callable in a single document (RFC 9727).",
      "skill": "api-catalog",
      "standards": [
        "RFC 9727"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No API catalog linkset was served at the 3 declared paths (/.well-known/api-catalog 404 text/html; /api-catalog.json 410 application/json; /.well-known/ai-plugin.json 404 application/json).",
      "evidence": null,
      "fix": "{\n  \"linkset\": [\n    {\n      \"anchor\": \"https://your-domain.example/apis/public_api\",\n      \"service-desc\": [\n        { \"href\": \"https://your-domain.example/openapi.json\", \"type\": \"application/json\" }\n      ],\n      \"service-doc\": [\n        { \"href\": \"https://your-domain.example/docs/\", \"type\": \"text/html\" }\n      ],\n      \"status\": [\n        { \"href\": \"https://your-domain.example/status.json\", \"type\": \"application/json\" }\n      ]\n    }\n  ]\n}"
    },
    {
      "id": "agent-skills",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Agent Skills declaration",
      "why": "Offers ready-made capability packages to agent runtimes.",
      "skill": "agent-skills",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No agent skills index with a non-empty skills array was served as JSON at the 3 declared paths (/.well-known/agent-skills/index.json 404 application/json; /.well-known/agent-skills.json 404 application/json; /.well-known/skills.json 404 application/json).",
      "evidence": null,
      "fix": "{\n  \"$schema\": \"https://schemas.agentskills.io/discovery/0.2.0/schema.json\",\n  \"skills\": [\n    {\n      \"name\": \"invoice-reconciliation\",\n      \"type\": \"skill-md\",\n      \"description\": \"Reconcile invoices against payments and flag unmatched line items.\",\n      \"url\": \"/.well-known/agent-skills/invoice-reconciliation/SKILL.md\",\n      \"digest\": \"sha256:9f2c1a4b7d8e0f3a5c6b1d2e4f7089a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6\"\n    }\n  ]\n}"
    },
    {
      "id": "a2a-card",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "A2A agent card",
      "why": "A2A v1.0 (Linux Foundation) is the emerging standard for agent-to-agent discovery. Almost no site publishes a card yet, which makes this one of the cheapest places to be early.",
      "skill": "a2a-agent-card",
      "standards": [
        "A2A v1.0"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No A2A agent card was served as JSON at the 2 declared paths (/.well-known/agent-card.json 404 application/json; /.well-known/agent.json 404 application/json).",
      "evidence": null,
      "fix": "{\n  \"name\": \"Example Support Agent\",\n  \"description\": \"Answers product and billing questions for partner agents.\",\n  \"version\": \"1.0.0\",\n  \"supportedInterfaces\": [\n    { \"url\": \"https://your-domain.example/a2a/v1\", \"protocolBinding\": \"JSONRPC\", \"protocolVersion\": \"1.0\" }\n  ],\n  \"capabilities\": { \"streaming\": true },\n  \"defaultInputModes\": [\"text/plain\"],\n  \"defaultOutputModes\": [\"text/plain\"],\n  \"skills\": [\n    {\n      \"id\": \"billing-question\",\n      \"name\": \"Billing question\",\n      \"description\": \"Answers invoice questions for one account.\",\n      \"tags\": [\"billing\"]\n    }\n  ]\n}"
    },
    {
      "id": "a2a-signed",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Cryptographically signed agent card",
      "why": "A2A v1.0 makes identity verifiable through JWS (RFC 7515).",
      "skill": "a2a-card-signing",
      "standards": [
        "RFC 7515"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "unmeasurable",
      "detail": "No A2A agent card is published, so there are no signatures to inspect and the check is not scored.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "auth-md",
      "category": "protocol",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "/auth.md agent authentication guide",
      "why": "A guide telling an agent which authentication flow to use.",
      "skill": "auth-md",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No markdown authentication guide was served at the 2 declared paths (/auth.md 404 text/plain; /.well-known/auth.md 404 text/plain).",
      "evidence": null,
      "fix": "# auth.md\n\nAgents authenticate here: discover, register, claim if needed, call.\n\n## Methods\n- `identity_assertion`: you hold an ID-JAG bound to this `resource`.\n- `service_auth`: you have the user's verified email; a claim follows.\n- `anonymous`: no user identity yet.\n\n## Endpoints\nGET https://api.your-domain.example/.well-known/oauth-protected-resource\nPOST `agent_auth.identity_endpoint`, then `agent_auth.claim_endpoint` when claim is\nrequired; exchange at `token_endpoint` for an access_token."
    },
    {
      "id": "webmcp",
      "category": "protocol",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "WebMCP browser tool declaration",
      "why": "WebMCP lets sites expose tools to in-browser agents. It is the only normative deliverable of the W3C Agentic Web WG.",
      "skill": "webmcp",
      "standards": [
        "W3C WebMCP"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No WebMCP declaration was found: the 3 manifest paths served no tools array and the homepage contains 0 registerTool calls.",
      "evidence": null,
      "fix": "{\n  \"tools\": [\n    {\n      \"name\": \"search_products\",\n      \"title\": \"Search products\",\n      \"description\": \"Search the public catalogue by free-text query and return matching products with prices.\",\n      \"inputSchema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"query\": { \"type\": \"string\", \"description\": \"Free-text search query\" },\n          \"limit\": { \"type\": \"integer\", \"minimum\": 1, \"maximum\": 50, \"default\": 10 }\n        },\n        \"required\": [\"query\"],\n        \"additionalProperties\": false\n      }\n    }\n  ]\n}"
    },
    {
      "id": "ard-manifest",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "ARD resource discovery manifest",
      "why": "Cisco/Outshift's Agentic Resource Discovery specification; Lighthouse audits it too.",
      "skill": "ard",
      "standards": [
        "ard-spec"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "ARD manifest at /.well-known/ai-catalog.json lists 1 entry of which 0 are complete and 0 carry both url and data, which the specification forbids.",
      "evidence": null,
      "fix": "{\n  \"entries\": [\n    {\n      \"identifier\": \"urn:air:your-domain.example:server:support\",\n      \"displayName\": \"Example Support MCP Server\",\n      \"type\": \"application/mcp-server-card+json\",\n      \"url\": \"https://your-domain.example/.well-known/mcp/server-card.json\",\n      \"description\": \"Tools for order status and returns.\"\n    }\n  ]\n}"
    },
    {
      "id": "docs",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Documentation reachable",
      "why": "An agent needs documentation to complete an integration on its own.",
      "skill": "documentation",
      "standards": [],
      "status": "pass",
      "points": 1,
      "counted": true,
      "excluded": null,
      "detail": "Documentation is reachable at /docs (standard path) and returns HTTP 200 text/html with 620 readable words.",
      "evidence": null,
      "fix": "<!-- Homepage <head>: tell agents where the public docs are -->\n<link rel=\"service-doc\" href=\"/docs/\" type=\"text/html\">\n\n<!-- Homepage body: a real link, so crawlers and users both find it -->\n<a href=\"/docs/\">Documentation and API reference</a>"
    },
    {
      "id": "pricing-structured",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Structured pricing information",
      "why": "An offer without a price cannot be compared by an agent — you drop out of consideration.",
      "skill": "pricing-schema",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "No structured offer is present in the homepage JSON-LD and the only price signal is an image labelled \"Copilot Autofix identifies vulnerable code and provides an …\".",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Service\",\n  \"name\": \"Agent Readiness Audit\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"490.00\",\n    \"priceCurrency\": \"USD\",\n    \"availability\": \"https://schema.org/InStock\",\n    \"priceSpecification\": {\n      \"@type\": \"UnitPriceSpecification\",\n      \"price\": \"490.00\",\n      \"priceCurrency\": \"USD\"\n    }\n  }\n}"
    },
    {
      "id": "service-schema",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Service/product scope machine-readable",
      "why": "An agent must be able to answer \"what does this site offer, and to whom\".",
      "skill": "service-schema",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The homepage JSON-LD carries 0 model types with 0 Service or Product nodes, so the offer scope cannot be read.",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Service\",\n  \"name\": \"Agent readiness audit\",\n  \"serviceType\": \"Website agent-readiness audit and remediation\",\n  \"provider\": { \"@type\": \"Organization\", \"name\": \"Example Inc.\", \"url\": \"https://your-domain.example\" },\n  \"areaServed\": [{ \"@type\": \"Country\", \"name\": \"United States\" }],\n  \"audience\": { \"@type\": \"BusinessAudience\", \"name\": \"E-commerce and SaaS teams\" }\n}"
    },
    {
      "id": "contact",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Structured contact information",
      "why": "An agent must know where to reach you before starting a transaction, or when something fails.",
      "skill": "contact-schema",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "The homepage JSON-LD carries 0 model types with 0 Organization nodes and the page states 0 contact channels.",
      "evidence": null,
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Organization\",\n  \"name\": \"Example Inc.\",\n  \"url\": \"https://your-domain.example\",\n  \"contactPoint\": [\n    {\n      \"@type\": \"ContactPoint\",\n      \"contactType\": \"technical support\",\n      \"email\": \"agents@your-domain.example\",\n      \"telephone\": \"+1-555-0100\",\n      \"availableLanguage\": [\"en\"]\n    }\n  ]\n}"
    },
    {
      "id": "status-page",
      "category": "protocol",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": false,
      "label": "Service status and changelog feed",
      "why": "An agent should be able to learn about outages and API changes in a machine-readable way.",
      "skill": "status-changelog",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "A status document is advertised at /status (HTTP 200) but the homepage advertises 0 Atom or RSS changelog feeds.",
      "evidence": null,
      "fix": "<!-- Homepage <head>: advertise machine-readable status and history -->\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Service status\"\n      href=\"/status/feed.atom\">\n<link rel=\"alternate\" type=\"application/atom+xml\" title=\"Changelog\"\n      href=\"/changelog/feed.atom\">\n\n<!-- Homepage body: links a user (or a crawler) can follow -->\n<a href=\"/status/\">Service status</a>\n<a href=\"/changelog/\">Changelog</a>"
    },
    {
      "id": "product-schema",
      "category": "commerce",
      "tier": "essential",
      "weight": 3,
      "impact": "critical",
      "conditional": true,
      "label": "Product/catalog schema",
      "why": "Product data is the most valuable and the least machine-readable: price, availability and returns are usually rendered for a person to read and never declared for a machine to parse.",
      "skill": "product-schema",
      "standards": [
        "schema.org/Product"
      ],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No Product, Offer or AggregateOffer type appears in the homepage JSON-LD (0 types) or in the JSON-LD of the 2 readable product or collection pages.",
      "evidence": "homepage @type: none; product paths: /products HTTP 200, /shop HTTP 200, /store HTTP 404",
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Product\",\n  \"name\": \"Aurora Desk Lamp\",\n  \"sku\": \"ADL-100-BLK\",\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"1299.00\",\n    \"priceCurrency\": \"USD\",\n    \"availability\": \"https://schema.org/InStock\"\n  }\n}"
    },
    {
      "id": "payment-protocols",
      "category": "commerce",
      "tier": "recommended",
      "weight": 3,
      "impact": "high",
      "conditional": true,
      "label": "Agent payment standard support (AP2/ACP/x402/UCP)",
      "why": "The least-implemented surface in the rubric. Accepting an agent payment means choosing a standard and changing a checkout, which is a business decision most sites have not made yet.",
      "skill": "agent-payments",
      "standards": [
        "AP2",
        "ACP",
        "x402",
        "UCP"
      ],
      "status": "warn",
      "points": 0.7,
      "counted": true,
      "excluded": null,
      "detail": "Exactly one agent-payment signal (agent-purchase grant stated on /docs); the 6 readable payment and policy pages name no second standard, manifest or agent-purchase wording.",
      "evidence": "paths read: 6/8; standards: none",
      "fix": null
    },
    {
      "id": "agent-purchase",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": true,
      "label": "Agent purchase policy",
      "why": "Liability is the open question in agent commerce, and it is a policy decision rather than a technical one: a site that accepts an agent purchase has to decide who carries the cost when the agent is wrong, and publish that decision where an agent can read it.",
      "skill": "agent-purchase-policy",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "No page among the 5 agent policy paths carries both an agent word and a purchase word (/ai-policy HTTP 404, /agent-policy HTTP 200, /terms HTTP 200, /agentic-commerce HTTP 200, /ai HTTP 200).",
      "evidence": "readable pages: /agent-policy, /terms, /agentic-commerce, /ai",
      "fix": null
    },
    {
      "id": "ucp-manifest",
      "category": "commerce",
      "tier": "emerging",
      "weight": 2,
      "impact": "medium",
      "conditional": true,
      "label": "UCP manifest (/.well-known/ucp)",
      "why": "Google and Shopify's Universal Commerce Protocol; lets a merchant declare checkout capabilities at transaction time.",
      "skill": "ucp",
      "standards": [],
      "status": "fail",
      "points": 0,
      "counted": true,
      "excluded": null,
      "detail": "Neither /.well-known/ucp nor /.well-known/ucp.json returned HTTP 200 (/.well-known/ucp HTTP 404, /.well-known/ucp.json HTTP 404), so no manifest was served.",
      "evidence": null,
      "fix": "{\n  \"protocol_version\": \"1.0\",\n  \"merchant\": { \"id\": \"shop.example.com\", \"name\": \"Example Shop\", \"url\": \"https://shop.example.com\" },\n  \"capabilities\": { \"catalog_search\": true, \"product_detail\": true, \"cart\": true, \"checkout\": true },\n  \"checkout\": {\n    \"endpoint\": \"https://shop.example.com/api/ucp/checkout\",\n    \"payment_handlers\": [\"ap2\", \"acp\", \"x402\"]\n  }\n}"
    },
    {
      "id": "returns",
      "category": "commerce",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": true,
      "label": "Return and shipping terms machine-readable",
      "why": "An agent must verify return terms before making a purchase decision.",
      "skill": "return-policy-schema",
      "standards": [
        "schema.org/MerchantReturnPolicy"
      ],
      "status": "warn",
      "points": 0.65,
      "counted": true,
      "excluded": null,
      "detail": "/shipping responded but none of the 4 documents read declares MerchantReturnPolicy or OfferShippingDetails.",
      "evidence": "readable return pages: /shipping 184571 bytes",
      "fix": "{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Offer\",\n  \"hasMerchantReturnPolicy\": {\n    \"@type\": \"MerchantReturnPolicy\",\n    \"applicableCountry\": \"US\",\n    \"merchantReturnDays\": 14,\n    \"returnMethod\": \"https://schema.org/ReturnByMail\",\n    \"returnFees\": \"https://schema.org/FreeReturn\"\n  },\n  \"shippingDetails\": {\n    \"@type\": \"OfferShippingDetails\",\n    \"shippingRate\": { \"@type\": \"MonetaryAmount\", \"value\": \"49.00\", \"currency\": \"USD\" }\n  }\n}"
    },
    {
      "id": "agent-analytics",
      "category": "commerce",
      "tier": "emerging",
      "weight": 1,
      "impact": "low",
      "conditional": true,
      "label": "Agent traffic measurement",
      "why": "If agent traffic is not measured separately, the channel's return is invisible and never funded.",
      "skill": "agent-analytics",
      "standards": [],
      "status": "warn",
      "points": 0.5,
      "counted": true,
      "excluded": null,
      "detail": "No analytics vendor signature among the 8 checked appears in the homepage source, so nothing about the agent channel can be attributed.",
      "evidence": "homepage 572789 bytes; vendors: none; markers: none",
      "fix": null
    },
    {
      "id": "inventory-freshness",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Inventory and price freshness",
      "why": "An agent that cannot tell whether an item is in stock — or when a price was last valid — will quote a stale offer to a buyer, or refuse to quote at all.",
      "skill": "inventory-freshness",
      "standards": [
        "schema.org/Offer"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "seller-identity",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Seller identity declared",
      "why": "On a marketplace an offer is meaningless without knowing who is selling and who is the merchant of record, because that is who the agent has a contract with.",
      "skill": "seller-identity",
      "standards": [
        "schema.org/Organization"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "shipping-costs",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Shipping cost and delivery declared",
      "why": "A purchase agent that cannot compute the delivered total cannot complete a checkout, and returns to the merchant without it.",
      "skill": "shipping-costs",
      "standards": [
        "schema.org/OfferShippingDetails"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "sandbox-environment",
      "category": "protocol",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Sandbox or test environment documented",
      "why": "An agent cannot safely integrate against a production endpoint; a documented sandbox is the difference between a working trial and a support ticket.",
      "skill": "sandbox-environment",
      "standards": [],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to saas or api sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "rate-limits-declared",
      "category": "protocol",
      "tier": "recommended",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Rate limits and quotas documented",
      "why": "An agent that does not know the quota discovers it by being throttled, halfway through a task it cannot resume.",
      "skill": "rate-limits",
      "standards": [
        "RFC 9110"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to api sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "licensing-terms",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "high",
      "conditional": false,
      "label": "Reuse and licensing terms declared",
      "why": "Declaring ai-train=no without stating a licensing path leaves both the publisher and the agent without an answer they can act on.",
      "skill": "licensing",
      "standards": [
        "TDM Reservation Protocol"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "provenance-declared",
      "category": "content",
      "tier": "emerging",
      "weight": 1,
      "impact": "medium",
      "conditional": false,
      "label": "Content provenance declared",
      "why": "Author, publication date and update date are what let an agent judge whether a source is current and attributable before it quotes it.",
      "skill": "provenance",
      "standards": [
        "schema.org/author",
        "C2PA"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "booking-action",
      "category": "commerce",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Machine-readable booking action",
      "why": "For a service business the agent's task is to book, not to browse — a declared action is what turns a contact page into a completed job.",
      "skill": "booking-action",
      "standards": [
        "schema.org/ReserveAction"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to services sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    },
    {
      "id": "document-formats",
      "category": "content",
      "tier": "recommended",
      "weight": 2,
      "impact": "medium",
      "conditional": false,
      "label": "Documents in machine-readable formats",
      "why": "A PDF that carries no document structure is unreadable to an agent and to a screen reader alike — the same defect, found twice.",
      "skill": "document-formats",
      "standards": [
        "PDF/UA"
      ],
      "status": "na",
      "points": 0,
      "counted": false,
      "excluded": "out-of-scope",
      "detail": "Not scored: this check applies to institution sites, and the site type could not be confirmed (best candidates: api, ecommerce). Declare the type to have it measured.",
      "evidence": null,
      "fix": null
    }
  ],
  "counts": {
    "pass": 13,
    "warn": 11,
    "fail": 27,
    "na": 10,
    "total": 61
  },
  "blockedBy": {
    "level": 2,
    "levelName": "Bot-Aware",
    "checks": [
      "robots-txt",
      "content-signal",
      "sitemap-xml"
    ]
  },
  "nextLevelGaps": [
    "robots-txt",
    "content-signal",
    "sitemap-xml"
  ],
  "ratio": {
    "passed": 13,
    "applicable": 51,
    "label": "13/51"
  },
  "meta": {
    "title": "GitHub · Change is constant. GitHub keeps you ahead. · GitHub · GitHub",
    "description": "Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.",
    "lang": "en",
    "words": 1091,
    "tokensEst": 1473,
    "bytes": 572789
  },
  "requests_log": [
    {
      "path": "/",
      "status": 200,
      "bytes": 572789,
      "ms": 110,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/robots.txt",
      "status": 200,
      "bytes": 16739,
      "ms": 178,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/sitemap.xml",
      "status": 406,
      "bytes": 0,
      "ms": 246,
      "contentType": "application/xml",
      "hops": 0
    },
    {
      "path": "/llms.txt",
      "status": 200,
      "bytes": 28658,
      "ms": 191,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/llms-full.txt",
      "status": 200,
      "bytes": 28658,
      "ms": 179,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/AGENTS.md",
      "status": 406,
      "bytes": 0,
      "ms": 224,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sitemap.md",
      "status": 200,
      "bytes": 191911,
      "ms": 240,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ai.txt",
      "status": 406,
      "bytes": 0,
      "ms": 214,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/ai-policy",
      "status": 404,
      "bytes": 263426,
      "ms": 307,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ai-usage",
      "status": 200,
      "bytes": 162258,
      "ms": 300,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/ai",
      "status": 200,
      "bytes": 254414,
      "ms": 493,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/terms/ai",
      "status": 404,
      "bytes": 263328,
      "ms": 329,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/yapay-zeka-politikasi",
      "status": 404,
      "bytes": 263466,
      "ms": 310,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/auth.md",
      "status": 404,
      "bytes": 9,
      "ms": 189,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/auth.md",
      "status": 404,
      "bytes": 9,
      "ms": 183,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/http-message-signatures-directory",
      "status": 404,
      "bytes": 263778,
      "ms": 262,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-permissions.json",
      "status": 404,
      "bytes": 21,
      "ms": 270,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/agent-permissions.json",
      "status": 410,
      "bytes": 394,
      "ms": 242,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/mcp/server-card.json",
      "status": 404,
      "bytes": 21,
      "ms": 144,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/mcp.json",
      "status": 404,
      "bytes": 21,
      "ms": 317,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/mcp.json",
      "status": 200,
      "bytes": 31514,
      "ms": 408,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-card.json",
      "status": 404,
      "bytes": 21,
      "ms": 382,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/agent.json",
      "status": 404,
      "bytes": 21,
      "ms": 197,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/oauth-authorization-server",
      "status": 404,
      "bytes": 263694,
      "ms": 252,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/oauth-protected-resource",
      "status": 404,
      "bytes": 263670,
      "ms": 244,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/openid-configuration",
      "status": 404,
      "bytes": 263622,
      "ms": 559,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/api-catalog",
      "status": 404,
      "bytes": 263514,
      "ms": 290,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/api-catalog.json",
      "status": 410,
      "bytes": 394,
      "ms": 235,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/ai-plugin.json",
      "status": 404,
      "bytes": 21,
      "ms": 360,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-skills/index.json",
      "status": 404,
      "bytes": 21,
      "ms": 151,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-skills.json",
      "status": 404,
      "bytes": 21,
      "ms": 166,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/skills.json",
      "status": 404,
      "bytes": 21,
      "ms": 387,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/security.txt",
      "status": 200,
      "bytes": 269,
      "ms": 170,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/security.txt",
      "status": 404,
      "bytes": 9,
      "ms": 264,
      "contentType": "text/plain",
      "hops": 0
    },
    {
      "path": "/.well-known/webmcp.json",
      "status": 404,
      "bytes": 21,
      "ms": 172,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/webmcp",
      "status": 404,
      "bytes": 263454,
      "ms": 227,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/webmcp.json",
      "status": 410,
      "bytes": 394,
      "ms": 185,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/ard.json",
      "status": 404,
      "bytes": 21,
      "ms": 156,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/agent-resources.json",
      "status": 404,
      "bytes": 21,
      "ms": 278,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/ai-catalog.json",
      "status": 200,
      "bytes": 187,
      "ms": 164,
      "contentType": "application/ai-catalog+json",
      "hops": 0
    },
    {
      "path": "/ard.json",
      "status": 410,
      "bytes": 394,
      "ms": 185,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/ucp",
      "status": 404,
      "bytes": 263418,
      "ms": 226,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/ucp.json",
      "status": 404,
      "bytes": 21,
      "ms": 185,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/openapi.json",
      "status": 410,
      "bytes": 394,
      "ms": 188,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/openapi.yaml",
      "status": 406,
      "bytes": 0,
      "ms": 412,
      "contentType": "application/x-yaml",
      "hops": 0
    },
    {
      "path": "/.well-known/openapi.json",
      "status": 404,
      "bytes": 21,
      "ms": 211,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/api/openapi.json",
      "status": 404,
      "bytes": 263423,
      "ms": 599,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/swagger.json",
      "status": 410,
      "bytes": 394,
      "ms": 254,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/ai",
      "status": 404,
      "bytes": 263406,
      "ms": 275,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/api",
      "status": 404,
      "bytes": 263254,
      "ms": 532,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/bot",
      "status": 200,
      "bytes": 190247,
      "ms": 573,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/bots",
      "status": 404,
      "bytes": 263375,
      "ms": 247,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agents",
      "status": 200,
      "bytes": 205494,
      "ms": 380,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agent",
      "status": 200,
      "bytes": 216167,
      "ms": 450,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agent-policy",
      "status": 200,
      "bytes": 189485,
      "ms": 547,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/agentic-commerce",
      "status": 200,
      "bytes": 162638,
      "ms": 452,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/terms",
      "status": 200,
      "bytes": 366664,
      "ms": 1067,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/pricing",
      "status": 200,
      "bytes": 701120,
      "ms": 571,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/fiyatlandirma",
      "status": 404,
      "bytes": 263370,
      "ms": 390,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/fiyat",
      "status": 200,
      "bytes": 162150,
      "ms": 285,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/plans",
      "status": 200,
      "bytes": 701120,
      "ms": 235,
      "contentType": "text/html",
      "hops": 1
    },
    {
      "path": "/contact",
      "status": 200,
      "bytes": 45868,
      "ms": 789,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/iletisim",
      "status": 200,
      "bytes": 183254,
      "ms": 493,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/contact-us",
      "status": 200,
      "bytes": 197296,
      "ms": 387,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/faq",
      "status": 200,
      "bytes": 214221,
      "ms": 448,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sss",
      "status": 200,
      "bytes": 246539,
      "ms": 422,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sikca-sorulan-sorular",
      "status": 404,
      "bytes": 263467,
      "ms": 240,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/help",
      "status": 200,
      "bytes": 56544,
      "ms": 517,
      "contentType": "text/html",
      "hops": 2
    },
    {
      "path": "/yardim",
      "status": 200,
      "bytes": 186567,
      "ms": 308,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/docs",
      "status": 200,
      "bytes": 247016,
      "ms": 384,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/documentation",
      "status": 200,
      "bytes": 185017,
      "ms": 277,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/developers",
      "status": 200,
      "bytes": 162710,
      "ms": 321,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/gelistiriciler",
      "status": 200,
      "bytes": 162518,
      "ms": 309,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/status",
      "status": 200,
      "bytes": 46,
      "ms": 159,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/changelog",
      "status": 404,
      "bytes": 263323,
      "ms": 253,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/releases",
      "status": 404,
      "bytes": 263311,
      "ms": 270,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/whats-new",
      "status": 200,
      "bytes": 183296,
      "ms": 316,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/returns",
      "status": 404,
      "bytes": 263406,
      "ms": 271,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/shipping",
      "status": 200,
      "bytes": 184571,
      "ms": 298,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/iade",
      "status": 200,
      "bytes": 224435,
      "ms": 409,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/kargo",
      "status": 200,
      "bytes": 191383,
      "ms": 292,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/refund-policy",
      "status": 404,
      "bytes": 263371,
      "ms": 238,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/about",
      "status": 200,
      "bytes": 299147,
      "ms": 235,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/products",
      "status": 200,
      "bytes": 187438,
      "ms": 267,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/shop",
      "status": 200,
      "bytes": 174112,
      "ms": 329,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/store",
      "status": 404,
      "bytes": 263275,
      "ms": 219,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/urunler",
      "status": 404,
      "bytes": 263299,
      "ms": 238,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/magaza",
      "status": 200,
      "bytes": 183232,
      "ms": 264,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/cart",
      "status": 200,
      "bytes": 212294,
      "ms": 306,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sepet",
      "status": 200,
      "bytes": 183144,
      "ms": 301,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/docs/sandbox",
      "status": 404,
      "bytes": 263376,
      "ms": 247,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/sandbox",
      "status": 200,
      "bytes": 198685,
      "ms": 269,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/developers/sandbox",
      "status": 404,
      "bytes": 263448,
      "ms": 257,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/rate-limits.json",
      "status": 404,
      "bytes": 21,
      "ms": 217,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/.well-known/rate-limits.json",
      "status": 404,
      "bytes": 21,
      "ms": 155,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/docs/rate-limits",
      "status": 404,
      "bytes": 263424,
      "ms": 225,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/licensing",
      "status": 200,
      "bytes": 184656,
      "ms": 322,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/.well-known/tdmrep.json",
      "status": 404,
      "bytes": 21,
      "ms": 164,
      "contentType": "application/json",
      "hops": 0
    },
    {
      "path": "/book",
      "status": 200,
      "bytes": 213921,
      "ms": 359,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/appointment",
      "status": 200,
      "bytes": 162415,
      "ms": 358,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/documents",
      "status": 200,
      "bytes": 162323,
      "ms": 311,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/publications",
      "status": 200,
      "bytes": 196943,
      "ms": 382,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/reports",
      "status": 200,
      "bytes": 187468,
      "ms": 373,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/github/github-mcp-server",
      "status": 200,
      "bytes": 828246,
      "ms": 570,
      "contentType": "text/html",
      "hops": 0
    },
    {
      "path": "/",
      "status": 200,
      "bytes": 572788,
      "ms": 381,
      "contentType": "text/html",
      "hops": 0
    }
  ]
}