Install
$ agentstack add skill-unclecatvn-agent-skills-odoo-code-review ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Odoo Code Review
Objective
Review Odoo code changes against clear criteria, identify risks, and score using a weighted scale from an Odoo-expert perspective — using the reference pack that matches the target Odoo version.
Resolve the target Odoo version
Before reviewing, resolve ODOO_VERSION (one of 16.0, 17.0, 18.0, 19.0) in this order. Stop at the first one that succeeds:
- Explicit argument passed to the agent invocation (e.g.
odoo_version: "19.0"). - Project config, in this order:
.odoo-versionfile at the repo root (contents: e.g.19.0).odoo_versionkey in.claude/odoo.json.odoo.versionkey inpackage.jsonortool.odoo.versioninpyproject.toml.
- Manifest heuristic — scan workspace
__manifest__.pyfiles for the'version'key. Use the dominant major version (e.g.18.0.1.0.0→18.0). - Fallback — default to
19.0(latest supported) and note the assumption in the review output so the user can correct it.
Derive ODOO_MAJOR from ODOO_VERSION by stripping .0 (e.g. 18.0 → 18). All guide paths below use these placeholders.
Supported versions: 16.0, 17.0, 18.0, 19.0. If resolution yields anything else, stop and tell the user the version is out of scope.
Pre-review Requirements
- Read
skills/odoo-${ODOO_VERSION}/SKILL.mdas the master index for the resolved version's guides. - Read
skills/odoo-${ODOO_VERSION}/references/api-highlights.mdfor the version-distinguishing rules (what changed, what to flag, what's allowed). - Read relevant guides from
skills/odoo-${ODOO_VERSION}/references/based on change scope: - Models/ORM:
odoo-${ODOO_MAJOR}-model-guide.md - Fields:
odoo-${ODOO_MAJOR}-field-guide.md - Decorators:
odoo-${ODOO_MAJOR}-decorator-guide.md - Performance:
odoo-${ODOO_MAJOR}-performance-guide.md - Views/XML:
odoo-${ODOO_MAJOR}-view-guide.md - Security:
odoo-${ODOO_MAJOR}-security-guide.md - Controllers:
odoo-${ODOO_MAJOR}-controller-guide.md - Transactions:
odoo-${ODOO_MAJOR}-transaction-guide.md - Mixins:
odoo-${ODOO_MAJOR}-mixins-guide.md(mail.thread, activities) - Testing:
odoo-${ODOO_MAJOR}-testing-guide.md - Migration:
odoo-${ODOO_MAJOR}-migration-guide.md - Actions:
odoo-${ODOO_MAJOR}-actions-guide.md - Data Files:
odoo-${ODOO_MAJOR}-data-guide.md - Manifest:
odoo-${ODOO_MAJOR}-manifest-guide.md - Identify scope: module, file, and change context.
- Apply the version-distinguishing rules from
api-highlights.md(e.g. `vs,groupoperator=vsaggregator=, optionalname` in v19, etc.).
Expert Review Process
- Scope: Identify change scope, objectives, and key risks
- ORM & Model Methods: Search patterns, CRUD operations, recordset operations
- Field Definitions: Field types, computed fields, relational field parameters
- API Decorators:
@api.depends,@api.constrains,@api.ondelete,@api.model_create_multi - Performance: N+1 detection, batch operations, field selection
- Transaction Management: Savepoints,
UniqueViolation, serialization - Views & XML: Version-appropriate list tag, inheritance, structure (see
api-highlights.md) - Security: ACL, record rules, exceptions,
sudo()usage - Controllers: Auth types, CSRF protection, routing
- Mixins:
mail.thread,mail.activity.mixin,mail.alias.mixinusage - Testing: Test coverage, proper test cases,
@taggeddecorators - Migration: Migration scripts, data migration patterns
- Actions: Window actions, server actions, cron jobs
- Data Files: XML/CSV data structure,
noupdate, shortcuts - Manifest: Dependencies, external deps, hooks, assets
Complete Checklist
Rules below are version-neutral unless they reference api-highlights.md. Always combine this checklist with the version-specific highlights for the resolved ODOO_VERSION.
ORM & Model Methods (30%)
- ❌ DO NOT use
search()inside a loop (N+1 anti-pattern) - ✅ Use
search_read()when dict output needed - ✅ Use
read_group()for aggregate queries - ✅ Use
INdomain instead of search in loop:[('order_id', 'in', orders.ids)] - ✅ Batch
create([{...}, {...}])for multiple records - ✅ Use
recordset.write()instead of loop - ✅ Use
recordset.unlink()instead of loop - ✅
@api.model_create_multioncreate()overrides (seeapi-highlights.mdfor version-specific enforcement)
Views & XML (15%)
- Use the list tag appropriate to
ODOO_VERSION(seeapi-highlights.md: `in 16/17,` in 18+). - Use the attrs syntax appropriate to
ODOO_VERSION: legacyattrs=/states=are valid in 16, but rejected in 17+ where direct expressions are required. - Inheritance via
xpath/position— the nested list tag must match the version. - Avoid duplicate
name=attributes in records.
Fields (15%)
Monetarywithcurrency_fieldMany2onewithondelete- Computed field with
store=Trueif filtered/searched - Aggregation parameter:
group_operator=(v16/17) vsaggregator=(v18+) — seeapi-highlights.md.
Decorators (10%)
@api.dependswith complete dotted paths@api.constrainsfor invariants@api.ondelete(at_uninstall=False)instead of overridingunlink()for validation@api.model_create_multifor batch create
Performance (10%)
- Avoid N+1 in loops
- Prefer
read_group()/search_read()over per-record fetches - Use
prefetch_fieldsthoughtfully
Transactions (5%)
savepointaround recoverable failures- Handle
UniqueViolationexplicitly - Advisory locks for cross-record serialization
Security (5%)
- Specific exceptions:
UserError,ValidationError,AccessError - No bare
except Exception sudo()used narrowly with justification
Controllers (3%)
- Correct
auth=(user,public,none) csrf=Falseonly with justificationtype='json'vstype='http'matches the client
Mixins (3%)
mail.threadwith proper tracking fieldsmail.activity.mixinfor activitiesmail.alias.mixinwith alias fields
Testing (2%)
- Tests for new functionality
- Proper use of
@tagged - Query count assertions for hot paths
Manifest & Data (2%)
- All dependencies declared
- External deps listed
- Hooks wired correctly
noupdate="1"for reference data
Scoring
Weight each section per the percentages above. Total out of 100. Report:
- Score per section with brief justification.
- Blocking issues (must fix before merge).
- Non-blocking suggestions.
- Explicitly name the resolved
ODOO_VERSIONat the top of the report.
Deep Dive Checks
When reviewing, thoroughly check (references below use ${ODOO_MAJOR} — substitute the resolved value):
- Does
@api.dependshave complete dependencies?
- Check dotted paths:
partner_id.emailinstead of justpartner_id - Missing dependencies cause N queries
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-decorator-guide.md
- Are there N+1 queries?
- Loop with
search(),browse(),read()inside - Solution:
search_read()withINdomain orread_group() - Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-performance-guide.md
- Are there batch operations?
create(),write(),unlink()in loop- Solution: batch operations on recordset
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-performance-guide.md
- Is transaction safe?
UniqueViolationhandling without savepoint- Concurrent updates without advisory lock
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-transaction-guide.md
- Are version-specific patterns correct?
- List tag, attrs syntax, aggregation parameter, optional
_name(v19). - Reference:
skills/odoo-${ODOO_VERSION}/references/api-highlights.md+odoo-${ODOO_MAJOR}-view-guide.md
- Are field definitions correct?
Monetarywithcurrency_fieldMany2onewithondelete- Computed field with
store=Trueif needed - Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-field-guide.md
- Is exception handling correct?
UserError,ValidationError,AccessError- No generic
Exception - Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-security-guide.md
- Are mixins properly configured?
mail.threadwith proper tracking fieldsmail.activity.mixinfor activitiesmail.alias.mixinwith alias fields- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-mixins-guide.md
- Is testing adequate?
- Tests for new functionality
- Proper use of
@taggeddecorators - Query count assertions for performance
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-testing-guide.md
- Are migrations handled correctly?
- Proper migration script location
- Pre/post migration scripts
- Idempotent operations
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-migration-guide.md
- Are actions properly defined?
- Window actions with correct context
- Server actions for automation
- Cron jobs with proper intervals
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-actions-guide.md
- Are data files correct?
- Proper XML record structure
noupdate="1"for reference data- CSV data properly formatted
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-data-guide.md
- Is manifest correct?
- All dependencies declared
- External dependencies listed
- Hooks properly configured
- Reference:
skills/odoo-${ODOO_VERSION}/references/odoo-${ODOO_MAJOR}-manifest-guide.md
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: unclecatvn
- Source: unclecatvn/agent-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.