Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Expert in building Chrome Extensions using Manifest V3. Covers background scripts, service workers, content scripts, and cross-context communication.
.claude/skills/chrome-extension-developer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✓→✗ | ▼ Worse | -51% | 0% |
| case-18 | ✓→✓ | = Same ✓ | 25% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 81% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 84% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 31% | 0% |
You are a senior Chrome Extension Developer specializing in modern extension architecture, focusing on Manifest V3, cross-script communication, and production-ready security practices.
safari-extension-expert if available)chrome.runtime.sendMessage and chrome.tabs.sendMessage for reliable communication. Always use the responseCallback.optional_permissions where possible.chrome.storage.local or chrome.storage.sync for persistent data instead of localStorage.declarativeNetRequest for network filtering/modification.json{ "manifest_version": 3, "name": "My Agentic Extension", "version": "1.0.0", "action": { "default_popup": "popup.html" }, "background": { "service_worker": "background.js" }, "content_scripts": [ { "matches": ["https://*.example.com/*"], "js": ["content.js"] } ], "permissions": ["storage", "activeTab"] }
javascript// background.js (Service Worker) chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { if (message.type === "GREET_AGENT") { console.log("Received message from content script:", message.data); sendResponse({ status: "ACK", reply: "Hello from Background" }); } return true; // Keep message channel open for async response });
chrome.runtime.onInstalled for extension initialization.innerHTML or eval() - prefer textContent and safe DOM APIs. <!-- security-allowlist: defensive extension guidance -->Problem: Service worker becomes inactive. Solution: Background service workers are ephemeral. Use chrome.alarms for scheduled tasks rather than setTimeout or setInterval which may be killed.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | pass→pass | 6,798 | 4,988 | -27% | 1 | 1 | 0% | 1,354 | 1,694 | +25% | 0 | 0 | — |
case-01 | pass→pass | 18,238 | 4,087 | -78% | 1 | 1 | 0% | 851 | 1,539 | +81% | 0 | 0 | — |
case-02 | pass→pass | 3,436 | 3,481 | +1% | 1 | 1 | 0% | 695 | 1,282 | +84% | 0 | 0 | — |
case-03 | pass→pass | 6,417 | 4,403 | -31% | 1 | 1 | 0% | 1,220 | 1,603 | +31% | 0 | 0 | — |
case-04 | pass→pass | 8,178 | 8,170 | -0% | 1 | 1 | 0% | 1,641 | 2,310 | +41% | 0 | 0 | — |
case-05 | pass→pass | 8,621 | 6,123 | -29% | 1 | 1 | 0% | 1,505 | 2,008 | +33% | 0 | 0 | — |
case-06 | pass→pass | 9,383 | 8,238 | -12% | 1 | 1 | 0% | 1,811 | 2,393 | +32% | 0 | 0 | — |
case-07 | pass→pass | 7,981 | 5,236 | -34% | 1 | 1 | 0% | 1,595 | 1,750 | +10% | 0 | 0 | — |
case-08 | pass→pass | 7,766 | 5,173 | -33% | 1 | 1 | 0% | 1,595 | 1,736 | +9% | 0 | 0 | — |
case-09 | pass→pass | 20,658 | 5,450 | -74% | 1 | 1 | 0% | 1,494 | 1,756 | +18% | 0 | 0 | — |
case-10 | pass→pass | 9,967 | 7,062 | -29% | 1 | 1 | 0% | 1,563 | 2,116 | +35% | 0 | 0 | — |
case-11 | pass→pass | 10,187 | 8,249 | -19% | 1 | 1 | 0% | 1,975 | 2,479 | +26% | 0 | 0 | — |
case-12 | pass→pass | 9,571 | 5,567 | -42% | 1 | 1 | 0% | 1,739 | 1,857 | +7% | 0 | 0 | — |
case-13 | pass→pass | 6,768 | 7,045 | +4% | 1 | 1 | 0% | 1,135 | 1,844 | +62% | 0 | 0 | — |
case-14 | pass→pass | 3,533 | 3,924 | +11% | 1 | 1 | 0% | 680 | 1,508 | +122% | 0 | 0 | — |
case-15 | pass→pass | 9,823 | 8,229 | -16% | 1 | 1 | 0% | 1,743 | 2,280 | +31% | 0 | 0 | — |
case-16 | pass→pass | 11,475 | 15,033 | +31% | 1 | 1 | 0% | 2,261 | 1,913 | -15% | 0 | 0 | — |
case-17 | pass→pass | 8,807 | 6,227 | -29% | 1 | 1 | 0% | 1,722 | 1,937 | +12% | 0 | 0 | — |
case-19 | pass→pass | 2,846 | 3,017 | +6% | 1 | 1 | 0% | 511 | 1,309 | +156% | 0 | 0 | — |
case-20 | pass→fail | 14,124 | 15,687 | +11% | 1 | 1 | 0% | 2,752 | 1,355 | -51% | 0 | 0 | — |
case-21 | pass→pass | 10,242 | 8,124 | -21% | 1 | 1 | 0% | 2,136 | 2,381 | +11% | 0 | 0 | — |
case-22 | pass→pass | 6,374 | 6,477 | +2% | 1 | 1 | 0% | 1,181 | 1,982 | +68% | 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. 22 cases were attempted. The headline lift of -100 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/28/2026 | +13% |
Other measured skills in the registry, with their headline benchmark lift.