{
  "schemaVersion": "1.0",
  "item": {
    "slug": "chrome",
    "name": "Chrome",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ivangdavila/chrome",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/chrome",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/chrome",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=chrome",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "chrome",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-01T09:54:09.625Z",
      "expiresAt": "2026-05-08T09:54:09.625Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=chrome",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=chrome",
        "contentDisposition": "attachment; filename=\"chrome-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "chrome"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/chrome"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/chrome",
    "agentPageUrl": "https://openagent3.xyz/skills/chrome/agent",
    "manifestUrl": "https://openagent3.xyz/skills/chrome/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/chrome/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Chrome DevTools Protocol (CDP)",
        "body": "Get tab WebSocket URL first: Never connect to ws://localhost:9222/devtools/browser directly. Fetch http://localhost:9222/json/list and use webSocketDebuggerUrl from the active tab.\n\nEnable domains before use: Runtime.enable and Page.enable must be called before any Runtime.evaluate or Page.navigate commands.\n\nCDP is async: Wait for response before sending next command. Use Promise-based wrapper with response ID tracking.\n\nScreenshot on high-DPI: Include fromSurface: true and scale: 2 in Page.captureScreenshot params for Retina displays.\n\nGet response body separately: Network.responseReceived doesn't include body. Call Network.getResponseBody with requestId after response completes."
      },
      {
        "title": "Chrome Extension Manifest V3",
        "body": "Permissions split: Use permissions for APIs, host_permissions for URLs. Never use http://*/* in permissions.\n\nService workers terminate: No persistent state. Use chrome.storage.local instead of global variables. Use chrome.alarms instead of setInterval.\n\nContent script isolation: Can't access page globals. Use chrome.scripting.executeScript with func for page context. Use window.postMessage for content↔page communication.\n\nStorage is async: chrome.storage.local.get() returns Promise, not data. Always await. Handle QUOTA_EXCEEDED errors."
      },
      {
        "title": "Context Detection",
        "body": "Detect actual Chrome (not Edge/Brave): Check window.chrome && navigator.vendor === \"Google Inc.\" and exclude Opera/Edge.\n\nExtension context types:\n\nchrome.runtime.id exists → content script\nchrome.runtime.getManifest exists → popup/background/options\nchrome.loadTimes exists but no runtime → regular Chrome web page\n\nManifest version check: Wrap chrome.runtime.getManifest() in try-catch. Use chrome.action for V3, chrome.browserAction for V2."
      },
      {
        "title": "Performance Debugging",
        "body": "Memory API conditional: Check 'memory' in performance before accessing performance.memory.usedJSHeapSize.\n\nUse performance marks: performance.mark() and performance.measure() for sub-frame timing. Clear marks to prevent memory leaks.\n\nLayout thrash detection: PerformanceObserver with entryTypes: ['measure', 'paint', 'largest-contentful-paint']. Flag entries >16.67ms."
      },
      {
        "title": "Network Debugging",
        "body": "Block before navigate: Call Network.setBlockedURLs before Page.navigate, not after.\n\nRequest interception: Use Network.setRequestInterception with requestStage: 'Request' for granular control. Return errorReason: 'BlockedByClient' to block."
      },
      {
        "title": "Security Contexts",
        "body": "Mixed content: HTTPS pages can't load HTTP resources. Check location.protocol vs resource URL.\n\nCORS errors: TypeError on cross-origin fetch usually means CORS. Check DevTools Network tab for specific error.\n\nSecure context required: File System Access API, Clipboard API require window.isSecureContext === true and user gesture."
      }
    ],
    "body": "Chrome DevTools Protocol (CDP)\n\nGet tab WebSocket URL first: Never connect to ws://localhost:9222/devtools/browser directly. Fetch http://localhost:9222/json/list and use webSocketDebuggerUrl from the active tab.\n\nEnable domains before use: Runtime.enable and Page.enable must be called before any Runtime.evaluate or Page.navigate commands.\n\nCDP is async: Wait for response before sending next command. Use Promise-based wrapper with response ID tracking.\n\nScreenshot on high-DPI: Include fromSurface: true and scale: 2 in Page.captureScreenshot params for Retina displays.\n\nGet response body separately: Network.responseReceived doesn't include body. Call Network.getResponseBody with requestId after response completes.\n\nChrome Extension Manifest V3\n\nPermissions split: Use permissions for APIs, host_permissions for URLs. Never use http://*/* in permissions.\n\nService workers terminate: No persistent state. Use chrome.storage.local instead of global variables. Use chrome.alarms instead of setInterval.\n\nContent script isolation: Can't access page globals. Use chrome.scripting.executeScript with func for page context. Use window.postMessage for content↔page communication.\n\nStorage is async: chrome.storage.local.get() returns Promise, not data. Always await. Handle QUOTA_EXCEEDED errors.\n\nContext Detection\n\nDetect actual Chrome (not Edge/Brave): Check window.chrome && navigator.vendor === \"Google Inc.\" and exclude Opera/Edge.\n\nExtension context types:\n\nchrome.runtime.id exists → content script\nchrome.runtime.getManifest exists → popup/background/options\nchrome.loadTimes exists but no runtime → regular Chrome web page\n\nManifest version check: Wrap chrome.runtime.getManifest() in try-catch. Use chrome.action for V3, chrome.browserAction for V2.\n\nPerformance Debugging\n\nMemory API conditional: Check 'memory' in performance before accessing performance.memory.usedJSHeapSize.\n\nUse performance marks: performance.mark() and performance.measure() for sub-frame timing. Clear marks to prevent memory leaks.\n\nLayout thrash detection: PerformanceObserver with entryTypes: ['measure', 'paint', 'largest-contentful-paint']. Flag entries >16.67ms.\n\nNetwork Debugging\n\nBlock before navigate: Call Network.setBlockedURLs before Page.navigate, not after.\n\nRequest interception: Use Network.setRequestInterception with requestStage: 'Request' for granular control. Return errorReason: 'BlockedByClient' to block.\n\nSecurity Contexts\n\nMixed content: HTTPS pages can't load HTTP resources. Check location.protocol vs resource URL.\n\nCORS errors: TypeError on cross-origin fetch usually means CORS. Check DevTools Network tab for specific error.\n\nSecure context required: File System Access API, Clipboard API require window.isSecureContext === true and user gesture."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/chrome",
    "publisherUrl": "https://clawhub.ai/ivangdavila/chrome",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/chrome",
    "downloadUrl": "https://openagent3.xyz/downloads/chrome",
    "agentUrl": "https://openagent3.xyz/skills/chrome/agent",
    "manifestUrl": "https://openagent3.xyz/skills/chrome/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/chrome/agent.md"
  }
}