rune-ext-chrome-ext

Scaffolds, audits, and publishes Manifest V3 Chrome extensions with typed messaging and built-in AI integration.

1|Updated Mar 22, 2026
One-click install
npx skills add https://github.com/dangvu008/VietTruyen --skill rune-ext-chrome-ext-dangvu008
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: rune-ext-chrome-ext
Source: https://github.com/dangvu008/VietTruyen/tree/main/.agents/skills/rune-ext-chrome-ext
Command: npx skills add https://github.com/dangvu008/VietTruyen --skill rune-ext-chrome-ext-dangvu008

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Chrome extension development is full of Manifest V3 pitfalls: service workers terminate after 30 seconds of idle and lose all in-memory state, 58% of Chrome Web Store rejections come from preventable compliance errors, and the new built-in AI APIs (Gemini Nano, Chrome 138+) require hardware checks and port-based streaming that are not obvious from the docs. ## Core Features & Use Cases - MV3 Scaffolding: Generates minimal-permission manifests, service workers with top-level listeners, content scripts, and build configs for Vite, Webpack, or Parcel. - Typed Messaging & Storage: Implements discriminated-union message types, port-based streaming, typed chrome.storage helpers, and schema migrations. - CWS Compliance & Publishing: Audits permissions, remote code execution, CSP, and assets, then generates permission justifications and ready-to-paste store listings. - Built-in AI Integration: Wires Gemini Nano with capability checks, graceful fallback to external APIs, and delta extraction from cumulative streaming chunks. - Use Case: You are building a page-summarizer extension. This Skill scaffolds the MV3 project, wires streaming AI responses through ports, runs a preflight audit that catches an unused "tabs" permission, and produces the store listing copy for submission. ## Quick Start Ask the agent to scaffold a new Manifest V3 Chrome extension with typed message passing and run a Chrome Web Store preflight audit on the result.

Frequently Asked Questions about rune-ext-chrome-ext

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I scaffold a Manifest V3 Chrome extension?

Detect the extension type, generate a minimal-permission manifest.json, and scaffold a service worker with all listeners registered synchronously at module top level. The skill supports Vite with @crxjs/vite-plugin, Webpack, Parcel, or vanilla tsc build setups.

How do I pass messages between a Chrome extension popup, service worker, and content script?

Define a discriminated union of message types in TypeScript, use chrome.runtime.sendMessage for one-shot requests, and use long-lived ports for streaming. Async listeners must return true, and chrome.runtime.lastError should be checked in callbacks.

Why does my Chrome extension service worker lose state?

Manifest V3 service workers terminate after about 30 seconds of idle, destroying all JavaScript variable state. Persist state in chrome.storage.session or chrome.storage.local, and use chrome.alarms instead of setTimeout keepalive hacks, which break on Chrome 119+.

What causes Chrome Web Store rejections?

The top causes are over-permissioning, remote code execution via eval() or external script tags, misleading descriptions, missing privacy policies, and trademarked names in branding. A preflight audit scanning permissions, CSP, and bundled dependencies catches most issues before submission.

Does Chrome built-in AI work on all devices?

No. Gemini Nano requires Chrome 138+, 22 GB free disk, and either 4 GB VRAM or 16 GB system RAM, with no Linux support. Check chrome.aiLanguageModel.capabilities() first and implement a fallback to an external API when it returns 'no'.

Why does Chrome AI streaming duplicate text in my extension UI?

Chrome's promptStreaming returns cumulative text rather than delta chunks, so naive rendering repeats content. Track the previous chunk and slice it from the current one to extract only the new delta before posting it through the port.