{
  "schemaVersion": "1.0",
  "item": {
    "slug": "playwright-controller",
    "name": "playwright-controller",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/MRchenkuan/playwright-controller",
    "canonicalUrl": "https://clawhub.ai/MRchenkuan/playwright-controller",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/playwright-controller",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=playwright-controller",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "_meta.json",
      "playwright-crawler-v3.js",
      "CHANGELOG.md",
      "playwright-cmd.js",
      "README.md",
      "package.json"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/playwright-controller"
    },
    "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/playwright-controller",
    "agentPageUrl": "https://openagent3.xyz/skills/playwright-controller/agent",
    "manifestUrl": "https://openagent3.xyz/skills/playwright-controller/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/playwright-controller/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Playwright Controller",
        "body": "使用 Playwright 智能浏览网页，支持截图和文本提取。"
      },
      {
        "title": "核心特性",
        "body": "📱 移动端模拟: 模拟 iPhone 浏览器（375x667 分辨率）\n🎨 移动端 User-Agent: 使用真实的移动端浏览器标识\n🔄 有头模式: 可见浏览器窗口，支持手动操作（如点击登录）\n📸 完整资源加载: 所有资源正常加载，包括图片、CSS、字体等\n⏳ 智能等待: 自动等待页面完全加载\n📝 文本提取: 自动提取页面文本内容"
      },
      {
        "title": "fetch - 获取网页内容和截图",
        "body": "playwright:fetch <url>\n\n自动等待 JS/CSS 加载完成，截取全屏截图，并提取页面文本内容。\n\n特点：\n\n📱 移动端模拟（375x800 分辨率）\n🎨 移动端 User-Agent（iPhone 17.0）\n🔄 有头模式（可见浏览器，支持手动操作如登录）\n📸 完整资源加载（图片、CSS、字体全部正常加载）\n⏳ 自动等待网络空闲\n📄 同时保存截图和文本文件\n\n示例：\n\nplaywright:fetch https://baike.baidu.com/item/兴盛优选/23451097\n\n输出：\n\n截图：./screenshots/<timestamp>_<url_hash>.png\n文本：./screenshots/<timestamp>_<url_hash>_content.txt\n命令执行信息输出到控制台"
      },
      {
        "title": "自定义配置",
        "body": "playwright:fetch --timeout=120000 --dir=/custom/path <url>\n\n参数：\n\n--timeout: 超时时间（毫秒），默认 60000\n--dir: 截图和文本文件保存目录，默认 ./screenshots\n<url>: 目标网页 URL\n\n示例：\n\nplaywright:fetch --timeout=120000 --dir=/Users/chenkuan/Desktop/screenshots https://baike.baidu.com/item/兴盛优选/23451097"
      },
      {
        "title": "截取特定元素",
        "body": "playwright:fetch-element --selector=\".content\" <url>\n\n截取指定 CSS 选择器元素的截图和文本内容。\n\n示例：\n\nplaywright:fetch-element --selector=\"h1\" https://baike.baidu.com/item/兴盛优选/23451097"
      },
      {
        "title": "输出文件结构",
        "body": "执行后会生成以下文件：\n\nscreenshots/\n├── 1716982345678_www_baike_baidu_com_item_兴盛优选_23451097.png    # 全屏截图\n├── 1716982345678_www_baike_baidu_com_item_兴盛优选_23451097_content.txt  # 页面文本\n└── 1716982345678_www_baike_baidu_com_item_兴盛优选_23451097_element.png # 元素截图"
      },
      {
        "title": "工作流程",
        "body": "启动浏览器 - 使用 Chromium\n设置拦截规则 - 跳过图片、CSS、字体等资源\n访问页面 - 等待网络空闲（networkidle）\n等待渲染 - 额外等待 2 秒确保完全渲染\n截取截图 - 全屏 PNG 截图\n提取文本 - 移除广告/脚本元素，提取文本内容\n保存文件 - 截图和文本文件保存到指定目录"
      },
      {
        "title": "优势特点",
        "body": "✅ 自动加载等待 - 无需手动等待 JS/CSS 加载\n✅ 智能资源拦截 - 跳过图片等无关资源，提高速度\n✅ 全屏截图 - 保存完整的页面视觉信息\n✅ 文本提取 - 适合后续文本处理和 AI 分析\n✅ 稳定可靠 - 使用有头模式便于调试\n✅ 错误处理 - 即使失败也会保存截图\n✅ 时间戳命名 - 避免文件名冲突"
      },
      {
        "title": "注意事项",
        "body": "浏览器启动时间 - 首次使用需要启动浏览器，约 2-3 秒\n网络依赖 - 需要网络连接访问目标网页\n文件权限 - 确保目录有写入权限\n长时间任务 - 复杂网页可能需要较长时间（60-120秒）"
      },
      {
        "title": "fetchWithPlaywright(url, options)",
        "body": "获取整个网页的内容和截图。\n\n参数：\n\nurl (string, 必需): 目标网页 URL\noptions (object, 可选):\n\nheadless (boolean): 是否无头模式，默认 false\ntimeout (number): 超时时间（毫秒），默认 60000\nscreenshotDir (string): 截图保存目录，默认 './screenshots'\n\n返回：\n\n{\n  content: string,        // 页面文本内容\n  screenshotPath: string, // 截图文件路径\n  title: string,          // 页面标题\n  timestamp: number       // 时间戳\n}\n\n工作流程：\n\n启动 Chromium 浏览器（有头模式）\n设置请求拦截（跳过图片、CSS、字体等）\n访问 URL，等待 networkidle（网络空闲）\n等待 2 秒确保完全渲染\n截取全屏截图（1920x1080）\n提取文本内容（移除广告、脚本等）\n保存截图和文本文件\n\n示例：\n\nconst { fetchWithPlaywright } = require('./playwright-crawler-v3.js');\n\nconst result = await fetchWithPlaywright('https://example.com', {\n  headless: false,\n  timeout: 60000,\n  screenshotDir: './screenshots'\n});\n\nconsole.log(result.content);        // 页面文本\nconsole.log(result.screenshotPath); // 截图路径"
      },
      {
        "title": "fetchElementAndScreenshot(url, selector, options)",
        "body": "获取指定 CSS 选择器元素的截图和文本。\n\n参数：\n\nurl (string, 必需): 目标网页 URL\nselector (string, 必需): CSS 选择器（如 '.content', 'h1', '#article'）\noptions (object, 可选):\n\nheadless (boolean): 是否无头模式，默认 false\ntimeout (number): 超时时间（毫秒），默认 60000\nscreenshotDir (string): 截图保存目录，默认 './screenshots'\n\n返回：\n\n{\n  content: string,        // 元素文本内容\n  screenshotPath: string, // 元素截图文件路径\n  title: string,          // 页面标题\n  timestamp: number       // 时间戳\n}\n\n示例：\n\nconst { fetchElementAndScreenshot } = require('./playwright-crawler-v3.js');\n\nconst result = await fetchElementAndScreenshot(\n  'https://example.com',\n  '.article-content',\n  {\n    headless: false,\n    screenshotDir: './screenshots'\n  }\n);\n\nconsole.log(result.content);        // 元素文本\nconsole.log(result.screenshotPath); // 截图路径"
      },
      {
        "title": "Playwright 核心功能",
        "body": "1. 智能页面加载等待\n\n使用 page.goto(url, { waitUntil: 'networkidle' })\n等待网络空闲（所有网络请求完成）\n移动端模拟和完整资源加载\n避免页面未加载完成的截图\n\n2. 完整资源加载\n\n// 不设置任何拦截规则，让所有资源正常加载\n// 包括：图片、CSS、字体、JavaScript 等\n// 这样截图才能看到完整的页面效果\n\n3. 移动端模拟\n\nconst context = await browser.newContext({\n  userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)...',\n  viewport: { width: 375, height: 667 },\n  isMobile: true\n});\n\n3. 截图功能\n\n全屏截图：page.screenshot({ fullPage: true })\n元素截图：element.screenshot()\nPNG 格式（无损）\n分辨率：1920x1080\n\n4. 文本提取\n\nconst content = await page.evaluate(() => {\n  document.body.innerText;  // 获取文本内容\n});\n\n5. 元素定位\n\n// CSS 选择器\nconst element = await page.$('.content');      // 单个元素\nconst elements = await page.$$('.article');    // 多个元素\n\n// 使用选择器\nawait element.$eval('h2', el => el.innerText);  // 提取元素文本"
      },
      {
        "title": "常用配置选项",
        "body": "headless 模式\n\n// 有头模式（可见浏览器，适合调试）\nconst browser = await chromium.launch({ headless: false });\n\n// 无头模式（后台运行，速度更快）\nconst browser = await chromium.launch({ headless: true });\n\nviewport（视口大小）- 默认移动端\n\nconst context = await browser.newContext({\n  viewport: { width: 375, height: 800 }  // 375x800\n});\n\nuserAgent（浏览器标识）- 默认移动端\n\nconst context = await browser.newContext({\n  userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1'\n});\n\nisMobile（移动设备模拟）\n\nconst context = await browser.newContext({\n  isMobile: true  // 开启移动设备模拟\n});"
      },
      {
        "title": "输出文件",
        "body": "自动生成的文件：\n\nscreenshots/\n├── 1716982345678_www_example_com_content.png        # 全屏截图\n├── 1716982345678_www_example_com_content.txt        # 页面文本\n├── 1716982345678_www_example_com_article.png        # 元素截图\n└── 1716982345678_www_example_com_error.png         # 错误截图\n\n文件命名规则：\n\n时间戳 + URL 哈希 + 后缀\nURL 哈希：移除 https:// 并替换非字母数字字符为下划线"
      },
      {
        "title": "技术实现",
        "body": "基于 Node.js Playwright 库实现，提供以下功能：\n\n智能页面加载等待\n自动资源拦截\n元素定位和截图\n文本内容提取\n错误处理和日志\n\n实现文件：\n\nplaywright-cmd.js - 命令行接口\nplaywright-crawler-v3.js - 核心抓取功能"
      },
      {
        "title": "依赖",
        "body": "Node.js (>=16.0.0)\nPlaywright (v1.58.2+)\nChromium 浏览器（已自动安装）"
      },
      {
        "title": "安装",
        "body": "Skill 已内置所有依赖，无需额外安装：\n\n# 直接使用即可\nplaywright:fetch https://example.com"
      }
    ],
    "body": "Playwright Controller\n\n使用 Playwright 智能浏览网页，支持截图和文本提取。\n\n核心特性\n📱 移动端模拟: 模拟 iPhone 浏览器（375x667 分辨率）\n🎨 移动端 User-Agent: 使用真实的移动端浏览器标识\n🔄 有头模式: 可见浏览器窗口，支持手动操作（如点击登录）\n📸 完整资源加载: 所有资源正常加载，包括图片、CSS、字体等\n⏳ 智能等待: 自动等待页面完全加载\n📝 文本提取: 自动提取页面文本内容\n基本用法\nfetch - 获取网页内容和截图\nplaywright:fetch <url>\n\n\n自动等待 JS/CSS 加载完成，截取全屏截图，并提取页面文本内容。\n\n特点：\n\n📱 移动端模拟（375x800 分辨率）\n🎨 移动端 User-Agent（iPhone 17.0）\n🔄 有头模式（可见浏览器，支持手动操作如登录）\n📸 完整资源加载（图片、CSS、字体全部正常加载）\n⏳ 自动等待网络空闲\n📄 同时保存截图和文本文件\n\n示例：\n\nplaywright:fetch https://baike.baidu.com/item/兴盛优选/23451097\n\n\n输出：\n\n截图：./screenshots/<timestamp>_<url_hash>.png\n文本：./screenshots/<timestamp>_<url_hash>_content.txt\n命令执行信息输出到控制台\n高级用法\n自定义配置\nplaywright:fetch --timeout=120000 --dir=/custom/path <url>\n\n\n参数：\n\n--timeout: 超时时间（毫秒），默认 60000\n--dir: 截图和文本文件保存目录，默认 ./screenshots\n<url>: 目标网页 URL\n\n示例：\n\nplaywright:fetch --timeout=120000 --dir=/Users/chenkuan/Desktop/screenshots https://baike.baidu.com/item/兴盛优选/23451097\n\n截取特定元素\nplaywright:fetch-element --selector=\".content\" <url>\n\n\n截取指定 CSS 选择器元素的截图和文本内容。\n\n示例：\n\nplaywright:fetch-element --selector=\"h1\" https://baike.baidu.com/item/兴盛优选/23451097\n\n输出文件结构\n\n执行后会生成以下文件：\n\nscreenshots/\n├── 1716982345678_www_baike_baidu_com_item_兴盛优选_23451097.png    # 全屏截图\n├── 1716982345678_www_baike_baidu_com_item_兴盛优选_23451097_content.txt  # 页面文本\n└── 1716982345678_www_baike_baidu_com_item_兴盛优选_23451097_element.png # 元素截图\n\n工作流程\n启动浏览器 - 使用 Chromium\n设置拦截规则 - 跳过图片、CSS、字体等资源\n访问页面 - 等待网络空闲（networkidle）\n等待渲染 - 额外等待 2 秒确保完全渲染\n截取截图 - 全屏 PNG 截图\n提取文本 - 移除广告/脚本元素，提取文本内容\n保存文件 - 截图和文本文件保存到指定目录\n优势特点\n\n✅ 自动加载等待 - 无需手动等待 JS/CSS 加载 ✅ 智能资源拦截 - 跳过图片等无关资源，提高速度 ✅ 全屏截图 - 保存完整的页面视觉信息 ✅ 文本提取 - 适合后续文本处理和 AI 分析 ✅ 稳定可靠 - 使用有头模式便于调试 ✅ 错误处理 - 即使失败也会保存截图 ✅ 时间戳命名 - 避免文件名冲突\n\n注意事项\n浏览器启动时间 - 首次使用需要启动浏览器，约 2-3 秒\n网络依赖 - 需要网络连接访问目标网页\n文件权限 - 确保目录有写入权限\n长时间任务 - 复杂网页可能需要较长时间（60-120秒）\n主要 API 描述\nfetchWithPlaywright(url, options)\n\n获取整个网页的内容和截图。\n\n参数：\n\nurl (string, 必需): 目标网页 URL\noptions (object, 可选):\nheadless (boolean): 是否无头模式，默认 false\ntimeout (number): 超时时间（毫秒），默认 60000\nscreenshotDir (string): 截图保存目录，默认 './screenshots'\n\n返回：\n\n{\n  content: string,        // 页面文本内容\n  screenshotPath: string, // 截图文件路径\n  title: string,          // 页面标题\n  timestamp: number       // 时间戳\n}\n\n\n工作流程：\n\n启动 Chromium 浏览器（有头模式）\n设置请求拦截（跳过图片、CSS、字体等）\n访问 URL，等待 networkidle（网络空闲）\n等待 2 秒确保完全渲染\n截取全屏截图（1920x1080）\n提取文本内容（移除广告、脚本等）\n保存截图和文本文件\n\n示例：\n\nconst { fetchWithPlaywright } = require('./playwright-crawler-v3.js');\n\nconst result = await fetchWithPlaywright('https://example.com', {\n  headless: false,\n  timeout: 60000,\n  screenshotDir: './screenshots'\n});\n\nconsole.log(result.content);        // 页面文本\nconsole.log(result.screenshotPath); // 截图路径\n\nfetchElementAndScreenshot(url, selector, options)\n\n获取指定 CSS 选择器元素的截图和文本。\n\n参数：\n\nurl (string, 必需): 目标网页 URL\nselector (string, 必需): CSS 选择器（如 '.content', 'h1', '#article'）\noptions (object, 可选):\nheadless (boolean): 是否无头模式，默认 false\ntimeout (number): 超时时间（毫秒），默认 60000\nscreenshotDir (string): 截图保存目录，默认 './screenshots'\n\n返回：\n\n{\n  content: string,        // 元素文本内容\n  screenshotPath: string, // 元素截图文件路径\n  title: string,          // 页面标题\n  timestamp: number       // 时间戳\n}\n\n\n示例：\n\nconst { fetchElementAndScreenshot } = require('./playwright-crawler-v3.js');\n\nconst result = await fetchElementAndScreenshot(\n  'https://example.com',\n  '.article-content',\n  {\n    headless: false,\n    screenshotDir: './screenshots'\n  }\n);\n\nconsole.log(result.content);        // 元素文本\nconsole.log(result.screenshotPath); // 截图路径\n\nPlaywright 核心功能\n\n1. 智能页面加载等待\n\n使用 page.goto(url, { waitUntil: 'networkidle' })\n等待网络空闲（所有网络请求完成）\n移动端模拟和完整资源加载\n避免页面未加载完成的截图\n\n2. 完整资源加载\n\n// 不设置任何拦截规则，让所有资源正常加载\n// 包括：图片、CSS、字体、JavaScript 等\n// 这样截图才能看到完整的页面效果\n\n\n3. 移动端模拟\n\nconst context = await browser.newContext({\n  userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)...',\n  viewport: { width: 375, height: 667 },\n  isMobile: true\n});\n\n\n3. 截图功能\n\n全屏截图：page.screenshot({ fullPage: true })\n元素截图：element.screenshot()\nPNG 格式（无损）\n分辨率：1920x1080\n\n4. 文本提取\n\nconst content = await page.evaluate(() => {\n  document.body.innerText;  // 获取文本内容\n});\n\n\n5. 元素定位\n\n// CSS 选择器\nconst element = await page.$('.content');      // 单个元素\nconst elements = await page.$$('.article');    // 多个元素\n\n// 使用选择器\nawait element.$eval('h2', el => el.innerText);  // 提取元素文本\n\n常用配置选项\n\nheadless 模式\n\n// 有头模式（可见浏览器，适合调试）\nconst browser = await chromium.launch({ headless: false });\n\n// 无头模式（后台运行，速度更快）\nconst browser = await chromium.launch({ headless: true });\n\n\nviewport（视口大小）- 默认移动端\n\nconst context = await browser.newContext({\n  viewport: { width: 375, height: 800 }  // 375x800\n});\n\n\nuserAgent（浏览器标识）- 默认移动端\n\nconst context = await browser.newContext({\n  userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1'\n});\n\n\nisMobile（移动设备模拟）\n\nconst context = await browser.newContext({\n  isMobile: true  // 开启移动设备模拟\n});\n\n输出文件\n\n自动生成的文件：\n\nscreenshots/\n├── 1716982345678_www_example_com_content.png        # 全屏截图\n├── 1716982345678_www_example_com_content.txt        # 页面文本\n├── 1716982345678_www_example_com_article.png        # 元素截图\n└── 1716982345678_www_example_com_error.png         # 错误截图\n\n\n文件命名规则：\n\n时间戳 + URL 哈希 + 后缀\nURL 哈希：移除 https:// 并替换非字母数字字符为下划线\n技术实现\n\n基于 Node.js Playwright 库实现，提供以下功能：\n\n智能页面加载等待\n自动资源拦截\n元素定位和截图\n文本内容提取\n错误处理和日志\n\n实现文件：\n\nplaywright-cmd.js - 命令行接口\nplaywright-crawler-v3.js - 核心抓取功能\n依赖\nNode.js (>=16.0.0)\nPlaywright (v1.58.2+)\nChromium 浏览器（已自动安装）\n安装\n\nSkill 已内置所有依赖，无需额外安装：\n\n# 直接使用即可\nplaywright:fetch https://example.com"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/MRchenkuan/playwright-controller",
    "publisherUrl": "https://clawhub.ai/MRchenkuan/playwright-controller",
    "owner": "MRchenkuan",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/playwright-controller",
    "downloadUrl": "https://openagent3.xyz/downloads/playwright-controller",
    "agentUrl": "https://openagent3.xyz/skills/playwright-controller/agent",
    "manifestUrl": "https://openagent3.xyz/skills/playwright-controller/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/playwright-controller/agent.md"
  }
}