tuanle96/odoo-ai-skills
GitHub: tuanle96/odoo-ai-skills
为 Claude Code/Codex 提供基于运行实例真实数据的 Odoo 开发技能套件,确保 AI 生成的代码变更经过运行时验证后才可合并。
Stars: 4 | Forks: 1
# odoo-ai-skills
[](https://github.com/tuanle96/odoo-ai-skills/actions/workflows/ci.yml)
[](https://github.com/tuanle96/odoo-ai-skills/actions/workflows/tests.yml)
[](https://github.com/tuanle96/odoo-ai-skills/actions/workflows/integration.yml)
[](https://www.odoo.com)
[](#license)
[](https://skills.sh/tuanle96/odoo-ai-skills)
**odoo-ai-skills 为 [Claude Code](https://docs.claude.com/en/docs/claude-code) / Codex 提供快速的本地 Odoo 实例真实情况与 CI 绑定的证据门禁,从而确保 AI 编写的 Odoo 17–19 代码变更在 PR、UAT 或发布前经过检查、runtime 验证并生成报告。**
它是 **AI 编写的 Odoo 变更的本地优先验证与部署门禁**。引入任何编程 agent、任何托管知识索引、任何 `grep` —— 它们提出名称和模式;而本套件决定该补丁是否*真的对该客户的实例安全*:真实的字段、真实的 MRO、真实的安全机制、真实的 runtime、真实的升级路径。**无需 SaaS,无需席位,无需 API key,元数据绝不离开你的设备。**
🌐 **着陆页:[tuanle96.github.io/odoo-ai-skills](https://tuanle96.github.io/odoo-ai-skills/)**
Odoo 在 **runtime** 根据已安装的 addon 依赖图组合每一个模型、视图、安全规则和自动化。字段名称、方法解析顺序、`super()` 链、渲染的视图 arch、记录规则——这些都无法仅凭记忆或 `grep` 可靠地获知。它们只存在于**运行中的实例**里。靠猜测是导致 AI 编写的 Odoo 代码看起来正确、admin 在单条记录上运行也没问题,但对真实用户、在第二个公司、在批处理中或在下一次升级时崩溃的最大原因。
**因此,本套件中的每一项技能都围绕一条规则展开:**

查看完整的 [实战示例](examples/sale-order-walkthrough.md) —— 一个真实的 `sale.order` 变更经历了 introspect → patch → test,并且其模块在 CI 中进行了测试。
## 为什么会有这个项目
仅凭记忆的话,LLM 会捏造 Odoo 的字段和模型名称,去使用那些已被移除的 API(`attrs`/`states`, ``, `name_get`),在错误的 MRO 层调用 `super()`,为了屏蔽权限错误而滥用 `sudo()`,并且发布了带有不完整 `@api.depends` 的存储计算字段。这些在 **runtime 默默地失败**,而不是在 lint 时——这恰恰是过度自信最危险的地方。本套件通过让 agent 在编写代码前阅读实时的 registry,并编码通用模型所不知道的 Odoo 专属契约(安全、MRO、manifest 配置、版本差异),从而填补了这一空白。
## 不是托管的知识索引 —— 而是 runtime 验证门禁
托管的 Odoo *知识索引*(一种跨版本预索引 Odoo 源码的云服务)在**广度**方面非常出色:“标准的 `sale.order` 从 v8→19 是什么样的?给我看不同仓库的例子。”如果你愿意,把它当作**上游来源**来使用是个不错的选择。
但是,静态索引在结构上**无法知道在你的实例中什么是真实的**:安装了哪些模块、Studio/OCA/本地补丁对最终的 registry 做了什么更改、该组/公司有效的视图 arch、每个用户/每个公司的安全性、runtime 行为、开发↔生产差异,或者升级是否会保留真实数据。这些恰恰就是那些通过了代码审查却在生产环境中出问题的故障(参见[高风险 playbook](docs/high-risk-playbooks.md))。
`odoo-ai-skills` 是另一半:它读取**这个运行中的实例**并将提议的变更转化为证据——然后对合并进行门禁拦截。界限很明确:**静态索引只负责建议;而由运行中的实例来决定。**
- **本地优先 / 主权。** 所有操作都在你的 shell 中运行。无需账户、无需 API key、无需按席位付费;敏感的实例数据(这就是存在 [`redact`](#the-gate) 的原因)绝对不会离开你的环境。
- **基于实例,而非基于记忆。** 实例*就是*这里所安装内容的索引——无需进行针对每个版本的重复索引工作。
- **验证与强制执行,而不仅仅是查找。** [The Gate](#the-gate) 检查部署:场景测试、环境差异、验证、脱敏、迁移风险,以及 `approve / needs-human / block`(批准 / 需要人工 / 拦截)的裁定。
还想要生态系统的广度?将外部索引的建议作为*声明*输入——`odoo-ai-skills` 会针对实时实例验证每一项,而不是盲目相信(参见 `verify-claims`)。套件自带的 `docs` 查询只是这样一个上游来源,它是本地构建且经过存在性校验的。
## 快速安装(适用于任何兼容 skills 的 agent)
```
npx skills add tuanle96/odoo-ai-skills
```
一条命令即可为 Claude Code、Codex、Gemini CLI、GitHub
Copilot 以及其他兼容 [Agent Skills](https://skills.sh) 的 agent 安装本套件
(随每个 skill 附带捆绑的 `scripts/`)。要获取完整的 Claude Code
体验 —— 命名空间 router、marketplace 更新 —— 请使用下方的插件
安装方法。
## 作为 Claude Code 插件安装
本仓库是一个 Claude Code 插件(包含一个 `.claude-plugin/plugin.json` 清单以及 `skills/` 目录)**同时也是**其自己的 marketplace(`.claude-plugin/marketplace.json`)。通过两条命令进行安装:
```
claude plugin marketplace add tuanle96/odoo-ai-skills # register the marketplace
claude plugin install odoo-ai-skills@odoo-ai # install the plugin
```
这 25 个 skill 随后将以命名空间方式加载 —— `/odoo-ai-skills:odoo`(router)、`/odoo-ai-skills:odoo-introspect` 等。以后可以使用 `claude plugin update odoo-ai-skills@odoo-ai` 进行更新。
若想在安装前进行尝试,可直接从本地克隆加载:
```
claude --plugin-dir /path/to/odoo-ai-skills # then /plugin to browse
claude plugin validate /path/to/odoo-ai-skills # check the manifest
```
**安装后运行内置的 `odoo-ai` CLI。** 插件会被复制到 Claude 的缓存中,因此请通过 plugin-root 变量而不是相对路径来引用 CLI:
```
"${CLAUDE_PLUGIN_ROOT}"/skills/odoo-introspect/scripts/odoo-ai --db all sale.order
```
(在克隆目录中工作时,如其他地方所示使用 `scripts/odoo-ai` 是没问题的。)
## 作为 Codex 插件安装
本仓库还提供了一个原生的 Codex 适配器(`.codex-plugin/plugin.json`)以及一个
Codex marketplace(`.agents/plugins/marketplace.json`)。从本地
克隆进行安装:
```
codex plugin marketplace add /path/to/odoo-ai-skills
codex plugin add odoo-ai-skills@odoo-ai
```
相同的 `skills/` 目录会被 Codex 复用,并且内置的 CLI 仍然位于:
```
skills/odoo-introspect/scripts/odoo-ai --db all sale.order
```
## 如何使用
- **刚接触某项任务?** 调用 **`odoo`** skill —— 它会为你路由到正确的子 skill。
- **刚接触该实例 —— 不知道从哪里开始?** `odoo-ai surface` 会对实时的入口点(按钮、cron、自动化、路由)进行排名,这样你就无需盲目猜测入口方法;接着 `odoo-ai esg` 会对真实的跨应用流程进行采样。
- **准备 *添加* 字段/模型/向导/报表/cron/自动化(或覆盖核心流程)?** 首先调用 **`odoo-capabilities`** —— `odoo-ai native-check "<需求>"`(匹配精选卡片,并针对实例进行存在性校验)或者使用 `odoo-ai capabilities ` 查看完整的表面 —— 以便在重新造轮子之前检查 Odoo 已经自带了哪些功能。最好的补丁有时就是不打补丁。
- **准备编写代码?** 首先调用 **`odoo-introspect`** 以 JSON 格式 dump 出模型/流程(`odoo-ai all `),然后使用相关的构建 skill,接着使用 **`odoo-testing`**,最后在合并前使用 **`odoo-review`**。
- **遇到“未生效”的情况?** 在怀疑是代码 bug 之前,先执行 `odoo-ai preflight `。
- **准备重命名/删除字段?** 首先执行 `odoo-ai refs ` 查看所有依赖于它的内容。
## 环境要求
- **Odoo 17 / 18**(最低版本限制),一直到 **Odoo 19**(当前的 LTS 版本,于 2025 年 9 月发布)。针对 v16 的差异以及 v18.1 → 19 的 API 变更(`check_access`/`has_access`、`@api.private`、`type='jsonrpc'`、`_read_group`/`formatted_read_group`、`aggregator`、`record.env.*`、`odoo.Domain`)在每个 skill 和 `skills/odoo-introspect/references/version-matrix.md` 中均有标注。
- 进行 introspection 时:需要具有 shell 访问权限,以便针对开发/暂存数据库运行 `odoo-bin shell`(自托管或 odoo.sh 分支),或者对于 Odoo Online/SaaS 使用 RPC 回退方案 —— 参见 `skills/odoo-introspect/references/introspection.md`。
- 可选:[`tuanle96/mcp-odoo`](https://github.com/tuanle96/mcp-odoo) MCP server,可将 introspection 暴露为 agent 工具 —— 它还附带了一个包含 4 个仅限凭据的**业务工作流技能**(数据质量门禁、迁移助手、月末结账、代理机构全集群审查)的伙伴包:`npx skills add tuanle96/mcp-odoo`。
## Odoo 托管的现实情况
你的 Odoo 运行在哪里决定了本套件能做什么:
- **自托管 & Odoo.sh** —— 全功能。你拥有 shell / SSH / CI 权限,因此代码路径可以端到端运行:**检查**实时 registry,在 runtime **验证**变更,并在合并、UAT 或发布前强制执行 **CI 绑定的证据门禁**。
- **Odoo Online (SaaS)** —— **仅供参考。** Odoo Online *不允许使用自定义代码*,因此在那里没有什么代码可以验证。目前可通过 RPC 使用:生成的**终端用户指南**(`odoo-user-guide`)。在 **v0.15 路线图**中(针对基于 shell 工具的纯 RPC 模式):**实例档案**、**配置审计**以及**适配差距**分析 —— 这些目前需要 `odoo-bin shell`,因此在 Online 平台上它们必须等待 RPC 回退方案的实现。
代码门禁针对的是代码可以实际运行的环境(自托管、Odoo.sh)。它绝不会声称能在 Odoo Online 上验证自定义代码。
## 技能列表
### 第 0 层 —— 基础(ground-truth 引擎)
| Skill | 功能描述 |
|-------|--------------|
| **odoo-capabilities** | **第 0 步** —— 在重新发明平台行为之前,先了解 Odoo 已经自带了什么。`odoo-ai native-check "<需求>"`(原生能力检查,先门禁后排名)会通过召回匹配约 34 张精选能力卡片(TF-IDF + 意图短语),然后针对实时实例对每张卡片进行**存在性校验**,并返回带有引用证据的候选项;`odoo-ai capabilities ` / `--module ` 会映射出完整的原生表面(向导、动作、cron、自动化、序列、mixins、字段),并以 xmlids 作为证据。`odoo-ai native-learn "<短语>" --card ` 可以对其进行映射教学,从而通过使用提高召回率。仅针对*新增* / 核心覆盖任务触发。 |
| **odoo-introspect** | 其他所有 skill 首先调用的引擎。提供 JSON 格式的事实 —— 字段+MRO+super+安全机制 · 视图/按钮 · 菜单/数据/报表 · 真实的 runtime 追踪(包含 SQL 热点 / 写入映射 / 异常摘要) · **每个用户/公司有效的安全规则** —— 外加专注的扫描器:**refs**(反向字段影响,图谱解析的点分路径)、**preflight**(它到底加载了没有?),以及 **state_capture**(断点处的 runtime 值 + 异常事后分析)—— 以及 `odoo-ai` CLI。同时承载了 **The Gate** —— 强制执行套件(场景测试 · 环境对等 · 静态验证器 · 脱敏 · 升级测试套件 · 部署门禁 · 证据包 · BYO-index `verify-claims`)。 |
| **odoo-docs | **检查:文档查询** —— 本地开发者文档索引。构建一次官方 Odoo 文档的 TF-IDF 索引(`odoo-ai docs-build --version 18`),然后 `odoo-ai docs "<问题>"` 返回排名靠前的段落 + 权威的 odoo.com URL。从属于 introspection(文档负责*提议*,实例负责*决定*);在本地构建,绝不通过外部引入(纯净的 CC-BY-SA)。 |
### 第 1 层 —— 核心循环
| Skill | 功能描述 |
|-------|--------------|
| **odoo-dev** | 安全地进行定制:字段、覆盖、继承模式、正确的 hook、MRO 层。 |
| **odoo-module-scaffold** | 新模块骨架 + 正确的 `__manifest__.py`(包含规范的 `external_dependencies`)。 |
| **odoo-views** | 视图 XML(form/list/kanban/search)+ 继承/xpath;以及 v17/18 移除 `attrs` 和 `
- `/`
标签:AI辅助开发, Claude Code, Cutter, Odoo, 开源框架, 持续集成, 逆向工具