SKILL.md
$27
Step 1: Validate Input
- Verify vendor name is PascalCase (starts with uppercase, alphanumeric only)
- Verify module name is PascalCase
- Check that
app/code/{Vendor}/{Module}does not already exist
Step 2: Create Directory Structure
app/code/{Vendor}/{Module}/
├── registration.php
├── composer.json
└── etc/
└── module.xml
Step 3: Generate Files
#### registration.php
Use template assets/templates/registration.php.tpl:
- Replace
{{VENDOR}}with vendor name
- Replace
{{MODULE}}with module name
#### composer.json
Use template assets/templates/composer.json.tpl:
- Replace
{{VENDOR}}with vendor name (PascalCase)
- Replace
{{MODULE}}with module name (PascalCase)
- Replace
{{vendor_kebabcase}}with kebab-case, hyphenated vendor name
- Replace
{{module_kebabcase}}with kebab-case, hyphenated module name
- Replace
{{DESCRIPTION}}with description
- Add entries from
composer_requireparameter to therequiresection
#### module.xml
Use template assets/templates/module.xml.tpl:
- Replace
{{VENDOR}}with PascalCase vendor name
- Replace
{{MODULE}}with PascalCase module name
- Replace
{{SEQUENCE}}with<sequence>block containing dependencies, or empty string if none
Step 4: Run Setup (Optional)
If the calling skill requests it, run bin/magento setup:upgrade using the hyva-exec-shell-cmd skill for the appropriate wrapper.
Error Handling
Abort module creation and report the error to the calling skill when:
Condition
Action
Vendor name not PascalCase
Report: "Invalid vendor name '{name}': must start with uppercase letter and contain only alphanumeric characters"
Module name not PascalCase
Report: "Invalid module name '{name}': must start with uppercase letter and contain only alphanumeric characters"
Directory already exists
Report: "Module already exists at app/code/{Vendor}/{Module}"
Cannot create directory
Report: "Failed to create directory app/code/{Vendor}/{Module}: {error}"
Cannot write file
Report: "Failed to write {filename}: {error}"
If hyva-exec-shell-cmd skill is unavailable when Step 4 is requested, skip the setup:upgrade step and report: "Skipped setup:upgrade - hyva-exec-shell-cmd skill not available. Run manually: bin/magento setup:upgrade"
Template Placeholders
Placeholder
Description
Example
{{VENDOR}}
Vendor name (PascalCase)
Acme
{{MODULE}}
Module name (PascalCase)
CustomFeature
{{vendor_kebabcase}}
Vendor name (kebab-case, split on capitals)
acme
{{module_kebabcase}}
Module name (kebab-case, split on capitals)
custom-feature
{{DESCRIPTION}}
Module description
Acme CustomFeature module
{{SEQUENCE}}
Module sequence XML or empty
<sequence><module name="Magento_Catalog"/></sequence>
PascalCase to kebab-case Conversion
Convert module names by inserting a hyphen before each capital letter and lowercasing:
PascalCase
kebab-case
CustomFeature
custom-feature
ShoppingCartGraphQl
shopping-cart-graph-ql
CmsComponents
cms-components
MyModule
my-module
Usage by Other Skills
Skills should reference this skill for module creation:
To create the module, use the `hyva-create-module` skill with:
- vendor: "Acme"
- module: "CmsComponents"
- dependencies: ["Hyva_CmsBase"]
- composer_require: {"hyva-themes/commerce-module-cms": "*"}
Example Output
For vendor Acme, module CmsComponents, with Hyva_CmsBase dependency:
app/code/Acme/CmsComponents/registration.php:
<?php
declare(strict_types=1);
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Acme_CmsComponents', __DIR__);
app/code/Acme/CmsComponents/composer.json:
{
"name": "acme/module-cms-components",
"description": "Acme CmsComponents module",
"type": "magento2-module",
"require": {
"php": ">=8.1",
"hyva-themes/commerce-module-cms": "*"
},
"autoload": {
"files": ["registration.php"],
"psr-4": {
"Acme\\CmsComponents\\": ""
}
}
}
app/code/Acme/CmsComponents/etc/module.xml:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Acme_CmsComponents">
<sequence>
<module name="Hyva_CmsBase"/>
</sequence>
</module>
</config>