用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Aradotso/devtools-skills --skill kaboom-browser-ai-devtools命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | kaboom-browser-ai-devtools |
| description | Browser debugging and inspection toolkit for AI coding assistants via MCP protocol |
| triggers | ["debug browser console errors with Kaboom","capture network failures using Kaboom MCP","inspect DOM elements with Kaboom devtools","record user interactions for browser testing","generate Playwright tests from browser sessions","audit accessibility with Kaboom WCAG checks","monitor Web Vitals and performance metrics","automate browser actions via Kaboom MCP"] |
Skill by ara.so — Devtools Skills collection.
Kaboom is a browser debugging, inspection, and verification toolkit that streams console logs, network failures, exceptions, recordings, and browser evidence into MCP-compatible coding assistants. It provides real-time browser debugging without requiring --remote-debugging-port, using a standard browser extension instead.
console.log(), .warn(), .error() with full argumentsmacOS / Linux:
curl -sSL https://raw.githubusercontent.com/brennhill/Kaboom-Browser-AI-Devtools-MCP/STABLE/scripts/install.sh | bash
Windows (PowerShell):
irm https://raw.githubusercontent.com/brennhill/Kaboom-Browser-AI-Devtools-MCP/STABLE/scripts/install.ps1 | iex
This automatically:
~/.kaboom/extensiontar -xzf kaboom-*.tar.gz
chmod +x kaboom
mv kaboom /usr/local/bin/
chrome://extensions~/.kaboom/extension directoryAdd to your MCP client config:
Claude Desktop / Claude Code (claude_desktop_config.json):
{
"mcpServers": {
"kaboom": {
"command": "/usr/local/bin/kaboom",
"args": ["--mcp"]
}
}
}
Cursor (config.json in .cursor/ directory):
{
"mcpServers": {
"kaboom": {
"command": "/usr/local/bin/kaboom",
"args": ["--mcp"]
}
}
}
Zed (settings.json):
{
"context_servers": {
"kaboom": {
"command": {
"path": "/usr/local/bin/kaboom",
"args": ["--mcp"]
}
}
}
}
kaboom_console_clear — Clear all captured console logs
// No arguments required
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_console_clear"
});
kaboom_console_get — Get all captured console logs
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_console_get",
arguments: {
level: "error" // Optional: "log", "warn", "error", "info"
}
});
kaboom_network_get — Get captured network requests
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_network_get",
arguments: {
status: "failed", // "all", "failed", "success"
includeBody: true
}
});
kaboom_network_clear — Clear network capture buffer
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_network_clear"
});
kaboom_dom_query — Query DOM elements with CSS selectors
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_dom_query",
arguments: {
selector: ".error-message",
includeStyles: true,
includeAttributes: true
}
});
kaboom_dom_snapshot — Capture full DOM snapshot
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_dom_snapshot",
arguments: {
includeInlineStyles: true
}
});
kaboom_recording_start — Start recording user actions
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_start",
arguments: {
captureClicks: true,
captureInputs: true,
captureNavigation: true,
captureScrolls: true
}
});
kaboom_recording_stop — Stop and retrieve recording
const recording = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_stop"
});
// Returns array of recorded actions with selectors
kaboom_recording_generate_test — Generate Playwright test from recording
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_generate_test",
arguments: {
format: "playwright", // "playwright" or "puppeteer"
includeAssertions: true
}
});
kaboom_browser_click — Click element
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_click",
arguments: {
selector: "button[type='submit']"
}
});
kaboom_browser_type — Type into input field
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_type",
arguments: {
selector: "input[name='email']",
text: "user@example.com",
clear: true
}
});
kaboom_browser_navigate — Navigate to URL
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_navigate",
arguments: {
url: "https://example.com/dashboard",
waitForLoad: true
}
});
kaboom_browser_select — Select dropdown option
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_select",
arguments: {
selector: "select[name='country']",
value: "US"
}
});
kaboom_browser_upload — Upload file
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_upload",
arguments: {
selector: "input[type='file']",
filePath: "/path/to/file.pdf"
}
});
kaboom_a11y_audit — Run WCAG accessibility audit
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_a11y_audit",
arguments: {
standard: "WCAG2AA", // "WCAG2A", "WCAG2AA", "WCAG2AAA"
includeWarnings: true
}
});
kaboom_a11y_export — Export audit results
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_a11y_export",
arguments: {
format: "sarif" // "sarif", "json", "html"
}
});
kaboom_security_audit — Run security audit
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_security_audit",
arguments: {
checkCredentials: true,
checkPII: true,
checkHeaders: true,
checkCookies: true,
checkThirdParty: true
}
});
kaboom_vitals_get — Get Web Vitals metrics
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_vitals_get",
arguments: {
metrics: ["LCP", "CLS", "INP", "FCP"] // Optional, defaults to all
}
});
kaboom_vitals_baseline — Set performance baseline
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_vitals_baseline",
arguments: {
metric: "LCP",
threshold: 2500 // milliseconds
}
});
kaboom_annotation_enable — Enable drawing mode
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_annotation_enable"
});
kaboom_annotation_get — Get annotations with computed styles
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_annotation_get",
arguments: {
includeStyles: true
}
});
// 1. Get all error logs
const errors = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_console_get",
arguments: { level: "error" }
});
// 2. Inspect DOM at error location
const elements = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_dom_query",
arguments: {
selector: ".error-component",
includeStyles: true
}
});
// 3. Clear logs after fix
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_console_clear"
});
// 1. Get failed network requests
const failed = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_network_get",
arguments: {
status: "failed",
includeBody: true
}
});
// 2. Check for auth issues in request headers
// Analyze the response from failed requests
// 3. Clear network buffer
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_network_clear"
});
// 1. Start recording
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_start",
arguments: {
captureClicks: true,
captureInputs: true,
captureNavigation: true
}
});
// 2. User performs actions in browser...
// 3. Stop recording and get actions
const actions = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_stop"
});
// 4. Generate Playwright test
const test = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_generate_test",
arguments: {
format: "playwright",
includeAssertions: true
}
});
// Navigate to login page
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_navigate",
arguments: {
url: "https://app.example.com/login",
waitForLoad: true
}
});
// Fill in credentials
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_type",
arguments: {
selector: "input[name='email']",
text: "test@example.com"
}
});
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_type",
arguments: {
selector: "input[name='password']",
text: "testpass123"
}
});
// Submit form
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_click",
arguments: {
selector: "button[type='submit']"
}
});
// Check for errors
const errors = await use_mcp_tool({
server_name: ,
: ,
: { : }
});
// Run WCAG 2.1 AA audit
const audit = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_a11y_audit",
arguments: {
standard: "WCAG2AA",
includeWarnings: true
}
});
// Export results as SARIF
const report = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_a11y_export",
arguments: {
format: "sarif"
}
});
// Set baseline for LCP
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_vitals_baseline",
arguments: {
metric: "LCP",
threshold: 2500
}
});
// Get current metrics
const vitals = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_vitals_get"
});
// Check if LCP regressed
if (vitals.LCP > 2500) {
console.log("LCP regression detected!");
}
Use window.__kaboom in your application code for custom context:
// Add custom annotation to help AI understand context
window.__kaboom.annotate({
type: "error-boundary",
component: "CheckoutForm",
message: "Payment validation failed",
metadata: {
step: 3,
validationErrors: ["invalid_card", "expired"]
}
});
// Check if Kaboom is available
if (window.__kaboom) {
// Kaboom is active
}
# Disable telemetry
export KABOOM_TELEMETRY=off
# Custom port (default: 3333)
export KABOOM_PORT=8080
# Log level
export KABOOM_LOG_LEVEL=debug # debug, info, warn, error
# Custom extension path
export KABOOM_EXTENSION_PATH=/custom/path/to/extension
# Start MCP server
kaboom --mcp
# Custom port
kaboom --mcp --port 8080
# Enable debug logging
kaboom --mcp --debug
# Print version
kaboom --version
Check extension is loaded:
chrome://extensionsVerify server is running:
ps aux | grep kaboom
Check connection:
Clear cache and refresh:
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_console_clear"
});
Check log level filter — Make sure you're not filtering out the logs you need
Verify page is active — Kaboom only captures from the active tab
Check status filter:
// Get ALL requests, not just failed
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_network_get",
arguments: { status: "all" }
});
Verify XHR/Fetch interception — Some requests may be blocked by CSP
Check response body size — Very large bodies may be truncated
Add explicit IDs/data attributes to critical elements:
<button data-testid="submit-btn">Submit</button>
Use semantic HTML — <button> instead of <div onclick>
Manually improve selectors in generated tests after recording
Check binary path:
which kaboom
# Should output: /usr/local/bin/kaboom
Update config with full path:
{
"mcpServers": {
"kaboom": {
"command": "/usr/local/bin/kaboom",
"args": ["--mcp"]
}
}
}
Restart MCP client completely (not just reload window)
Kaboom is designed for minimal overhead, but:
127.0.0.1 onlyKABOOM_TELEMETRY=off)Generate tests with custom assertions:
const test = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_generate_test",
arguments: {
format: "playwright",
includeAssertions: true
}
});
// Add custom assertions to generated test
const customTest = test.replace(
"// end of test",
`
// Custom assertions
await expect(page.locator('.success-message')).toBeVisible();
await expect(page).toHaveURL(/.*dashboard/);
`
);
// Set up baseline thresholds
const thresholds = {
LCP: 2500,
CLS: 0.1,
INP: 200,
FCP: 1800
};
for (const [metric, threshold] of Object.entries(thresholds)) {
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_vitals_baseline",
arguments: { metric, threshold }
});
}
// Periodically check for regressions
const vitals = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_vitals_get"
});
// Flag regressions
const regressions = Object.entries(vitals)
.filter(([metric, value]) => value > thresholds[metric])
.map(([metric, value]) => `${metric}: ${value} > ${thresholds[metric]}`);
if (regressions.length > 0) {
console.log("Performance regressions detected:", regressions);
}
// Start recording
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_start",
arguments: { captureNavigation: true }
});
// Navigate through multiple pages
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_navigate",
arguments: { url: "https://example.com/page1" }
});
// Perform actions...
await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_browser_navigate",
arguments: { url: "https://example.com/page2" }
});
// More actions...
// Stop and generate comprehensive test
const recording = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_stop"
});
const test = await use_mcp_tool({
server_name: "kaboom",
tool_name: "kaboom_recording_generate_test",
arguments: {
format: "playwright",
includeAssertions:
}
});