← ClaudeAtlas

odoo-introspectlisted

Read Odoo ground truth from the running instance BEFORE writing any customization — field inventory, method resolution order (MRO) + super() chain, view/button wiring, security (ACL + record rules), the auto-trigger surface, and the real runtime call graph. Use this FIRST whenever you'd otherwise GUESS at Odoo internals: which fields already exist, what a method's super() chain is, where a form button leads, which record rules apply, what `_get_report_values` feeds a report, or "what actually fires when I confirm this order". Odoo composes each model at runtime from the installed addon dependency graph, so none of this is knowable from memory or source-grep — only from the live registry. Produces four JSON layers via `odoo-bin shell` scripts, or one `odoo-ai all <model>` command; RPC fallback for Odoo Online/SaaS. The foundation every other Odoo skill builds on. Version floor: Odoo 17/18, through Odoo 19 (current LTS).
tuanle96/odoo-ai-skills · ★ 4 · AI & Automation · score 62
Install: claude install-skill tuanle96/odoo-ai-skills
# Odoo introspection — read ground truth, then customize Odoo composes each model class at runtime from the installed addon dependency graph. The field list, the MRO, the `super()` chain, the view layout, the security rules, the automations that fire on write, the report parser — none are reliably knowable from memory or source-grep. They exist only in **this** running instance. Guessing is the root cause of "half-working" customizations that break elsewhere. **The rule: read ground truth from the running registry first, then customize. Never guess.** ## Three different "orders" — do not conflate them 1. **Module load order** — from `depends` in `__manifest__.py`. Determines what exists when the registry builds. Override `sale.order.action_confirm` while depending only on `sale` (not `sale_stock`) and your override lands at a *different MRO layer* than intended. 2. **Method resolution order (MRO)** — the class chain of the final registry model. The **potential** `super()` path, **not** a guarantee of what runs. An override that skips `super()` cuts the chain; an early `return` under a context flag skips the rest. The `model_brief` reports `has_super` / `super_position` / `returns_before_super` (heuristics) so you can judge. 3. **Runtime call order** — what actually executes on a click/cron: onchange → constrains → method → procurement → stock moves → invoice hooks → automations → recomputes. A **graph across many models**, not a list. Static analysis can't reconstruct it.