What I learned building a Claude Code plugin for MV3 Chrome extensions A developer built a Claude Code plugin called Chrome Extension Builder for MV3 Chrome extensions, learning that validators and hooks are more effective than clever prompts for catching MV3-specific mistakes. The plugin uses five slash commands and three agents with deliberate capability boundaries, and defaults to WXT framework with pinned dependencies after a breaking change in WXT 0.20.26 broke the scaffold. Claude Code writes extension code fine. That was never the problem. Ask it for a content script that highlights matched text, or a background service worker that debounces a fetch, and it produces something reasonable on the first try. Where it trips is everything around the code: the Manifest V3 rules, the permission model, the content security policy, and the unwritten expectations of Chrome Web Store review. Those are the parts that fail late, at install, at build, or three weeks after you thought you shipped. And they fail quietly. I spent a while turning that gap into a plugin called Chrome Extension Builder. This is less a pitch for the plugin and more a writeup of the three things that broke while I built it, because each one taught me something I'd want to know if I were building any developer tool, plugin or not. A model that writes plausible code will also write a plausible manifest. The trouble is that "plausible" and "valid" diverge hard in MV3. A manifest with content security policy.extension pages containing unsafe-eval looks fine to a generator that learned from years of MV2 examples. It is forbidden in MV3 and the extension will not load. The same goes for over-broad host permissions