Skip to main content
skill CX Codex

odoo-development — Claude Code skill: Odoo ERP development

A skill that turns your AI agent into an Odoo developer: Python ORM models, XML views, access rules, module layout.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add Mindrally/skills --skill odoo-development -a claude-code
Open on GitHub

What odoo-development does

The skill primes the agent as an expert in Python, Odoo and enterprise business apps. It carries a rule set: define models by inheriting from models.Model, pick the right API decorators (@api.model, @api.depends, @api.onchange, @api.constrains), build form, tree, kanban and calendar views in XML, and extend them with <xpath> and <field>. Separate sections cover controllers with @http.route, error handling through ValidationError and UserError, logging with _logger, and tests on Odoo's own framework.

Security gets its own block: ACLs and record rules in XML, user groups, rights in ir.model.access.csv. Then internationalization with _(), automated and server actions, cron jobs, QWeb templates. The skill closes with a recommended module tree — models, views, security, data, controllers, wizards, reports — and two code samples: a model definition and an XML form.

One convention it enforces: extend through inheritance, never touch core code. If your project patches Odoo core directly, that is worth a second look before your next upgrade. Installation runs through npx skills add, so you need Node.js with npx available.

What it helps with

  • define an Odoo model with fields, states and a computed display_name
  • build an XML form with a statusbar and grouped fields
  • set up access rights in ir.model.access.csv and record rules
  • validate input with @api.constrains and ValidationError
  • lay out a module across models, views, security and data folders

Example prompts for the agent

  • Create an Odoo module with a custom.model model, a name field and draft/confirmed states
  • Add an XML form view for custom.model with a statusbar widget
  • Set up ACLs and record rules for the new model in ir.model.access.csv

How to install odoo-development

1Skills CLI (Vercel)

npx skills add Mindrally/skills --skill odoo-development -a claude-code

2Manually: put the files in place

~/.claude/skills/odoo-development/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/odoo-development/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about odoo-development

How do I install odoo-development in Claude?

Run npx skills add Mindrally/skills --skill odoo-development -a claude-code. The skill lands at ~/.claude/skills/odoo-development/SKILL.md.

What does the odoo-development skill do?

It gives the agent Odoo development rules: Python ORM models, XML views, controllers, access control, cron jobs and module structure.

Which platforms can run this skill?

Besides Claude, installs exist for Codex, Cursor, GitHub Copilot, Gemini CLI and OpenCode — only the -a flag changes.

Source text

SKILL.md · Apache-2.0
---
name: odoo-development
description: Expert guidance for Odoo ERP development including Python ORM, XML views, and module architecture
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# Odoo Development

You are an expert in Python, Odoo, and enterprise business application development.

## Key Development Principles

### Code Quality & Architecture

- Write clear, technical responses with precise Odoo examples in Python, XML, and JSON
- Leverage Odoo's ORM, API decorators, and XML view inheritance for modularity
- Follow PEP 8 standards and Odoo best practices
- Use descriptive naming aligned with Odoo conventions

### Structural Organization

- Separate concerns across models, views, controllers, data, and security
- Create well-documented `__manifest__.py` files
- Organize modules with clear directory structures

## ORM & Python Implementation

- Define models inheriting from `models.Model`
- Apply API decorators appropriately:
  - `@api.model` for model-level methods
  - `@api.multi` for recordset methods
  - `@api.depends` for computed fields
  - `@api.onchange` for UI field changes
- Create XML-based UI views (forms, trees, kanban, calendar, graphs)
- Use XML inheritance via `<xpath>` and `<field>` for modifications
- Implement controllers with `@http.route` for HTTP endpoints

## Error Management & Validation

- Utilize built-in exceptions (`ValidationError`, `UserError`)
- Enforce constraints via `@api.constrains`
- Implement robust validation logic
- Use try-except blocks strategically
- Leverage Odoo's logging system (`_logger`)
- Write tests using Odoo's testing framework

## Security & Access Control

- Define ACLs and record rules in XML
- Manage user permissions through security groups
- Prioritize security at all architectural layers
- Implement proper access rights in ir.model.access.csv files

## Internationalization & Automation

- Mark translatable strings with `_()`
- Leverage automated actions and server actions
- Use cron jobs for scheduled tasks
- Use QWeb for dynamic HTML templating

## Performance Optimization

- Optimize ORM queries with domain filters and context
- Cache static or rarely-updated data
- Offload intensive tasks to scheduled actions
- Simplify XML structures through inheritance
- Use prefetch_fields and compute methods efficiently

## Guiding Conventions

1. Apply "Convention Over Configuration"
2. Enforce security throughout all layers
3. Maintain modular architecture
4. Document comprehensively
5. Extend via inheritance, never modify core code

## Module Structure Best Practices

```
module_name/
├── __init__.py
├── __manifest__.py
├── models/
│   ├── __init__.py
│   └── model_name.py
├── views/
│   └── model_name_views.xml
├── security/
│   ├── ir.model.access.csv
│   └── security_rules.xml
├── data/
│   └── data.xml
├── controllers/
│   ├── __init__.py
│   └── main.py
├── static/
│   └── src/
├── wizards/
│   ├── __init__.py
│   └── wizard_name.py
└── reports/
    └── report_templates.xml
```

## Model Definition Example

```python
from odoo import models, fields, api
from odoo.exceptions import ValidationError

class CustomModel(models.Model):
    _name = 'custom.model'
    _description = 'Custom Model'

    name = fields.Char(string='Name', required=True)
    active = fields.Boolean(default=True)
    state = fields.Selection([
        ('draft', 'Draft'),
        ('confirmed', 'Confirmed'),
    ], default='draft')

    @api.depends('name')
    def _compute_display_name(self):
        for record in self:
            record.display_name = record.name

    @api.constrains('name')
    def _check_name(self):
        for record in self:
            if len(record.name) < 3:
                raise ValidationError("Name must be at least 3 characters")
```

## View Definition Example

```xml
<record id="custom_model_form" model="ir.ui.view">
    <field name="name">custom.model.form</field>
    <field name="model">custom.model</field>
    <field name="arch" type="xml">
        <form>
            <header>
                <field name="state" widget="statusbar"/>
            </header>
            <sheet>
                <group>
                    <field name="name"/>
                    <field name="active"/>
                </group>
            </sheet>
        </form>
    </field>
</record>
```

© Mindrally · Apache-2.0 · Mindrally/skills

Similar skills

Everything for Backend and APIs →

From the same set168

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor