Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Chrome DevTools MCP ile browser debugging. Console, network, performance, DOM analizi.
.claude/skills/browser-debugging/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 234% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 168% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -23% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 450% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 136% | 0% |
bash# NPM ile npm install -g @anthropic/chrome-devtools-mcp # veya npx ile (kurulum gerektirmez) npx @anthropic/chrome-devtools-mcp
json{ "mcpServers": { "chrome-devtools": { "command": "npx", "args": ["-y", "@anthropic/chrome-devtools-mcp"], "env": { "CHROME_DEVTOOLS_PORT": "9222" } } } }
bash# macOS /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port=9222 \ --user-data-dir=/tmp/chrome-debug # Linux google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug # Headless mod google-chrome --headless --remote-debugging-port=9222
devtools.get_console_logs({
level: "error", // log | warn | error | info | debug
limit: 50,
clear_after: false
})| Seviye | Anlam | Aksiyon | |--------|-------|---------| | error | Runtime hatasi | HEMEN fix et | | warn | Potansiyel sorun | Incele, gerekiyorsa fix | | info | Bilgi mesaji | Debug icin kullan | | log | Debug output | Temizle (production'da olmamali) |
// TypeError: Cannot read properties of undefined
→ Null check eksik, optional chaining kullan: obj?.prop
// CORS error
→ Backend'de Access-Control-Allow-Origin header eksik
// Uncaught Promise rejection
→ async/await'te try/catch eksik
// React: Each child should have a unique key
→ map() icinde key={unique_id} ekle
// React: Maximum update depth exceeded
→ useEffect dependency array'de sonsuz dongudevtools.get_network_requests({
url_filter: "/api/",
method: "POST",
status_code: 500,
limit: 20
})devtools.get_request_detail({
request_id: "req-123",
include_body: true,
include_headers: true
})| Metrik | Iyi | Kotu | Kontrol | |--------|-----|------|---------| | TTFB | <200ms | >600ms | Server response suresi | | Download | <100ms | >500ms | Payload buyuklugu | | Total time | <500ms | >2s | Butun pipeline | | Payload size | <100KB | >1MB | Compression, pagination | | Request count | <50/sayfa | >100/sayfa | Batching, caching |
Status 401 → Token expired, auth flow kontrol et
Status 403 → Permission eksik, RBAC kontrol et
Status 404 → URL yanlis, routing kontrol et
Status 429 → Rate limited, backoff ekle
Status 500 → Server error, backend log'lara bak
Status 502 → Proxy/gateway sorunu, infra kontrol et
CORS error → Preflight (OPTIONS) basarisiz
Mixed content → HTTPS sayfada HTTP requestdevtools.get_performance_metrics({
include_timing: true,
include_memory: true
})devtools.evaluate_expression({
expression: `
new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
console.log(entry.name, entry.value || entry.startTime);
}
}).observe({ type: 'largest-contentful-paint', buffered: true });
`
})| Metrik | Hedef | Olcum | |--------|-------|-------| | LCP | <2.5s | En buyuk elementin renderlanma suresi | | FID/INP | <100ms | Ilk input'a tepki suresi | | CLS | <0.1 | Gorsel kayma skoru | | FCP | <1.8s | Ilk icerigin gorundugu an | | TTI | <3.8s | Tamamen interaktif olma suresi | | TBT | <200ms | Main thread bloklanma suresi |
1. Layout thrashing: DOM oku/yaz/oku/yaz (batch et)
2. Forced reflow: offsetHeight gibi prop'lar reflow tetikler
3. Unoptimized images: WebP/AVIF kullan, lazy load et
4. Render blocking CSS: Critical CSS inline, gerisi async
5. Long tasks: 50ms+ main thread task'lari parcala
6. Excessive DOM: 1500+ node varsa virtual scroll kullandevtools.query_selector({
selector: "#main-content .card",
include_styles: true,
include_attributes: true
})devtools.get_dom_tree({
depth: 3,
root_selector: "#app"
})devtools.evaluate_expression({
expression: "document.querySelectorAll('*').length"
})
// 1500+ ise performance sorunudevtools.get_computed_styles({
selector: ".problematic-element",
properties: ["display", "position", "z-index", "overflow"]
})devtools.evaluate_expression({
expression: "JSON.stringify(window.__NEXT_DATA__, null, 2)"
})devtools.evaluate_expression({
expression: `
// React DevTools hook
const fiber = document.querySelector('#root')._reactRootContainer?._internalRoot?.current;
JSON.stringify(fiber?.memoizedState, null, 2);
`
})devtools.evaluate_expression({
expression: `
const el = document.querySelector('.button');
getEventListeners(el);
`
})// Conditional breakpoint
devtools.set_breakpoint({
url: "main.js",
line: 42,
condition: "user.role === 'admin'"
})
// DOM breakpoint
devtools.set_dom_breakpoint({
selector: "#dynamic-content",
type: "subtree-modifications" // subtree-modifications | attribute-modifications | node-removal
})devtools.take_heap_snapshot({
include_summary: true
})devtools.get_memory_info()
// Response: { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize }1. Baslangic heap snapshot al
2. Suphelenen aksiyonu yap (navigate, modal ac/kapa)
3. GC tetikle (devtools uzerinden)
4. Ikinci heap snapshot al
5. Comparison view'da "Detached" DOM node'lari ara
6. Retained size buyuk olan objeleri incele| Sebep | Cozum | |-------|-------| | Event listener temizlenmemis | useEffect return cleanup | | setInterval temizlenmemis | clearInterval in cleanup | | Detached DOM | removeChild + null referans | | Closure capturing | WeakRef veya scope daralt | | Global degisken birikimi | Scope'a al, gereksizini sil | | WebSocket kapatilmamis | close() in cleanup |
devtools.get_css_coverage({
url_filter: "styles.css"
})
// Kullanilmayan CSS oranini goster// Overflow tespiti
devtools.evaluate_expression({
expression: `
[...document.querySelectorAll('*')].filter(el => {
return el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight;
}).map(el => ({
tag: el.tagName,
class: el.className,
overflow: { w: el.scrollWidth - el.clientWidth, h: el.scrollHeight - el.clientHeight }
}));
`
})devtools.evaluate_expression({
expression: `
[...document.querySelectorAll('*')]
.filter(el => getComputedStyle(el).zIndex !== 'auto')
.map(el => ({
tag: el.tagName,
class: el.className,
zIndex: getComputedStyle(el).zIndex,
position: getComputedStyle(el).position
}))
.sort((a, b) => Number(b.zIndex) - Number(a.zIndex));
`
})| Anti-Pattern | Dogru Yol | |-------------|-----------| | !important kullanimi | Specificity'yi artir | | Inline style | Class/utility kullan | | Magic number z-index | z-index scale tanimla | | Fixed px font size | rem/em kullan | | selector | Spesifik selector |
devtools.run_lighthouse({
url: "http://localhost:3000",
categories: ["performance", "accessibility", "best-practices", "seo"],
form_factor: "mobile" // mobile | desktop
})| Kategori | Minimum | Hedef | |----------|---------|-------| | Performance | 70 | 90+ | | Accessibility | 80 | 100 | | Best Practices | 80 | 100 | | SEO | 80 | 100 |
devtools.evaluate_expression({
expression: `
// Eksik alt text
[...document.querySelectorAll('img:not([alt])')].length;
`
})
devtools.evaluate_expression({
expression: `
// Eksik label
[...document.querySelectorAll('input:not([aria-label]):not([id])')].length;
`
})devtools.get_page_info()
// Response: url, title, status, loading_state// Tum tab'lari listele
devtools.list_targets()
// Tab'a baglan
devtools.attach_to_target({ target_id: "target-123" })devtools.take_screenshot({
format: "png",
quality: 80,
full_page: true
})devtools.get_cookies({
url: "http://localhost:3000"
})devtools.evaluate_expression({
expression: `
({
localStorage: Object.keys(localStorage).reduce((acc, key) => {
acc[key] = localStorage.getItem(key);
return acc;
}, {}),
sessionStorage: Object.keys(sessionStorage).reduce((acc, key) => {
acc[key] = sessionStorage.getItem(key);
return acc;
}, {})
})
`
})1. REPRODUCE
- Console log'lari oku (error seviyesi)
- Network request'leri incele (4xx/5xx)
- Screenshot al (goruntuyu dogrula)
2. ISOLATE
- DOM inspect et (element var mi, dogru mu)
- CSS kontrol et (gorunum sorunu mu)
- JS evaluate et (state dogru mu)
- Network filtrele (hangi request basarisiz)
3. DIAGNOSE
- Performance profil al (yavas mi)
- Memory kontrol et (leak var mi)
- Lighthouse calistir (genel skor)
4. FIX & VERIFY
- Kodu duzelt
- Browser'da tekrar kontrol et
- Console temiz mi
- Network basarili mi
- Performance iyilesti miMevcut browser-use MCP ile birlikte kullanim:
browser-use: Sayfa navigasyon, form doldurma, tikla, icerik cek
chrome-devtools: Console, network, performance, DOM, memory analizi
Workflow:
1. browser-use ile sayfaya git
2. chrome-devtools ile console error kontrol
3. chrome-devtools ile network analiz
4. browser-use ile interaksiyon yap
5. chrome-devtools ile performance olc| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 8,430 | 11,098 | +32% | 1 | 1 | 0% | 1,585 | 5,297 | +234% | 0 | 0 | — |
case-12 | pass→pass | 11,228 | 8,310 | -26% | 1 | 1 | 0% | 1,989 | 4,707 | +137% | 0 | 0 | — |
case-02 | fail→fail | 10,638 | 13,348 | +25% | 1 | 1 | 0% | 2,221 | 6,057 | +173% | 0 | 0 | — |
case-03 | pass→pass | 19,004 | 19,013 | +0% | 1 | 1 | 0% | 3,556 | 6,649 | +87% | 0 | 0 | — |
case-04 | pass→pass | 13,579 | 16,013 | +18% | 1 | 1 | 0% | 2,847 | 6,646 | +133% | 0 | 0 | — |
case-05 | pass→pass | 13,401 | 11,855 | -12% | 1 | 1 | 0% | 2,152 | 5,471 | +154% | 0 | 0 | — |
case-06 | fail→pass | 10,499 | 3,908 | -63% | 1 | 1 | 0% | 1,526 | 4,088 | +168% | 0 | 0 | — |
case-07 | pass→pass | 5,815 | 4,093 | -30% | 1 | 1 | 0% | 1,182 | 3,993 | +238% | 0 | 0 | — |
case-08 | fail→pass | 26,965 | 2,595 | -90% | 1 | 1 | 0% | 4,756 | 3,655 | -23% | 0 | 0 | — |
case-09 | pass→pass | 11,785 | 12,896 | +9% | 1 | 1 | 0% | 2,105 | 5,638 | +168% | 0 | 0 | — |
case-10 | pass→pass | 11,598 | 7,383 | -36% | 1 | 1 | 0% | 1,955 | 4,365 | +123% | 0 | 0 | — |
case-11 | pass→pass | 4,765 | 4,040 | -15% | 1 | 1 | 0% | 876 | 3,897 | +345% | 0 | 0 | — |
case-13 | fail→pass | 4,578 | 2,688 | -41% | 1 | 1 | 0% | 692 | 3,804 | +450% | 0 | 0 | — |
case-14 | fail→pass | 9,746 | 6,355 | -35% | 1 | 1 | 0% | 1,809 | 4,275 | +136% | 0 | 0 | — |
case-15 | pass→pass | 13,069 | 13,667 | +5% | 1 | 1 | 0% | 2,384 | 5,670 | +138% | 0 | 0 | — |
case-16 | pass→pass | 13,506 | 10,579 | -22% | 1 | 1 | 0% | 2,416 | 5,245 | +117% | 0 | 0 | — |
case-17 | fail→fail | 6,566 | 2,286 | -65% | 1 | 1 | 0% | 1,300 | 3,622 | +179% | 0 | 0 | — |
case-18 | pass→pass | 9,687 | 3,007 | -69% | 1 | 1 | 0% | 1,962 | 3,876 | +98% | 0 | 0 | — |
case-19 | fail→pass | 7,833 | 2,669 | -66% | 1 | 1 | 0% | 1,736 | 3,768 | +117% | 0 | 0 | — |
case-20 | pass→pass | 4,619 | 3,655 | -21% | 1 | 1 | 0% | 852 | 3,773 | +343% | 0 | 0 | — |
case-21 | pass→pass | 8,976 | 7,446 | -17% | 1 | 1 | 0% | 1,583 | 4,574 | +189% | 0 | 0 | — |
case-22 | fail→pass | 9,402 | 4,472 | -52% | 1 | 1 | 0% | 2,013 | 4,073 | +102% | 0 | 0 | — |
case-23 | pass→pass | 8,529 | 11,649 | +37% | 1 | 1 | 0% | 1,567 | 5,382 | +243% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +30 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/29/2026 | +41% |
Other measured skills in the registry, with their headline benchmark lift.