Ground-truth gate for AI-written Odoo 17 to 19

AI guesses Odoo.
Make it prove it.

odoo-ai-skills reads ground truth from your running instance, then verifies and gates the change before it ships.

$claude plugin install odoo-ai-skills@odoo-ai
sale.order ground-truth check
Model assumed
Instance returned
account.invoice
account.move
customer_id
partner_id
state 'confirmed'
state 'sale'
sudo() bypass
ACL + record rule
BLOCKED4 assumptions contradicted by the running instance.

Odoo is assembled at runtime.
Memory cannot see it.

Field names, the method-resolution order, the rendered view arch, record rules. None of it is reliably knowable from training data or a static index, so LLMs fail silently at runtime, not at lint time.

01

Invent field and model names, or set state = 'confirmed' where Odoo actually uses 'sale'.

02

Reach for removed APIs: attrs, states, <tree>, name_get.

03

Call super() at the wrong MRO layer, so the override silently never runs.

04

Sprinkle sudo() to silence access errors, bypassing ACL and record rules.

05

Ship stored computes with an incomplete @api.depends, so totals go quietly stale.

06

Pass review, run for admin on one record, then break on a second company or in a batch.

Read the truth. Then prove it ships.

One local pipeline. The agent reads the live registry before it writes a line, and the change carries proof to the merge.

Inspect

Dump the model, MRO, security and runtime flow from the live instance.

Verify

Build the smallest correct change and prove it with a real test.

Gate

Turn the proof into a verdict: approve, needs-human, or block.

Report

A signed evidence artifact and a sticky PR comment anyone can read.

A verdict, bound to the diff.

The gate aggregates the evidence into one decision. Warm cache can speed the analysis, but only a cold run is merge-eligible.

APPROVE

Proof holds

Ground truth was read, the changed method ran through the live MRO, and the changed lines are covered. It ships.

NEEDS-HUMAN

Judgement call

Evidence is thin or the change touches a sensitive domain. A covering sign-off is required, never a silent pass.

BLOCK

Contradicted

A claim fails against the instance, or an S3 or S4 finding trips the fail-closed policy. High coverage with a runtime break is a block.

Findings are classified S0 to S4. S3 and S4 can fail the build closed unless a human sign-off downgrades them.

S0S1S2S3S4
New in v0.14

Context before the edit.
Evidence after it.

Better models write plausible-wrong code faster, so the leverage moves to feeding the agent instance truth before it writes, and to an artifact everyone downstream can trust.

Inspect

facts

Small, per-model instance facts to read before an edit. Also a bounded read-only MCP server, redacted, no arbitrary RPC.

dossier

One read-only command for the takeover inventory: modules, Studio footprint, security, data volumes, upgrade-risk flags, rendered to HTML.

cache

Content-addressed context, fast in the agent loop. One rule: warm cache never approves a merge.

Verify

fixture

Nine valid business-record recipes. Emit a TransactionCase skeleton, or run it in a savepoint and roll back.

fit-gap alpha

Classify requirements against the live instance, with effort bands. Decision support for a consultant, not a replacement.

uat-pack alpha

Turn the live surface and risk scenarios into role-based UAT scripts a consultant hands a client.

Gate and report

evidence-artifact

A stable, public, machine-validatable schema: git binding, per-check severity, cache provenance, sign-offs.

odoo-gate

A composite GitHub Action and a sticky PR comment. Opt-in fail-closed on S3 and S4 findings.

bench

A reproducible safety benchmark measuring the unsafe-change escape rate, not task completion.

See it run.

A real sale.order change, taken through introspect, patch, and test.

odoo-ai reads ground truth from a live sale.order, builds the smallest correct patch, and proves it with a test

Honest about hosting.

Where your Odoo runs decides what the suite can do. It never claims to verify custom code where custom code cannot run.

Self-hosted

Full code gate

Shell, SSH and CI are available, so the code path runs end to end: inspect, runtime-verify, and enforce the gate.

Odoo.sh

Prime target

GitHub-driven CI and staging branches. Run the gate before or alongside the platform's own build.

Odoo Online

Advisory only

No custom code, so nothing to code-verify. End-user guides work over RPC today; the dossier and fit-gap over RPC are on the v0.15 roadmap.

Proven where it actually runs.

89/89
checks on Odoo 17, 18, 19
1162
unit tests, green
25
skills, one CLI
390
module EE instance, real

The integration smoke runs every inspection stage and gate against live Odoo 17, 18 and 19 in CI. The eval harness scores detection 1.0 and truth-recall 1.0 on all three: every classic hallucination caught, every real confirmed. Validated end to end on a real 390-module Enterprise instance, including a runtime trace of sale.order.action_confirm that captured the cross-app cascade and rolled back.

odoo-introspectodoo-capabilitiesodoo-devodoo-testing odoo-securityodoo-reviewodoo-migrationodoo-perf odoo-owlodoo-webodoo-viewsodoo-reports odoo-debugodoo-deployodoo-dataodoo-module-scaffold odoo-domain-playbooksodoo-user-guideodoo-docsodoo html-reportodoo-upgradeodoo-statutory-reportsodoo-valuation-repair odoo-worktree

Two commands. Any agent.

# Claude Code: register the marketplace, then install
claude plugin marketplace add tuanle96/odoo-ai-skills
claude plugin install odoo-ai-skills@odoo-ai

# or any skills-compatible agent (Codex, Gemini CLI, Copilot)
npx skills add tuanle96/odoo-ai-skills

# gather ground truth before writing code
odoo-ai --db <DB> all sale.order --methods action_confirm

# the consultant one-liner: read-only instance dossier
odoo-ai --db <DB> dossier

Requirements

Odoo 17, 18 or 19. Bring any coding agent, any hosted index, any grep. They propose names; this decides whether the patch is safe on this instance.

Self-hosted and Odoo.sh get the full code gate. Odoo Online is advisory-only.

Local-first and sovereign. Everything runs in your shell. No account, no API key, no per-seat fee. Sensitive instance data never leaves your environment.