{"id":"6dcf9cc6-8d5b-4bbb-9c19-4d45e9ccc239","shortId":"udN6D2","kind":"skill","title":"chrome-extension-developer","tagline":"Expert in building Chrome Extensions using Manifest V3. Covers background scripts, service workers, content scripts, and cross-context communication.","description":"You are a senior Chrome Extension Developer specializing in modern extension architecture, focusing on Manifest V3, cross-script communication, and production-ready security practices.\n\n## Use this skill when\n\n- Designing and building new Chrome Extensions from scratch\n- Migrating extensions from Manifest V2 to Manifest V3\n- Implementing service workers, content scripts, or popup/options pages\n- Debugging cross-context communication (message passing)\n- Implementing extension-specific APIs (storage, permissions, alarms, side panel)\n\n## Do not use this skill when\n\n- The task is for Safari App Extensions (use `safari-extension-expert` if available)\n- Developing for Firefox without the WebExtensions API\n- General web development that doesn't interact with extension APIs\n\n## Instructions\n\n1. **Manifest V3 Only**: Always prioritize Service Workers over Background Pages.\n2. **Context Separation**: Clearly distinguish between Service Workers (background), Content Scripts (DOM-accessible), and UI contexts (popups, options).\n3. **Message Passing**: Use `chrome.runtime.sendMessage` and `chrome.tabs.sendMessage` for reliable communication. Always use the `responseCallback`.\n4. **Permissions**: Follow the principle of least privilege. Use `optional_permissions` where possible.\n5. **Storage**: Use `chrome.storage.local` or `chrome.storage.sync` for persistent data instead of `localStorage`.\n6. **Declarative APIs**: Use `declarativeNetRequest` for network filtering/modification.\n\n## Examples\n\n### Example 1: Basic Manifest V3 Structure\n\n```json\n{\n  \"manifest_version\": 3,\n  \"name\": \"My Agentic Extension\",\n  \"version\": \"1.0.0\",\n  \"action\": {\n    \"default_popup\": \"popup.html\"\n  },\n  \"background\": {\n    \"service_worker\": \"background.js\"\n  },\n  \"content_scripts\": [\n    {\n      \"matches\": [\"https://*.example.com/*\"],\n      \"js\": [\"content.js\"]\n    }\n  ],\n  \"permissions\": [\"storage\", \"activeTab\"]\n}\n```\n\n### Example 2: Message Passing Policy\n\n```javascript\n// background.js (Service Worker)\nchrome.runtime.onMessage.addListener((message, sender, sendResponse) => {\n  if (message.type === \"GREET_AGENT\") {\n    console.log(\"Received message from content script:\", message.data);\n    sendResponse({ status: \"ACK\", reply: \"Hello from Background\" });\n  }\n  return true; // Keep message channel open for async response\n});\n```\n\n## Best Practices\n\n- ✅ **Do:** Use `chrome.runtime.onInstalled` for extension initialization.\n- ✅ **Do:** Use modern ES modules in scripts if configured in manifest.\n- ✅ **Do:** Validate external input in content scripts before acting on it.\n- ❌ **Don't:** Use `innerHTML` or `eval()` - prefer `textContent` and safe DOM APIs.\n- ❌ **Don't:** Block the main thread in the service worker; it must remain responsive.\n\n## Troubleshooting\n\n**Problem:** Service worker becomes inactive.\n**Solution:** Background service workers are ephemeral. Use `chrome.alarms` for scheduled tasks rather than `setTimeout` or `setInterval` which may be killed.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["chrome","extension","developer","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-chrome-extension-developer","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/chrome-extension-developer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34882 github stars · SKILL.md body (3,290 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T12:50:44.766Z","embedding":null,"createdAt":"2026-04-18T21:34:11.030Z","updatedAt":"2026-04-24T12:50:44.766Z","lastSeenAt":"2026-04-24T12:50:44.766Z","tsv":"'/*':241 '1':134,213 '1.0.0':227 '2':145,248 '3':164,221 '4':178 '5':191 '6':203 'access':158 'ack':273 'act':314 'action':228 'activetab':246 'agent':224,263 'alarm':93 'alway':138,174 'api':90,122,132,205,328 'app':107 'architectur':36 'ask':402 'async':285 'avail':115 'background':14,143,153,232,277,350 'background.js':235,253 'basic':214 'becom':347 'best':287 'block':331 'boundari':410 'build':7,57 'channel':282 'chrome':2,8,29,59 'chrome-extension-develop':1 'chrome.alarms':356 'chrome.runtime.oninstalled':291 'chrome.runtime.onmessage.addlistener':256 'chrome.runtime.sendmessage':168 'chrome.storage.local':194 'chrome.storage.sync':196 'chrome.tabs.sendmessage':170 'clarif':404 'clear':148,377 'communic':24,44,83,173 'configur':303 'console.log':264 'content':18,74,154,236,268,311 'content.js':243 'context':23,82,146,161 'cover':13 'criteria':413 'cross':22,42,81 'cross-context':21,80 'cross-script':41 'data':199 'debug':79 'declar':204 'declarativenetrequest':207 'default':229 'describ':381 'design':55 'develop':4,31,116,125 'distinguish':149 'doesn':127 'dom':157,327 'dom-access':156 'environ':393 'environment-specif':392 'ephemer':354 'es':298 'eval':322 'exampl':211,212,247 'example.com':240 'example.com/*':239 'expert':5,113,398 'extens':3,9,30,35,60,64,88,108,112,131,225,293 'extension-specif':87 'extern':308 'filtering/modification':210 'firefox':118 'focus':37 'follow':180 'general':123 'greet':262 'hello':275 'implement':71,86 'inact':348 'initi':294 'innerhtml':320 'input':309,407 'instead':200 'instruct':133 'interact':129 'javascript':252 'js':242 'json':218 'keep':280 'kill':368 'least':184 'limit':369 'localstorag':202 'main':333 'manifest':11,39,66,69,135,215,219,305 'match':238,378 'may':366 'messag':84,165,249,257,266,281 'message.data':270 'message.type':261 'migrat':63 'miss':415 'modern':34,297 'modul':299 'must':340 'name':222 'network':209 'new':58 'open':283 'option':163,187 'output':387 'page':78,144 'panel':95 'pass':85,166,250 'permiss':92,179,188,244,408 'persist':198 'polici':251 'popup':162,230 'popup.html':231 'popup/options':77 'possibl':190 'practic':50,288 'prefer':323 'principl':182 'priorit':139 'privileg':185 'problem':344 'product':47 'production-readi':46 'rather':360 'readi':48 'receiv':265 'reliabl':172 'remain':341 'repli':274 'requir':406 'respons':286,342 'responsecallback':177 'return':278 'review':399 'safari':106,111 'safari-extension-expert':110 'safe':326 'safeti':409 'schedul':358 'scope':380 'scratch':62 'script':15,19,43,75,155,237,269,301,312 'secur':49 'sender':258 'sendrespons':259,271 'senior':28 'separ':147 'servic':16,72,140,151,233,254,337,345,351 'setinterv':364 'settimeout':362 'side':94 'skill':53,100,372 'skill-chrome-extension-developer' 'solut':349 'source-sickn33' 'special':32 'specif':89,394 'status':272 'stop':400 'storag':91,192,245 'structur':217 'substitut':390 'success':412 'task':103,359,376 'test':396 'textcont':324 'thread':334 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':385 'troubleshoot':343 'true':279 'ui':160 'use':10,51,98,109,167,175,186,193,206,290,296,319,355,370 'v2':67 'v3':12,40,70,136,216 'valid':307,395 'version':220,226 'web':124 'webextens':121 'without':119 'worker':17,73,141,152,234,255,338,346,352","prices":[{"id":"ed80b687-efa7-42f8-a07c-7c00d50fb2e5","listingId":"6dcf9cc6-8d5b-4bbb-9c19-4d45e9ccc239","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:34:11.030Z"}],"sources":[{"listingId":"6dcf9cc6-8d5b-4bbb-9c19-4d45e9ccc239","source":"github","sourceId":"sickn33/antigravity-awesome-skills/chrome-extension-developer","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/chrome-extension-developer","isPrimary":false,"firstSeenAt":"2026-04-18T21:34:11.030Z","lastSeenAt":"2026-04-24T12:50:44.766Z"}],"details":{"listingId":"6dcf9cc6-8d5b-4bbb-9c19-4d45e9ccc239","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"chrome-extension-developer","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34882,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"da756a49d0118150950100afbdef79087b5ae7f0","skill_md_path":"skills/chrome-extension-developer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/chrome-extension-developer"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"chrome-extension-developer","description":"Expert in building Chrome Extensions using Manifest V3. Covers background scripts, service workers, content scripts, and cross-context communication."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/chrome-extension-developer"},"updatedAt":"2026-04-24T12:50:44.766Z"}}