[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-automattic-woocommerce-plugin-dev":3,"mdc--fey12y-key":36,"related-repo-automattic-woocommerce-plugin-dev":1766,"related-org-automattic-woocommerce-plugin-dev":1803},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"woocommerce-plugin-dev","develop WooCommerce plugins","Comprehensive WooCommerce plugin development skill that enforces WordPress and WooCommerce coding standards, security best practices, and end-to-end testing for every file created. Use this skill whenever the user wants to create, scaffold, build, or start a WooCommerce plugin, WooCommerce extension, or WordPress plugin that integrates with WooCommerce. Also trigger when the user mentions \"WooCommerce plugin\", \"Woo extension\", \"WooCommerce add-on\", \"payment gateway plugin\", \"shipping method plugin\", or any plugin that touches orders, products, carts, checkout, or the WooCommerce REST API. Even if the user just says \"start a new plugin\" in the context of a WooCommerce project, use this skill. This skill should be the first thing consulted before writing any code for a WooCommerce plugin project.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"automattic","Automattic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fautomattic.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"WooCommerce","woocommerce","tag",{"name":17,"slug":18,"type":15},"WordPress","wordpress",{"name":20,"slug":21,"type":15},"Plugin Development","plugin-development",{"name":23,"slug":24,"type":15},"Testing","testing",5,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fclaude-woocommerce-toolkit","2026-04-12T04:56:22.485222",null,1,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"Claude Code skills and agents for building, reviewing, and maintaining WordPress and WooCommerce plugins","https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fclaude-woocommerce-toolkit\u002Ftree\u002FHEAD\u002Fskills\u002Fwoocommerce-plugin-dev","---\nname: woocommerce-plugin-dev\ndescription: >\n  Comprehensive WooCommerce plugin development skill that enforces WordPress and WooCommerce\n  coding standards, security best practices, and end-to-end testing for every file created.\n  Use this skill whenever the user wants to create, scaffold, build, or start a WooCommerce plugin,\n  WooCommerce extension, or WordPress plugin that integrates with WooCommerce. Also trigger when\n  the user mentions \"WooCommerce plugin\", \"Woo extension\", \"WooCommerce add-on\", \"payment gateway\n  plugin\", \"shipping method plugin\", or any plugin that touches orders, products, carts, checkout,\n  or the WooCommerce REST API. Even if the user just says \"start a new plugin\" in the context of a\n  WooCommerce project, use this skill. This skill should be the first thing consulted before writing\n  any code for a WooCommerce plugin project.\n---\n\n# WooCommerce Plugin Development Skill\n\nThis skill ensures that every WooCommerce plugin you build meets professional, WooCommerce Marketplace-ready\nstandards from day one. It covers architecture, coding standards, security, testing, and UX —\ndrawing from the official WordPress Plugin Handbook, WooCommerce developer documentation, and\nfintech-grade security practices.\n\n## How This Skill Works\n\nThis skill operates in two phases:\n\n1. **Project Discovery** — gather requirements via a structured interview and save them as a\n   project brief\n2. **Development Execution** — scaffold and build the plugin following all standards defined in\n   the reference files\n\nEvery coding decision, file structure choice, and architectural pattern is governed by the\nreference documents bundled with this skill. Read them before writing any code.\n\n---\n\n## Phase 1: Project Discovery\n\nBefore writing a single line of code, conduct a structured interview with the user. The goal is\nto produce a `PROJECT_BRIEF.md` file that lives in the plugin's root directory and serves as the\nsingle source of truth for all future development work.\n\n### Required Interview Questions\n\nAsk these questions conversationally, grouping related ones together. Don't dump them all at once —\nhave a dialogue.\n\n**Market & Business Context:**\n- What is the target market for this plugin? (e.g., small merchants, enterprise, specific industry)\n- Will this be sold on the WooCommerce Marketplace, WordPress.org, or distributed privately?\n- Are there competing plugins? What makes this one different?\n- What WooCommerce and WordPress version minimums should we target?\n\n**Plugin Purpose & Scope:**\n- Describe the core purpose of this plugin in one or two sentences.\n- What specific WooCommerce functionality does it extend or modify? (orders, products, checkout,\n  shipping, payments, subscriptions, etc.)\n- Does it need to integrate with any external APIs or third-party services?\n- Does it handle any financial transactions, sensitive customer data, or PCI-relevant information?\n\n**Customer\u002FUser-Facing Features:**\n- What will the shopper\u002Fcustomer see or experience differently?\n- Does it modify the cart, checkout, or my-account pages?\n- Does it add any frontend blocks or shortcodes?\n- What does the customer-facing UX flow look like, step by step?\n\n**Admin\u002FMerchant Features:**\n- What settings or configuration options does the admin need?\n- Does it add any WooCommerce admin pages, tabs, or panels?\n- Does it add columns to order\u002Fproduct lists?\n- Does it need reporting or analytics dashboards?\n- What does the admin setup\u002Fonboarding flow look like?\n\n**Technical Architecture:**\n- Does it need custom database tables, or can it use post meta \u002F order meta \u002F options?\n- Does it need background processing or scheduled tasks (WP-Cron \u002F Action Scheduler)?\n- Does it expose or consume REST API endpoints?\n- Does it need to work with the block-based Cart and Checkout? (If it touches cart\u002Fcheckout: yes.)\n- Does it add product data panels? (If yes: use the classic product editor — the block-based Product\n  Editor is being removed in WooCommerce 11.0.)\n- Does it provide frontend templates or blocks? (If yes: must work with the Site Editor.)\n- HPOS (High-Performance Order Storage) compatibility is mandatory — always declare it.\n- Does it need to extend the Store API for block checkout integration?\n- Should it be **agent-ready** — expose a machine-readable product feed, a sessionless\u002Fprogrammatic\n  checkout, or register WordPress Abilities \u002F MCP tools for AI shopping agents? (See the\n  agentic-commerce and abilities-and-mcp references.)\n\n**Data & Compliance:**\n- What user\u002Fcustomer data does the plugin collect, store, or transmit?\n- Are there GDPR, PCI-DSS, or other compliance requirements?\n- Does it process payments directly or integrate with a payment gateway?\n\n### Saving the Project Brief\n\nAfter the interview, compile all answers into a `PROJECT_BRIEF.md` file with this structure:\n\n```markdown\n# Project Brief: [Plugin Name]\n\n## Overview\n[One-paragraph summary of the plugin]\n\n## Target Market\n[Market details, distribution channel, competitive landscape]\n\n## Core Functionality\n[Detailed description of what the plugin does]\n\n## Customer-Facing Features\n[Bulleted list of shopper-facing features with descriptions]\n\n## Admin Features\n[Bulleted list of merchant-facing features with descriptions]\n\n## Technical Requirements\n- Minimum WordPress version: X.X\n- Minimum WooCommerce version: X.X\n- Minimum PHP version: 8.1\n- HPOS compatible: Yes (mandatory)\n- Cart & Checkout Blocks compatible: [Yes\u002FNo]\n- Product editor: classic (the block-based Product Editor is removed in WC 11.0)\n- Site Editor compatible: [Yes\u002FNo]\n- Store API extensions needed: [Yes\u002FNo — describe if yes]\n- Agentic \u002F AI-agent readiness: [No \u002F which path: WooCommerce MCP + Abilities \u002F Stripe ACS \u002F community ACP]\n- Custom database tables: [Yes\u002FNo — list if yes]\n- External API integrations: [List]\n- Background processing: [Yes\u002FNo — describe if yes]\n\n## Data & Compliance\n[What data is collected, stored, transmitted; compliance requirements]\n\n## Out of Scope\n[Explicitly list what this plugin does NOT do]\n```\n\nSave this file in the plugin root. Reference it before making any architectural decision.\n\n---\n\n## Phase 2: Development Execution\n\nOnce the project brief is complete, follow these steps in order. For each step, consult the\nrelevant reference file before proceeding.\n\n### Step 1: Scaffold the Plugin Structure\n\nRead `references\u002Fplugin-architecture.md` for the complete file structure template.\n\nEvery WooCommerce plugin follows this canonical structure:\n\n```\nplugin-slug\u002F\n├── plugin-slug.php              # Main plugin file (bootstrap)\n├── uninstall.php                # Clean uninstall handler\n├── readme.txt                   # WordPress.org readme\n├── composer.json                # PHP dependencies & autoloading\n├── package.json                 # JS\u002FCSS build tooling\n├── phpcs.xml.dist               # PHPCS configuration\n├── phpunit.xml.dist             # PHPUnit configuration\n├── playwright.config.ts         # Playwright E2E configuration\n├── PROJECT_BRIEF.md             # Project brief from Phase 1\n├── .github\u002F\n│   └── workflows\u002F\n│       ├── ci.yml               # Continuous integration\n│       └── release.yml          # Release automation\n├── src\u002F                         # PSR-4 autoloaded PHP classes\n│   ├── Plugin.php               # Main plugin class\n│   ├── Admin\u002F                   # Admin-only functionality\n│   ├── Frontend\u002F                # Frontend-only functionality\n│   ├── API\u002F                     # REST API endpoints\n│   ├── Data\u002F                    # Data stores and repositories\n│   ├── Integrations\u002F            # Third-party integrations\n│   └── Utilities\u002F               # Helper classes\n├── includes\u002F                    # Legacy-style includes (if needed)\n├── assets\u002F\n│   ├── css\u002F\n│   ├── js\u002F\n│   └── images\u002F\n├── templates\u002F                   # Overridable templates\n├── languages\u002F                   # Translation files\n├── tests\u002F\n│   ├── Unit\u002F                    # PHPUnit unit tests\n│   ├── Integration\u002F             # PHPUnit integration tests\n│   ├── E2E\u002F                     # Playwright end-to-end tests\n│   └── bootstrap.php            # Test bootstrap\n└── vendor\u002F                      # Composer dependencies (gitignored)\n```\n\n### Step 2: Write the Main Plugin File\n\nThe main plugin file (`plugin-slug.php`) must:\n\n- Have a complete plugin header with all required fields\n- Declare HPOS compatibility via `before_woocommerce_init`\n- Check for WooCommerce activation before loading\n- Use Composer autoloading (PSR-4)\n- Define plugin constants (version, path, URL, basename)\n- Hook into `plugins_loaded` at an appropriate priority\n\nRead `references\u002Fcoding-standards.md` for PHP formatting rules and naming conventions.\n\n### Step 3: Implement Core Functionality\n\nFor every class and function you write:\n\n1. **Read `references\u002Fcoding-standards.md`** — Follow WordPress PHP Coding Standards, use proper\n   naming conventions, document with PHPDoc blocks\n2. **Read `references\u002Fsecurity.md`** — Sanitize all input, escape all output, verify nonces and\n   capabilities, use prepared statements\n3. **Follow HPOS patterns** — Never access `wp_posts` \u002F `wp_postmeta` for orders; always use\n   WooCommerce CRUD methods and data stores\n4. **Follow WooCommerce UX guidelines** — Use native WooCommerce UI components, respect admin\n   color schemes, keep settings minimal with smart defaults\n\n### Step 4: Write Tests\n\nRead `references\u002Ftesting.md` for the complete testing strategy.\n\nEvery feature must have corresponding tests before it's considered complete:\n\n- **Unit tests** (PHPUnit) for all business logic, data transformations, and utility functions\n- **Integration tests** (PHPUnit + WordPress test framework) for hooks, filters, database\n  interactions, and WooCommerce API integration\n- **E2E tests** (Playwright) for all user-facing flows — both admin and storefront\n- **Security tests** for input validation, authentication, authorization, and injection resistance\n\nFor plugins that handle financial data, also include:\n\n- **Idempotency tests** — verify that duplicate requests produce the same result\n- **Race condition tests** — verify concurrent operations don't corrupt data\n- **Boundary tests** — verify behavior at financial precision boundaries\n- **Audit trail tests** — verify all financial operations are logged\n\n### Step 5: Configure CI\u002FCD\n\nSet up GitHub Actions workflows that run:\n\n- PHPCS with WordPress and WooCommerce coding standards\n- PHPStan or Psalm for static analysis (level 6+ minimum)\n- PHPUnit test suite\n- Playwright E2E suite against a wp-env environment\n- WooCommerce QIT managed tests (run locally before submission — see `references\u002Fmarketplace-submission.md`)\n\n---\n\n## Reference Files\n\nThese files contain detailed standards and patterns. Read the relevant file before working on\nthat aspect of the plugin.\n\n| File | When to Read |\n|------|-------------|\n| `references\u002Fcoding-standards.md` | Before writing any PHP, JS, CSS, or HTML |\n| `references\u002Fsecurity.md` | Before handling any user input, database queries, or API calls |\n| `references\u002Ftesting.md` | Before writing any test or configuring test infrastructure |\n| `references\u002Fplugin-architecture.md` | When scaffolding the plugin or adding new components |\n| `references\u002Fwoocommerce-apis.md` | When integrating with WooCommerce data stores, hooks, or REST API |\n| `references\u002Fux-guidelines.md` | When building admin UI, settings pages, or frontend components |\n| `references\u002Fabilities-and-mcp.md` | When exposing operations to AI agents (WordPress Abilities API + MCP) |\n| `references\u002Fagentic-commerce.md` | When the plugin should be discoverable or buyable by AI shopping agents |\n| `references\u002Fpci-script-management.md` | When the plugin handles payments (PCI DSS v4.0.1 payment-page scripts) |\n| `references\u002Fmarketplace-submission.md` | Before submitting to the WooCommerce Marketplace or WordPress.org (QIT, distribution) |\n\n---\n\n## Non-Negotiable Standards\n\nThese apply to every single file in the project, no exceptions:\n\n1. **HPOS compatibility is mandatory.** Never use `get_post_meta()` \u002F `update_post_meta()` for\n   order data. Use `$order->get_meta()` \u002F `$order->update_meta_data()` and WooCommerce CRUD.\n\n2. **All user input is hostile.** Sanitize on input (`sanitize_text_field`, `absint`,\n   `sanitize_email`, etc.), escape on output (`esc_html`, `esc_attr`, `esc_url`, `wp_kses`),\n   and use `$wpdb->prepare()` for all database queries.\n\n3. **Nonces and capability checks on every form and AJAX handler.** No exceptions.\n\n4. **Every public function has a PHPDoc block.** Include `@since`, `@param`, `@return`, and\n   `@throws` tags.\n\n5. **No direct database queries when WooCommerce or WordPress provides an API.** Use data stores,\n   `WC_Order`, `WC_Product`, `WP_Query`, etc.\n\n6. **All strings are translatable.** Use `__()`, `_e()`, `esc_html__()`, `esc_attr__()` with the\n   plugin's text domain.\n\n7. **Tests exist for every feature.** No feature is complete without unit and integration tests.\n   User-facing features also need E2E tests.\n\n8. **Prefix everything.** All functions, classes, hooks, options, meta keys, and REST routes use\n   the plugin's unique prefix to avoid conflicts.\n\n9. **Follow WordPress enqueue system.** Never inline scripts or styles except when absolutely\n   necessary. Use `wp_enqueue_script` \u002F `wp_enqueue_style` with proper dependencies.\n\n10. **Declare all WooCommerce feature compatibility.** HPOS (`custom_order_tables`) and\n    Cart & Checkout Blocks (`cart_checkout_blocks`) — declare support for everything applicable via\n    `before_woocommerce_init` using `FeaturesUtil::declare_compatibility()`, and test thoroughly with\n    each feature enabled before declaring it. Do **not** declare `product_block_editor`: the block-based\n    Product Editor is being removed in WooCommerce 11.0 (build against the classic product editor).\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,50,56,63,68,94,99,103,109,123,130,135,143,167,175,198,206,229,237,265,273,328,336,354,360,372,832,837,840,846,851,857,870,875,885,891,904,951,963,969,974,1042,1048,1060,1065,1108,1113,1156,1162,1167,1203,1206,1212,1217,1410,1413,1419,1424,1760],{"type":42,"tag":43,"props":44,"children":46},"element","h1",{"id":45},"woocommerce-plugin-development-skill",[47],{"type":48,"value":49},"text","WooCommerce Plugin Development Skill",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54],{"type":48,"value":55},"This skill ensures that every WooCommerce plugin you build meets professional, WooCommerce Marketplace-ready\nstandards from day one. It covers architecture, coding standards, security, testing, and UX —\ndrawing from the official WordPress Plugin Handbook, WooCommerce developer documentation, and\nfintech-grade security practices.",{"type":42,"tag":57,"props":58,"children":60},"h2",{"id":59},"how-this-skill-works",[61],{"type":48,"value":62},"How This Skill Works",{"type":42,"tag":51,"props":64,"children":65},{},[66],{"type":48,"value":67},"This skill operates in two phases:",{"type":42,"tag":69,"props":70,"children":71},"ol",{},[72,84],{"type":42,"tag":73,"props":74,"children":75},"li",{},[76,82],{"type":42,"tag":77,"props":78,"children":79},"strong",{},[80],{"type":48,"value":81},"Project Discovery",{"type":48,"value":83}," — gather requirements via a structured interview and save them as a\nproject brief",{"type":42,"tag":73,"props":85,"children":86},{},[87,92],{"type":42,"tag":77,"props":88,"children":89},{},[90],{"type":48,"value":91},"Development Execution",{"type":48,"value":93}," — scaffold and build the plugin following all standards defined in\nthe reference files",{"type":42,"tag":51,"props":95,"children":96},{},[97],{"type":48,"value":98},"Every coding decision, file structure choice, and architectural pattern is governed by the\nreference documents bundled with this skill. Read them before writing any code.",{"type":42,"tag":100,"props":101,"children":102},"hr",{},[],{"type":42,"tag":57,"props":104,"children":106},{"id":105},"phase-1-project-discovery",[107],{"type":48,"value":108},"Phase 1: Project Discovery",{"type":42,"tag":51,"props":110,"children":111},{},[112,114,121],{"type":48,"value":113},"Before writing a single line of code, conduct a structured interview with the user. The goal is\nto produce a ",{"type":42,"tag":115,"props":116,"children":118},"code",{"className":117},[],[119],{"type":48,"value":120},"PROJECT_BRIEF.md",{"type":48,"value":122}," file that lives in the plugin's root directory and serves as the\nsingle source of truth for all future development work.",{"type":42,"tag":124,"props":125,"children":127},"h3",{"id":126},"required-interview-questions",[128],{"type":48,"value":129},"Required Interview Questions",{"type":42,"tag":51,"props":131,"children":132},{},[133],{"type":48,"value":134},"Ask these questions conversationally, grouping related ones together. Don't dump them all at once —\nhave a dialogue.",{"type":42,"tag":51,"props":136,"children":137},{},[138],{"type":42,"tag":77,"props":139,"children":140},{},[141],{"type":48,"value":142},"Market & Business Context:",{"type":42,"tag":144,"props":145,"children":146},"ul",{},[147,152,157,162],{"type":42,"tag":73,"props":148,"children":149},{},[150],{"type":48,"value":151},"What is the target market for this plugin? (e.g., small merchants, enterprise, specific industry)",{"type":42,"tag":73,"props":153,"children":154},{},[155],{"type":48,"value":156},"Will this be sold on the WooCommerce Marketplace, WordPress.org, or distributed privately?",{"type":42,"tag":73,"props":158,"children":159},{},[160],{"type":48,"value":161},"Are there competing plugins? What makes this one different?",{"type":42,"tag":73,"props":163,"children":164},{},[165],{"type":48,"value":166},"What WooCommerce and WordPress version minimums should we target?",{"type":42,"tag":51,"props":168,"children":169},{},[170],{"type":42,"tag":77,"props":171,"children":172},{},[173],{"type":48,"value":174},"Plugin Purpose & Scope:",{"type":42,"tag":144,"props":176,"children":177},{},[178,183,188,193],{"type":42,"tag":73,"props":179,"children":180},{},[181],{"type":48,"value":182},"Describe the core purpose of this plugin in one or two sentences.",{"type":42,"tag":73,"props":184,"children":185},{},[186],{"type":48,"value":187},"What specific WooCommerce functionality does it extend or modify? (orders, products, checkout,\nshipping, payments, subscriptions, etc.)",{"type":42,"tag":73,"props":189,"children":190},{},[191],{"type":48,"value":192},"Does it need to integrate with any external APIs or third-party services?",{"type":42,"tag":73,"props":194,"children":195},{},[196],{"type":48,"value":197},"Does it handle any financial transactions, sensitive customer data, or PCI-relevant information?",{"type":42,"tag":51,"props":199,"children":200},{},[201],{"type":42,"tag":77,"props":202,"children":203},{},[204],{"type":48,"value":205},"Customer\u002FUser-Facing Features:",{"type":42,"tag":144,"props":207,"children":208},{},[209,214,219,224],{"type":42,"tag":73,"props":210,"children":211},{},[212],{"type":48,"value":213},"What will the shopper\u002Fcustomer see or experience differently?",{"type":42,"tag":73,"props":215,"children":216},{},[217],{"type":48,"value":218},"Does it modify the cart, checkout, or my-account pages?",{"type":42,"tag":73,"props":220,"children":221},{},[222],{"type":48,"value":223},"Does it add any frontend blocks or shortcodes?",{"type":42,"tag":73,"props":225,"children":226},{},[227],{"type":48,"value":228},"What does the customer-facing UX flow look like, step by step?",{"type":42,"tag":51,"props":230,"children":231},{},[232],{"type":42,"tag":77,"props":233,"children":234},{},[235],{"type":48,"value":236},"Admin\u002FMerchant Features:",{"type":42,"tag":144,"props":238,"children":239},{},[240,245,250,255,260],{"type":42,"tag":73,"props":241,"children":242},{},[243],{"type":48,"value":244},"What settings or configuration options does the admin need?",{"type":42,"tag":73,"props":246,"children":247},{},[248],{"type":48,"value":249},"Does it add any WooCommerce admin pages, tabs, or panels?",{"type":42,"tag":73,"props":251,"children":252},{},[253],{"type":48,"value":254},"Does it add columns to order\u002Fproduct lists?",{"type":42,"tag":73,"props":256,"children":257},{},[258],{"type":48,"value":259},"Does it need reporting or analytics dashboards?",{"type":42,"tag":73,"props":261,"children":262},{},[263],{"type":48,"value":264},"What does the admin setup\u002Fonboarding flow look like?",{"type":42,"tag":51,"props":266,"children":267},{},[268],{"type":42,"tag":77,"props":269,"children":270},{},[271],{"type":48,"value":272},"Technical Architecture:",{"type":42,"tag":144,"props":274,"children":275},{},[276,281,286,291,296,301,306,311,316],{"type":42,"tag":73,"props":277,"children":278},{},[279],{"type":48,"value":280},"Does it need custom database tables, or can it use post meta \u002F order meta \u002F options?",{"type":42,"tag":73,"props":282,"children":283},{},[284],{"type":48,"value":285},"Does it need background processing or scheduled tasks (WP-Cron \u002F Action Scheduler)?",{"type":42,"tag":73,"props":287,"children":288},{},[289],{"type":48,"value":290},"Does it expose or consume REST API endpoints?",{"type":42,"tag":73,"props":292,"children":293},{},[294],{"type":48,"value":295},"Does it need to work with the block-based Cart and Checkout? (If it touches cart\u002Fcheckout: yes.)",{"type":42,"tag":73,"props":297,"children":298},{},[299],{"type":48,"value":300},"Does it add product data panels? (If yes: use the classic product editor — the block-based Product\nEditor is being removed in WooCommerce 11.0.)",{"type":42,"tag":73,"props":302,"children":303},{},[304],{"type":48,"value":305},"Does it provide frontend templates or blocks? (If yes: must work with the Site Editor.)",{"type":42,"tag":73,"props":307,"children":308},{},[309],{"type":48,"value":310},"HPOS (High-Performance Order Storage) compatibility is mandatory — always declare it.",{"type":42,"tag":73,"props":312,"children":313},{},[314],{"type":48,"value":315},"Does it need to extend the Store API for block checkout integration?",{"type":42,"tag":73,"props":317,"children":318},{},[319,321,326],{"type":48,"value":320},"Should it be ",{"type":42,"tag":77,"props":322,"children":323},{},[324],{"type":48,"value":325},"agent-ready",{"type":48,"value":327}," — expose a machine-readable product feed, a sessionless\u002Fprogrammatic\ncheckout, or register WordPress Abilities \u002F MCP tools for AI shopping agents? (See the\nagentic-commerce and abilities-and-mcp references.)",{"type":42,"tag":51,"props":329,"children":330},{},[331],{"type":42,"tag":77,"props":332,"children":333},{},[334],{"type":48,"value":335},"Data & Compliance:",{"type":42,"tag":144,"props":337,"children":338},{},[339,344,349],{"type":42,"tag":73,"props":340,"children":341},{},[342],{"type":48,"value":343},"What user\u002Fcustomer data does the plugin collect, store, or transmit?",{"type":42,"tag":73,"props":345,"children":346},{},[347],{"type":48,"value":348},"Are there GDPR, PCI-DSS, or other compliance requirements?",{"type":42,"tag":73,"props":350,"children":351},{},[352],{"type":48,"value":353},"Does it process payments directly or integrate with a payment gateway?",{"type":42,"tag":124,"props":355,"children":357},{"id":356},"saving-the-project-brief",[358],{"type":48,"value":359},"Saving the Project Brief",{"type":42,"tag":51,"props":361,"children":362},{},[363,365,370],{"type":48,"value":364},"After the interview, compile all answers into a ",{"type":42,"tag":115,"props":366,"children":368},{"className":367},[],[369],{"type":48,"value":120},{"type":48,"value":371}," file with this structure:",{"type":42,"tag":373,"props":374,"children":379},"pre",{"className":375,"code":376,"language":377,"meta":378,"style":378},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Project Brief: [Plugin Name]\n\n## Overview\n[One-paragraph summary of the plugin]\n\n## Target Market\n[Market details, distribution channel, competitive landscape]\n\n## Core Functionality\n[Detailed description of what the plugin does]\n\n## Customer-Facing Features\n[Bulleted list of shopper-facing features with descriptions]\n\n## Admin Features\n[Bulleted list of merchant-facing features with descriptions]\n\n## Technical Requirements\n- Minimum WordPress version: X.X\n- Minimum WooCommerce version: X.X\n- Minimum PHP version: 8.1\n- HPOS compatible: Yes (mandatory)\n- Cart & Checkout Blocks compatible: [Yes\u002FNo]\n- Product editor: classic (the block-based Product Editor is removed in WC 11.0)\n- Site Editor compatible: [Yes\u002FNo]\n- Store API extensions needed: [Yes\u002FNo — describe if yes]\n- Agentic \u002F AI-agent readiness: [No \u002F which path: WooCommerce MCP + Abilities \u002F Stripe ACS \u002F community ACP]\n- Custom database tables: [Yes\u002FNo — list if yes]\n- External API integrations: [List]\n- Background processing: [Yes\u002FNo — describe if yes]\n\n## Data & Compliance\n[What data is collected, stored, transmitted; compliance requirements]\n\n## Out of Scope\n[Explicitly list what this plugin does NOT do]\n","markdown","",[380],{"type":42,"tag":115,"props":381,"children":382},{"__ignoreMap":378},[383,400,410,424,434,441,454,463,471,484,493,501,514,523,531,544,553,561,574,588,601,614,627,656,669,694,707,720,733,759,772,780,793,802,810,823],{"type":42,"tag":384,"props":385,"children":387},"span",{"class":386,"line":29},"line",[388,394],{"type":42,"tag":384,"props":389,"children":391},{"style":390},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[392],{"type":48,"value":393},"# ",{"type":42,"tag":384,"props":395,"children":397},{"style":396},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[398],{"type":48,"value":399},"Project Brief: [Plugin Name]\n",{"type":42,"tag":384,"props":401,"children":403},{"class":386,"line":402},2,[404],{"type":42,"tag":384,"props":405,"children":407},{"emptyLinePlaceholder":406},true,[408],{"type":48,"value":409},"\n",{"type":42,"tag":384,"props":411,"children":413},{"class":386,"line":412},3,[414,419],{"type":42,"tag":384,"props":415,"children":416},{"style":390},[417],{"type":48,"value":418},"## ",{"type":42,"tag":384,"props":420,"children":421},{"style":396},[422],{"type":48,"value":423},"Overview\n",{"type":42,"tag":384,"props":425,"children":427},{"class":386,"line":426},4,[428],{"type":42,"tag":384,"props":429,"children":431},{"style":430},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[432],{"type":48,"value":433},"[One-paragraph summary of the plugin]\n",{"type":42,"tag":384,"props":435,"children":436},{"class":386,"line":25},[437],{"type":42,"tag":384,"props":438,"children":439},{"emptyLinePlaceholder":406},[440],{"type":48,"value":409},{"type":42,"tag":384,"props":442,"children":444},{"class":386,"line":443},6,[445,449],{"type":42,"tag":384,"props":446,"children":447},{"style":390},[448],{"type":48,"value":418},{"type":42,"tag":384,"props":450,"children":451},{"style":396},[452],{"type":48,"value":453},"Target Market\n",{"type":42,"tag":384,"props":455,"children":457},{"class":386,"line":456},7,[458],{"type":42,"tag":384,"props":459,"children":460},{"style":430},[461],{"type":48,"value":462},"[Market details, distribution channel, competitive landscape]\n",{"type":42,"tag":384,"props":464,"children":466},{"class":386,"line":465},8,[467],{"type":42,"tag":384,"props":468,"children":469},{"emptyLinePlaceholder":406},[470],{"type":48,"value":409},{"type":42,"tag":384,"props":472,"children":474},{"class":386,"line":473},9,[475,479],{"type":42,"tag":384,"props":476,"children":477},{"style":390},[478],{"type":48,"value":418},{"type":42,"tag":384,"props":480,"children":481},{"style":396},[482],{"type":48,"value":483},"Core Functionality\n",{"type":42,"tag":384,"props":485,"children":487},{"class":386,"line":486},10,[488],{"type":42,"tag":384,"props":489,"children":490},{"style":430},[491],{"type":48,"value":492},"[Detailed description of what the plugin does]\n",{"type":42,"tag":384,"props":494,"children":496},{"class":386,"line":495},11,[497],{"type":42,"tag":384,"props":498,"children":499},{"emptyLinePlaceholder":406},[500],{"type":48,"value":409},{"type":42,"tag":384,"props":502,"children":504},{"class":386,"line":503},12,[505,509],{"type":42,"tag":384,"props":506,"children":507},{"style":390},[508],{"type":48,"value":418},{"type":42,"tag":384,"props":510,"children":511},{"style":396},[512],{"type":48,"value":513},"Customer-Facing Features\n",{"type":42,"tag":384,"props":515,"children":517},{"class":386,"line":516},13,[518],{"type":42,"tag":384,"props":519,"children":520},{"style":430},[521],{"type":48,"value":522},"[Bulleted list of shopper-facing features with descriptions]\n",{"type":42,"tag":384,"props":524,"children":526},{"class":386,"line":525},14,[527],{"type":42,"tag":384,"props":528,"children":529},{"emptyLinePlaceholder":406},[530],{"type":48,"value":409},{"type":42,"tag":384,"props":532,"children":534},{"class":386,"line":533},15,[535,539],{"type":42,"tag":384,"props":536,"children":537},{"style":390},[538],{"type":48,"value":418},{"type":42,"tag":384,"props":540,"children":541},{"style":396},[542],{"type":48,"value":543},"Admin Features\n",{"type":42,"tag":384,"props":545,"children":547},{"class":386,"line":546},16,[548],{"type":42,"tag":384,"props":549,"children":550},{"style":430},[551],{"type":48,"value":552},"[Bulleted list of merchant-facing features with descriptions]\n",{"type":42,"tag":384,"props":554,"children":556},{"class":386,"line":555},17,[557],{"type":42,"tag":384,"props":558,"children":559},{"emptyLinePlaceholder":406},[560],{"type":48,"value":409},{"type":42,"tag":384,"props":562,"children":564},{"class":386,"line":563},18,[565,569],{"type":42,"tag":384,"props":566,"children":567},{"style":390},[568],{"type":48,"value":418},{"type":42,"tag":384,"props":570,"children":571},{"style":396},[572],{"type":48,"value":573},"Technical Requirements\n",{"type":42,"tag":384,"props":575,"children":577},{"class":386,"line":576},19,[578,583],{"type":42,"tag":384,"props":579,"children":580},{"style":390},[581],{"type":48,"value":582},"-",{"type":42,"tag":384,"props":584,"children":585},{"style":430},[586],{"type":48,"value":587}," Minimum WordPress version: X.X\n",{"type":42,"tag":384,"props":589,"children":591},{"class":386,"line":590},20,[592,596],{"type":42,"tag":384,"props":593,"children":594},{"style":390},[595],{"type":48,"value":582},{"type":42,"tag":384,"props":597,"children":598},{"style":430},[599],{"type":48,"value":600}," Minimum WooCommerce version: X.X\n",{"type":42,"tag":384,"props":602,"children":604},{"class":386,"line":603},21,[605,609],{"type":42,"tag":384,"props":606,"children":607},{"style":390},[608],{"type":48,"value":582},{"type":42,"tag":384,"props":610,"children":611},{"style":430},[612],{"type":48,"value":613}," Minimum PHP version: 8.1\n",{"type":42,"tag":384,"props":615,"children":617},{"class":386,"line":616},22,[618,622],{"type":42,"tag":384,"props":619,"children":620},{"style":390},[621],{"type":48,"value":582},{"type":42,"tag":384,"props":623,"children":624},{"style":430},[625],{"type":48,"value":626}," HPOS compatible: Yes (mandatory)\n",{"type":42,"tag":384,"props":628,"children":630},{"class":386,"line":629},23,[631,635,640,645,651],{"type":42,"tag":384,"props":632,"children":633},{"style":390},[634],{"type":48,"value":582},{"type":42,"tag":384,"props":636,"children":637},{"style":430},[638],{"type":48,"value":639}," Cart & Checkout Blocks compatible: ",{"type":42,"tag":384,"props":641,"children":642},{"style":390},[643],{"type":48,"value":644},"[",{"type":42,"tag":384,"props":646,"children":648},{"style":647},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[649],{"type":48,"value":650},"Yes\u002FNo",{"type":42,"tag":384,"props":652,"children":653},{"style":390},[654],{"type":48,"value":655},"]\n",{"type":42,"tag":384,"props":657,"children":659},{"class":386,"line":658},24,[660,664],{"type":42,"tag":384,"props":661,"children":662},{"style":390},[663],{"type":48,"value":582},{"type":42,"tag":384,"props":665,"children":666},{"style":430},[667],{"type":48,"value":668}," Product editor: classic (the block-based Product Editor is removed in WC 11.0)\n",{"type":42,"tag":384,"props":670,"children":672},{"class":386,"line":671},25,[673,677,682,686,690],{"type":42,"tag":384,"props":674,"children":675},{"style":390},[676],{"type":48,"value":582},{"type":42,"tag":384,"props":678,"children":679},{"style":430},[680],{"type":48,"value":681}," Site Editor compatible: ",{"type":42,"tag":384,"props":683,"children":684},{"style":390},[685],{"type":48,"value":644},{"type":42,"tag":384,"props":687,"children":688},{"style":647},[689],{"type":48,"value":650},{"type":42,"tag":384,"props":691,"children":692},{"style":390},[693],{"type":48,"value":655},{"type":42,"tag":384,"props":695,"children":697},{"class":386,"line":696},26,[698,702],{"type":42,"tag":384,"props":699,"children":700},{"style":390},[701],{"type":48,"value":582},{"type":42,"tag":384,"props":703,"children":704},{"style":430},[705],{"type":48,"value":706}," Store API extensions needed: [Yes\u002FNo — describe if yes]\n",{"type":42,"tag":384,"props":708,"children":710},{"class":386,"line":709},27,[711,715],{"type":42,"tag":384,"props":712,"children":713},{"style":390},[714],{"type":48,"value":582},{"type":42,"tag":384,"props":716,"children":717},{"style":430},[718],{"type":48,"value":719}," Agentic \u002F AI-agent readiness: [No \u002F which path: WooCommerce MCP + Abilities \u002F Stripe ACS \u002F community ACP]\n",{"type":42,"tag":384,"props":721,"children":723},{"class":386,"line":722},28,[724,728],{"type":42,"tag":384,"props":725,"children":726},{"style":390},[727],{"type":48,"value":582},{"type":42,"tag":384,"props":729,"children":730},{"style":430},[731],{"type":48,"value":732}," Custom database tables: [Yes\u002FNo — list if yes]\n",{"type":42,"tag":384,"props":734,"children":736},{"class":386,"line":735},29,[737,741,746,750,755],{"type":42,"tag":384,"props":738,"children":739},{"style":390},[740],{"type":48,"value":582},{"type":42,"tag":384,"props":742,"children":743},{"style":430},[744],{"type":48,"value":745}," External API integrations: ",{"type":42,"tag":384,"props":747,"children":748},{"style":390},[749],{"type":48,"value":644},{"type":42,"tag":384,"props":751,"children":752},{"style":647},[753],{"type":48,"value":754},"List",{"type":42,"tag":384,"props":756,"children":757},{"style":390},[758],{"type":48,"value":655},{"type":42,"tag":384,"props":760,"children":762},{"class":386,"line":761},30,[763,767],{"type":42,"tag":384,"props":764,"children":765},{"style":390},[766],{"type":48,"value":582},{"type":42,"tag":384,"props":768,"children":769},{"style":430},[770],{"type":48,"value":771}," Background processing: [Yes\u002FNo — describe if yes]\n",{"type":42,"tag":384,"props":773,"children":775},{"class":386,"line":774},31,[776],{"type":42,"tag":384,"props":777,"children":778},{"emptyLinePlaceholder":406},[779],{"type":48,"value":409},{"type":42,"tag":384,"props":781,"children":783},{"class":386,"line":782},32,[784,788],{"type":42,"tag":384,"props":785,"children":786},{"style":390},[787],{"type":48,"value":418},{"type":42,"tag":384,"props":789,"children":790},{"style":396},[791],{"type":48,"value":792},"Data & Compliance\n",{"type":42,"tag":384,"props":794,"children":796},{"class":386,"line":795},33,[797],{"type":42,"tag":384,"props":798,"children":799},{"style":430},[800],{"type":48,"value":801},"[What data is collected, stored, transmitted; compliance requirements]\n",{"type":42,"tag":384,"props":803,"children":805},{"class":386,"line":804},34,[806],{"type":42,"tag":384,"props":807,"children":808},{"emptyLinePlaceholder":406},[809],{"type":48,"value":409},{"type":42,"tag":384,"props":811,"children":813},{"class":386,"line":812},35,[814,818],{"type":42,"tag":384,"props":815,"children":816},{"style":390},[817],{"type":48,"value":418},{"type":42,"tag":384,"props":819,"children":820},{"style":396},[821],{"type":48,"value":822},"Out of Scope\n",{"type":42,"tag":384,"props":824,"children":826},{"class":386,"line":825},36,[827],{"type":42,"tag":384,"props":828,"children":829},{"style":430},[830],{"type":48,"value":831},"[Explicitly list what this plugin does NOT do]\n",{"type":42,"tag":51,"props":833,"children":834},{},[835],{"type":48,"value":836},"Save this file in the plugin root. Reference it before making any architectural decision.",{"type":42,"tag":100,"props":838,"children":839},{},[],{"type":42,"tag":57,"props":841,"children":843},{"id":842},"phase-2-development-execution",[844],{"type":48,"value":845},"Phase 2: Development Execution",{"type":42,"tag":51,"props":847,"children":848},{},[849],{"type":48,"value":850},"Once the project brief is complete, follow these steps in order. For each step, consult the\nrelevant reference file before proceeding.",{"type":42,"tag":124,"props":852,"children":854},{"id":853},"step-1-scaffold-the-plugin-structure",[855],{"type":48,"value":856},"Step 1: Scaffold the Plugin Structure",{"type":42,"tag":51,"props":858,"children":859},{},[860,862,868],{"type":48,"value":861},"Read ",{"type":42,"tag":115,"props":863,"children":865},{"className":864},[],[866],{"type":48,"value":867},"references\u002Fplugin-architecture.md",{"type":48,"value":869}," for the complete file structure template.",{"type":42,"tag":51,"props":871,"children":872},{},[873],{"type":48,"value":874},"Every WooCommerce plugin follows this canonical structure:",{"type":42,"tag":373,"props":876,"children":880},{"className":877,"code":879,"language":48},[878],"language-text","plugin-slug\u002F\n├── plugin-slug.php              # Main plugin file (bootstrap)\n├── uninstall.php                # Clean uninstall handler\n├── readme.txt                   # WordPress.org readme\n├── composer.json                # PHP dependencies & autoloading\n├── package.json                 # JS\u002FCSS build tooling\n├── phpcs.xml.dist               # PHPCS configuration\n├── phpunit.xml.dist             # PHPUnit configuration\n├── playwright.config.ts         # Playwright E2E configuration\n├── PROJECT_BRIEF.md             # Project brief from Phase 1\n├── .github\u002F\n│   └── workflows\u002F\n│       ├── ci.yml               # Continuous integration\n│       └── release.yml          # Release automation\n├── src\u002F                         # PSR-4 autoloaded PHP classes\n│   ├── Plugin.php               # Main plugin class\n│   ├── Admin\u002F                   # Admin-only functionality\n│   ├── Frontend\u002F                # Frontend-only functionality\n│   ├── API\u002F                     # REST API endpoints\n│   ├── Data\u002F                    # Data stores and repositories\n│   ├── Integrations\u002F            # Third-party integrations\n│   └── Utilities\u002F               # Helper classes\n├── includes\u002F                    # Legacy-style includes (if needed)\n├── assets\u002F\n│   ├── css\u002F\n│   ├── js\u002F\n│   └── images\u002F\n├── templates\u002F                   # Overridable templates\n├── languages\u002F                   # Translation files\n├── tests\u002F\n│   ├── Unit\u002F                    # PHPUnit unit tests\n│   ├── Integration\u002F             # PHPUnit integration tests\n│   ├── E2E\u002F                     # Playwright end-to-end tests\n│   └── bootstrap.php            # Test bootstrap\n└── vendor\u002F                      # Composer dependencies (gitignored)\n",[881],{"type":42,"tag":115,"props":882,"children":883},{"__ignoreMap":378},[884],{"type":48,"value":879},{"type":42,"tag":124,"props":886,"children":888},{"id":887},"step-2-write-the-main-plugin-file",[889],{"type":48,"value":890},"Step 2: Write the Main Plugin File",{"type":42,"tag":51,"props":892,"children":893},{},[894,896,902],{"type":48,"value":895},"The main plugin file (",{"type":42,"tag":115,"props":897,"children":899},{"className":898},[],[900],{"type":48,"value":901},"plugin-slug.php",{"type":48,"value":903},") must:",{"type":42,"tag":144,"props":905,"children":906},{},[907,912,923,928,933,938],{"type":42,"tag":73,"props":908,"children":909},{},[910],{"type":48,"value":911},"Have a complete plugin header with all required fields",{"type":42,"tag":73,"props":913,"children":914},{},[915,917],{"type":48,"value":916},"Declare HPOS compatibility via ",{"type":42,"tag":115,"props":918,"children":920},{"className":919},[],[921],{"type":48,"value":922},"before_woocommerce_init",{"type":42,"tag":73,"props":924,"children":925},{},[926],{"type":48,"value":927},"Check for WooCommerce activation before loading",{"type":42,"tag":73,"props":929,"children":930},{},[931],{"type":48,"value":932},"Use Composer autoloading (PSR-4)",{"type":42,"tag":73,"props":934,"children":935},{},[936],{"type":48,"value":937},"Define plugin constants (version, path, URL, basename)",{"type":42,"tag":73,"props":939,"children":940},{},[941,943,949],{"type":48,"value":942},"Hook into ",{"type":42,"tag":115,"props":944,"children":946},{"className":945},[],[947],{"type":48,"value":948},"plugins_loaded",{"type":48,"value":950}," at an appropriate priority",{"type":42,"tag":51,"props":952,"children":953},{},[954,955,961],{"type":48,"value":861},{"type":42,"tag":115,"props":956,"children":958},{"className":957},[],[959],{"type":48,"value":960},"references\u002Fcoding-standards.md",{"type":48,"value":962}," for PHP formatting rules and naming conventions.",{"type":42,"tag":124,"props":964,"children":966},{"id":965},"step-3-implement-core-functionality",[967],{"type":48,"value":968},"Step 3: Implement Core Functionality",{"type":42,"tag":51,"props":970,"children":971},{},[972],{"type":48,"value":973},"For every class and function you write:",{"type":42,"tag":69,"props":975,"children":976},{},[977,991,1006,1032],{"type":42,"tag":73,"props":978,"children":979},{},[980,989],{"type":42,"tag":77,"props":981,"children":982},{},[983,984],{"type":48,"value":861},{"type":42,"tag":115,"props":985,"children":987},{"className":986},[],[988],{"type":48,"value":960},{"type":48,"value":990}," — Follow WordPress PHP Coding Standards, use proper\nnaming conventions, document with PHPDoc blocks",{"type":42,"tag":73,"props":992,"children":993},{},[994,1004],{"type":42,"tag":77,"props":995,"children":996},{},[997,998],{"type":48,"value":861},{"type":42,"tag":115,"props":999,"children":1001},{"className":1000},[],[1002],{"type":48,"value":1003},"references\u002Fsecurity.md",{"type":48,"value":1005}," — Sanitize all input, escape all output, verify nonces and\ncapabilities, use prepared statements",{"type":42,"tag":73,"props":1007,"children":1008},{},[1009,1014,1016,1022,1024,1030],{"type":42,"tag":77,"props":1010,"children":1011},{},[1012],{"type":48,"value":1013},"Follow HPOS patterns",{"type":48,"value":1015}," — Never access ",{"type":42,"tag":115,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":48,"value":1021},"wp_posts",{"type":48,"value":1023}," \u002F ",{"type":42,"tag":115,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":48,"value":1029},"wp_postmeta",{"type":48,"value":1031}," for orders; always use\nWooCommerce CRUD methods and data stores",{"type":42,"tag":73,"props":1033,"children":1034},{},[1035,1040],{"type":42,"tag":77,"props":1036,"children":1037},{},[1038],{"type":48,"value":1039},"Follow WooCommerce UX guidelines",{"type":48,"value":1041}," — Use native WooCommerce UI components, respect admin\ncolor schemes, keep settings minimal with smart defaults",{"type":42,"tag":124,"props":1043,"children":1045},{"id":1044},"step-4-write-tests",[1046],{"type":48,"value":1047},"Step 4: Write Tests",{"type":42,"tag":51,"props":1049,"children":1050},{},[1051,1052,1058],{"type":48,"value":861},{"type":42,"tag":115,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":48,"value":1057},"references\u002Ftesting.md",{"type":48,"value":1059}," for the complete testing strategy.",{"type":42,"tag":51,"props":1061,"children":1062},{},[1063],{"type":48,"value":1064},"Every feature must have corresponding tests before it's considered complete:",{"type":42,"tag":144,"props":1066,"children":1067},{},[1068,1078,1088,1098],{"type":42,"tag":73,"props":1069,"children":1070},{},[1071,1076],{"type":42,"tag":77,"props":1072,"children":1073},{},[1074],{"type":48,"value":1075},"Unit tests",{"type":48,"value":1077}," (PHPUnit) for all business logic, data transformations, and utility functions",{"type":42,"tag":73,"props":1079,"children":1080},{},[1081,1086],{"type":42,"tag":77,"props":1082,"children":1083},{},[1084],{"type":48,"value":1085},"Integration tests",{"type":48,"value":1087}," (PHPUnit + WordPress test framework) for hooks, filters, database\ninteractions, and WooCommerce API integration",{"type":42,"tag":73,"props":1089,"children":1090},{},[1091,1096],{"type":42,"tag":77,"props":1092,"children":1093},{},[1094],{"type":48,"value":1095},"E2E tests",{"type":48,"value":1097}," (Playwright) for all user-facing flows — both admin and storefront",{"type":42,"tag":73,"props":1099,"children":1100},{},[1101,1106],{"type":42,"tag":77,"props":1102,"children":1103},{},[1104],{"type":48,"value":1105},"Security tests",{"type":48,"value":1107}," for input validation, authentication, authorization, and injection resistance",{"type":42,"tag":51,"props":1109,"children":1110},{},[1111],{"type":48,"value":1112},"For plugins that handle financial data, also include:",{"type":42,"tag":144,"props":1114,"children":1115},{},[1116,1126,1136,1146],{"type":42,"tag":73,"props":1117,"children":1118},{},[1119,1124],{"type":42,"tag":77,"props":1120,"children":1121},{},[1122],{"type":48,"value":1123},"Idempotency tests",{"type":48,"value":1125}," — verify that duplicate requests produce the same result",{"type":42,"tag":73,"props":1127,"children":1128},{},[1129,1134],{"type":42,"tag":77,"props":1130,"children":1131},{},[1132],{"type":48,"value":1133},"Race condition tests",{"type":48,"value":1135}," — verify concurrent operations don't corrupt data",{"type":42,"tag":73,"props":1137,"children":1138},{},[1139,1144],{"type":42,"tag":77,"props":1140,"children":1141},{},[1142],{"type":48,"value":1143},"Boundary tests",{"type":48,"value":1145}," — verify behavior at financial precision boundaries",{"type":42,"tag":73,"props":1147,"children":1148},{},[1149,1154],{"type":42,"tag":77,"props":1150,"children":1151},{},[1152],{"type":48,"value":1153},"Audit trail tests",{"type":48,"value":1155}," — verify all financial operations are logged",{"type":42,"tag":124,"props":1157,"children":1159},{"id":1158},"step-5-configure-cicd",[1160],{"type":48,"value":1161},"Step 5: Configure CI\u002FCD",{"type":42,"tag":51,"props":1163,"children":1164},{},[1165],{"type":48,"value":1166},"Set up GitHub Actions workflows that run:",{"type":42,"tag":144,"props":1168,"children":1169},{},[1170,1175,1180,1185,1190],{"type":42,"tag":73,"props":1171,"children":1172},{},[1173],{"type":48,"value":1174},"PHPCS with WordPress and WooCommerce coding standards",{"type":42,"tag":73,"props":1176,"children":1177},{},[1178],{"type":48,"value":1179},"PHPStan or Psalm for static analysis (level 6+ minimum)",{"type":42,"tag":73,"props":1181,"children":1182},{},[1183],{"type":48,"value":1184},"PHPUnit test suite",{"type":42,"tag":73,"props":1186,"children":1187},{},[1188],{"type":48,"value":1189},"Playwright E2E suite against a wp-env environment",{"type":42,"tag":73,"props":1191,"children":1192},{},[1193,1195,1201],{"type":48,"value":1194},"WooCommerce QIT managed tests (run locally before submission — see ",{"type":42,"tag":115,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":48,"value":1200},"references\u002Fmarketplace-submission.md",{"type":48,"value":1202},")",{"type":42,"tag":100,"props":1204,"children":1205},{},[],{"type":42,"tag":57,"props":1207,"children":1209},{"id":1208},"reference-files",[1210],{"type":48,"value":1211},"Reference Files",{"type":42,"tag":51,"props":1213,"children":1214},{},[1215],{"type":48,"value":1216},"These files contain detailed standards and patterns. Read the relevant file before working on\nthat aspect of the plugin.",{"type":42,"tag":1218,"props":1219,"children":1220},"table",{},[1221,1240],{"type":42,"tag":1222,"props":1223,"children":1224},"thead",{},[1225],{"type":42,"tag":1226,"props":1227,"children":1228},"tr",{},[1229,1235],{"type":42,"tag":1230,"props":1231,"children":1232},"th",{},[1233],{"type":48,"value":1234},"File",{"type":42,"tag":1230,"props":1236,"children":1237},{},[1238],{"type":48,"value":1239},"When to Read",{"type":42,"tag":1241,"props":1242,"children":1243},"tbody",{},[1244,1261,1277,1293,1309,1326,1343,1360,1377,1394],{"type":42,"tag":1226,"props":1245,"children":1246},{},[1247,1256],{"type":42,"tag":1248,"props":1249,"children":1250},"td",{},[1251],{"type":42,"tag":115,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":48,"value":960},{"type":42,"tag":1248,"props":1257,"children":1258},{},[1259],{"type":48,"value":1260},"Before writing any PHP, JS, CSS, or HTML",{"type":42,"tag":1226,"props":1262,"children":1263},{},[1264,1272],{"type":42,"tag":1248,"props":1265,"children":1266},{},[1267],{"type":42,"tag":115,"props":1268,"children":1270},{"className":1269},[],[1271],{"type":48,"value":1003},{"type":42,"tag":1248,"props":1273,"children":1274},{},[1275],{"type":48,"value":1276},"Before handling any user input, database queries, or API calls",{"type":42,"tag":1226,"props":1278,"children":1279},{},[1280,1288],{"type":42,"tag":1248,"props":1281,"children":1282},{},[1283],{"type":42,"tag":115,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":48,"value":1057},{"type":42,"tag":1248,"props":1289,"children":1290},{},[1291],{"type":48,"value":1292},"Before writing any test or configuring test infrastructure",{"type":42,"tag":1226,"props":1294,"children":1295},{},[1296,1304],{"type":42,"tag":1248,"props":1297,"children":1298},{},[1299],{"type":42,"tag":115,"props":1300,"children":1302},{"className":1301},[],[1303],{"type":48,"value":867},{"type":42,"tag":1248,"props":1305,"children":1306},{},[1307],{"type":48,"value":1308},"When scaffolding the plugin or adding new components",{"type":42,"tag":1226,"props":1310,"children":1311},{},[1312,1321],{"type":42,"tag":1248,"props":1313,"children":1314},{},[1315],{"type":42,"tag":115,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":48,"value":1320},"references\u002Fwoocommerce-apis.md",{"type":42,"tag":1248,"props":1322,"children":1323},{},[1324],{"type":48,"value":1325},"When integrating with WooCommerce data stores, hooks, or REST API",{"type":42,"tag":1226,"props":1327,"children":1328},{},[1329,1338],{"type":42,"tag":1248,"props":1330,"children":1331},{},[1332],{"type":42,"tag":115,"props":1333,"children":1335},{"className":1334},[],[1336],{"type":48,"value":1337},"references\u002Fux-guidelines.md",{"type":42,"tag":1248,"props":1339,"children":1340},{},[1341],{"type":48,"value":1342},"When building admin UI, settings pages, or frontend components",{"type":42,"tag":1226,"props":1344,"children":1345},{},[1346,1355],{"type":42,"tag":1248,"props":1347,"children":1348},{},[1349],{"type":42,"tag":115,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":48,"value":1354},"references\u002Fabilities-and-mcp.md",{"type":42,"tag":1248,"props":1356,"children":1357},{},[1358],{"type":48,"value":1359},"When exposing operations to AI agents (WordPress Abilities API + MCP)",{"type":42,"tag":1226,"props":1361,"children":1362},{},[1363,1372],{"type":42,"tag":1248,"props":1364,"children":1365},{},[1366],{"type":42,"tag":115,"props":1367,"children":1369},{"className":1368},[],[1370],{"type":48,"value":1371},"references\u002Fagentic-commerce.md",{"type":42,"tag":1248,"props":1373,"children":1374},{},[1375],{"type":48,"value":1376},"When the plugin should be discoverable or buyable by AI shopping agents",{"type":42,"tag":1226,"props":1378,"children":1379},{},[1380,1389],{"type":42,"tag":1248,"props":1381,"children":1382},{},[1383],{"type":42,"tag":115,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":48,"value":1388},"references\u002Fpci-script-management.md",{"type":42,"tag":1248,"props":1390,"children":1391},{},[1392],{"type":48,"value":1393},"When the plugin handles payments (PCI DSS v4.0.1 payment-page scripts)",{"type":42,"tag":1226,"props":1395,"children":1396},{},[1397,1405],{"type":42,"tag":1248,"props":1398,"children":1399},{},[1400],{"type":42,"tag":115,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":48,"value":1200},{"type":42,"tag":1248,"props":1406,"children":1407},{},[1408],{"type":48,"value":1409},"Before submitting to the WooCommerce Marketplace or WordPress.org (QIT, distribution)",{"type":42,"tag":100,"props":1411,"children":1412},{},[],{"type":42,"tag":57,"props":1414,"children":1416},{"id":1415},"non-negotiable-standards",[1417],{"type":48,"value":1418},"Non-Negotiable Standards",{"type":42,"tag":51,"props":1420,"children":1421},{},[1422],{"type":48,"value":1423},"These apply to every single file in the project, no exceptions:",{"type":42,"tag":69,"props":1425,"children":1426},{},[1427,1467,1538,1548,1588,1620,1659,1669,1679,1704],{"type":42,"tag":73,"props":1428,"children":1429},{},[1430,1435,1437,1443,1444,1450,1452,1458,1459,1465],{"type":42,"tag":77,"props":1431,"children":1432},{},[1433],{"type":48,"value":1434},"HPOS compatibility is mandatory.",{"type":48,"value":1436}," Never use ",{"type":42,"tag":115,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":48,"value":1442},"get_post_meta()",{"type":48,"value":1023},{"type":42,"tag":115,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":48,"value":1449},"update_post_meta()",{"type":48,"value":1451}," for\norder data. Use ",{"type":42,"tag":115,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":48,"value":1457},"$order->get_meta()",{"type":48,"value":1023},{"type":42,"tag":115,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":48,"value":1464},"$order->update_meta_data()",{"type":48,"value":1466}," and WooCommerce CRUD.",{"type":42,"tag":73,"props":1468,"children":1469},{},[1470,1475,1477,1483,1485,1491,1493,1499,1501,1507,1508,1514,1515,1521,1522,1528,1530,1536],{"type":42,"tag":77,"props":1471,"children":1472},{},[1473],{"type":48,"value":1474},"All user input is hostile.",{"type":48,"value":1476}," Sanitize on input (",{"type":42,"tag":115,"props":1478,"children":1480},{"className":1479},[],[1481],{"type":48,"value":1482},"sanitize_text_field",{"type":48,"value":1484},", ",{"type":42,"tag":115,"props":1486,"children":1488},{"className":1487},[],[1489],{"type":48,"value":1490},"absint",{"type":48,"value":1492},",\n",{"type":42,"tag":115,"props":1494,"children":1496},{"className":1495},[],[1497],{"type":48,"value":1498},"sanitize_email",{"type":48,"value":1500},", etc.), escape on output (",{"type":42,"tag":115,"props":1502,"children":1504},{"className":1503},[],[1505],{"type":48,"value":1506},"esc_html",{"type":48,"value":1484},{"type":42,"tag":115,"props":1509,"children":1511},{"className":1510},[],[1512],{"type":48,"value":1513},"esc_attr",{"type":48,"value":1484},{"type":42,"tag":115,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":48,"value":1520},"esc_url",{"type":48,"value":1484},{"type":42,"tag":115,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":48,"value":1527},"wp_kses",{"type":48,"value":1529},"),\nand use ",{"type":42,"tag":115,"props":1531,"children":1533},{"className":1532},[],[1534],{"type":48,"value":1535},"$wpdb->prepare()",{"type":48,"value":1537}," for all database queries.",{"type":42,"tag":73,"props":1539,"children":1540},{},[1541,1546],{"type":42,"tag":77,"props":1542,"children":1543},{},[1544],{"type":48,"value":1545},"Nonces and capability checks on every form and AJAX handler.",{"type":48,"value":1547}," No exceptions.",{"type":42,"tag":73,"props":1549,"children":1550},{},[1551,1556,1558,1564,1565,1571,1572,1578,1580,1586],{"type":42,"tag":77,"props":1552,"children":1553},{},[1554],{"type":48,"value":1555},"Every public function has a PHPDoc block.",{"type":48,"value":1557}," Include ",{"type":42,"tag":115,"props":1559,"children":1561},{"className":1560},[],[1562],{"type":48,"value":1563},"@since",{"type":48,"value":1484},{"type":42,"tag":115,"props":1566,"children":1568},{"className":1567},[],[1569],{"type":48,"value":1570},"@param",{"type":48,"value":1484},{"type":42,"tag":115,"props":1573,"children":1575},{"className":1574},[],[1576],{"type":48,"value":1577},"@return",{"type":48,"value":1579},", and\n",{"type":42,"tag":115,"props":1581,"children":1583},{"className":1582},[],[1584],{"type":48,"value":1585},"@throws",{"type":48,"value":1587}," tags.",{"type":42,"tag":73,"props":1589,"children":1590},{},[1591,1596,1598,1604,1605,1611,1612,1618],{"type":42,"tag":77,"props":1592,"children":1593},{},[1594],{"type":48,"value":1595},"No direct database queries when WooCommerce or WordPress provides an API.",{"type":48,"value":1597}," Use data stores,\n",{"type":42,"tag":115,"props":1599,"children":1601},{"className":1600},[],[1602],{"type":48,"value":1603},"WC_Order",{"type":48,"value":1484},{"type":42,"tag":115,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":48,"value":1610},"WC_Product",{"type":48,"value":1484},{"type":42,"tag":115,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":48,"value":1617},"WP_Query",{"type":48,"value":1619},", etc.",{"type":42,"tag":73,"props":1621,"children":1622},{},[1623,1628,1630,1636,1637,1643,1644,1650,1651,1657],{"type":42,"tag":77,"props":1624,"children":1625},{},[1626],{"type":48,"value":1627},"All strings are translatable.",{"type":48,"value":1629}," Use ",{"type":42,"tag":115,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":48,"value":1635},"__()",{"type":48,"value":1484},{"type":42,"tag":115,"props":1638,"children":1640},{"className":1639},[],[1641],{"type":48,"value":1642},"_e()",{"type":48,"value":1484},{"type":42,"tag":115,"props":1645,"children":1647},{"className":1646},[],[1648],{"type":48,"value":1649},"esc_html__()",{"type":48,"value":1484},{"type":42,"tag":115,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":48,"value":1656},"esc_attr__()",{"type":48,"value":1658}," with the\nplugin's text domain.",{"type":42,"tag":73,"props":1660,"children":1661},{},[1662,1667],{"type":42,"tag":77,"props":1663,"children":1664},{},[1665],{"type":48,"value":1666},"Tests exist for every feature.",{"type":48,"value":1668}," No feature is complete without unit and integration tests.\nUser-facing features also need E2E tests.",{"type":42,"tag":73,"props":1670,"children":1671},{},[1672,1677],{"type":42,"tag":77,"props":1673,"children":1674},{},[1675],{"type":48,"value":1676},"Prefix everything.",{"type":48,"value":1678}," All functions, classes, hooks, options, meta keys, and REST routes use\nthe plugin's unique prefix to avoid conflicts.",{"type":42,"tag":73,"props":1680,"children":1681},{},[1682,1687,1689,1695,1696,1702],{"type":42,"tag":77,"props":1683,"children":1684},{},[1685],{"type":48,"value":1686},"Follow WordPress enqueue system.",{"type":48,"value":1688}," Never inline scripts or styles except when absolutely\nnecessary. Use ",{"type":42,"tag":115,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":48,"value":1694},"wp_enqueue_script",{"type":48,"value":1023},{"type":42,"tag":115,"props":1697,"children":1699},{"className":1698},[],[1700],{"type":48,"value":1701},"wp_enqueue_style",{"type":48,"value":1703}," with proper dependencies.",{"type":42,"tag":73,"props":1705,"children":1706},{},[1707,1712,1714,1720,1722,1728,1730,1735,1737,1743,1745,1750,1752,1758],{"type":42,"tag":77,"props":1708,"children":1709},{},[1710],{"type":48,"value":1711},"Declare all WooCommerce feature compatibility.",{"type":48,"value":1713}," HPOS (",{"type":42,"tag":115,"props":1715,"children":1717},{"className":1716},[],[1718],{"type":48,"value":1719},"custom_order_tables",{"type":48,"value":1721},") and\nCart & Checkout Blocks (",{"type":42,"tag":115,"props":1723,"children":1725},{"className":1724},[],[1726],{"type":48,"value":1727},"cart_checkout_blocks",{"type":48,"value":1729},") — declare support for everything applicable via\n",{"type":42,"tag":115,"props":1731,"children":1733},{"className":1732},[],[1734],{"type":48,"value":922},{"type":48,"value":1736}," using ",{"type":42,"tag":115,"props":1738,"children":1740},{"className":1739},[],[1741],{"type":48,"value":1742},"FeaturesUtil::declare_compatibility()",{"type":48,"value":1744},", and test thoroughly with\neach feature enabled before declaring it. Do ",{"type":42,"tag":77,"props":1746,"children":1747},{},[1748],{"type":48,"value":1749},"not",{"type":48,"value":1751}," declare ",{"type":42,"tag":115,"props":1753,"children":1755},{"className":1754},[],[1756],{"type":48,"value":1757},"product_block_editor",{"type":48,"value":1759},": the block-based\nProduct Editor is being removed in WooCommerce 11.0 (build against the classic product editor).",{"type":42,"tag":1761,"props":1762,"children":1763},"style",{},[1764],{"type":48,"value":1765},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1767,"total":412},[1768,1783,1790],{"slug":1769,"name":1769,"fn":1770,"description":1771,"org":1772,"tags":1773,"stars":25,"repoUrl":26,"updatedAt":1782},"woocommerce-finalize","audit WooCommerce plugin code health","Pre-release code health and traceability audit for WooCommerce plugins. Runs after code review -- focuses on dead code, duplication, structural complexity, and full-stack traceability analysis. Use when finalizing, auditing, or preparing a WooCommerce plugin for release. Also trigger when the user mentions \"finalize\", \"pre-release audit\", \"code health check\", \"traceability analysis\", or \"ready to ship\". This skill complements security and UX review by catching structural issues and broken data paths that checklist-based reviews miss.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1774,1777,1780,1781],{"name":1775,"slug":1776,"type":15},"Code Analysis","code-analysis",{"name":1778,"slug":1779,"type":15},"Code Review","code-review",{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},"2026-04-12T04:56:21.142829",{"slug":4,"name":4,"fn":5,"description":6,"org":1784,"tags":1785,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1786,1787,1788,1789],{"name":20,"slug":21,"type":15},{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"slug":1791,"name":1791,"fn":1792,"description":1793,"org":1794,"tags":1795,"stars":25,"repoUrl":26,"updatedAt":1802},"woocommerce-upgrade-safety","review WooCommerce plugin upgrades for safety","Pre-release upgrade safety review for WooCommerce plugins. Validates database migrations, settings compatibility, payment token preservation, hook deprecation, rollback safety, and merchant communication for version upgrades. Use before any minor or major version release, when a release includes database schema changes, settings restructuring, new feature declarations (HPOS, blocks), deprecated hooks\u002Ffilters, or payment flow changes. Also trigger when reviewing a diff that shows install class changes, dbDelta calls, payment token modifications, hook removals, or minimum version bumps. Skip for patch releases that contain only bug fixes with no structural changes.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1796,1797,1800,1801],{"name":1778,"slug":1779,"type":15},{"name":1798,"slug":1799,"type":15},"Risk Assessment","risk-assessment",{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},"2026-04-12T04:56:23.847888",{"items":1804,"total":1990},[1805,1826,1843,1857,1874,1889,1901,1916,1933,1944,1959,1975],{"slug":1806,"name":1806,"fn":1807,"description":1808,"org":1809,"tags":1810,"stars":1823,"repoUrl":1824,"updatedAt":1825},"annotate","collect visual feedback with browser annotation tools","Open a browser with visual annotation tools. The user clicks elements on their site and leaves feedback — the agent reads annotations and makes changes. Use this when the user wants to point at specific elements to fix, tweak, or redesign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1811,1814,1817,1820],{"name":1812,"slug":1813,"type":15},"Frontend","frontend",{"name":1815,"slug":1816,"type":15},"Productivity","productivity",{"name":1818,"slug":1819,"type":15},"UX Copy","ux-copy",{"name":1821,"slug":1822,"type":15},"UX Design","ux-design",484,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio","2026-05-06T05:40:01.516544",{"slug":1827,"name":1827,"fn":1828,"description":1829,"org":1830,"tags":1831,"stars":1823,"repoUrl":1824,"updatedAt":1842},"block-content","write editable WordPress block markup","Write editable WordPress block markup for local Studio sites, including core\u002Fhtml limits, block-theme layout rules, full-width sections, validation, and skeleton-first page\u002FCSS recipes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1832,1835,1838,1841],{"name":1833,"slug":1834,"type":15},"Block Editor","block-editor",{"name":1836,"slug":1837,"type":15},"CSS","css",{"name":1839,"slug":1840,"type":15},"HTML","html",{"name":17,"slug":18,"type":15},"2026-05-27T07:01:55.629681",{"slug":1844,"name":1844,"fn":1845,"description":1846,"org":1847,"tags":1848,"stars":1823,"repoUrl":1824,"updatedAt":1856},"hosting-plans-helper","provide WordPress.com hosting plan information","Answer WordPress.com plan, pricing, upgrade, and feature-tier questions (plan names, what each tier unlocks — plugins, themes, custom code, SSH, hosting — and current prices) from authoritative live data. Load before answering ANY plan, pricing, or feature-gating question; never answer these from memory.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1849,1852,1855],{"name":1850,"slug":1851,"type":15},"Pricing","pricing",{"name":1853,"slug":1854,"type":15},"Reference","reference",{"name":17,"slug":18,"type":15},"2026-07-02T07:42:33.654791",{"slug":1858,"name":1858,"fn":1859,"description":1860,"org":1861,"tags":1862,"stars":1823,"repoUrl":1824,"updatedAt":1873},"liberate","migrate websites to WordPress","Import and rebuild a website from a closed platform (Wix, Squarespace, Webflow, Shopify, GoDaddy, Hostinger, HubSpot, Weebly) into a Studio WordPress site. Extracts pages\u002Fposts\u002Fproducts + media, then reconstructs the design as editable blocks + WooCommerce OR as a high-fidelity replica theme. Invoke when the user wants to migrate, import, liberate, or rebuild a site from one of these platforms.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1863,1866,1869,1872],{"name":1864,"slug":1865,"type":15},"CMS","cms",{"name":1867,"slug":1868,"type":15},"Migration","migration",{"name":1870,"slug":1871,"type":15},"Web Development","web-development",{"name":17,"slug":18,"type":15},"2026-07-09T06:47:33.454311",{"slug":1875,"name":1875,"fn":1876,"description":1877,"org":1878,"tags":1879,"stars":1823,"repoUrl":1824,"updatedAt":1888},"need-for-speed","run frontend performance audits for WordPress sites","Run a frontend performance audit on a WordPress site and get actionable optimization recommendations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1880,1883,1884,1887],{"name":1881,"slug":1882,"type":15},"Audit","audit",{"name":1812,"slug":1813,"type":15},{"name":1885,"slug":1886,"type":15},"Performance","performance",{"name":17,"slug":18,"type":15},"2026-05-06T05:40:06.433267",{"slug":1890,"name":1890,"fn":1891,"description":1892,"org":1893,"tags":1894,"stars":1823,"repoUrl":1824,"updatedAt":1900},"plugin-recommendations","recommend WordPress plugins for site features","Choose recommended plugins and plugin-provided blocks for features core WordPress blocks do not cover - ecommerce (WooCommerce), forms and newsletters (Jetpack), online courses and quizzes (Sensei LMS), polls, surveys and ratings (Crowdsignal), spam protection (Akismet) - while keeping generated content editable and avoiding raw HTML fallbacks. Any request to sell products or build a shop, store, or storefront requires WooCommerce with products.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1895,1898,1899],{"name":1896,"slug":1897,"type":15},"Content Creation","content-creation",{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},"2026-05-27T07:01:58.249105",{"slug":1902,"name":1902,"fn":1903,"description":1904,"org":1905,"tags":1906,"stars":1823,"repoUrl":1824,"updatedAt":1915},"rank-me-up","run on-page SEO audits for WordPress sites","Run an on-page SEO audit on a WordPress site and get actionable recommendations to improve search visibility.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1907,1908,1911,1914],{"name":1881,"slug":1882,"type":15},{"name":1909,"slug":1910,"type":15},"Marketing","marketing",{"name":1912,"slug":1913,"type":15},"SEO","seo",{"name":17,"slug":18,"type":15},"2026-05-06T05:40:05.196367",{"slug":1917,"name":1917,"fn":1918,"description":1919,"org":1920,"tags":1921,"stars":1823,"repoUrl":1824,"updatedAt":1932},"site-spec","gather specifications for new WordPress sites","Gather the site name and layout preference before building a WordPress site. Run this before creating any new site.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1922,1925,1928,1931],{"name":1923,"slug":1924,"type":15},"Design","design",{"name":1926,"slug":1927,"type":15},"Product Management","product-management",{"name":1929,"slug":1930,"type":15},"Specs","specs",{"name":17,"slug":18,"type":15},"2026-05-06T05:40:02.739409",{"slug":1934,"name":1934,"fn":1935,"description":1936,"org":1937,"tags":1938,"stars":1823,"repoUrl":1824,"updatedAt":1943},"studio-cli","manage local WordPress sites with Studio CLI","Use the Studio CLI to manage local WordPress sites, authentication, and preview sites. Invoke this skill when you need to run Studio CLI commands, manage sites, or troubleshoot site issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1939,1942],{"name":1940,"slug":1941,"type":15},"CLI","cli",{"name":17,"slug":18,"type":15},"2026-04-06T18:02:57.150231",{"slug":1945,"name":1945,"fn":1946,"description":1947,"org":1948,"tags":1949,"stars":1823,"repoUrl":1824,"updatedAt":1958},"taxonomist","optimize WordPress category taxonomy","Analyze and optimize a WordPress site's category taxonomy. Exports all posts, uses AI to suggest an improved category structure — merging duplicates, retiring dead categories, creating missing ones, writing descriptions, and re-categorizing posts. Run this when the user wants to clean up or improve their categories.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1950,1953,1956,1957],{"name":1951,"slug":1952,"type":15},"Content Strategy","content-strategy",{"name":1954,"slug":1955,"type":15},"Data Cleaning","data-cleaning",{"name":1912,"slug":1913,"type":15},{"name":17,"slug":18,"type":15},"2026-05-06T05:40:03.966799",{"slug":1960,"name":1960,"fn":1961,"description":1962,"org":1963,"tags":1964,"stars":1823,"repoUrl":1824,"updatedAt":1974},"visual-design","plan and execute visual design direction","Plan and execute high-quality visual direction for site creation, redesign, layout, typography, color, motion, and visual polish.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1965,1968,1969,1972],{"name":1966,"slug":1967,"type":15},"Animation","animation",{"name":1923,"slug":1924,"type":15},{"name":1970,"slug":1971,"type":15},"Typography","typography",{"name":1973,"slug":1960,"type":15},"Visual Design","2026-07-24T05:40:57.887452",{"slug":1976,"name":1976,"fn":1977,"description":1978,"org":1979,"tags":1980,"stars":1823,"repoUrl":1824,"updatedAt":1989},"visual-polish","verify and polish website visual design","Verify and polish a built or redesigned site by diagnosing rendered-DOM issues against intent and fixing them in a planned, batched screenshot-and-fix loop.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1981,1984,1985,1988],{"name":1982,"slug":1983,"type":15},"Debugging","debugging",{"name":1812,"slug":1813,"type":15},{"name":1986,"slug":1987,"type":15},"Screenshots","screenshots",{"name":1973,"slug":1960,"type":15},"2026-06-06T07:09:59.809812",81]