con un clic
odoo
Access Odoo ERP at 100.100.1.2:8069 using OdooRPC Python library
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Access Odoo ERP at 100.100.1.2:8069 using OdooRPC Python library
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Run the self-improvement pipeline to analyze usage, plan, and apply Claude Code configuration improvements
Create, schedule, and manage autonomous AI-agent tasks with systemd timers
Create and manipulate Obsidian Canvas (.canvas) files using the JSON Canvas spec
Create a git commit with proper conventional commit message
Code generation, exploration, and image analysis via Codex CLI
Query Gemini CLI for quick lookups, deep research, and approach comparison
| name | odoo |
| description | Access Odoo ERP at 100.100.1.2:8069 using OdooRPC Python library |
Use OdooRPC to interact with Odoo at 100.100.1.2:8069.
Use the ODOO_API_KEY environment variable (injected automatically):
import os, odoorpc
odoo = odoorpc.ODOO('100.100.1.2', port=8069)
odoo.login('odoo', 'claude@localhost', os.environ['ODOO_API_KEY'])
Run Python with OdooRPC:
nix run /home/dtgagnon/nix-config/nixos#odoorpc -- -c "CODE"
Example - list databases:
nix run /home/dtgagnon/nix-config/nixos#odoorpc -- -c "import odoorpc; odoo = odoorpc.ODOO('100.100.1.2', port=8069); print(odoo.db.list())"
Example - authenticated query:
nix run /home/dtgagnon/nix-config/nixos#odoorpc -- -c "
import os, odoorpc
odoo = odoorpc.ODOO('100.100.1.2', port=8069)
odoo.login('odoo', 'claude@localhost', os.environ['ODOO_API_KEY'])
print(odoo.env.user.name)
"
Partner = odoo.env['res.partner']
partner = Partner.browse(1)
print(partner.name)
# Search returns IDs
ids = Partner.search([('is_company', '=', True)], limit=10)
# Read returns field values
data = Partner.read(ids, ['name', 'email'])
# Combined search_read
records = Partner.search_read([('is_company', '=', True)], ['name', 'email'], limit=10)
new_id = Partner.create({'name': 'New Partner', 'email': 'new@example.com'})
Partner.write([partner_id], {'name': 'Updated Name'})
# Or via browse
partner.name = 'Updated Name'
Partner.unlink([partner_id])
result = Partner.execute('method_name', arg1, arg2, kwarg=value)
| Model | Purpose |
|---|---|
| res.partner | Contacts/customers |
| res.users | System users |
| sale.order | Sales orders |
| purchase.order | Purchase orders |
| account.move | Invoices/journals |
| product.product | Products |
| stock.picking | Inventory transfers |
| project.task | Tasks |
# Operators: =, !=, >, <, >=, <=, like, ilike, in, not in
[('field', 'operator', value)]
# AND (default)
[('is_company', '=', True), ('country_id.code', '=', 'US')]
# OR
['|', ('name', 'ilike', 'test'), ('email', 'ilike', 'test')]
fields = odoo.env['res.partner'].fields_get()
NEVER assign tasks to Claude Bot (user ID 7, login claude@localhost). All tasks must be assigned to Derek Gagnon (user ID 2, login gagnon.derek@pm.me).
When creating or updating tasks in project.task, always use:
derek_id = 2 # Derek Gagnon
Task.create({'name': 'Task name', 'user_ids': [(6, 0, [derek_id])], ...})
When doing bulk updates that would trigger emails, use context to disable notifications:
context = {
'mail_create_nosubscribe': True,
'mail_notrack': True,
'tracking_disable': True,
'mail_auto_subscribe_no_notify': True,
}
odoo.execute_kw('project.task', 'write', [[task_id], values], {'context': context})