Un Agent Skill pour développer sous Odoo avec un
assistant IA (Claude), sans mélanger les conventions entre versions et sans inventer
d'API. Architecture noyau + deltas par version : le savoir stable est écrit une fois, et
seuls les écarts réels entre 17, 18 et 19 sont surchargés. Les faits sensibles sont vérifiés
sur le code source officiel odoo/odoo, pas sur des blogs ou de la mémoire.
- Pourquoi ce skill
- Comment ça marche
- Ce qui est vérifié (et ce qui ne l'est pas)
- Installation & utilisation
- Exemples d'usage
- Détecter et forcer la version
- Ajouter une future version (ex. Odoo 20)
- Structure du dépôt
- Contribuer
- Crédits & mentions
- Licence
- Avertissement
Deux problèmes tuent la qualité d'un assistant Odoo :
- La dérive de version. Odoo change de conventions à chaque série (
attrs→expressions Python,<tree>→<list>,group_operator→aggregator,name_get→_compute_display_name, déplacement de l'ORM dansodoo/orm/en 19…). Un assistant qui applique du 17 à du 19 produit du code qui casse. - L'hallucination. Un assistant qui « devine » un nom de champ ou une signature fait perdre des heures.
Ce skill répond aux deux :
- Noyau + deltas : une seule source par fait → pas de copies qui divergent, et ajouter une version = un seul fichier.
- Zéro-hallucination : le skill détecte la version cible, ne s'appuie que sur son socle vérifié, et avoue quand il ne sait pas plutôt que d'inventer.
À chaque tâche Odoo, le skill suit cet ordre :
1. DÉTECTE la version cible (__manifest__.py → version, branche git, $ODOO_SOURCE)
2. APPLIQUE core/ (identité, protocole, sécurité — invariants 17→19+)
3. CHARGE reference/ (socle version-neutre : ORM, vues, sécurité, manifest, OWL…)
4. SURCHARGE deltas/odoo-XX (les écarts de CETTE version priment sur le socle)
5. LIVRE architecture d'abord, puis code chirurgical, sécurisé par défaut
core/— ce qui est vrai de la 17 à la 19 et au-delà (protocole réactif, sécurité par défaut au moindre privilège).reference/— 17 guides du tronc commun (models, fields, views, security, manifest, decorators, controllers, data, actions, reports, mixins, testing, transactions, translation, performance, migration, owl).deltas/— un fichier par version (odoo-17.md,odoo-18.md,odoo-19.md) qui ne contient que les divergences, chacune tracée à sa source.
La transparence fait partie du produit. Les deltas utilisent des étiquettes de confiance :
| Étiquette | Signification |
|---|---|
[source] |
Vérifié sur odoo/odoo@<branche> (fichier + ligne cités) |
[≈18] |
Cohérent avec la 18, non re-vérifié ligne à ligne sur la version cible |
[ext] |
Source secondaire (doc / communauté), pas le code |
⚠️ À VÉRIFIER |
Non confirmé — le skill ne l'affirmera pas |
Vérifié sur source (exemples) : search(self, domain, offset=0, limit=None, order=None),
_read_group(...), retrait de name_get en 18, group_operator→aggregator (message de
dépréciation cité), <tree>→<list> en 18, déplacement odoo/models.py→odoo/orm/models.py
en 19 (avec import public from odoo import models, fields préservé), OWL identique bit-à-bit
entre 18 et 19, MIN_PY_VERSION=(3,10)/MAX=(3,14) en 19, colonnes perm_* de
ir.model.access, champs de ir.rule, positions XPath d'héritage de vue.
Non audité ligne à ligne : le socle reference/ est une synthèse condensée de standard Odoo
stable. Il est fiable mais n'est pas re-dérivé du code caractère par caractère — c'est un choix
d'ingénierie assumé (faible risque sur des fondamentaux stables). Les faits versionnés et
sensibles, eux, sont dans les deltas et vérifiés.
Les interfaces d'installation des Skills évoluent. Les étapes ci-dessous reflètent le fonctionnement courant ; en cas de doute, réfère-toi à la doc officielle : Claude Code · spécification Agent Skills · Aide Claude.ai.
Le dépôt est à la fois un plugin Claude Code (via .claude-plugin/plugin.json) et un skill
autonome (dans skills/odoo/). Choisis la voie qui te convient.
Option 1 — comme plugin (recommandé) : ajoute ce dépôt comme marketplace, puis installe.
# Dans une session Claude Code
/plugin marketplace add dr-spook/master-odoo
/plugin install master-odoo@master-odooOption 2 — comme skill manuel : copie le dossier du skill dans ton répertoire de skills.
# Skill "projet" (partagé avec l'équipe, versionné dans le repo Odoo) :
git clone https://github.com/dr-spook/master-odoo
mkdir -p .claude/skills
cp -r master-odoo/skills/odoo .claude/skills/odoo
# — ou — Skill "personnel" (dispo sur toutes tes sessions) :
mkdir -p ~/.claude/skills
cp -r master-odoo/skills/odoo ~/.claude/skills/odooEnsuite, travaille normalement : dès que ta tâche parle d'Odoo, d'un __manifest__.py, d'un
modèle, d'une vue XML, etc., le skill se déclenche.
Même logique que le terminal : installe le plugin via le gestionnaire de plugins de
l'application, ou place le dossier skills/odoo/ dans le répertoire de skills du projet
(.claude/skills/). L'app détecte les skills du projet ouvert.
Sur les offres qui exposent les Skills (Paramètres → Capabilities / Skills) :
- Zippe le contenu de
skills/odoo/de sorte queSKILL.mdsoit à la racine du zip. - Ajoute-le via Paramètres → Skills → Ajouter un skill et téléverse le zip.
- Active-le. Il s'activera automatiquement sur tes conversations Odoo.
Le fichier
master-odoo-skill.zipfourni dans les Releases du dépôt est déjà prêt à téléverser.
N'importe quel outil qui lit le format Agent Skill peut consommer skills/odoo/. Le point
d'entrée est skills/odoo/SKILL.md (frontmatter name + description qui pilote le
déclenchement) ; le reste (core/, reference/, deltas/) est chargé à la demande.
Le skill est réactif : il fait exactement ce qu'on demande, expose l'architecture avant de coder, et livre du code sécurisé par défaut.
Créer un module (Odoo détecté = 18) :
« Crée-moi un module de gestion de tickets SAV : modèle
helpdesk.ticketavec état, priorité, client, et les vues liste + formulaire. » → Le skill produit manifest +__init__+ modèle + sécurité (CSV + règles) + vues, en<list>(18), champ d'état enSelection, modificateurs en expressions Python.
Revue de code versionnée :
« Voici un module écrit pour Odoo 16, dis-moi ce qui casse en 18. » → Il pointe
attrs/states,name_get,group_operator,<tree>… avec la correction 18.
Migration :
« Aide-moi à passer ce module de 18 à 19. » → Il applique
deltas/odoo-19: imports profondsodoo.orm.*, sémantique héritée, et te prévient sur les zones non confirmées plutôt que d'affirmer.
Question ORM ciblée :
« En 18, comment je rends un champ calculé cherchable et triable ? » →
store=True+@api.depends, ousearch=/inverse=, avec le pourquoi.
Le skill détecte la série cible via, par ordre de priorité : la clé version du
__manifest__.py ("18.0.1.0.0" → 18.0), le nom de branche git (17.0/18.0/19.0),
puis $ODOO_SOURCE (odoo/release.py). Si rien n'est détectable et que ça bloque, il pose
une question. Tu peux toujours forcer : « traite ça en Odoo 17 ».
C'est tout l'intérêt du modèle : un seul fichier.
- Crée
skills/odoo/deltas/odoo-20.md. - Renseignes-y uniquement les écarts vs le socle, vérifiés sur
odoo/odoo@20.0. - Ajoute la ligne dans le tableau des versions de
skills/odoo/SKILL.md.
Ni le core/ ni le reference/ ne bougent.
master-odoo/
├── README.md
├── LICENSE
├── .claude-plugin/
│ └── plugin.json # rend le dépôt installable comme plugin Claude Code
└── skills/
└── odoo/ # le skill autonome (copiable / téléversable tel quel)
├── SKILL.md # routeur : détection de version + composition
├── core/ # invariants 17→19+ (identité, protocole, sécurité)
│ ├── 00-identity-and-protocol.md
│ └── 01-security-baseline.md
├── reference/ # socle version-neutre (17 guides + index)
│ ├── README.md
│ ├── models.md fields.md views.md security.md manifest.md
│ ├── decorators.md controllers.md data.md actions.md reports.md
│ ├── mixins.md testing.md transactions.md translation.md
│ └── performance.md migration.md owl.md
└── deltas/ # écarts par version (faits tracés à la source)
├── odoo-17.md
├── odoo-18.md
└── odoo-19.md
Les contributions sont bienvenues, à une condition : le standard de vérification.
- Un fait versionné (diffère entre 17/18/19) va dans
deltas/, jamais dansreference/, et doit citer sa source (odoo/odoo@<branche>/<fichier>, ligne si possible) → étiquette[source]. - Un fait stable (identique sur toutes les versions) va dans
reference/, en forme neutre. - Ne soumets pas d'affirmation « certaine » basée sur un blog ou la mémoire : marque-la
[ext]ou⚠️ À VÉRIFIER. - Pour une nouvelle version : voir Ajouter une future version.
Ouvre une issue pour discuter d'un ajout de version ou d'un sujet manquant avant une grosse PR.
- Le socle
reference/a été synthétisé et dédupliqué à partir d'un corpus de guides Odoo communautaires, puis condensé et recoupé avec le code source officiel. Merci aux auteurs de ces ressources en amont. - Les faits versionnés sont vérifiés contre le dépôt officiel
odoo/odoo. - Odoo est une marque d'Odoo S.A. Ce projet est une ressource indépendante, non affiliée à Odoo S.A.
Ce skill assiste ; il ne remplace ni la documentation officielle Odoo
ni ton jugement. Vérifie toujours le résultat sur ta version et ton projet, en particulier les
zones marquées ⚠️ À VÉRIFIER (certains sujets d'Odoo 19 restent à confirmer). Signale une
erreur via une issue — c'est comme ça que le socle se durcit.
