From odoo-dev-toolkit
Scaffold complete Odoo 18 modules with proper directory structure, manifest, models, views, security, and data files. Use this skill when the user wants to create a new Odoo module, addon, extension, or app from scratch. Trigger on: "create module", "new module", "scaffold module", "odoo addon", "odoo app", "rozšiřovací modul", "nový modul", "vytvoř modul", "nový addon", "scaffold", "vytvořit modul pro Odoo", "rozšíření pro Odoo", "Odoo modul", "nová aplikace pro Odoo".
How this skill is triggered — by the user, by Claude, or both
Slash command
/odoo-dev-toolkit:odoo-module-scaffoldThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create complete, production-ready Odoo 18 module structures. Every module you produce follows Odoo 18 conventions and is ready to install.
Create complete, production-ready Odoo 18 module structures. Every module you produce follows Odoo 18 conventions and is ready to install.
Before writing any code, read references/module-structure.md in this skill's directory for the exact file patterns and conventions.
Odoo has strict conventions for file organization. Follow them exactly — Odoo's module loader expects specific filenames and directory structures.
Every module ships with: manifest, models, views, security (ir.model.access.csv + record rules if needed), i18n-ready strings, and demo data where appropriate.
Use Odoo 18 patterns: _inherit for extensions, Command API for One2many writes, @api.depends / @api.onchange, new-style views (no <tree> tag — use <list>).
Clarify:
sale_delivery_tracking)sale, stock, website, etc.)Follow the structure in references/module-structure.md. Minimum viable module:
module_name/
├── __init__.py
├── __manifest__.py
├── models/
│ ├── __init__.py
│ └── model_name.py
├── views/
│ └── model_name_views.xml
├── security/
│ └── ir.model.access.csv
└── static/
└── description/
└── icon.png (optional but recommended)
The __manifest__.py is the module's identity. Include all required fields:
{
'name': 'Human Readable Name',
'version': '18.0.1.0.0',
'category': 'Sales',
'summary': 'One-line module description',
'description': """
Long description of what the module does.
Can be multi-line RST or plain text.
""",
'author': 'Author Name',
'website': 'https://example.com',
'license': 'LGPL-3',
'depends': ['base', 'sale'],
'data': [
'security/ir.model.access.csv',
'views/model_name_views.xml',
],
'demo': [],
'installable': True,
'application': False,
'auto_install': False,
}
Version format: 18.0.MAJOR.MINOR.PATCH — always prefix with 18.0. for Odoo 18.
See the odoo-python skill for detailed model patterns. Key rules:
sale.delivery.tracking_description is required for every new model_inherit to extend existing modelsSee the odoo-views skill for detailed view patterns. Key rules:
view_model_name_type (e.g., view_delivery_tracking_form)<list> not <tree> in Odoo 18views/menu.xml or at the bottom of the views fileEvery model needs an entry in security/ir.model.access.csv:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_delivery_tracking_user,delivery.tracking.user,model_sale_delivery_tracking,base.group_user,1,1,1,0
access_delivery_tracking_manager,delivery.tracking.manager,model_sale_delivery_tracking,sales_team.group_sale_manager,1,1,1,1
CSV field rules:
id — unique XML ID for this access rulemodel_id:id — model_ prefix + model name with dots replaced by underscoresgroup_id:id — reference to security group (module.xml_id format)Checklist:
__manifest__.py has correct depends list (all imported modules)__manifest__.py data list includes ALL XML and CSV files in correct order (security before views)__init__.py files import their submodules_name uses dots, _description is setCreate the module as a directory structure with all files. Use the technical name as the directory name.
If extending an existing module, name the new module descriptively: {original_module}_{feature} (e.g., sale_delivery_tracking).
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub michalvarys/claude-plugins --plugin odoo-dev-toolkit