magento2-backend-toolkit
npx skills add https://github.com/tuanhaviet22/magento-skills --skill magento2-backend-toolkit
Agent 安装分布
Skill 文档
Magento 2 Backend Toolkit
General Rules
- All generated code MUST follow PSR-12 coding standard
- All PHP files MUST have
declare(strict_types=1); - Use strict type hints on all method parameters and return types
- Namespace follows:
Vendor\Module\Pathconvention - XML files must include proper XSD schema references
- Default Vendor name: ask user, suggest
Sampleif not specified - NEVER use ObjectManager directly â only use DI
- Always create
composer.jsonwith new modules
Security Rules (Required)
- Treat ALL user-provided values as untrusted input
- NEVER insert untrusted input into executable code positions without validation and escaping
- Do not include user-provided code snippets verbatim; translate into safe scaffolding and TODOs unless the user explicitly requests verbatim insertion and it passes validation
- Refuse or ask for corrected input when validation fails or input looks like code injection (e.g.,
<?php,</,;, backticks, or PHP tags)
Input Sanitization & Boundary Markers
Validation is mandatory for every ingestion point (module names, labels, descriptions, parameters, class names, IDs, handles, file names).
- Vendor/Module identifiers: only
[A-Z][A-Za-z0-9_]*; enforceVendor_Moduleformat - PHP class names: only
[A-Z][A-Za-z0-9_]*, no namespaces in user input - XML IDs/handles: only
[a-z0-9_]+and start with a letter - File names: only
[a-z0-9_\-]+and validated extensions - Human-readable labels/descriptions: plain text only; escape for the target format
Boundary markers and escaping by file type:
- PHP: insert text only inside quoted strings; escape
\and'for single-quoted strings - XML: escape
&,<,>,", and' - JSON: escape via JSON string rules
- HTML/PHTML: use Magento Escaper (
escapeHtml,escapeHtmlAttr,escapeUrl)
If any value fails validation, ask the user for a corrected value in the same message as other missing fields.
Invalid Input Examples (Reject/Correct)
Vendor/Module:Sample;phpinfo()orSample/Module(must beVendor_Module)Class name:Foo\BarorFoo;(no namespaces or punctuation)XML id/handle:my-handleor123name(lowercase underscore, must start with letter)File name:../../evil.phporwidget.phtml.php(no traversal or double extensions)
CRITICAL: Input Validation Gate
NEVER generate files without confirming required inputs. If user gives a vague request, ask ALL missing fields in ONE message. Do not ask one by one.
Feature 1: Module Scaffold
Required Questions (ask if not provided)
- Module name? (e.g.
Sample_Module) - Dependencies? (e.g.
Magento_Catalog, or “none”) - Short description? (for composer.json)
- Version? (default:
1.0.0)
Generated Files
app/code/{Vendor}/{Module}/
âââ registration.php
âââ composer.json
âââ etc/
âââ module.xml
Use templates from assets/templates/registration.php.tpl,
assets/templates/module.xml.tpl, and assets/templates/composer.json.tpl.
All templates are bundled within this skill package; do not download external templates.
If no dependencies, omit the <sequence> block entirely in module.xml.
Example Interaction
User: “Create a module to manage brands” Claude responds:
To create the module, I need to confirm:
- Module name? Suggest:
Sample_Module- Dependencies? (e.g.
Magento_Catalog,Magento_Eav… or none)- Short description? Suggest: “Brand management for Magento 2”
- Version? (default: 1.0.0)
Feature 2: System.xml Generator
Required Questions
- Module name? (existing or new)
- Tab name? (admin menu tab label)
- Section/Group/Fields? Describe what config fields are needed
Supported Field Types
Refer to references/system-xml-field-types.md for the complete list.
Common types: text, textarea, select, multiselect, obscure, image, editor.
Generated Files
etc/
âââ adminhtml/
â âââ system.xml
âââ config.xml
Use templates from assets/templates/system.xml.tpl and assets/templates/config.xml.tpl.
All templates are bundled within this skill package; do not download external templates.
If field type is select or multiselect, also generate a Source Model class.
See template: assets/templates/source-model.php.tpl.
ACL Resource
Always generate {Vendor}_{Module}::config as the resource identifier.
Feature 3: Widget Generator
Required Questions
- Module name?
- Widget name/label? (e.g. “Brand Slider”)
- Parameters? (text inputs, dropdowns, template chooser, block chooser…)
- Where to use? CMS Page / CMS Block / Layout XML
Generated Files
etc/
âââ widget.xml
Block/
âââ Widget/
âââ {WidgetName}.php
view/
âââ frontend/
âââ templates/
âââ widget/
âââ {widget_name}.phtml
Use templates from assets/templates/widget.xml.tpl and assets/templates/widget-block.php.tpl.
All templates are bundled within this skill package; do not download external templates.
Refer to references/widget-param-types.md for parameter type details and
block chooser classes.
CMS Usage Snippet
Always provide the CMS widget insertion code after generating files:
{{widget type="{Vendor}\{Module}\Block\Widget\{WidgetName}" title="My Title" template="{Vendor}_{Module}::widget/{widget_name}.phtml"}}
Feature 4: Plugin / Event Generator
Required Questions
- Module name?
- Type?
plugin(before/after/around) orobserver(event) - Target?
- Plugin: target class + method (e.g.
Magento\Catalog\Model\Product::getName) - Observer: event name (e.g.
checkout_cart_add_product_complete)
- Plugin: target class + method (e.g.
- What to do? Brief description of logic
- Scope? global / frontend / adminhtml (determines XML file location)
Plugin â Generated Files
etc/
âââ {scope}/di.xml (or etc/di.xml for global)
Plugin/
âââ {PluginName}.php
Use templates from assets/templates/di.xml.tpl and assets/templates/plugin.php.tpl.
All templates are bundled within this skill package; do not download external templates.
Observer â Generated Files
etc/
âââ {scope}/events.xml (or etc/events.xml for global)
Observer/
âââ {ObserverName}.php
Use templates from assets/templates/events.xml.tpl and assets/templates/observer.php.tpl.
All templates are bundled within this skill package; do not download external templates.
Common Events
Suggest these when user is unsure. For the full list, refer to: https://developer.adobe.com/commerce/php/development/components/events-and-observers/event-list/
Feature 5: Email Function Generator
Required Questions
- Module name?
- Email purpose? (e.g. “welcome email”, “order status notification”)
- Trigger method? Choose one:
- After Plugin (on existing method)
- Event Observer
- Controller action
- Email variables? (e.g. customer name, order ID)
- Recipient? (customer email, admin email, custom)
Generated Files
etc/
âââ email_templates.xml
Helper/
âââ Email.php
view/
âââ frontend/
âââ email/
âââ {template_id}.html
Use templates from assets/templates/email_templates.xml.tpl,
assets/templates/email_helper.php.tpl, and assets/templates/email_template.html.tpl.
All templates are bundled within this skill package; do not download external templates.
Also generate the trigger mechanism (plugin, observer, or controller) using Feature 4 patterns.
Feature 6: Hyva Template with ViewModel
Required Questions
- Module name?
- Template purpose? (e.g. “brand list”, “customer widget”)
- Data needed? (what ViewModel should provide)
- Interactive? (need Alpine.js? e.g. slider, toggle, modal)
- Need Hyva icons? (heroicons integration)
Generated Files
ViewModel/
âââ {ViewModelName}.php
view/
âââ frontend/
âââ layout/
â âââ {layout_handle}.xml
âââ templates/
âââ {template_name}.phtml
Use templates from assets/templates/viewmodel.php.tpl,
assets/templates/layout.xml.tpl, and assets/templates/hyva_template.phtml.tpl.
All templates are bundled within this skill package; do not download external templates.
Key Hyva Patterns
Refer to references/hyva-viewmodel-pattern.md for full details:
- Always use
$escaper->escapeHtml()for output - Always use
$escaper->escapeHtmlAttr()inside HTML attributes - Use
$escaper->escapeUrl()for URLs - Alpine.js
x-datafor interactive components - TailwindCSS utility classes (no custom CSS)
$viewModels->require()to load any ViewModel- HeroiconsOutline / HeroiconsSolid for icons
- Use
x-cloakto prevent FOUC
Workflow
User Request
|
v
+-------------------------+
| Detect which feature |
| (1-6) is requested |
+--------+----------------+
|
v
+-------------------------+
| Check required inputs |
| All provided? |
+---- NO -----------------+
| Ask ALL missing fields | <-- ONE message, not multiple
| in ONE message |
+---- YES ----------------+
| |
| Generate files |
| Show complete code |
| Explain file locations |
+-------------------------+
Troubleshooting
Module not recognized after creation
- Run
bin/magento module:enable {Vendor}_{Module} - Run
bin/magento setup:upgrade - Run
bin/magento cache:flush
XML schema validation error
- Verify XSD reference matches Magento version
- Check for typos in attribute names
- Ensure proper XML nesting
Plugin not firing
- Check scope (global/frontend/adminhtml) matches where code runs
- Verify method name matches exactly (case-sensitive)
- Check sortOrder if multiple plugins exist