AI Agent Skills

Browser Extension Skills for AI Coding Agents

Production-grade skill set for building, testing, analyzing, and publishing Chrome extensions with AI coding agents. Powered by Extension Booster.

GitHub Repo Claude Code Skills MIT License Manifest V3

Works with your favorite AI coding agent:

Claude CodeCursorWindsurfGitHub CopilotClineAiderContinueRoo CodeAugment CodeAmazon Q Developer

What Are AI Agent Skills?

AI Agent Skills are specialized instruction sets that turn AI coding agents into domain experts. Compatible with Claude Code, Cursor, Windsurf, GitHub Copilot, Cline, Aider, and more — skills give your AI agent deep knowledge of Chrome extension APIs, best practices, security patterns, and publishing workflows.

Each skill follows the progressive disclosure pattern: a concise SKILL.md is always loaded when the skill activates, while detailed reference files are loaded on-demand only when the agent needs deeper context. This keeps token usage efficient while providing comprehensive coverage.

How It Works

1

Install skills to your project or globally

2

Ask your AI agent to build your extension

3

Skills activate automatically based on your task

Why These Skills?

Chrome extension development is uniquely challenging: scattered documentation, confusing permission warnings, multi-context debugging, and opaque Chrome Web Store reviews. These skills turn your AI coding agent into an extension development expert that can:

Scaffold

Complete extension project in seconds

🛠
Develop

Features with proper API usage and framework detection

📄
Generate

Optimized manifest.json with minimum permissions

🔒
Analyze

Code for security vulnerabilities and CWS compliance

Test

Across all extension contexts (SW, content, popup)

🎨
Create

All required icons and store listing assets

🚀
Publish

To Chrome Web Store with CI/CD automation

🔄
Migrate

Existing extensions from Manifest V2 to V3

Installation

Recommended: Using Skills CLI

Install all skills at once using the Skills CLI:

# Install all skills to your project
npx skills add quangpl/browser-extension-skills

# Install globally (available in all projects)
npx skills add quangpl/browser-extension-skills -g

# Install specific skills only
npx skills add quangpl/browser-extension-skills -s extension-create,extension-dev

# List available skills before installing
npx skills add quangpl/browser-extension-skills -l

Alternative: Manual Installation

# Clone the repository
git clone https://github.com/quangpl/browser-extension-skills.git

# Copy all skills to your project
cp -r browser-extension-skills/skills/* .claude/skills/

# Or copy to global Claude Code skills
cp -r browser-extension-skills/skills/* ~/.claude/skills/

Install Individual Skills

# Copy only the skills you need
cp -r browser-extension-skills/skills/extension-create .claude/skills/
cp -r browser-extension-skills/skills/extension-dev .claude/skills/

Quick Start

Once installed, just describe what you want in natural language. Your AI agent automatically activates the right skill.

Step 1

Create a New Extension

> Create a Chrome extension that highlights all links on a page

Your AI agent activates extension-create → scaffolds with WXT → sets up entrypoints → configures manifest.

Step 2

Develop Features

> Add a popup that shows link count and lets users toggle highlighting

Your AI agent activates extension-dev → detects WXT + React → implements popup with chrome.tabs API.

Step 3

Generate Assets

> Generate all icons and store listing screenshots for my extension

Your AI agent activates extension-assets → creates icons (16/32/48/128px) → generates listing images.

Step 4

Analyze & Publish

> Analyze my extension for security issues and publish to Chrome Web Store

Your AI agent activates extension-analyze + extension-publish → scans security → validates listing → submits.

Skills Overview

extension-create

Auto-scaffold a Chrome extension project using the WXT framework with samples from Chrome Extensions Samples.

Supported Frameworks

ReactVueSvelteSolidVanilla TypeScript

Scaffold Command

npx wxt@latest init my-extension --template react
cd my-extension
pnpm install
pnpm dev        # Dev mode with hot reload
pnpm build      # Production build
pnpm zip        # Store-ready zip

Entrypoints Reference

FeatureFile to Create
Popupentrypoints/popup/index.html + main.tsx
Backgroundentrypoints/background.ts
Content Scriptentrypoints/content.ts
Options Pageentrypoints/options/index.html + main.tsx
Side Panelentrypoints/sidepanel/index.html + main.tsx

Extension Type → Configuration

TypeEntrypointsPermissions
Popup toolpopupactiveTab
Page modifiercontent, backgroundactiveTab or host_permissions
Side panelsidepanel, backgroundsidePanel, storage
Tab managerpopup, backgroundtabs, storage
Context menubackgroundcontextMenus, activeTab

extension-dev

Detect your framework/stack, find proper documentation, implement features, and debug across all extension contexts.

Auto Framework Detection

File FoundFramework
wxt.config.tsWXT
package.json has plasmoPlasmo
vite.config has @crxjsCRXJS
manifest.json in rootVanilla

Chrome API Quick Reference (Top 20)

APIPurposePermission
chrome.tabsQuery, create, update tabstabs
chrome.storage.localPersist data locallystorage
chrome.storage.syncSync data across devicesstorage
chrome.actionToolbar icon, popup, badge
chrome.contextMenusRight-click menu itemscontextMenus
chrome.sidePanelSide panel UIsidePanel
chrome.scriptingInject scripts/CSSscripting
chrome.runtimeMessaging, lifecycle
chrome.alarmsSchedule periodic tasksalarms
chrome.commandsKeyboard shortcutscommands

Message Passing Pattern

// Popup → Service Worker (one-time message)
const response = await chrome.runtime.sendMessage({ type: 'GET_DATA' });

// Service Worker listener
chrome.runtime.onMessage.addListener((msg, sender, reply) => {
  if (msg.type === 'GET_DATA') { reply({ data: '...' }); return true; }
});

// Background → Content Script (tab-targeted)
chrome.tabs.sendMessage(tabId, { type: 'ACTION' });

Debugging by Context

ContextHow to Inspect
Service workerchrome://extensions → "inspect" link
Content scriptPage DevTools → Console → select extension context
PopupRight-click popup → Inspect
Options / Side panelOpen page → F12

extension-manifest

Generate the best manifest.json based on your code. Analyzes Chrome API usage and maps to minimum required permissions.

Manifest Template (MV3)

{
  "manifest_version": 3,
  "name": "Extension Name",
  "version": "1.0.0",
  "description": "Brief description. Max 132 chars for CWS.",
  "icons": { "16": "icons/icon16.png", "48": "icons/icon48.png", "128": "icons/icon128.png" },
  "action": { "default_popup": "popup.html" },
  "permissions": [],
  "host_permissions": [],
  "background": { "service_worker": "background.js", "type": "module" }
}

Common Mistakes

ErrorFix
host_permissions inside permissionsMove URLs to separate host_permissions array
Using <all_urls>Narrow to specific domain patterns
tabs permission overuseUse activeTab instead
CSP as stringMust be object: { "extension_pages": "..." }
web_accessible_resources as string[]Use object with resources + matches

Key MV3 Rules

  1. host_permissions is separate from permissions
  2. Service workers replace background pages (no DOM, no window)
  3. Remote code execution banned (no eval, no CDN scripts)
  4. Use chrome.scripting.executeScript() not tabs.executeScript()

extension-analyze

Audit extensions for security vulnerabilities, performance issues, and Chrome Web Store policy compliance.

What Gets Scanned

PermissionsCSPMessage HandlersStorage SecurityXSS VectorsDependenciesCWS Compliance

Top 10 Issues Found in Extensions

#IssueSeverity
1 innerHTML with page-sourced data (XSS) High
2 onMessage without sender origin check High
3 <all_urls> host permission when not needed Medium
4 unsafe-inline or unsafe-eval in CSP Critical
5 API keys hardcoded in source Critical
6 eval() or new Function() usage Critical
7 chrome.storage.sync storing sensitive data Medium
8 HTTP endpoints instead of HTTPS High
9 Remote script loading (MV3 violation) Critical
10 Missing web_accessible_resources restrictions Medium

extension-test

Set up and run unit, integration, and E2E tests for Chrome extensions.

Testing Architecture

Unit Tests (Jest)          → Test isolated logic, chrome.* API mocks
Integration Tests (Jest)   → Test service interactions, message passing
E2E Tests (Puppeteer)      → Test in real Chrome with extension loaded

Critical: Extensions CANNOT run in headless mode. E2E requires headless: false.

Quick Setup

npm install -D jest @types/jest ts-jest jest-chrome
npm install -D @testing-library/react @testing-library/jest-dom jsdom  # For React
npm install -D puppeteer  # For E2E

E2E: Launch Extension in Chrome

import puppeteer from 'puppeteer';
import path from 'path';

const browser = await puppeteer.launch({
  headless: false,  // extensions require non-headless
  args: [
    `--disable-extensions-except=${path.resolve('dist')}`,
    `--load-extension=${path.resolve('dist')}`,
  ],
});

extension-assets

Generate all required icons and Chrome Web Store listing assets.

Required Assets

Extension Icons

  • 16x16 Favicon, context menus
  • 32x32 Windows taskbar
  • 48x48 Extensions page
  • 128x128 CWS store icon

CWS Listing

  • 1280x800 Screenshots (1-5, required)
  • 440x280 Small promo tile
  • 920x680 Large promo tile
  • 1400x560 Marquee promo tile

Generation methods: ImageMagick CLI, Gemini API for AI-generated images, or prompt templates for manual generation with any image tool.

extension-publish

Chrome Web Store submission, listing optimization, and CI/CD automation.

Publishing Workflow

Prepare Package Submit Review Publish

Top 10 Rejection Reasons

  1. Single purpose violation — does too many unrelated things
  2. Excessive/unnecessary permissions
  3. Missing privacy policy (required when user data collected)
  4. Missing permission justification in submission form
  5. Description doesn't match functionality
  6. Keyword spam in title/description
  7. Remote code execution (eval, external scripts)
  8. Improper user data handling or disclosure
  9. Extension non-functional or crashes
  10. Broken features / inaccessible links

Listing Optimization Tips

  • Title: Action verb + Benefit, max 45 chars, no keyword stuffing
  • Description: First 150 chars appear in search — make them count
  • Screenshots: Annotate features, show real UI, 1280×800
  • Category: Choose most specific fit

extension-migration

Step-by-step migration from Manifest V2 to V3. Reference: Official Migration Guide.

Key Breaking Changes

AreaMV2MV3
Background background.scripts/page background.service_worker
Browser action browser_action / page_action action
Network blocking webRequest (blocking) declarativeNetRequest
Script injection tabs.executeScript(string) scripting.executeScript({func})
Remote code CDN scripts allowed Must bundle locally
CSP String value Object {extension_pages: "..."}
Host permissions In permissions array Separate host_permissions array

API Migration Map

chrome.extension.getURL()           → chrome.runtime.getURL()
chrome.tabs.executeScript()         → chrome.scripting.executeScript()
chrome.tabs.insertCSS()             → chrome.scripting.insertCSS()
chrome.browserAction.*              → chrome.action.*
chrome.pageAction.*                 → chrome.action.*
webRequest (blocking)               → declarativeNetRequest
localStorage                        → chrome.storage.local
XMLHttpRequest                      → fetch()
setInterval (background)            → chrome.alarms

Tips & Best Practices

Permission Optimization

  • Prefer activeTab over broad tabs + host permissions
  • Use optional permissions for non-essential features
  • Run extension-analyze before every CWS submission

Performance

  • Keep content scripts under 50KB (lazy-load heavy logic)
  • Service workers should be event-driven (no polling)
  • Use chrome.storage.session for temporary data

Security

  • Validate all message senders (sender.id === chrome.runtime.id)
  • Never use innerHTML with untrusted data
  • No API keys in source code; use a proxy server

Publishing

  • First 150 chars of description appear in search results
  • Screenshots at 1280x800 showing features convert best
  • Single-purpose policy: one clear function per extension

Skill Architecture

Each skill follows the progressive disclosure pattern for optimal token efficiency:

skills/
├── extension-create/
│   ├── SKILL.md              # Quick reference (< 150 lines, always loaded)
│   └── references/           # Detailed docs (loaded on-demand)
│       ├── wxt-scaffold-guide.md
│       ├── wxt-entrypoints.md
│       ├── extension-templates.md
│       └── chrome-samples-reference.md
├── extension-dev/
├── extension-manifest/
├── extension-analyze/
├── extension-test/
├── extension-assets/
├── extension-publish/
└── extension-migration/
  • SKILL.md — Always loaded when skill activates. Concise, actionable, < 150 lines.
  • references/ — Loaded only when Claude needs deeper context. < 150 lines each.

Requirements

RequirementDetails
AI Coding AgentClaude Code, Cursor, Windsurf, GitHub Copilot, Cline, Aider, or similar
Node.jsv18+ recommended
npm / pnpm / yarn / bunAny package manager
ChromeFor testing and debugging
Gemini API KeyOptional, for AI-generated assets

Resources

AI-Powered Extension Development

Start Building Extensions with AI

Install these skills and let your AI coding agent handle the complexity of Chrome extension development.