Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

browser-extension-builder — Claude Code skill: how to install

Guides the architecture and implementation of Manifest V3 browser extensions for Chrome and Firefox. Useful when structuring content scripts, popups, and service workers.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add sickn33/agentic-awesome-skills --skill browser-extension-builder -a claude-code
Open on GitHub

What browser-extension-builder does

The skill outlines standard project architecture for Manifest V3 extensions: layout with manifest.json, a popup interface, background service workers, and content scripts. It provides communication patterns connecting content scripts to background workers using chrome.runtime.onMessage.

State management patterns cover chrome.storage.local and chrome.storage.sync with async wrappers. Pay attention to strict storage limits: sync allows only 100KB total and 8KB per item, while local offers 10MB (or 5MB on Chrome 113 and earlier).

MV3 background workers suspend automatically, which means active state must be persisted immediately. The skill explicitly notes that client-side flags like isPremium are purely UI state. Validating user entitlements and processing payments requires a dedicated server.

What it helps with

  • scaffold a Manifest V3 browser extension architecture
  • set up message passing between content scripts and background workers
  • handle persistent extension state with chrome.storage async wrappers
  • inject floating UI elements into matching web pages

Example prompts for the agent

  • Scaffold a Chrome extension manifest v3 project with popup and background worker
  • Implement message passing between content.js and service-worker.js
  • Write an async wrapper for chrome.storage.local to store user preferences

How to install browser-extension-builder

1Skills CLI (Vercel)

npx skills add sickn33/agentic-awesome-skills --skill browser-extension-builder -a claude-code

2Manually: put the files in place

~/.claude/skills/browser-extension-builder/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/browser-extension-builder/

From the same set80

The whole set →
docker-expert sickn33 A skill that turns your AI agent into a Docker reviewer for Dockerfiles, multi-stage builds and container security. Useful when images and Compose files need a second look. Claude Code CX Codex Cursor +1 27,200installs typescript-expert sickn33 A skill for TypeScript and JavaScript work: it reads your project setup, fixes type errors and speeds up type checking. Useful once a TS codebase gets big. Claude Code CX Codex Cursor +1 12,600installs browser-automation sickn33 This skill builds browser checks around observed UI state and explicit outcomes. Use it for UI workflows, timing failures, or authorised page-data collection. Claude Code CX Codex Cursor +1 6,700installs nextjs-supabase-auth sickn33 This skill wires Supabase Auth into the Next.js App Router with clients, middleware, OAuth callbacks, and Server Actions. Use it when you need protected routes and session handling. Claude Code CX Codex Cursor +1 6,500installs 3d-web-experience sickn33 Helps build and debug web 3D scenes, product configurators, and portfolios. Covers stack choice, model loading, scroll interaction, and performance checks. Claude Code CX Codex Cursor +1 5,200installs prisma-expert sickn33 This skill helps inspect Prisma schemas, migrations, and queries. Use it to investigate an error or review database changes before deployment. Claude Code CX Codex Cursor +1 4,200installs playwright-skill sickn33 Write and run Playwright browser tests directly in Claude Code: responsive design checks, login flows, form submissions, screenshots. Executes locally via Node with a visible browser window. Claude Code CX Codex Cursor +1 3,900installs game-development sickn33 Guides game architecture decisions, platform choices, and core loop structure. Directs the assistant to specialized sub-skills for web, mobile, PC, or VR. Claude Code CX Codex Cursor +1 3,800installs

Similar

tavily-search tavily-ai Runs web searches via the tvly CLI and returns LLM-tailored snippets with relevance scores. Use it when your agent needs fresh web sources without an exact URL. Claude Code CX Codex Cursor +1 36,000installs ev-charger-nearby NomaDamas Finds available EV charging stations across South Korea by region, address, or location. Installs via single CLI across all AI code editors. Claude Code CX Codex Cursor +1 4,000installs playwright-expert https://github.com/Jeffallan Sets up Playwright E2E testing infrastructure, writes Page Object Model classes, and troubleshoots flaky tests using trace inspection. Claude Code CX Codex Cursor +1 5,300installs brand-extract nexu-io Extracts a complete brand kit from a live website via the in-app browser. Gathers semantic colors, fonts, logos, and generates brand.json. Claude Code CX Codex Cursor +1 1,100installs setup-browser-cookies garrytan This skill transfers cookies from your local Chromium browser into a headless browsing session. Use it to test authenticated sites without re-entering credentials each run. Claude Code CX Codex Cursor +1 342installs blogwatcher JulienTant (fork of Hyaxia/blogwatcher) Connects the blogwatcher-cli feed manager to your agent for RSS and Atom monitoring. Tracks new posts and maintains read status across blogs. Claude Code CX Codex Cursor +1 335installs agent-browser vercel-labs A CLI skill for browser control: it opens pages, fills forms, clicks buttons, and tests web apps. Use it when an agent needs to act inside a website. Claude Code CX Codex Cursor +1 1,200,000installs webapp-testing official anthropics This skill tests local web apps with Playwright, helping agents debug UI behavior, capture screenshots, and inspect browser logs. Claude Code Claude.ai 186,758installs

Questions about browser-extension-builder

How to install browser-extension-builder in Claude Code?

Run npx skills add sickn33/agentic-awesome-skills --skill browser-extension-builder -a claude-code.

What does browser-extension-builder do?

It guides the development of Chrome and Firefox extensions on Manifest V3, covering architecture, background workers, storage, and store policies.

Why can't authorization be handled inside extension storage?

Extension storage is not encrypted storage, and client-side flags like isPremium can be modified in the browser. Paid access and user identity must be verified on an external server.

Source text

SKILL.md · MIT
---
name: browser-extension-builder
description: 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.
risk: critical
source: vibeship-spawner-skills (Apache 2.0)
date_added: 2026-02-27
---

# Browser Extension Builder

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.

**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.

### Expertise

- Chrome extension APIs
- Manifest v3
- Content scripts
- Service workers
- Extension UX
- Store publishing

## Capabilities

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

## Patterns

### Architecture Patterns

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
```json
{
  "manifest_version": 3,
  "name": "My Extension",
  "version": "1.0.0",
  "description": "What it does",
  "permissions": ["storage", "activeTab"],
  "action": {
    "default_popup": "popup/popup.html",
    "default_icon": {
      "16": "icons/icon16.png",
      "48": "icons/icon48.png",
      "128": "icons/icon128.png"
    }
  },
  "content_scripts": [{
    "matches": ["https://specific-site.com/*"],
    "js": ["content/content.js"]
  }],
  "background": {
    "service_worker": "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
```javascript
// content.js - Runs on every matched page

// Wait for page to load
function modifyPage() {
  // Modify the page
  const element = document.querySelector('.target');
  if (element) {
    element.style.backgroundColor = 'yellow';
  }
}
if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', modifyPage, { once: true });
} else {
  modifyPage();
}

// 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
```javascript
// 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
```json
{
  "content_scripts": [{
    "matches": ["https://specific-site.com/*"],
    "js": ["content.js"],
    "run_at": "document_end"
  }]
}
```

### Storage and State

Persisting extension data

**When to use**: When saving user settings or data

## Storage and State

### Chrome Storage API
```javascript
// 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 | 10MB (5MB on Chrome 113 and earlier) |
| sync | 100KB total, 8KB per item |

### Async/Await Pattern
```javascript
// Modern async wrapper
async function getStorage(keys) {
  return new Promise((resolve, reject) => {
    chrome.storage.local.get(keys, (value) => {
      if (chrome.runtime.lastError) reject(new Error(chrome.runtime.lastError.message));
      else resolve(value);
    });
  });
}

async function setStorage(data) {
  return new Promise((resolve, reject) => {
    chrome.storage.local.set(data, () => {
      if (chrome.runtime.lastError) reject(new Error(chrome.runtime.lastError.message));
      else resolve();
    });
  });
}

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

### Security boundaries

Use minimal host access, validate message sender/shape and never interpolate page/user text into `innerHTML`. Browser extension storage is not a secret vault; sync may transmit data across devices. [Chrome storage quotas](https://developer.chrome.com/docs/extensions/reference/api/storage) vary by version. Client-side `isPremium` flags and user IDs in URLs are UI state, not entitlement authorization: authenticate and verify payment/ownership on the server. MV3 workers can suspend; persist necessary state and test actual Chrome/Firefox APIs separately.

## Extension Monetization

Making money from extensions

**When to use**: When planning extension revenue

## Security boundaries

Use minimal host access, validate message sender/shape and never interpolate page/user text into `innerHTML`. Browser extension storage is not a secret vault; sync may transmit data across devices. [Chrome storage quotas](https://developer.chrome.com/docs/extensions/reference/api/storage) vary by version. Client-side `isPremium` flags and user IDs in URLs are UI state, not entitlement authorization: authenticate and verify payment/ownership on the server. MV3 workers can suspend; persist necessary state and test actual Chrome/Firefox APIs separately.

## Extension Monetization

### Revenue Models
| Model | How It Works |
|-------|--------------|
| Freemium | Free basic, paid features |
| One-time | Pay once, use forever |
| Subscription | Monthly/yearly access |
| Donations | Tip jar / Buy me a coffee |
| Affiliate | Recommend products |

### Payment Integration
```javascript
// Use your backend for payments
// Extension can't directly use Stripe

// 1. User clicks "Upgrade" in popup
// 2. Open your website with user ID
chrome.tabs.create({
  url: `https://your-site.com/upgrade?user=${userId}`
});

// 3. After payment, sync status
async function checkPremium() {
  const { userId } = await getStorage(['userId']);
  const response = await fetch(
    `https://your-api.com/premium/${userId}`
  );
  const { isPremium } = await response.json();
  await setStorage({ isPremium });
  return isPremium;
}
```

### Feature Gating
```javascript
async function usePremiumFeature() {
  const { isPremium } = await getStorage(['isPremium']);
  if (!isPremium) {
    showUpgradeModal();
    return;
  }
  // Run premium feature
}
```

### Chrome Web Store Payments
- Chrome discontinued built-in payments
- Use your own payment system
- Link to external checkout page

## Validation Checks

### Using Deprecated Manifest V2

Severity: HIGH

Message: Using Manifest V2 - Chrome requires V3 for new extensions.

Fix action: Migrate to Manifest V3 with service worker

### Excessive Permissions Requested

Severity: HIGH

Message: Requesting broad permissions - may cause store rejection.

Fix action: Use specific host_permissions and optional_permissions

### No Error Handling in Extension

Severity: MEDIUM

Message: Not checking chrome.runtime.lastError for errors.

Fix action: Check chrome.runtime.lastError after API calls

### Hardcoded URLs in Extension

Severity: MEDIUM

Message: Hardcoded URLs may cause issues in production.

Fix action: Use chrome.storage or manifest for configuration

### Missing Extension Icons

Severity: LOW

Message: Missing extension icons - affects store listing.

Fix action: Add icons in 16, 48, and 128 pixel sizes

## Collaboration

### Delegation Triggers

- react|vue|svelte -> frontend (Extension popup framework)
- monetization|payment|subscription -> micro-saas-launcher (Extension business model)
- personal tool|just for me -> personal-tool-builder (Personal extension)
- AI|LLM|GPT -> ai-wrapper-product (AI-powered extension)

### Productivity Extension

Skills: browser-extension-builder, frontend, micro-saas-launcher

Workflow:

```
1. Define extension functionality
2. Build popup UI with React
3. Implement content scripts
4. Add premium features
5. Publish to Chrome Web Store
6. Market and iterate
```

### AI Browser Assistant

Skills: browser-extension-builder, ai-wrapper-product, frontend

Workflow:

```
1. Design AI features for browser
2. Build extension architecture
3. Integrate AI API
4. Create popup interface
5. Handle usage limits/payments
6. Publish and grow
```

## Related Skills

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

## When to Use
- User mentions or implies: browser extension
- User mentions or implies: chrome extension
- User mentions or implies: firefox addon
- User mentions or implies: extension
- User mentions or implies: manifest v3

## Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

© sickn33 · MIT · sickn33/agentic-awesome-skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor