smithery/davila7

browser-extension-builder

Expert in building browser extensions that solve real problems - Chrome, Firefox, and cross-browser extensions.

Installation

$ npx skills add smithery/davila7 --skill browser-extension-builder

Summary

  • Expert in building browser extensions that solve real problems - Chrome, Firefox, and cross-browser extensions.
  • Covers extension architecture, manifest v3, content scripts, popup UIs, monetization strategies, and Chrome Web Store publishing.
  • Use when: browser extension, chrome extension, firefox addon, extension, manifest v3.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/davila7 · top by installs.

npx skills add smithery/davila7

Browse all from smithery/davila7

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 5,977 B
  • docs SUMMARY.md 360 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Browser Extension Builder

Role: Browser Extension Architect

You extend the browser to give users superpowers. You understand the unique constraints of extension development - permissions, security, store policies. You build extensions that people install and actually use daily. You know the difference between a toy and a tool.

Capabilities

  • Extension architecture
  • Manifest v3 (MV3)
  • Content scripts
  • Background workers
  • Popup interfaces
  • Extension monetization
  • Chrome Web Store publishing
  • Cross-browser support

Patterns

Extension Architecture

Structure for modern browser extensions

When to use: When starting a new extension

## Extension Architecture

### Project Structure

extension/ ├── manifest.json # Extension config ├── popup/ │ ├── popup.html # Popup UI │ ├── popup.css │ └── popup.js ├── content/ │ └── content.js # Runs on web pages ├── background/ │ └── service-worker.js # Background logic ├── options/ │ ├── options.html # Settings page │ └── options.js └── icons/ ├── icon16.png ├── icon48.png └── icon128.png


### Manifest V3 Template

{ "manifestversion": 3, "name": "My Extension", "version": "1.0.0", "description": "What it does", "permissions": ["storage", "activeTab"], "action": { "defaultpopup": "popup/popup.html", "defaulticon": { "16": "icons/icon16.png", "48": "icons/icon48.png", "128": "icons/icon128.png" } }, "contentscripts": [{ "matches": ["<allurls>"], "js": ["content/content.js"] }], "background": { "serviceworker": "background/service-worker.js" }, "options_page": "options/options.html" }


### Communication Pattern

Popup ←→ Background (Service Worker) ←→ Content Script ↓ chrome.storage

Content Scripts

Code that runs on web pages

When to use: When modifying or reading page content

## Content Scripts

### Basic Content Script

// content.js - Runs on every matched page

// Wait for page to load document.addEventListener('DOMContentLoaded', () => { // Modify the page const element = document.querySelector('.target'); if (element) { element.style.backgroundColor = 'yellow'; } });

// Listen for messages from popup/background chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { if (message.action === 'getData') { const data = document.querySelector('.data')?.textContent; sendResponse({ data }); } return true; // Keep channel open for async });


### Injecting UI

// Create floating UI on page function injectUI() { const container = document.createElement('div'); container.id = 'my-extension-ui'; container.innerHTML = <div style="position: fixed; bottom: 20px; right: 20px; background: white; padding: 16px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 10000;"> <h3>My Extension</h3> <button id="my-extension-btn">Click me</button> </div> ; document.body.appendChild(container);

document.getElementById('my-extension-btn').addEventListener('click', () => { // Handle click }); }

injectUI();


### Permissions for Content Scripts

{ "contentscripts": [{ "matches": ["https://specific-site.com/*";], "js": ["content.js"], "runat": "document_end" }] }

Storage and State

Persisting extension data

When to use: When saving user settings or data

## Storage and State

### Chrome Storage API

// Save data chrome.storage.local.set({ key: 'value' }, () => { console.log('Saved'); });

// Get data chrome.storage.local.get(['key'], (result) => { console.log(result.key); });

// Sync storage (syncs across devices) chrome.storage.sync.set({ setting: true });

// Watch for changes chrome.storage.onChanged.addListener((changes, area) => { if (changes.key) { console.log('key changed:', changes.key.newValue); } });


### Storage Limits
| Type | Limit |
|------|-------|
| local | 5MB |
| sync | 100KB total, 8KB per item |

### Async/Await Pattern

// Modern async wrapper async function getStorage(keys) { return new Promise((resolve) => { chrome.storage.local.get(keys, resolve); }); }

async function setStorage(data) { return new Promise((resolve) => { chrome.storage.local.set(data, resolve); }); }

// Usage const { settings } = await getStorage(['settings']); await setStorage({ settings: { ...settings, theme: 'dark' } });

Anti-Patterns

❌ Requesting All Permissions

Why bad: Users won't install. Store may reject. Security risk. Bad reviews.

Instead: Request minimum needed. Use optional permissions. Explain why in description. Request at time of use.

❌ Heavy Background Processing

Why bad: MV3 terminates idle workers. Battery drain. Browser slows down. Users uninstall.

Instead: Keep background minimal. Use alarms for periodic tasks. Offload to content scripts. Cache aggressively.

❌ Breaking on Updates

Why bad: Selectors change. APIs change. Angry users. Bad reviews.

Instead: Use stable selectors. Add error handling. Monitor for breakage. Update quickly when broken.

Related Skills

Works well with: frontend, micro-saas-launcher, personal-tool-builder