chrome-browser by oimiragieo/agent-studio
npx skills add https://github.com/oimiragieo/agent-studio --skill chrome-browser独立脚本:无需下载;该技能调用 .claude/tools/chrome-browser/chrome-browser.cjs(需要 Node.js v18+)。
MCP 集成(用于完整自动化):
--chrome 运行。测试: 测试用户可见的行为,而非实现。隔离测试(使用独立的存储/cookie);使用 before/after 钩子进行登录或设置。模拟第三方网络,而非依赖实时服务。
DevTools 录制器: 在 Recorder 面板中录制流程;导出为 JSON 或测试脚本(Puppeteer、Nightwatch)。在 CI 中使用 Puppeteer Replay 回放。用于用户流程的性能测量。
技巧: 优先使用 Chrome DevTools MCP 进行测试/调试(始终可用);使用 Claude-in-Chrome 进行需要身份验证的会话(GIF、表单)。限制 GIF 帧数(例如 100 帧)以避免内存问题。使用 take_snapshot 获取结构;使用 evaluate_script 进行自定义检查。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
无官方认证。 Chrome for Developers – DevTools。Frontend Masters / Udemy 的“Mastering Chrome DevTools”。技能数据: 测试用户可见的行为;隔离测试;Recorder + Puppeteer Replay;性能追踪。
建议的钩子: 可选:测试后钩子,用于在失败时捕获截图。当 qa 或 frontend-pro 被路由用于浏览器测试时使用(将 chrome-browser 添加到上下文:browser_testing 或类似内容)。
工作流: 与 qa(添加到上下文)或 frontend-pro 一起使用,用于端到端/浏览器流程。流程:打开 URL → 交互(点击/填写)→ 快照或断言。参见 .claude/workflows/chrome-browser-skill-workflow.md。
| 功能 | Chrome DevTools MCP | Claude-in-Chrome |
|---|---|---|
| 状态 | ✅ 始终可用 | ⚠️ 需要 --chrome 标志 |
| 激活 | 自动(内置) | claude --chrome + 扩展 |
| 身份验证会话 | ❌ 全新浏览器 | ✅ 使用您的登录状态 |
| 性能追踪 | ✅ 完整的 Core Web Vitals | ❌ 不可用 |
| 网络检查 | ✅ 详细,可访问请求体 | ✅ 基础 |
| 设备模拟 | ✅ 移动设备、地理位置、CPU | ❌ 有限 |
| GIF 录制 | ❌ 否 | ✅ 是(100 帧限制) |
| 页面文本提取 | 通过快照 | ✅ 专用工具 |
| 最适合 | 测试、调试、性能 | 需要身份验证的工作流、演示 |
Chrome 浏览器自动化可以录制 GIF 视频。为防止内存耗尽:
帧数追踪:
Need to test/debug a public site? → Chrome DevTools MCP
Need performance analysis? → Chrome DevTools MCP
Need to access authenticated apps? → Claude-in-Chrome (--chrome)
Need to record a demo GIF? → Claude-in-Chrome (--chrome)
Need to interact with Google Docs? → Claude-in-Chrome (--chrome)
Need device/network emulation? → Chrome DevTools MCP
Claude-in-Chrome:
无需设置 - 这些工具立即生效。
// List all open pages
mcp__chrome - devtools__list_pages();
// Select a page to work with
mcp__chrome - devtools__select_page({ pageId: 1 });
// Create a new page
mcp__chrome - devtools__new_page({ url: 'https://example.com' });
// Navigate to URL
mcp__chrome - devtools__navigate_page({ url: 'https://example.com' });
// Take accessibility snapshot (get element UIDs)
mcp__chrome - devtools__take_snapshot();
// Click element by UID from snapshot
mcp__chrome - devtools__click({ uid: 'ref_123' });
// Fill form field
mcp__chrome - devtools__fill({ uid: 'ref_456', value: 'test@example.com' });
// Fill entire form
mcp__chrome -
devtools__fill_form({
elements: [
{ uid: 'ref_456', value: 'test@example.com' },
{ uid: 'ref_789', value: 'password123' },
],
});
// Read console messages
mcp__chrome - devtools__list_console_messages({ types: ['error', 'warn'] });
// Get specific console message details
mcp__chrome - devtools__get_console_message({ msgid: 1 });
// List network requests
mcp__chrome - devtools__list_network_requests({ resourceTypes: ['xhr', 'fetch'] });
// Get request/response details
mcp__chrome - devtools__get_network_request({ reqid: 1 });
// Execute JavaScript
mcp__chrome -
devtools__evaluate_script({
function: '() => document.title',
});
// Start performance trace (with page reload)
mcp__chrome - devtools__performance_start_trace({ reload: true, autoStop: true });
// Or manual stop
mcp__chrome - devtools__performance_start_trace({ reload: true, autoStop: false });
// ... interact with page ...
mcp__chrome - devtools__performance_stop_trace();
// Analyze specific insight
mcp__chrome -
devtools__performance_analyze_insight({
insightSetId: 'navigation-1',
insightName: 'LCPBreakdown',
});
// Emulate mobile device
mcp__chrome -
devtools__emulate({
viewport: {
width: 375,
height: 667,
deviceScaleFactor: 2,
isMobile: true,
hasTouch: true,
},
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)...',
});
// Emulate slow network
mcp__chrome - devtools__emulate({ networkConditions: 'Slow 3G' });
// Emulate geolocation
mcp__chrome -
devtools__emulate({
geolocation: { latitude: 37.7749, longitude: -122.4194 },
});
claude --chrome// ALWAYS call first to get available tabs
mcp__claude-in-chrome__tabs_context_mcp({ createIfEmpty: true })
// Create a new tab for this conversation
mcp__claude-in-chrome__tabs_create_mcp()
// Navigate to URL
mcp__claude-in-chrome__navigate({ url: "https://docs.google.com", tabId: 123 })
// Read page structure (accessibility tree)
mcp__claude-in-chrome__read_page({ tabId: 123 })
// Find elements by natural language
mcp__claude-in-chrome__find({ query: "login button", tabId: 123 })
// Extract page text
mcp__claude-in-chrome__get_page_text({ tabId: 123 })
// Click, type, screenshot via computer tool
mcp__claude-in-chrome__computer({
action: "left_click",
coordinate: [100, 200],
tabId: 123
})
mcp__claude-in-chrome__computer({
action: "type",
text: "Hello world",
tabId: 123
})
mcp__claude-in-chrome__computer({
action: "screenshot",
tabId: 123
})
// Fill form by element reference
mcp__claude-in-chrome__form_input({
ref: "ref_1",
value: "test@example.com",
tabId: 123
})
// Start recording
mcp__claude-in-chrome__gif_creator({ action: "start_recording", tabId: 123 })
// Take screenshot to capture initial state
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// ... perform actions ...
// Take final screenshot
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Stop and export
mcp__claude-in-chrome__gif_creator({ action: "stop_recording", tabId: 123 })
mcp__claude-in-chrome__gif_creator({
action: "export",
download: true,
filename: "demo.gif",
tabId: 123
})
✓ 良好模式:
✗ 不良模式:
如果达到 100 帧:
</execution_process>
<best_practices>
</best_practices>
// Create page and navigate
mcp__chrome - devtools__new_page({ url: 'https://example.com/login' });
// Take snapshot to get element UIDs
mcp__chrome - devtools__take_snapshot();
// Fill login form
mcp__chrome -
devtools__fill_form({
elements: [
{ uid: 'email_field', value: 'test@example.com' },
{ uid: 'password_field', value: 'testpass123' },
],
});
// Click submit
mcp__chrome - devtools__click({ uid: 'submit_button' });
// Check for errors
mcp__chrome - devtools__list_console_messages({ types: ['error'] });
</usage_example>
<usage_example> 性能审计(Chrome DevTools MCP):
// Navigate to page
mcp__chrome - devtools__navigate_page({ url: 'https://example.com' });
// Run performance trace with reload
mcp__chrome -
devtools__performance_start_trace({
reload: true,
autoStop: true,
filePath: 'trace.json.gz',
});
// Analyze LCP breakdown
mcp__chrome -
devtools__performance_analyze_insight({
insightSetId: 'navigation-1',
insightName: 'LCPBreakdown',
});
</usage_example>
<usage_example> Google Docs 编辑(Claude-in-Chrome):
// Get tab context
mcp__claude-in-chrome__tabs_context_mcp({ createIfEmpty: true })
// Navigate to Google Docs (uses your login)
mcp__claude-in-chrome__navigate({
url: "https://docs.google.com/document/d/YOUR_DOC_ID",
tabId: 123
})
// Read page to find elements
mcp__claude-in-chrome__read_page({ tabId: 123 })
// Click in document and type
mcp__claude-in-chrome__computer({
action: "left_click",
ref: "document_body",
tabId: 123
})
mcp__claude-in-chrome__computer({
action: "type",
text: "Meeting notes for today...",
tabId: 123
})
</usage_example>
<usage_example> 录制演示 GIF(Claude-in-Chrome):
// Start recording
mcp__claude-in-chrome__gif_creator({ action: "start_recording", tabId: 123 })
// Initial screenshot
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Navigate
mcp__claude-in-chrome__navigate({ url: "https://example.com/product", tabId: 123 })
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Click add to cart
mcp__claude-in-chrome__computer({ action: "left_click", ref: "add_to_cart", tabId: 123 })
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Stop and export
mcp__claude-in-chrome__gif_creator({ action: "stop_recording", tabId: 123 })
mcp__claude-in-chrome__gif_creator({
action: "export",
download: true,
filename: "add-to-cart-flow.gif",
options: { showClickIndicators: true, showProgressBar: true },
tabId: 123
})
</usage_example>
| 工具 | 描述 |
|---|---|
mcp__chrome-devtools__list_pages | 列出所有浏览器页面 |
mcp__chrome-devtools__select_page | 选择页面进行操作 |
mcp__chrome-devtools__new_page | 使用 URL 创建新页面 |
mcp__chrome-devtools__close_page | 关闭页面 |
mcp__chrome-devtools__navigate_page | 导航、重新加载、前进/后退 |
mcp__chrome-devtools__take_snapshot | 获取带 UID 的可访问性树 |
mcp__chrome-devtools__take_screenshot | 捕获页面/元素截图 |
mcp__chrome-devtools__click | 通过 UID 点击元素 |
mcp__chrome-devtools__fill | 通过 UID 填写输入框/选择框 |
mcp__chrome-devtools__fill_form | 填写多个表单元素 |
mcp__chrome-devtools__hover | 悬停在元素上 |
mcp__chrome-devtools__drag | 将元素拖拽到另一个元素 |
mcp__chrome-devtools__press_key | 按下按键或组合键 |
mcp__chrome-devtools__evaluate_script | 执行 JavaScript |
mcp__chrome-devtools__handle_dialog | 接受/关闭对话框 |
mcp__chrome-devtools__upload_file | 通过输入框上传文件 |
mcp__chrome-devtools__wait_for | 等待文本出现 |
mcp__chrome-devtools__resize_page | 调整浏览器窗口大小 |
mcp__chrome-devtools__emulate | 设备/网络/地理位置模拟 |
mcp__chrome-devtools__list_console_messages | 列出控制台输出 |
mcp__chrome-devtools__get_console_message | 获取消息详情 |
mcp__chrome-devtools__list_network_requests | 列出网络请求 |
mcp__chrome-devtools__get_network_request | 获取请求/响应详情 |
mcp__chrome-devtools__performance_start_trace | 开始性能录制 |
mcp__chrome-devtools__performance_stop_trace | 停止性能录制 |
mcp__chrome-devtools__performance_analyze_insight | 分析性能洞察 |
--chrome 标志)| 工具 | 描述 |
|---|---|
mcp__claude-in-chrome__tabs_context_mcp | 获取标签页上下文(首先调用!) |
mcp__claude-in-chrome__tabs_create_mcp | 创建新标签页 |
mcp__claude-in-chrome__navigate | 导航到 URL |
mcp__claude-in-chrome__read_page | 获取可访问性树 |
mcp__claude-in-chrome__find | 通过描述查找元素 |
mcp__claude-in-chrome__get_page_text | 提取页面文本 |
mcp__claude-in-chrome__computer | 点击、输入、截图、滚动 |
mcp__claude-in-chrome__form_input | 填写表单字段 |
mcp__claude-in-chrome__fill_form | 填写多个字段 |
mcp__claude-in-chrome__javascript_tool | 执行 JavaScript |
mcp__claude-in-chrome__read_console_messages | 读取控制台日志 |
mcp__claude-in-chrome__read_network_requests | 读取网络请求 |
mcp__claude-in-chrome__resize_window | 调整浏览器窗口大小 |
mcp__claude-in-chrome__upload_image | 上传图片到元素 |
mcp__claude-in-chrome__gif_creator | 录制/导出 GIF |
mcp__claude-in-chrome__shortcuts_list | 列出可用快捷方式 |
mcp__claude-in-chrome__shortcuts_execute | 执行快捷方式 |
mcp__claude-in-chrome__update_plan | 展示计划以供批准 |
此技能自动分配给:
有关有效使用此技能的指导,请参阅相应的工作流:
.claude/workflows/chrome-browser-skill-workflow.md/chrome-browser)两种集成选项:
--chrome 标志)- 用于需要身份验证的应用工作流、GIF 录制该工作流提供了调用方法、智能体分配和内存集成模式的示例。
症状:使用 --chrome 标志时,工具返回“浏览器扩展未连接”错误,尽管扩展已安装。
根本原因:Claude.app(桌面版)和 Claude Code 注册了竞争性的原生消息主机。当两者都安装时,Chrome 扩展会连接到最后注册的那个,导致连接失败。
诊断:
%APPDATA%\Claude\ChromeNativeHost\com.anthropic.claude_browser_extension.json~/Library/Application Support/Claude/ChromeNativeHost/已知错误:此问题在 GitHub issues 中有记录:
解决方法(macOS):
# Disable Claude.app's native host (keep file for restoration)
cd ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/
mv com.anthropic.claude_browser_extension.json com.anthropic.claude_browser_extension.json.disabled
# Restart Chrome completely (quit and reopen)
# Then start Claude Code with --chrome flag
解决方法(Windows):未完全记录。潜在方法:
# Rename the config to disable Claude.app's registration
cd $env:APPDATA\Claude\ChromeNativeHost
ren com.anthropic.claude_browser_extension.json com.anthropic.claude_browser_extension.json.disabled
# Restart Chrome and try again
替代方案:改用 Chrome DevTools MCP - 它无需扩展即可工作,并为大多数用例提供类似功能。
症状:触发 alert/confirm/prompt 后,所有浏览器工具停止响应。
原因:JavaScript 模态对话框会阻塞所有浏览器事件,包括扩展通信。
修复:用户必须在浏览器中手动关闭对话框。避免在自动化脚本中触发对话框。
开始前:
cat .claude/context/memory/learnings.md
完成后:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.md假设中断:您的上下文可能会重置。如果它不在内存中,则表示未发生。
每周安装次数
144
仓库
GitHub Stars
17
首次出现
Jan 29, 2026
安全审计
安装于
github-copilot143
gemini-cli142
cursor142
opencode141
codex141
amp141
Standalone script : No download; the skill invokes .claude/tools/chrome-browser/chrome-browser.cjs (Node.js v18+ required).
MCP integrations (for full automation):
--chrome when needed.Testing: Test user-visible behavior, not implementation. Isolate tests (own storage/cookies); use before/after hooks for login or setup. Mock third-party networks instead of depending on live services.
DevTools Recorder: Record flows in Recorder panel; export as JSON or test scripts (Puppeteer, Nightwatch). Replay with Puppeteer Replay in CI. Use for performance measurement of user flows.
Hacks: Prefer Chrome DevTools MCP for testing/debugging (always on); use Claude-in-Chrome for authenticated sessions (GIF, forms). Limit GIF frames (e.g. 100) to avoid memory issues. Use take_snapshot for structure; evaluate_script for custom checks.
No official cert. Chrome for Developers – DevTools. Frontend Masters / Udemy “Mastering Chrome DevTools.” Skill data: Test user-visible behavior; isolate tests; Recorder + Puppeteer Replay; performance tracing.
Suggested hooks: Optional: post-test hook to capture screenshots on failure. Use when qa or frontend-pro is routed for browser testing (add chrome-browser to contextual: browser_testing or similar).
Workflows: Use with qa (add to contextual) or frontend-pro for E2E/browser flows. Flow: open URL → interact (click/fill) → snapshot or assert. See .claude/workflows/chrome-browser-skill-workflow.md.
| Feature | Chrome DevTools MCP | Claude-in-Chrome |
|---|---|---|
| Status | ✅ Always available | ⚠️ Requires --chrome flag |
| Activation | Automatic (built-in) | claude --chrome + extension |
| Auth sessions | ❌ Fresh browser | ✅ Uses your logins |
| Performance tracing | ✅ Full Core Web Vitals | ❌ Not available |
| Network inspection | ✅ Detailed with body access | ✅ Basic |
| Device emulation | ✅ Mobile, geolocation, CPU | ❌ Limited |
Chrome browser automation can record GIF videos. To prevent memory exhaustion:
Frame tracking:
Need to test/debug a public site? → Chrome DevTools MCP
Need performance analysis? → Chrome DevTools MCP
Need to access authenticated apps? → Claude-in-Chrome (--chrome)
Need to record a demo GIF? → Claude-in-Chrome (--chrome)
Need to interact with Google Docs? → Claude-in-Chrome (--chrome)
Need device/network emulation? → Chrome DevTools MCP
Claude-in-Chrome:
No setup required - these tools work immediately.
// List all open pages
mcp__chrome - devtools__list_pages();
// Select a page to work with
mcp__chrome - devtools__select_page({ pageId: 1 });
// Create a new page
mcp__chrome - devtools__new_page({ url: 'https://example.com' });
// Navigate to URL
mcp__chrome - devtools__navigate_page({ url: 'https://example.com' });
// Take accessibility snapshot (get element UIDs)
mcp__chrome - devtools__take_snapshot();
// Click element by UID from snapshot
mcp__chrome - devtools__click({ uid: 'ref_123' });
// Fill form field
mcp__chrome - devtools__fill({ uid: 'ref_456', value: 'test@example.com' });
// Fill entire form
mcp__chrome -
devtools__fill_form({
elements: [
{ uid: 'ref_456', value: 'test@example.com' },
{ uid: 'ref_789', value: 'password123' },
],
});
// Read console messages
mcp__chrome - devtools__list_console_messages({ types: ['error', 'warn'] });
// Get specific console message details
mcp__chrome - devtools__get_console_message({ msgid: 1 });
// List network requests
mcp__chrome - devtools__list_network_requests({ resourceTypes: ['xhr', 'fetch'] });
// Get request/response details
mcp__chrome - devtools__get_network_request({ reqid: 1 });
// Execute JavaScript
mcp__chrome -
devtools__evaluate_script({
function: '() => document.title',
});
// Start performance trace (with page reload)
mcp__chrome - devtools__performance_start_trace({ reload: true, autoStop: true });
// Or manual stop
mcp__chrome - devtools__performance_start_trace({ reload: true, autoStop: false });
// ... interact with page ...
mcp__chrome - devtools__performance_stop_trace();
// Analyze specific insight
mcp__chrome -
devtools__performance_analyze_insight({
insightSetId: 'navigation-1',
insightName: 'LCPBreakdown',
});
// Emulate mobile device
mcp__chrome -
devtools__emulate({
viewport: {
width: 375,
height: 667,
deviceScaleFactor: 2,
isMobile: true,
hasTouch: true,
},
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)...',
});
// Emulate slow network
mcp__chrome - devtools__emulate({ networkConditions: 'Slow 3G' });
// Emulate geolocation
mcp__chrome -
devtools__emulate({
geolocation: { latitude: 37.7749, longitude: -122.4194 },
});
claude --chrome// ALWAYS call first to get available tabs
mcp__claude-in-chrome__tabs_context_mcp({ createIfEmpty: true })
// Create a new tab for this conversation
mcp__claude-in-chrome__tabs_create_mcp()
// Navigate to URL
mcp__claude-in-chrome__navigate({ url: "https://docs.google.com", tabId: 123 })
// Read page structure (accessibility tree)
mcp__claude-in-chrome__read_page({ tabId: 123 })
// Find elements by natural language
mcp__claude-in-chrome__find({ query: "login button", tabId: 123 })
// Extract page text
mcp__claude-in-chrome__get_page_text({ tabId: 123 })
// Click, type, screenshot via computer tool
mcp__claude-in-chrome__computer({
action: "left_click",
coordinate: [100, 200],
tabId: 123
})
mcp__claude-in-chrome__computer({
action: "type",
text: "Hello world",
tabId: 123
})
mcp__claude-in-chrome__computer({
action: "screenshot",
tabId: 123
})
// Fill form by element reference
mcp__claude-in-chrome__form_input({
ref: "ref_1",
value: "test@example.com",
tabId: 123
})
// Start recording
mcp__claude-in-chrome__gif_creator({ action: "start_recording", tabId: 123 })
// Take screenshot to capture initial state
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// ... perform actions ...
// Take final screenshot
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Stop and export
mcp__claude-in-chrome__gif_creator({ action: "stop_recording", tabId: 123 })
mcp__claude-in-chrome__gif_creator({
action: "export",
download: true,
filename: "demo.gif",
tabId: 123
})
✓ GOOD patterns:
✗ BAD patterns:
If you hit 100 frames:
</execution_process>
<best_practices>
</best_practices>
// Create page and navigate
mcp__chrome - devtools__new_page({ url: 'https://example.com/login' });
// Take snapshot to get element UIDs
mcp__chrome - devtools__take_snapshot();
// Fill login form
mcp__chrome -
devtools__fill_form({
elements: [
{ uid: 'email_field', value: 'test@example.com' },
{ uid: 'password_field', value: 'testpass123' },
],
});
// Click submit
mcp__chrome - devtools__click({ uid: 'submit_button' });
// Check for errors
mcp__chrome - devtools__list_console_messages({ types: ['error'] });
</usage_example>
<usage_example> Performance Audit (Chrome DevTools MCP) :
// Navigate to page
mcp__chrome - devtools__navigate_page({ url: 'https://example.com' });
// Run performance trace with reload
mcp__chrome -
devtools__performance_start_trace({
reload: true,
autoStop: true,
filePath: 'trace.json.gz',
});
// Analyze LCP breakdown
mcp__chrome -
devtools__performance_analyze_insight({
insightSetId: 'navigation-1',
insightName: 'LCPBreakdown',
});
</usage_example>
<usage_example> Google Docs Editing (Claude-in-Chrome) :
// Get tab context
mcp__claude-in-chrome__tabs_context_mcp({ createIfEmpty: true })
// Navigate to Google Docs (uses your login)
mcp__claude-in-chrome__navigate({
url: "https://docs.google.com/document/d/YOUR_DOC_ID",
tabId: 123
})
// Read page to find elements
mcp__claude-in-chrome__read_page({ tabId: 123 })
// Click in document and type
mcp__claude-in-chrome__computer({
action: "left_click",
ref: "document_body",
tabId: 123
})
mcp__claude-in-chrome__computer({
action: "type",
text: "Meeting notes for today...",
tabId: 123
})
</usage_example>
<usage_example> Record Demo GIF (Claude-in-Chrome) :
// Start recording
mcp__claude-in-chrome__gif_creator({ action: "start_recording", tabId: 123 })
// Initial screenshot
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Navigate
mcp__claude-in-chrome__navigate({ url: "https://example.com/product", tabId: 123 })
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Click add to cart
mcp__claude-in-chrome__computer({ action: "left_click", ref: "add_to_cart", tabId: 123 })
mcp__claude-in-chrome__computer({ action: "screenshot", tabId: 123 })
// Stop and export
mcp__claude-in-chrome__gif_creator({ action: "stop_recording", tabId: 123 })
mcp__claude-in-chrome__gif_creator({
action: "export",
download: true,
filename: "add-to-cart-flow.gif",
options: { showClickIndicators: true, showProgressBar: true },
tabId: 123
})
</usage_example>
| Tool | Description |
|---|---|
mcp__chrome-devtools__list_pages | List all browser pages |
mcp__chrome-devtools__select_page | Select page for operations |
mcp__chrome-devtools__new_page | Create new page with URL |
mcp__chrome-devtools__close_page | Close a page |
mcp__chrome-devtools__navigate_page | Navigate, reload, back/forward |
mcp__chrome-devtools__take_snapshot |
--chrome flag)| Tool | Description |
|---|---|
mcp__claude-in-chrome__tabs_context_mcp | Get tab context (call first!) |
mcp__claude-in-chrome__tabs_create_mcp | Create new tab |
mcp__claude-in-chrome__navigate | Navigate to URL |
mcp__claude-in-chrome__read_page | Get accessibility tree |
mcp__claude-in-chrome__find | Find elements by description |
mcp__claude-in-chrome__get_page_text |
This skill is automatically assigned to:
For guidance on using this skill effectively, see the corresponding workflow:
.claude/workflows/chrome-browser-skill-workflow.md/chrome-browser)Two Integration Options:
--chrome flag) - For authenticated app workflows, GIF recordingThe workflow provides examples for invocation methods, agent assignment, and memory integration patterns.
Symptom : When using --chrome flag, tools return "Browser extension is not connected" error despite extension being installed.
Root Cause : Claude.app (desktop) and Claude Code register competing native messaging hosts. When both are installed, the Chrome extension connects to whichever registered last, causing connection failures.
Diagnosis :
%APPDATA%\Claude\ChromeNativeHost\com.anthropic.claude_browser_extension.json~/Library/Application Support/Claude/ChromeNativeHost/Known Bug : This is documented in GitHub issues:
Workaround (macOS) :
# Disable Claude.app's native host (keep file for restoration)
cd ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/
mv com.anthropic.claude_browser_extension.json com.anthropic.claude_browser_extension.json.disabled
# Restart Chrome completely (quit and reopen)
# Then start Claude Code with --chrome flag
Workaround (Windows) : Not fully documented. Potential approach:
# Rename the config to disable Claude.app's registration
cd $env:APPDATA\Claude\ChromeNativeHost
ren com.anthropic.claude_browser_extension.json com.anthropic.claude_browser_extension.json.disabled
# Restart Chrome and try again
Alternative : Use Chrome DevTools MCP instead - it works without the extension and provides similar functionality for most use cases.
Symptom : After triggering alert/confirm/prompt, all browser tools stop responding.
Cause : JavaScript modal dialogs block all browser events including extension communication.
Fix : User must manually dismiss the dialog in the browser. Avoid triggering dialogs in automation scripts.
Before starting:
cat .claude/context/memory/learnings.md
After completing:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.mdASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.
Weekly Installs
144
Repository
GitHub Stars
17
First Seen
Jan 29, 2026
Security Audits
Gen Agent Trust HubPassSocketWarnSnykFail
Installed on
github-copilot143
gemini-cli142
cursor142
opencode141
codex141
amp141
GitHub Actions 官方文档查询助手 - 精准解答 CI/CD 工作流问题
45,200 周安装
| GIF recording | ❌ No | ✅ Yes (100 frame limit) |
| Page text extraction | Via snapshot | ✅ Dedicated tool |
| Best for | Testing, debugging, performance | Authenticated workflows, demos |
| Get accessibility tree with UIDs |
mcp__chrome-devtools__take_screenshot | Capture page/element screenshot |
mcp__chrome-devtools__click | Click element by UID |
mcp__chrome-devtools__fill | Fill input/select by UID |
mcp__chrome-devtools__fill_form | Fill multiple form elements |
mcp__chrome-devtools__hover | Hover over element |
mcp__chrome-devtools__drag | Drag element to another |
mcp__chrome-devtools__press_key | Press key or combination |
mcp__chrome-devtools__evaluate_script | Execute JavaScript |
mcp__chrome-devtools__handle_dialog | Accept/dismiss dialogs |
mcp__chrome-devtools__upload_file | Upload file via input |
mcp__chrome-devtools__wait_for | Wait for text to appear |
mcp__chrome-devtools__resize_page | Resize browser window |
mcp__chrome-devtools__emulate | Device/network/geo emulation |
mcp__chrome-devtools__list_console_messages | List console output |
mcp__chrome-devtools__get_console_message | Get message details |
mcp__chrome-devtools__list_network_requests | List network requests |
mcp__chrome-devtools__get_network_request | Get request/response details |
mcp__chrome-devtools__performance_start_trace | Start performance recording |
mcp__chrome-devtools__performance_stop_trace | Stop performance recording |
mcp__chrome-devtools__performance_analyze_insight | Analyze performance insight |
| Extract page text |
mcp__claude-in-chrome__computer | Click, type, screenshot, scroll |
mcp__claude-in-chrome__form_input | Fill form field |
mcp__claude-in-chrome__fill_form | Fill multiple fields |
mcp__claude-in-chrome__javascript_tool | Execute JavaScript |
mcp__claude-in-chrome__read_console_messages | Read console logs |
mcp__claude-in-chrome__read_network_requests | Read network requests |
mcp__claude-in-chrome__resize_window | Resize browser window |
mcp__claude-in-chrome__upload_image | Upload image to element |
mcp__claude-in-chrome__gif_creator | Record/export GIF |
mcp__claude-in-chrome__shortcuts_list | List available shortcuts |
mcp__claude-in-chrome__shortcuts_execute | Execute shortcut |
mcp__claude-in-chrome__update_plan | Present plan for approval |