[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7E6BKHT9DF7KQYV30DASQBP":3,"skill-same:01M7E6BKHT9DF7KQYV30DASQBP":46},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":14,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":29,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M7E6BKHT9DF7KQYV30DASQBP","control-chrome",null,"Control the user's Chrome browser for tasks that depend on existing Chrome state: tabs, logged-in sessions, or extensions. Prefer purpose-built connectors, APIs, or CLIs when available.","wxdwu\u002Fnew-api","wxdwu","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F80968397?v=4","01M7E6AEMB59N90BKXD77EC83D","Xudong Wu","01M7E6AEMY2BXCDVZ9MJJHFQ4C",0,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fbundled-marketplaces\u002Fopenai-bundled\u002Fplugins\u002Fchrome\u002Fskills\u002Fcontrol-chrome\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: control-chrome\ndescription: \"Control the user's Chrome browser for tasks that depend on existing Chrome state: tabs, logged-in sessions, or extensions. Prefer purpose-built connectors, APIs, or CLIs when available.\"\n---\n\n# Browser\n## Stop: choose the right surface before any browser action\nExplicit browser intent wins: if the user names the in-app browser or Chrome, or asks to open, show, or navigate to a page; inspect its visual or interactive state; or interact with its UI, continue with Browser and do not substitute a connector.\n\nOtherwise, a URL or open browser tab is context, not browser intent. For any request to check, read, review, summarize, search, or edit a linked resource, your first task action MUST be tool discovery for a purpose-built connector, API, or CLI, including deferred tools. Do not initialize the browser runtime or call `agent.browsers` until that search finds no applicable tool. If an applicable non-browser tool exists, use it and stop without continuing into browser setup; otherwise, continue with Browser.\n\nUse this skill for browser automation tasks such as inspecting pages, navigating, testing local apps, clicking, typing, taking screenshots, and reading visible page state.\n\nIf this plugin is listed as available in the session, treat that as mandatory reading before browser work. Open and follow this skill before saying that Browser is unavailable and before falling back to standalone Playwright or Computer Use.\n\nDo not skip this skill just because Computer Use MCP tool calls are directly visible or appear easier to invoke. The presence of Computer Use tools is not evidence that Computer Use is the preferred browser surface.\n\n## Setup Documentation\nUse `await agent.documentation.get(\"\u003Cname>\")` when one of these setup topics applies:\n- `bootstrap-troubleshooting`: read when browser setup succeeds but discovery or selection fails\n- `chrome-troubleshooting`: read when Chrome extension setup, installation, or communication fails\n\n## Bootstrap\nThese setup details are internal. User-facing progress updates should be less technical in nature. Never mention `Node REPL`, `node_repl`, `REPL`, JavaScript sessions, module exports, reading documentation, or loading instructions unless a user is asking for that exact information. If setup or recovery is needed, describe it naturally as connecting to the browser or retrying the browser connection.\n\nThe `browser-client` module is the core entry point for browser use, and is available under `scripts\u002Fbrowser-client.mjs` in this plugin's root directory. ALWAYS import it using an absolute path. IMPORTANT: If this path cannot be found, stop and report that this plugin is missing `scripts\u002Fbrowser-client.mjs`. NEVER use the built in `browser-client` library.\n\nRun browser setup code through the Node REPL `js` tool. In this environment the callable tool id typically appears as `mcp__node_repl__js`. If it is not already available, use tool discovery for `node_repl js` without setting a result limit. You need the `js` execution tool: `js_reset` only clears state, and `js_add_node_module_dir` only changes package resolution. Do not call either helper while trying to expose `js`. If `js` is still not available, search again for `node_repl js` with `limit: 10`.\n\nInitialize the runtime once per fresh Node session. If `agent.browsers` already exists, reuse it; do not import or initialize another browser runtime.\n\n```js\nif (globalThis.agent?.browsers == null) {\n  const { setupBrowserRuntime } = await import(\"\u003Cplugin root>\u002Fscripts\u002Fbrowser-client.mjs\");\n  await setupBrowserRuntime({ globals: globalThis });\n}\n```\n\nOnce a browser connection is established, reuse its existing browser binding across later turns and do not reread this skill. Once you have read a browser's complete documentation, do not read it again unless you select a different browser.\n\nA tab binding is separate from its browser binding. If a later turn reports that a tab is missing, stale, closed, or not part of the current browser session, discard that tab binding and obtain or create a fresh tab from the existing browser binding. An empty `browser.tabs.list()` or `browser.user.openTabs()` result is normal after tab cleanup and does not invalidate the browser binding. Never call `agent.browsers.get*` to recover a tab; only an explicit browser-disconnected error invalidates the binding.\n\n## Browser selection\nThe scenarios below are for the initial browser selection only. Before calling any `agent.browsers.get*` method, reuse an existing `globalThis.browser`, `globalThis.iab`, or `globalThis.chrome` binding that already serves the task. A new user turn does not invalidate a browser binding or require another selection or documentation call.\n\nSelect the initial browser with exactly one of these scenarios, in the order\nshown. An explicit request for the in-app browser or Chrome always wins over URL\nselection. Never call `getForUrl()` when the user names a browser.\n\nApp-provided in-app-browser context is ambient UI state, not a user instruction to select or switch browsers. Only the text of the user's request can explicitly choose a browser.\n\nUse Chrome when the user explicitly requests it or the task requires an existing Chrome tab, logged-in session, profile, or extension. Do not switch to Chrome solely because a preferred connector, API, or CLI has missing or expired authentication; ask the user to fix authentication or explicitly approve Chrome as a fallback.\n\nDo not inspect browser cookies, local storage, profiles, passwords, or session stores. Browser discovery must remain read-only.\n\nWhen authentication blocks requested browser navigation, do not replace it with web search, a search engine, another site, or another source merely to bypass sign-in.\n\n### The user explicitly requests a browser\nThe in-app browser is available only when the Browser skill is listed for the session. If the user explicitly requests the in-app browser and that skill is available, use a distinct persistent binding and immediately read its complete documentation:\n\n```js\nif (globalThis.iab == null) {\n  globalThis.iab = await agent.browsers.get(\"iab\");\n  nodeRepl.write(await iab.documentation());\n}\n```\n\nIf the user explicitly requests the in-app browser but the Browser skill is not available, report that the in-app browser is unavailable instead of substituting another browser.\n\nChrome is available only when the Chrome skill is listed for the session. If the user explicitly requests Chrome and that skill is available, use a separate persistent binding and immediately read its complete documentation:\n\n```js\nif (globalThis.chrome == null) {\n  globalThis.chrome = await agent.browsers.get(\"extension\");\n  nodeRepl.write(await chrome.documentation());\n}\n```\n\nIf the user explicitly requests Chrome but the Chrome skill is not available, report that Chrome is unavailable instead of substituting another browser.\n\nAn explicit browser choice remains in force for the task. If authentication blocks the task in an explicitly selected browser, your next response must explicitly ask the user to sign in in that browser and tell you when it is ready, unless that browser's documentation provides a supported authentication flow to try first. Merely reporting that sign-in is required is not sufficient. Do not switch to another browser unless the user asks or approves the switch.\n\n### The task requires browser interaction, the user does not specify a browser, and the task has a target URL\nWhen the user supplies a URL or the intended URL can be reasonably inferred from the request, replace the example below with that URL and let browser-client choose the browser best suited to it:\n\n```js\nif (globalThis.browser == null) {\n  globalThis.browser = await agent.browsers.getForUrl(\"https:\u002F\u002Fexample.com\u002F\");\n  nodeRepl.write(await browser.documentation());\n}\n```\n\nThis runtime-selected browser is not a user constraint. If the page requires authentication and another available browser may have the needed session, try that browser before asking the user to sign in.\n\n### The user specifies neither a browser nor a target URL\nUse the runtime default, which prefers the in-app browser when it is available and otherwise uses Chrome. Do not list browsers first:\n\n```js\nif (globalThis.browser == null) {\n  globalThis.browser = await agent.browsers.getDefault();\n  nodeRepl.write(await browser.documentation());\n}\n```\n\n## After setup\nIf setup succeeds but browser discovery or selection fails, read `await agent.documentation.get(\"bootstrap-troubleshooting\")` before resetting the JavaScript session or trying another browser-control mechanism.\n\nIf the failure is specific to Chrome extension setup, installation, or communication, read `await agent.documentation.get(\"chrome-troubleshooting\")` before retrying or taking another recovery action.\n\nWhen the user did not explicitly choose a browser, you may select another browser later without resetting the Node session. Preserve existing `iab`, `chrome`, and `browser` bindings when they are still useful. Existing tabs remain bound to the browser that created them. After selecting a different browser, obtain a tab from that browser before continuing and read its complete documentation.\n\nThe ability to interact directly with browsers is exposed through the `browser-client` runtime via the `agent.browsers.*` API. Before trying to interact with a selected browser for the first time, you MUST emit and read the complete documentation returned by its `documentation()` call in one go. For the initial documentation read, run the exact direct `nodeRepl.write(await \u003Cbrowser>.documentation());` call shown in the applicable scenario above. Do not assign the documentation to a variable, inspect its length, slice it, truncate it, summarize it, or emit only an excerpt. Do not proactively split the documentation into pages or chunks. Only if the tool output itself explicitly reports that it was truncated may you emit and read smaller chunks until you have read the documentation in its entirety.\n\nOnly the Node REPL `js` tool (`mcp__node_repl__js`) can be used to control the selected browser. Do not use external MCP browser-control tools, separate browser automation servers, or other browser skills for this surface. References to Playwright mean the in-skill `tab.playwright` API after browser-client setup.\n\n\u003C!-- BROWSER_SKILL_EOF: This is the complete Browser skill. Do not request additional lines. -->\n","# Browser\n## Stop: choose the right surface before any browser action\nExplicit browser intent wins: if the user names the in-app browser or Chrome, or asks to open, show, or navigate to a page; inspect its visual or interactive state; or interact with its UI, continue with Browser and do not substitute a connector.\n\nOtherwise, a URL or open browser tab is context, not browser intent. For any request to check, read, review, summarize, search, or edit a linked resource, your first task action MUST be tool discovery for a purpose-built connector, API, or CLI, including deferred tools. Do not initialize the browser runtime or call `agent.browsers` until that search finds no applicable tool. If an applicable non-browser tool exists, use it and stop without continuing into browser setup; otherwise, continue with Browser.\n\nUse this skill for browser automation tasks such as inspecting pages, navigating, testing local apps, clicking, typing, taking screenshots, and reading visible page state.\n\nIf this plugin is listed as available in the session, treat that as mandatory reading before browser work. Open and follow this skill before saying that Browser is unavailable and before falling back to standalone Playwright or Computer Use.\n\nDo not skip this skill just because Computer Use MCP tool calls are directly visible or appear easier to invoke. The presence of Computer Use tools is not evidence that Computer Use is the preferred browser surface.\n\n## Setup Documentation\nUse `await agent.documentation.get(\"\u003Cname>\")` when one of these setup topics applies:\n- `bootstrap-troubleshooting`: read when browser setup succeeds but discovery or selection fails\n- `chrome-troubleshooting`: read when Chrome extension setup, installation, or communication fails\n\n## Bootstrap\nThese setup details are internal. User-facing progress updates should be less technical in nature. Never mention `Node REPL`, `node_repl`, `REPL`, JavaScript sessions, module exports, reading documentation, or loading instructions unless a user is asking for that exact information. If setup or recovery is needed, describe it naturally as connecting to the browser or retrying the browser connection.\n\nThe `browser-client` module is the core entry point for browser use, and is available under `scripts\u002Fbrowser-client.mjs` in this plugin's root directory. ALWAYS import it using an absolute path. IMPORTANT: If this path cannot be found, stop and report that this plugin is missing `scripts\u002Fbrowser-client.mjs`. NEVER use the built in `browser-client` library.\n\nRun browser setup code through the Node REPL `js` tool. In this environment the callable tool id typically appears as `mcp__node_repl__js`. If it is not already available, use tool discovery for `node_repl js` without setting a result limit. You need the `js` execution tool: `js_reset` only clears state, and `js_add_node_module_dir` only changes package resolution. Do not call either helper while trying to expose `js`. If `js` is still not available, search again for `node_repl js` with `limit: 10`.\n\nInitialize the runtime once per fresh Node session. If `agent.browsers` already exists, reuse it; do not import or initialize another browser runtime.\n\n```js\nif (globalThis.agent?.browsers == null) {\n  const { setupBrowserRuntime } = await import(\"\u003Cplugin root>\u002Fscripts\u002Fbrowser-client.mjs\");\n  await setupBrowserRuntime({ globals: globalThis });\n}\n```\n\nOnce a browser connection is established, reuse its existing browser binding across later turns and do not reread this skill. Once you have read a browser's complete documentation, do not read it again unless you select a different browser.\n\nA tab binding is separate from its browser binding. If a later turn reports that a tab is missing, stale, closed, or not part of the current browser session, discard that tab binding and obtain or create a fresh tab from the existing browser binding. An empty `browser.tabs.list()` or `browser.user.openTabs()` result is normal after tab cleanup and does not invalidate the browser binding. Never call `agent.browsers.get*` to recover a tab; only an explicit browser-disconnected error invalidates the binding.\n\n## Browser selection\nThe scenarios below are for the initial browser selection only. Before calling any `agent.browsers.get*` method, reuse an existing `globalThis.browser`, `globalThis.iab`, or `globalThis.chrome` binding that already serves the task. A new user turn does not invalidate a browser binding or require another selection or documentation call.\n\nSelect the initial browser with exactly one of these scenarios, in the order\nshown. An explicit request for the in-app browser or Chrome always wins over URL\nselection. Never call `getForUrl()` when the user names a browser.\n\nApp-provided in-app-browser context is ambient UI state, not a user instruction to select or switch browsers. Only the text of the user's request can explicitly choose a browser.\n\nUse Chrome when the user explicitly requests it or the task requires an existing Chrome tab, logged-in session, profile, or extension. Do not switch to Chrome solely because a preferred connector, API, or CLI has missing or expired authentication; ask the user to fix authentication or explicitly approve Chrome as a fallback.\n\nDo not inspect browser cookies, local storage, profiles, passwords, or session stores. Browser discovery must remain read-only.\n\nWhen authentication blocks requested browser navigation, do not replace it with web search, a search engine, another site, or another source merely to bypass sign-in.\n\n### The user explicitly requests a browser\nThe in-app browser is available only when the Browser skill is listed for the session. If the user explicitly requests the in-app browser and that skill is available, use a distinct persistent binding and immediately read its complete documentation:\n\n```js\nif (globalThis.iab == null) {\n  globalThis.iab = await agent.browsers.get(\"iab\");\n  nodeRepl.write(await iab.documentation());\n}\n```\n\nIf the user explicitly requests the in-app browser but the Browser skill is not available, report that the in-app browser is unavailable instead of substituting another browser.\n\nChrome is available only when the Chrome skill is listed for the session. If the user explicitly requests Chrome and that skill is available, use a separate persistent binding and immediately read its complete documentation:\n\n```js\nif (globalThis.chrome == null) {\n  globalThis.chrome = await agent.browsers.get(\"extension\");\n  nodeRepl.write(await chrome.documentation());\n}\n```\n\nIf the user explicitly requests Chrome but the Chrome skill is not available, report that Chrome is unavailable instead of substituting another browser.\n\nAn explicit browser choice remains in force for the task. If authentication blocks the task in an explicitly selected browser, your next response must explicitly ask the user to sign in in that browser and tell you when it is ready, unless that browser's documentation provides a supported authentication flow to try first. Merely reporting that sign-in is required is not sufficient. Do not switch to another browser unless the user asks or approves the switch.\n\n### The task requires browser interaction, the user does not specify a browser, and the task has a target URL\nWhen the user supplies a URL or the intended URL can be reasonably inferred from the request, replace the example below with that URL and let browser-client choose the browser best suited to it:\n\n```js\nif (globalThis.browser == null) {\n  globalThis.browser = await agent.browsers.getForUrl(\"https:\u002F\u002Fexample.com\u002F\");\n  nodeRepl.write(await browser.documentation());\n}\n```\n\nThis runtime-selected browser is not a user constraint. If the page requires authentication and another available browser may have the needed session, try that browser before asking the user to sign in.\n\n### The user specifies neither a browser nor a target URL\nUse the runtime default, which prefers the in-app browser when it is available and otherwise uses Chrome. Do not list browsers first:\n\n```js\nif (globalThis.browser == null) {\n  globalThis.browser = await agent.browsers.getDefault();\n  nodeRepl.write(await browser.documentation());\n}\n```\n\n## After setup\nIf setup succeeds but browser discovery or selection fails, read `await agent.documentation.get(\"bootstrap-troubleshooting\")` before resetting the JavaScript session or trying another browser-control mechanism.\n\nIf the failure is specific to Chrome extension setup, installation, or communication, read `await agent.documentation.get(\"chrome-troubleshooting\")` before retrying or taking another recovery action.\n\nWhen the user did not explicitly choose a browser, you may select another browser later without resetting the Node session. Preserve existing `iab`, `chrome`, and `browser` bindings when they are still useful. Existing tabs remain bound to the browser that created them. After selecting a different browser, obtain a tab from that browser before continuing and read its complete documentation.\n\nThe ability to interact directly with browsers is exposed through the `browser-client` runtime via the `agent.browsers.*` API. Before trying to interact with a selected browser for the first time, you MUST emit and read the complete documentation returned by its `documentation()` call in one go. For the initial documentation read, run the exact direct `nodeRepl.write(await \u003Cbrowser>.documentation());` call shown in the applicable scenario above. Do not assign the documentation to a variable, inspect its length, slice it, truncate it, summarize it, or emit only an excerpt. Do not proactively split the documentation into pages or chunks. Only if the tool output itself explicitly reports that it was truncated may you emit and read smaller chunks until you have read the documentation in its entirety.\n\nOnly the Node REPL `js` tool (`mcp__node_repl__js`) can be used to control the selected browser. Do not use external MCP browser-control tools, separate browser automation servers, or other browser skills for this surface. References to Playwright mean the in-skill `tab.playwright` API after browser-client setup.\n\n\u003C!-- BROWSER_SKILL_EOF: This is the complete Browser skill. Do not request additional lines. -->\n",{"name":5,"description":7},"main","dde9a06ab10bce3fe52058c783826590231f7df3","plugins\u002F.tmp\u002Fbundled-marketplaces\u002Fopenai-bundled\u002Fplugins\u002Fchrome\u002Fskills\u002Fcontrol-chrome","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api","https:\u002F\u002Fgithub.com\u002Fwxdwu","24120128@bjtu.edu.cn","I am Xudong Wu，a student in beijing jiaotong University, \"I am eager to learn on GitHub and contribute my part to this community.","2026-10-05 17:26:50",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add wxdwu\u002Fnew-api --skill control-chrome",{"tool":38,"command":39},"bunx","bunx skills add wxdwu\u002Fnew-api --skill control-chrome",{"tool":41,"command":42},"pnpm","pnpm dlx skills add wxdwu\u002Fnew-api --skill control-chrome","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fbundled-marketplaces\u002Fopenai-bundled\u002Fplugins\u002Fchrome\u002Fskills\u002Fcontrol-chrome\u002FSKILL.md",true,[],[47,54,61,68,75,82],{"skillNo":48,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":53,"publishedAt":19},"01M7E8SVA2N0JA09RW1XJYXCWX","Zotero","Use Zotero Desktop from Codex to enable\u002Fprobe the local API, search a local Zotero library, list items\u002Fcollections\u002Ftags, export BibTeX, insert citation keys into LaTeX or Markdown drafts, read indexed full text when requested, and import BibTeX\u002FRIS records into Zotero through the connector server. Use when the user mentions Zotero, citations, references.bib, BibTeX export, local Zotero API, localhost:23119, or adding citations from a Zotero library.","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fplugins\u002Fplugins\u002Fzotero\u002Fskills\u002Fzotero\u002FSKILL.md",[],[],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":19},"01M7E8ST1FJAD5PWTW2FN1NSK0","zoom-apps-sdk","Use when using Apps SDK.","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fplugins\u002Fplugins\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":19},"01M7E8SRW074NNNCZRCZA5T3Z1","setup-zoom-websockets","Use when building Zoom WebSockets.","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fplugins\u002Fplugins\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":19},"01M7E8SPCFMD3YVPRX2MW8X3RA","setup-zoom-webhooks","Use when building Zoom webhooks.","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fplugins\u002Fplugins\u002Fzoom\u002Fskills\u002Fwebhooks\u002FSKILL.md",[],[],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7E8SMCH4RPCX8YSBNGWQCMP","zoom-virtual-agent-web","Zoom Virtual Agent SDK for web embeds. Use for campaign or entry ID chat launch, event-driven controls, user context updates, and CSP-safe deployment.","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fplugins\u002Fplugins\u002Fzoom\u002Fskills\u002Fvirtual-agent\u002Fweb\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M7E8SJCAY323E36Z8SAP8H4M","zoom-virtual-agent-ios","Zoom Virtual Agent iOS integration via WKWebView. Use for Swift\u002FObjective-C script injection, message handlers, support_handoff relay, and URL routing policies.","https:\u002F\u002Fgithub.com\u002Fwxdwu\u002Fnew-api\u002Fblob\u002Fmain\u002Fplugins\u002F.tmp\u002Fplugins\u002Fplugins\u002Fzoom\u002Fskills\u002Fvirtual-agent\u002Fios\u002FSKILL.md",[],[]]