{
  "version": "riddle-proof.profile-result.v1",
  "profile_name": "riddle-site-v402-llms-agent-index",
  "runner": "riddle",
  "status": "passed",
  "baseline_policy": "invariant_only",
  "route": {
    "requested": "https://riddledc.com/llms.txt",
    "observed": "/llms.txt",
    "expected_path": "/llms.txt",
    "matched": true,
    "http_status": 200
  },
  "artifacts": {
    "screenshots": [
      "riddle-site-v402-llms-agent-index-desktop",
      "riddle-site-v402-llms-agent-index-phone",
      "riddle-site-v402-llms-agent-index-ipad-mini",
      "riddle-site-v402-llms-agent-index-ipad"
    ],
    "console": "console.json",
    "proof_json": "proof.json",
    "dom_summary": "dom-summary.json",
    "riddle_artifacts": [
      {
        "name": "proof.json",
        "url": "https://cdn.riddledc.com/scripts/job_b0dc37de/proof.json.json",
        "source": "artifacts"
      },
      {
        "name": "console.json",
        "url": "https://cdn.riddledc.com/scripts/job_b0dc37de/console.json.json",
        "source": "artifacts"
      },
      {
        "name": "dom-summary.json",
        "url": "https://cdn.riddledc.com/scripts/job_b0dc37de/dom-summary.json.json",
        "source": "artifacts"
      },
      {
        "name": "riddle-site-v402-llms-agent-index-desktop.png",
        "url": "https://cdn.riddledc.com/scripts/job_b0dc37de/riddle-site-v402-llms-agent-index-desktop.png",
        "source": "artifacts"
      },
      {
        "name": "riddle-site-v402-llms-agent-index-phone.png",
        "url": "https://cdn.riddledc.com/scripts/job_b0dc37de/riddle-site-v402-llms-agent-index-phone.png",
        "source": "artifacts"
      },
      {
        "name": "riddle-site-v402-llms-agent-index-ipad-mini.png",
        "url": "https://cdn.riddledc.com/scripts/job_b0dc37de/riddle-site-v402-llms-agent-index-ipad-mini.png",
        "source": "artifacts"
      },
      {
        "name": "riddle-site-v402-llms-agent-index-ipad.png",
        "url": "https://cdn.riddledc.com/scripts/job_b0dc37de/riddle-site-v402-llms-agent-index-ipad.png",
        "source": "artifacts"
      }
    ]
  },
  "checks": [
    {
      "type": "route_loaded",
      "label": "route_loaded",
      "status": "passed",
      "evidence": {
        "expected_path": "/llms.txt",
        "observed_paths": [
          "/llms.txt",
          "/llms.txt",
          "/llms.txt",
          "/llms.txt"
        ],
        "http_statuses": [
          200,
          200,
          200,
          200
        ]
      }
    },
    {
      "type": "http_status",
      "label": "public llms.txt agent index",
      "status": "passed",
      "evidence": {
        "url": "https://riddledc.com/llms.txt",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 800,
        "allowed_content_types": [
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://riddledc.com/llms.txt",
            "url": "https://riddledc.com/llms.txt",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/plain",
            "content_length": null,
            "bytes": 1918,
            "body_contains": {
              "# Riddle": true,
              "Hosted browser automation, Preview, and proof artifacts for AI agents.": true,
              "https://riddledc.com/docs/markdown.md": true,
              "https://riddledc.com/docs/riddle-proof/markdown.md": true,
              "https://riddledc.com/docs/preview/markdown.md": true,
              "https://riddledc.com/mcp/markdown.md": true,
              "https://riddledc.com/.well-known/riddledc-actions-openapi.yaml": true,
              "https://riddledc.com/proof/good-catches/": true
            },
            "body_contains_missing": [],
            "body_not_contains": {
              "404": false,
              "This page could not be found": false
            },
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "# Riddle\n\nHosted browser automation, Preview, and proof artifacts for AI agents.\n\nRiddle gives agents hosted browsers, screenshots, console logs, DOM evidence, static and server previews, MCP tools, OpenAPI actions, and proof receipts. Use this file as the compact starting point for agent-readable Riddle docs.\n\n## Core Agent Resources\n\n- API documentation: https://riddledc.com/docs/markdown.md\n- Riddle Proof docs: https://riddledc.com/docs/riddle-proof/markdown.md\n- Preview tools docs: https://riddledc.com/docs/preview/markdown.md\n- MCP docs: https://riddledc.com/mcp/markdown.md\n- Agent guide: https://riddledc.com/ai-agents/guide/markdown.md\n\n## Machine Contracts\n\n- GPT Actions OpenAPI YAML: https://riddledc.com/.well-known/riddledc-actions-openapi.yaml\n- GPT Actions OpenAPI JSON: https://riddledc.com/riddledc-actions-openapi.json\n- Public sitemap: https://riddledc.com/sitemap.xml\n- Robots policy: https://riddledc.com/robots.txt\n\n## Proof And Evidence\n\n- Riddle Proof landing page: http",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "http_status",
      "label": "core docs markdown linked by llms index",
      "status": "passed",
      "evidence": {
        "url": "https://riddledc.com/docs/markdown.md",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 1000,
        "allowed_content_types": [
          "text/markdown",
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://riddledc.com/docs/markdown.md",
            "url": "https://riddledc.com/docs/markdown.md",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/markdown",
            "content_length": 17475,
            "bytes": 17475,
            "body_contains": {
              "One endpoint: `/v1/run`. Send Playwright scripts or JSON, get screenshots. Sync by default.": true,
              "### Script Mode (Recommended)": true
            },
            "body_contains_missing": [],
            "body_not_contains": null,
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "# API Documentation\n\nOne endpoint: `/v1/run`. Send Playwright scripts or JSON, get screenshots. Sync by default.\n\nGPT Actions OpenAPI:\n[/riddledc-actions-openapi.yaml](/riddledc-actions-openapi.yaml)\n(\n[JSON](/riddledc-actions-openapi.json)\n,\n[.well-known](/.well-known/riddledc-actions-openapi.yaml)\n)\n\nNew to Riddle? Start with [Script Mode](#script-mode) - write Playwright, send it to our API, get results. For simpler jobs, use [URL mode](#url-mode) or [Steps mode](#steps-mode).\n\n## Quick Start\n\n### Your First Screenshot\n\n```\ncurl -X POST \"https://api.riddledc.com/v1/run\" \\\\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\\\n  -H \"Content-Type: application/json\" \\\\\n  -d '{\"url\": \"https://example.com\"}' \\\\\n  -o screenshot.png\n```\n\nGet your API key from [your dashboard](/dashboard). PNG bytes returned directly.\n\n### Create Account\n\n[Sign up](/register)\n\n### Get API Key\n\n[Dashboard](/dashboard)\n\n### Make Request\n\nSee examples below\n\n## Guides\n\n- [Riddle Proof](/docs/riddle-proof): evidence-bac",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "http_status",
      "label": "riddle proof markdown linked by llms index",
      "status": "passed",
      "evidence": {
        "url": "https://riddledc.com/docs/riddle-proof/markdown.md",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 1000,
        "allowed_content_types": [
          "text/markdown",
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://riddledc.com/docs/riddle-proof/markdown.md",
            "url": "https://riddledc.com/docs/riddle-proof/markdown.md",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/markdown",
            "content_length": 16044,
            "bytes": 16044,
            "body_contains": {
              "# Riddle Proof": true,
              "The contract is agent-agnostic": true,
              "Short version: bring your agent; Riddle brings the proof.": true
            },
            "body_contains_missing": [],
            "body_not_contains": null,
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "# Riddle Proof\n\nEvidence-backed workflows for agent-authored browser changes.\n\nPlain text for agents: https://riddledc.com/docs/riddle-proof/markdown.md\n\n## What It Is\n\nRiddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria.\n\nBuild output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates.\n\nThe contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence.\n\nShort version: bring your agent; Riddle brings the proof.\n\n## When To Use It\n\nUse Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layo",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "http_status",
      "label": "preview markdown linked by llms index",
      "status": "passed",
      "evidence": {
        "url": "https://riddledc.com/docs/preview/markdown.md",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 1000,
        "allowed_content_types": [
          "text/markdown",
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://riddledc.com/docs/preview/markdown.md",
            "url": "https://riddledc.com/docs/preview/markdown.md",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/markdown",
            "content_length": 8202,
            "bytes": 8202,
            "body_contains": {
              "# Preview Tools": true,
              "Static preview deploys built files": true,
              "server preview": true
            },
            "body_contains_missing": [],
            "body_not_contains": null,
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "# Preview Tools\n\nDeploy any app to an ephemeral URL, screenshot it, and compare changes.\n\nPlain text for agents: https://riddledc.com/docs/preview/markdown.md\n\n## Which Tool Should I Use?\n\nPick the preview mode based on what must run in Riddle, not based on the framework name.\n\n| Mode | Use When | Avoid When |\n| --- | --- | --- |\n| `riddle_preview` | You already have a static output directory such as `dist`, `build`, or `out`. | The app needs a live backend, SSR process, websocket server, or runtime filesystem writes. |\n| `riddle_server_preview` | A server must run from uploaded files using a stock Docker image such as `node:22-slim`. | The app is just static files. Build locally and use `riddle_preview` instead. |\n| `riddle_build_preview` | The project has a Dockerfile or needs custom system packages, native dependencies, or a reproducible image. | You only need to serve static output or run a simple command in a stock image. |\n\nRule of thumb: static output gets static preview; server",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "http_status",
      "label": "mcp markdown linked by llms index",
      "status": "passed",
      "evidence": {
        "url": "https://riddledc.com/mcp/markdown.md",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 1000,
        "allowed_content_types": [
          "text/markdown",
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://riddledc.com/mcp/markdown.md",
            "url": "https://riddledc.com/mcp/markdown.md",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/markdown",
            "content_length": 3437,
            "bytes": 3437,
            "body_contains": {
              "# Riddle MCP": true,
              "Hosted MCP": true,
              "riddle_screenshot": true
            },
            "body_contains_missing": [],
            "body_not_contains": null,
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "# Riddle MCP\n\nRiddle MCP exposes browser automation tools to AI agents in a standard MCP tool interface.\nIt supports two modes with the same tool set: Hosted MCP (gateway) and Local MCP (direct).\n\n## Hosted MCP (Gateway)\nHosted MCP supports either your Riddle login token (JWT) or an API key. JWTs expire; API keys do not.\n\nInstall from npm:\n\n```bash\nnpm install @riddledc/riddle-mcp\n```\n\nMCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"riddle\": {\n      \"command\": \"npx\",\n      \"args\": [\"riddle-mcp\"],\n      \"env\": {\n        \"RIDDLE_MCP_GATEWAY_URL\": \"https://api.riddledc.com\",\n        \"RIDDLE_AUTH_TOKEN\": \"your_login_token_here\"\n      }\n    }\n  }\n}\n```\n\nHosted config with API key:\n\n```json\n{\n  \"mcpServers\": {\n    \"riddle\": {\n      \"command\": \"npx\",\n      \"args\": [\"riddle-mcp\"],\n      \"env\": {\n        \"RIDDLE_MCP_GATEWAY_URL\": \"https://api.riddledc.com\",\n        \"RIDDLE_API_KEY\": \"rdc_live_your_key_here\"\n      }\n    }\n  }\n}\n```\n\nList tools (no auth required):\n\n```bash\ncurl -sS https://api.ridd",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "http_status",
      "label": "actions openapi linked by llms index",
      "status": "passed",
      "evidence": {
        "url": "https://riddledc.com/.well-known/riddledc-actions-openapi.yaml",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 1000,
        "allowed_content_types": [
          "application/yaml",
          "application/x-yaml",
          "text/yaml",
          "text/x-yaml",
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://riddledc.com/.well-known/riddledc-actions-openapi.yaml",
            "url": "https://riddledc.com/.well-known/riddledc-actions-openapi.yaml",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/x-yaml",
            "content_length": 5958,
            "bytes": 5958,
            "body_contains": {
              "openapi: 3.1.0": true,
              "operationId: runActions": true,
              "/v1/jobs/{job_id}": true
            },
            "body_contains_missing": [],
            "body_not_contains": null,
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "openapi: 3.1.0\ninfo:\n  title: Riddle Actions API\n  version: 1.0.0\nservers:\n  - url: https://api.riddledc.com\npaths:\n  /v1/run/actions:\n    post:\n      operationId: runActions\n      summary: Run a browser job (Actions-safe)\n      security:\n        - bearerAuth: []\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/RunActionsRequest'\n      responses:\n        '202':\n          description: Job accepted\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/RunActionsResponse'\n        '400':\n          description: Bad request\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/RunActionsResponse'\n        '401':\n          description: Unauthorized\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/RunActionsResp",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "http_status",
      "label": "robots keeps llms index crawlable",
      "status": "passed",
      "evidence": {
        "url": "https://riddledc.com/robots.txt",
        "method": "GET",
        "allowed_statuses": [
          200
        ],
        "require_nonzero_bytes": false,
        "min_bytes": 20,
        "allowed_content_types": [
          "text/plain"
        ],
        "viewports": [
          {
            "viewport": "desktop",
            "key": "GET https://riddledc.com/robots.txt",
            "url": "https://riddledc.com/robots.txt",
            "method": "GET",
            "status": 200,
            "status_text": "OK",
            "ok": true,
            "error": null,
            "content_type": "text/plain",
            "content_length": 66,
            "bytes": 66,
            "body_contains": {
              "User-agent: *": true,
              "Allow: /": true,
              "Sitemap: https://riddledc.com/sitemap.xml": true
            },
            "body_contains_missing": [],
            "body_not_contains": {
              "Disallow: /llms.txt": false
            },
            "body_not_contains_found": [],
            "body_not_patterns": null,
            "body_not_patterns_found": [],
            "body_sample": "User-agent: *\nAllow: /\n\nSitemap: https://riddledc.com/sitemap.xml\n",
            "failures": []
          }
        ],
        "failures": []
      }
    },
    {
      "type": "no_horizontal_overflow",
      "label": "no_horizontal_overflow",
      "status": "passed",
      "evidence": {
        "max_overflow_px": 1,
        "overflow_px": [
          0,
          0,
          0,
          0
        ],
        "bounds_overflow_px": [
          0,
          0,
          0,
          0
        ],
        "overflow_offender_counts": [
          0,
          0,
          0,
          0
        ],
        "viewports": [
          "desktop",
          "phone",
          "ipad-mini",
          "ipad"
        ]
      }
    },
    {
      "type": "no_fatal_console_errors",
      "label": "no_fatal_console_errors",
      "status": "passed",
      "evidence": {
        "console_fatal_count": 0,
        "page_error_count": 0,
        "total_console_fatal_count": 0,
        "total_page_error_count": 0,
        "allowed_console_fatal_count": 0,
        "explicitly_allowed_console_fatal_count": 0,
        "allowed_expected_network_mock_console_count": 0,
        "allowed_expected_network_mock_console_events": [],
        "allowed_page_error_count": 0,
        "allowed_console_texts": [],
        "allowed_console_patterns": [],
        "allowed_page_error_texts": [],
        "allowed_page_error_patterns": []
      }
    }
  ],
  "summary": "riddle-site-v402-llms-agent-index passed 10 check(s) across 4 viewport(s) (desktop, phone, ipad-mini, ipad).",
  "captured_at": "2026-05-16T16:12:34.626Z",
  "evidence": {
    "version": "riddle-proof.profile-evidence.v1",
    "profile_name": "riddle-site-v402-llms-agent-index",
    "target_url": "https://riddledc.com/llms.txt",
    "baseline_policy": "invariant_only",
    "captured_at": "2026-05-16T16:12:34.626Z",
    "viewports": [
      {
        "name": "desktop",
        "width": 1280,
        "height": 900,
        "url": "https://riddledc.com/llms.txt",
        "route": {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        },
        "title": "",
        "body_text_length": 1905,
        "body_text_sample": "# Riddle Hosted browser automation, Preview, and proof artifacts for AI agents. Riddle gives agents hosted browsers, screenshots, console logs, DOM evidence, static and server previews, MCP tools, OpenAPI actions, and proof receipts. Use this file as the compact starting point for agent-readable Riddle docs. ## Core Agent Resources - API documentation: https://riddledc.com/docs/markdown.md - Riddle Proof docs: https://riddledc.com/docs/riddle-proof/markdown.md - Preview tools docs: https://riddledc.com/docs/preview/markdown.md - MCP docs: https://riddledc.com/mcp/markdown.md - Agent guide: https://riddledc.com/ai-agents/guide/markdown.md ## Machine Contracts - GPT Actions OpenAPI YAML: https://riddledc.com/.well-known/riddledc-actions-openapi.yaml - GPT Actions OpenAPI JSON: https://riddledc.com/riddledc-actions-openapi.json - Public sitemap: https://riddledc.com/sitemap.xml - Robots policy: https://riddledc.com/robots.txt ## Proof And Evidence - Riddle Proof landing page: https://riddledc.com/proof/ - Good Catch Diary: https://riddledc.com/proof/good-catches/ - Evidence Manifest: https://riddledc.com/proof/good-catches/evidence/ - Riddle Proof example: https://riddledc.com/examples/riddle-proof/ ## Tool Docs - riddle_scrape: https://riddledc.com/docs/scrape/markdown.md - riddle_map: https://riddledc.com/docs/map/markdown.md - riddle_crawl: https://riddledc.com/docs/crawl/markdown.md - riddle_visual_diff: https://riddledc.com/docs/visual-diff/markdown.md ## Notes For Agents - Start with the markdown docs when you need compact instructions. - Use Preview docs when you need to deploy a local app before capture. - Use Riddle Proof docs when you need durable evidence for a change. - Use the Good Catch Diary and Evidence Manifest when you need examples of real proof-driven catches. - Prefer exact artifact links, job ids, screenshots, console logs, and proof JSON over summaries.",
        "scroll_width": 1280,
        "client_width": 1280,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {},
        "frames": {},
        "text_sequences": {},
        "text_matches": {},
        "http_statuses": {
          "GET https://riddledc.com/llms.txt": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://riddledc.com/llms.txt",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 800,
            "allowed_content_types": [
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://riddledc.com/llms.txt",
            "content_type": "text/plain",
            "content_length": null,
            "status_text": "OK",
            "bytes": 1918,
            "body_sample": "# Riddle\n\nHosted browser automation, Preview, and proof artifacts for AI agents.\n\nRiddle gives agents hosted browsers, screenshots, console logs, DOM evidence, static and server previews, MCP tools, OpenAPI actions, and proof receipts. Use this file as the compact starting point for agent-readable Riddle docs.\n\n## Core Agent Resources\n\n- API documentation: https://riddledc.com/docs/markdown.md\n- Riddle Proof docs: https://riddledc.com/docs/riddle-proof/markdown.md\n- Preview tools docs: https://riddledc.com/docs/preview/markdown.md\n- MCP docs: https://riddledc.com/mcp/markdown.md\n- Agent guide: https://riddledc.com/ai-agents/guide/markdown.md\n\n## Machine Contracts\n\n- GPT Actions OpenAPI YAML: https://riddledc.com/.well-known/riddledc-actions-openapi.yaml\n- GPT Actions OpenAPI JSON: https://riddledc.com/riddledc-actions-openapi.json\n- Public sitemap: https://riddledc.com/sitemap.xml\n- Robots policy: https://riddledc.com/robots.txt\n\n## Proof And Evidence\n\n- Riddle Proof landing page: http",
            "body_contains": {
              "# Riddle": true,
              "Hosted browser automation, Preview, and proof artifacts for AI agents.": true,
              "https://riddledc.com/docs/markdown.md": true,
              "https://riddledc.com/docs/riddle-proof/markdown.md": true,
              "https://riddledc.com/docs/preview/markdown.md": true,
              "https://riddledc.com/mcp/markdown.md": true,
              "https://riddledc.com/.well-known/riddledc-actions-openapi.yaml": true,
              "https://riddledc.com/proof/good-catches/": true
            },
            "body_not_contains": {
              "404": false,
              "This page could not be found": false
            }
          },
          "GET https://riddledc.com/docs/markdown.md": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://riddledc.com/docs/markdown.md",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 1000,
            "allowed_content_types": [
              "text/markdown",
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://riddledc.com/docs/markdown.md",
            "content_type": "text/markdown",
            "content_length": 17475,
            "status_text": "OK",
            "bytes": 17475,
            "body_sample": "# API Documentation\n\nOne endpoint: `/v1/run`. Send Playwright scripts or JSON, get screenshots. Sync by default.\n\nGPT Actions OpenAPI:\n[/riddledc-actions-openapi.yaml](/riddledc-actions-openapi.yaml)\n(\n[JSON](/riddledc-actions-openapi.json)\n,\n[.well-known](/.well-known/riddledc-actions-openapi.yaml)\n)\n\nNew to Riddle? Start with [Script Mode](#script-mode) - write Playwright, send it to our API, get results. For simpler jobs, use [URL mode](#url-mode) or [Steps mode](#steps-mode).\n\n## Quick Start\n\n### Your First Screenshot\n\n```\ncurl -X POST \"https://api.riddledc.com/v1/run\" \\\\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\\\n  -H \"Content-Type: application/json\" \\\\\n  -d '{\"url\": \"https://example.com\"}' \\\\\n  -o screenshot.png\n```\n\nGet your API key from [your dashboard](/dashboard). PNG bytes returned directly.\n\n### Create Account\n\n[Sign up](/register)\n\n### Get API Key\n\n[Dashboard](/dashboard)\n\n### Make Request\n\nSee examples below\n\n## Guides\n\n- [Riddle Proof](/docs/riddle-proof): evidence-bac",
            "body_contains": {
              "One endpoint: `/v1/run`. Send Playwright scripts or JSON, get screenshots. Sync by default.": true,
              "### Script Mode (Recommended)": true
            }
          },
          "GET https://riddledc.com/docs/riddle-proof/markdown.md": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://riddledc.com/docs/riddle-proof/markdown.md",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 1000,
            "allowed_content_types": [
              "text/markdown",
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://riddledc.com/docs/riddle-proof/markdown.md",
            "content_type": "text/markdown",
            "content_length": 16044,
            "status_text": "OK",
            "bytes": 16044,
            "body_sample": "# Riddle Proof\n\nEvidence-backed workflows for agent-authored browser changes.\n\nPlain text for agents: https://riddledc.com/docs/riddle-proof/markdown.md\n\n## What It Is\n\nRiddle Proof is a workflow for turning an agent's code change into inspectable evidence. It runs the actual app in a browser, exercises the behavior that matters, captures artifacts, and records whether the change met the stated proof criteria.\n\nBuild output and unit tests are still important, but they do not prove that a user-facing browser flow works. Riddle Proof fills that gap with real previews, screenshots, JSON artifacts, console output, diagnostics, and ship gates.\n\nThe contract is agent-agnostic: use it from Codex, Claude Code, OpenClaw, CI, or any workflow that can run a browser proof script and preserve the resulting evidence.\n\nShort version: bring your agent; Riddle brings the proof.\n\n## When To Use It\n\nUse Riddle Proof when correctness depends on the browser, a running server, generated assets, timing, layo",
            "body_contains": {
              "# Riddle Proof": true,
              "The contract is agent-agnostic": true,
              "Short version: bring your agent; Riddle brings the proof.": true
            }
          },
          "GET https://riddledc.com/docs/preview/markdown.md": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://riddledc.com/docs/preview/markdown.md",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 1000,
            "allowed_content_types": [
              "text/markdown",
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://riddledc.com/docs/preview/markdown.md",
            "content_type": "text/markdown",
            "content_length": 8202,
            "status_text": "OK",
            "bytes": 8202,
            "body_sample": "# Preview Tools\n\nDeploy any app to an ephemeral URL, screenshot it, and compare changes.\n\nPlain text for agents: https://riddledc.com/docs/preview/markdown.md\n\n## Which Tool Should I Use?\n\nPick the preview mode based on what must run in Riddle, not based on the framework name.\n\n| Mode | Use When | Avoid When |\n| --- | --- | --- |\n| `riddle_preview` | You already have a static output directory such as `dist`, `build`, or `out`. | The app needs a live backend, SSR process, websocket server, or runtime filesystem writes. |\n| `riddle_server_preview` | A server must run from uploaded files using a stock Docker image such as `node:22-slim`. | The app is just static files. Build locally and use `riddle_preview` instead. |\n| `riddle_build_preview` | The project has a Dockerfile or needs custom system packages, native dependencies, or a reproducible image. | You only need to serve static output or run a simple command in a stock image. |\n\nRule of thumb: static output gets static preview; server",
            "body_contains": {
              "# Preview Tools": true,
              "Static preview deploys built files": true,
              "server preview": true
            }
          },
          "GET https://riddledc.com/mcp/markdown.md": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://riddledc.com/mcp/markdown.md",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 1000,
            "allowed_content_types": [
              "text/markdown",
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://riddledc.com/mcp/markdown.md",
            "content_type": "text/markdown",
            "content_length": 3437,
            "status_text": "OK",
            "bytes": 3437,
            "body_sample": "# Riddle MCP\n\nRiddle MCP exposes browser automation tools to AI agents in a standard MCP tool interface.\nIt supports two modes with the same tool set: Hosted MCP (gateway) and Local MCP (direct).\n\n## Hosted MCP (Gateway)\nHosted MCP supports either your Riddle login token (JWT) or an API key. JWTs expire; API keys do not.\n\nInstall from npm:\n\n```bash\nnpm install @riddledc/riddle-mcp\n```\n\nMCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"riddle\": {\n      \"command\": \"npx\",\n      \"args\": [\"riddle-mcp\"],\n      \"env\": {\n        \"RIDDLE_MCP_GATEWAY_URL\": \"https://api.riddledc.com\",\n        \"RIDDLE_AUTH_TOKEN\": \"your_login_token_here\"\n      }\n    }\n  }\n}\n```\n\nHosted config with API key:\n\n```json\n{\n  \"mcpServers\": {\n    \"riddle\": {\n      \"command\": \"npx\",\n      \"args\": [\"riddle-mcp\"],\n      \"env\": {\n        \"RIDDLE_MCP_GATEWAY_URL\": \"https://api.riddledc.com\",\n        \"RIDDLE_API_KEY\": \"rdc_live_your_key_here\"\n      }\n    }\n  }\n}\n```\n\nList tools (no auth required):\n\n```bash\ncurl -sS https://api.ridd",
            "body_contains": {
              "# Riddle MCP": true,
              "Hosted MCP": true,
              "riddle_screenshot": true
            }
          },
          "GET https://riddledc.com/.well-known/riddledc-actions-openapi.yaml": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://riddledc.com/.well-known/riddledc-actions-openapi.yaml",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 1000,
            "allowed_content_types": [
              "application/yaml",
              "application/x-yaml",
              "text/yaml",
              "text/x-yaml",
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://riddledc.com/.well-known/riddledc-actions-openapi.yaml",
            "content_type": "text/x-yaml",
            "content_length": 5958,
            "status_text": "OK",
            "bytes": 5958,
            "body_sample": "openapi: 3.1.0\ninfo:\n  title: Riddle Actions API\n  version: 1.0.0\nservers:\n  - url: https://api.riddledc.com\npaths:\n  /v1/run/actions:\n    post:\n      operationId: runActions\n      summary: Run a browser job (Actions-safe)\n      security:\n        - bearerAuth: []\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/RunActionsRequest'\n      responses:\n        '202':\n          description: Job accepted\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/RunActionsResponse'\n        '400':\n          description: Bad request\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/RunActionsResponse'\n        '401':\n          description: Unauthorized\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/RunActionsResp",
            "body_contains": {
              "openapi: 3.1.0": true,
              "operationId: runActions": true,
              "/v1/jobs/{job_id}": true
            }
          },
          "GET https://riddledc.com/robots.txt": {
            "version": "riddle-proof.http-status.v1",
            "url": "https://riddledc.com/robots.txt",
            "method": "GET",
            "status": 200,
            "ok": true,
            "error": null,
            "request_body_bytes": 0,
            "allowed_statuses": [
              200
            ],
            "require_nonzero_bytes": false,
            "min_bytes": 20,
            "allowed_content_types": [
              "text/plain"
            ],
            "redirected": false,
            "final_url": "https://riddledc.com/robots.txt",
            "content_type": "text/plain",
            "content_length": 66,
            "status_text": "OK",
            "bytes": 66,
            "body_sample": "User-agent: *\nAllow: /\n\nSitemap: https://riddledc.com/sitemap.xml\n",
            "body_contains": {
              "User-agent: *": true,
              "Allow: /": true,
              "Sitemap: https://riddledc.com/sitemap.xml": true
            },
            "body_not_contains": {
              "Disallow: /llms.txt": false
            }
          }
        },
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v402-llms-agent-index-desktop"
      },
      {
        "name": "phone",
        "width": 390,
        "height": 844,
        "url": "https://riddledc.com/llms.txt",
        "route": {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        },
        "title": "",
        "body_text_length": 1905,
        "body_text_sample": "# Riddle Hosted browser automation, Preview, and proof artifacts for AI agents. Riddle gives agents hosted browsers, screenshots, console logs, DOM evidence, static and server previews, MCP tools, OpenAPI actions, and proof receipts. Use this file as the compact starting point for agent-readable Riddle docs. ## Core Agent Resources - API documentation: https://riddledc.com/docs/markdown.md - Riddle Proof docs: https://riddledc.com/docs/riddle-proof/markdown.md - Preview tools docs: https://riddledc.com/docs/preview/markdown.md - MCP docs: https://riddledc.com/mcp/markdown.md - Agent guide: https://riddledc.com/ai-agents/guide/markdown.md ## Machine Contracts - GPT Actions OpenAPI YAML: https://riddledc.com/.well-known/riddledc-actions-openapi.yaml - GPT Actions OpenAPI JSON: https://riddledc.com/riddledc-actions-openapi.json - Public sitemap: https://riddledc.com/sitemap.xml - Robots policy: https://riddledc.com/robots.txt ## Proof And Evidence - Riddle Proof landing page: https://riddledc.com/proof/ - Good Catch Diary: https://riddledc.com/proof/good-catches/ - Evidence Manifest: https://riddledc.com/proof/good-catches/evidence/ - Riddle Proof example: https://riddledc.com/examples/riddle-proof/ ## Tool Docs - riddle_scrape: https://riddledc.com/docs/scrape/markdown.md - riddle_map: https://riddledc.com/docs/map/markdown.md - riddle_crawl: https://riddledc.com/docs/crawl/markdown.md - riddle_visual_diff: https://riddledc.com/docs/visual-diff/markdown.md ## Notes For Agents - Start with the markdown docs when you need compact instructions. - Use Preview docs when you need to deploy a local app before capture. - Use Riddle Proof docs when you need durable evidence for a change. - Use the Good Catch Diary and Evidence Manifest when you need examples of real proof-driven catches. - Prefer exact artifact links, job ids, screenshots, console logs, and proof JSON over summaries.",
        "scroll_width": 390,
        "client_width": 390,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {},
        "frames": {},
        "text_sequences": {},
        "text_matches": {},
        "http_statuses": {},
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v402-llms-agent-index-phone"
      },
      {
        "name": "ipad-mini",
        "width": 768,
        "height": 1024,
        "url": "https://riddledc.com/llms.txt",
        "route": {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        },
        "title": "",
        "body_text_length": 1905,
        "body_text_sample": "# Riddle Hosted browser automation, Preview, and proof artifacts for AI agents. Riddle gives agents hosted browsers, screenshots, console logs, DOM evidence, static and server previews, MCP tools, OpenAPI actions, and proof receipts. Use this file as the compact starting point for agent-readable Riddle docs. ## Core Agent Resources - API documentation: https://riddledc.com/docs/markdown.md - Riddle Proof docs: https://riddledc.com/docs/riddle-proof/markdown.md - Preview tools docs: https://riddledc.com/docs/preview/markdown.md - MCP docs: https://riddledc.com/mcp/markdown.md - Agent guide: https://riddledc.com/ai-agents/guide/markdown.md ## Machine Contracts - GPT Actions OpenAPI YAML: https://riddledc.com/.well-known/riddledc-actions-openapi.yaml - GPT Actions OpenAPI JSON: https://riddledc.com/riddledc-actions-openapi.json - Public sitemap: https://riddledc.com/sitemap.xml - Robots policy: https://riddledc.com/robots.txt ## Proof And Evidence - Riddle Proof landing page: https://riddledc.com/proof/ - Good Catch Diary: https://riddledc.com/proof/good-catches/ - Evidence Manifest: https://riddledc.com/proof/good-catches/evidence/ - Riddle Proof example: https://riddledc.com/examples/riddle-proof/ ## Tool Docs - riddle_scrape: https://riddledc.com/docs/scrape/markdown.md - riddle_map: https://riddledc.com/docs/map/markdown.md - riddle_crawl: https://riddledc.com/docs/crawl/markdown.md - riddle_visual_diff: https://riddledc.com/docs/visual-diff/markdown.md ## Notes For Agents - Start with the markdown docs when you need compact instructions. - Use Preview docs when you need to deploy a local app before capture. - Use Riddle Proof docs when you need durable evidence for a change. - Use the Good Catch Diary and Evidence Manifest when you need examples of real proof-driven catches. - Prefer exact artifact links, job ids, screenshots, console logs, and proof JSON over summaries.",
        "scroll_width": 768,
        "client_width": 768,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {},
        "frames": {},
        "text_sequences": {},
        "text_matches": {},
        "http_statuses": {},
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v402-llms-agent-index-ipad-mini"
      },
      {
        "name": "ipad",
        "width": 820,
        "height": 1180,
        "url": "https://riddledc.com/llms.txt",
        "route": {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        },
        "title": "",
        "body_text_length": 1905,
        "body_text_sample": "# Riddle Hosted browser automation, Preview, and proof artifacts for AI agents. Riddle gives agents hosted browsers, screenshots, console logs, DOM evidence, static and server previews, MCP tools, OpenAPI actions, and proof receipts. Use this file as the compact starting point for agent-readable Riddle docs. ## Core Agent Resources - API documentation: https://riddledc.com/docs/markdown.md - Riddle Proof docs: https://riddledc.com/docs/riddle-proof/markdown.md - Preview tools docs: https://riddledc.com/docs/preview/markdown.md - MCP docs: https://riddledc.com/mcp/markdown.md - Agent guide: https://riddledc.com/ai-agents/guide/markdown.md ## Machine Contracts - GPT Actions OpenAPI YAML: https://riddledc.com/.well-known/riddledc-actions-openapi.yaml - GPT Actions OpenAPI JSON: https://riddledc.com/riddledc-actions-openapi.json - Public sitemap: https://riddledc.com/sitemap.xml - Robots policy: https://riddledc.com/robots.txt ## Proof And Evidence - Riddle Proof landing page: https://riddledc.com/proof/ - Good Catch Diary: https://riddledc.com/proof/good-catches/ - Evidence Manifest: https://riddledc.com/proof/good-catches/evidence/ - Riddle Proof example: https://riddledc.com/examples/riddle-proof/ ## Tool Docs - riddle_scrape: https://riddledc.com/docs/scrape/markdown.md - riddle_map: https://riddledc.com/docs/map/markdown.md - riddle_crawl: https://riddledc.com/docs/crawl/markdown.md - riddle_visual_diff: https://riddledc.com/docs/visual-diff/markdown.md ## Notes For Agents - Start with the markdown docs when you need compact instructions. - Use Preview docs when you need to deploy a local app before capture. - Use Riddle Proof docs when you need durable evidence for a change. - Use the Good Catch Diary and Evidence Manifest when you need examples of real proof-driven catches. - Prefer exact artifact links, job ids, screenshots, console logs, and proof JSON over summaries.",
        "scroll_width": 820,
        "client_width": 820,
        "overflow_px": 0,
        "bounds_overflow_px": 0,
        "overflow_offenders": [],
        "selectors": {},
        "frames": {},
        "text_sequences": {},
        "text_matches": {},
        "http_statuses": {},
        "link_statuses": {},
        "setup_action_results": [],
        "screenshot_label": "riddle-site-v402-llms-agent-index-ipad"
      }
    ],
    "console": {
      "events": [],
      "fatal_count": 0
    },
    "page_errors": [],
    "dialogs": [],
    "network_mocks": [],
    "dom_summary": {
      "expected_viewport_count": 4,
      "viewport_count": 4,
      "partial": false,
      "routes": [
        {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        },
        {
          "requested": "https://riddledc.com/llms.txt",
          "observed": "/llms.txt",
          "expected_path": "/llms.txt",
          "matched": true,
          "http_status": 200
        }
      ],
      "titles": [
        "",
        "",
        "",
        ""
      ],
      "overflow_px": [
        0,
        0,
        0,
        0
      ],
      "bounds_overflow_px": [
        0,
        0,
        0,
        0
      ],
      "overflow_offender_counts": [
        0,
        0,
        0,
        0
      ],
      "frames": [
        {
          "viewport": "desktop",
          "selectors": []
        },
        {
          "viewport": "phone",
          "selectors": []
        },
        {
          "viewport": "ipad-mini",
          "selectors": []
        },
        {
          "viewport": "ipad",
          "selectors": []
        }
      ],
      "http_status": [
        {
          "viewport": "desktop",
          "requests": [
            {
              "key": "GET https://riddledc.com/llms.txt",
              "url": "https://riddledc.com/llms.txt",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            },
            {
              "key": "GET https://riddledc.com/docs/markdown.md",
              "url": "https://riddledc.com/docs/markdown.md",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            },
            {
              "key": "GET https://riddledc.com/docs/riddle-proof/markdown.md",
              "url": "https://riddledc.com/docs/riddle-proof/markdown.md",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            },
            {
              "key": "GET https://riddledc.com/docs/preview/markdown.md",
              "url": "https://riddledc.com/docs/preview/markdown.md",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            },
            {
              "key": "GET https://riddledc.com/mcp/markdown.md",
              "url": "https://riddledc.com/mcp/markdown.md",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            },
            {
              "key": "GET https://riddledc.com/.well-known/riddledc-actions-openapi.yaml",
              "url": "https://riddledc.com/.well-known/riddledc-actions-openapi.yaml",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            },
            {
              "key": "GET https://riddledc.com/robots.txt",
              "url": "https://riddledc.com/robots.txt",
              "method": "GET",
              "status": 200,
              "ok": true,
              "error": null
            }
          ]
        }
      ],
      "link_status": [],
      "route_inventory": [],
      "network_mock_count": 0,
      "network_mock_hit_count": 0,
      "dialog_count": 0,
      "dialog_accept_count": 0,
      "dialog_dismiss_count": 0
    }
  },
  "riddle": {
    "job_id": "job_b0dc37de",
    "status": "completed",
    "terminal": true
  }
}
