Chrome
Chrome DevTools Protocol, extension Manifest V3, and debugging patterns that prevent common automation failures.
Iván
@ivangdavila
What This Skill Does
Provides patterns and code for using the Chrome DevTools Protocol (CDP), building Manifest V3 extensions, and debugging Chrome automation. Covers context detection, network interception, performance measurement, and security context checks.
Eliminates trial-and-error debugging of CDP connections, extension service worker lifecycle, and cross-browser compatibility issues by offering proven, reusable patterns.
When to Use It
- Automate browser actions via CDP (e.g., navigate, screenshot, capture network traffic)
- Build a Chrome extension with Manifest V3 and handle service worker termination
- Detect whether code is running in a Chrome extension context vs. a regular web page
- Debug performance issues using performance marks and layout thrash detection
- Intercept or block network requests before a page loads using CDP
- Handle CORS, mixed content, and secure context requirements in automation scripts
Install
$ openclaw skills install @ivangdavila/chromeChrome DevTools Protocol (CDP)
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.
Enable domains before use: Runtime.enable and Page.enable must be called before any Runtime.evaluate or Page.navigate commands.
CDP is async: Wait for response before sending next command. Use Promise-based wrapper with response ID tracking.
Screenshot on high-DPI: Include fromSurface: true and scale: 2 in Page.captureScreenshot params for Retina displays.
Get response body separately: Network.responseReceived doesn't include body. Call Network.getResponseBody with requestId after response completes.
Chrome Extension Manifest V3
Permissions split: Use permissions for APIs, host_permissions for URLs. Never use http://*/* in permissions.
Service workers terminate: No persistent state. Use chrome.storage.local instead of global variables. Use chrome.alarms instead of setInterval.
Content script isolation: Can't access page globals. Use chrome.scripting.executeScript with func for page context. Use window.postMessage for content↔page communication.
Storage is async: chrome.storage.local.get() returns Promise, not data. Always await. Handle QUOTA_EXCEEDED errors.
Context Detection
Detect actual Chrome (not Edge/Brave): Check window.chrome && navigator.vendor === "Google Inc." and exclude Opera/Edge.
Extension context types:
chrome.runtime.idexists → content scriptchrome.runtime.getManifestexists → popup/background/optionschrome.loadTimesexists but no runtime → regular Chrome web page
Manifest version check: Wrap chrome.runtime.getManifest() in try-catch. Use chrome.action for V3, chrome.browserAction for V2.
Performance Debugging
Memory API conditional: Check 'memory' in performance before accessing performance.memory.usedJSHeapSize.
Use performance marks: performance.mark() and performance.measure() for sub-frame timing. Clear marks to prevent memory leaks.
Layout thrash detection: PerformanceObserver with entryTypes: ['measure', 'paint', 'largest-contentful-paint']. Flag entries >16.67ms.
Network Debugging
Block before navigate: Call Network.setBlockedURLs before Page.navigate, not after.
Request interception: Use Network.setRequestInterception with requestStage: 'Request' for granular control. Return errorReason: 'BlockedByClient' to block.
Security Contexts
Mixed content: HTTPS pages can't load HTTP resources. Check location.protocol vs resource URL.
CORS errors: TypeError on cross-origin fetch usually means CORS. Check DevTools Network tab for specific error.
Secure context required: File System Access API, Clipboard API require window.isSecureContext === true and user gesture.
Top skills in this category
Skill Vetter
@spclaudehomeSecurity-first skill vetting for AI agents. Use before installing any skill from ClawdHub, GitHub, or other sources. Checks for red flags, permission scope, and suspicious patterns.
Github
@steipeteInteract with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Humanizer
@biostartechnologyRemove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Free Ride - Unlimited free AI
@shaivpidadiManages free AI models from OpenRouter for OpenClaw. Automatically ranks models by quality, configures fallbacks for rate-limit handling, and updates opencla...
Elite Longterm Memory
@nextfrontierbuildsUltimate AI agent memory system for Cursor, Claude, ChatGPT & Copilot. WAL protocol + vector search + git-notes + cloud backup. Never lose context again. Vibe-coding ready.