The skill is based on Odoo 19.0 backend and external API documentation, generated at 2026-04-22.
Odoo 19 Backend
Use this for Odoo-specific server behavior agents often get wrong. It skips generic Python, ORM, and XML material. Load only the narrowest reference that matches the task.
Quick Route
| If the task is about... | Read |
|---|---|
__manifest__.py, XML/CSV loading, record/function tags, noupdate |
core-module-structure-and-data |
recordsets, _inherit, _inherits, reserved fields, constraint/index attrs |
core-orm-models-recordsets |
computed/related fields, @api.depends, @api.onchange, @api.constrains, @api.model_create_multi, @api.private |
core-fields-and-decorators |
domains, search_fetch, _read_group, raw SQL, SQL(...), flushing, cache invalidation, modified(...) |
core-domains-sql-and-cache |
ACL CSVs, record rules, sudo, field groups=, RPC exposure, SQL injection, safe_eval, escaping HTML |
core-security-acl-and-rules |
action dicts, ir.actions.server, ir.cron, _commit_progress |
features-actions-and-cron |
Python controllers, @route, request env, controller inheritance |
features-controllers-and-http |
external integrations, bearer-key JSON-2, /json/2, legacy XML-RPC / JSON-RPC execute_kw |
features-external-api-and-rpc |
QWeb PDF/HTML reports, paper formats, custom _get_report_values, report assets/fonts |
features-qweb-reports |
mail.thread, aliases, activities, common backend mixins |
features-common-mixins |
TransactionCase, HttpCase, Form, --test-tags, tours, query-count assertions |
testing-backend-and-tours |
| profiling, batching, prefetch, query budgets, indexes | performance-profiling-and-batching |
| final review pass, Odoo 19 deltas, common regressions | best-practices-odoo-19-backend |
Backend Defaults
- Model methods may receive empty or multi-record
self; enforce singleton semantics explicitly. - Public model methods are RPC-reachable. Keep security in Python, ACLs, and rules, not only in views.
- Prefer ORM. If SQL is necessary, flush before reads/writes and invalidate cache after writes.
- Batch by default:
_read_group, batchcreate, recordset-aware loops, and query-count checks catch most regressions. - Keep real invariants on models, not only in
onchange, cron wrappers, or controllers. - Before shipping, read best-practices-odoo-19-backend.
Cross-Skill Guidance
- Use the odoo router when the request is broad, ambiguous, or spans multiple Odoo domains.
- Use the odoo-frontend skill when the task is primarily web-client JavaScript, views, widgets, arch XML, or frontend assets.
- Use the odoo-javascript-testing skill when the task is Hoot, web test helpers, mock-server work, or frontend JS testing internals.
Source: basaltbytes/skills — distributed by TomeVault.