Skip to main content

Kodemeio Odoo CLI - manage Odoo 18 ERP instances

Project description

kctl-odoo

Kodemeio Odoo CLI -- manage Odoo 18 ERP instances via JSON-RPC and Docker Compose.

Installation

uv tool install ./cli

To upgrade after code changes:

uv tool install --force --reinstall ./cli

Quick Start

# Configure connection (interactive)
kctl-odoo config init

# Verify connectivity
kctl-odoo config test

# Dashboard overview
kctl-odoo dashboard summary

# List installed modules
kctl-odoo modules list --state installed

# Health check
kctl-odoo doctor check

Fast debugging — log tailing

kctl-odoo logs tail is a unified streaming command for local + remote Odoo with structured filters. It auto-detects the transport from the current profile URL:

  • local (localhost / 127.0.0.1) → streams docker compose logs -f in the project directory.
  • remote → streams docker logs -f over SSH via kctl-dokploy compose service-logs --follow. Requires --compose-id (find with kctl-dokploy compose list).
# Local dev — stream everything
kctl-odoo logs tail

# Local dev — only warnings and above from the account.move module
kctl-odoo logs tail --level WARNING --module account.move

# Remote prod — stream tpp-odoo-erp
kctl-odoo -p idtpp-tpp-odoo-erp logs tail \
    --dokploy-profile idtpp \
    --compose-id Qki8U2u4Ltstq0_6zW7UE

# Narrow by worker PID or request id in the message
kctl-odoo logs tail --worker 12 --grep "traceback"

Filter flags compose as AND: --level, --module, --request, --worker, --grep.

Full traceback capture. Filters apply per log record, not per line. When a record's timestamped header matches, all of its continuation lines (Traceback (most recent call last):, File "...", ^^^, exception message) are emitted too — stack traces survive --level ERROR or any other filter. --grep can also match a continuation line directly (e.g. --grep "fields.py" to find tracebacks involving a specific file); when it does, the rest of that record's block is included.

Other logs subcommands:

  • logs follow — legacy local-only streamer (kept for back-compat).
  • logs errors --days N — finite query against Odoo's ir.logging model.
  • logs search <pattern> — finite ilike search against ir.logging.

Command Groups (94 groups, 913 commands)

Organized into 13 help panels. Run kctl-odoo --help for the full list.

Panel Groups
Admin & Config config, users, companies, partners, security, sessions, databases
Sales & CRM sales, crm, delivery, pricelist, pos
Procurement & Ops purchasing, inventory, mrp
HR & Projects hr, onboarding, project, products, dashboard
Accounting & Finance accounting, tax, budget, dunning, statements, assets, bank, payment-gateways, currency
Domain Apps website, fleet, helpdesk, events, approvals, forms, compliance, quality, support
Reports & Analytics report, report-formats, kpi, mis-reports, data-quality, sql-export
Monitoring & Ops doctor, monitor, maintenance, backup, deploy, workers, mail, cron, jobs, workflow, audit
Performance & Storage storage, performance, logs, integration
Development dev, lint, test, scaffold, manifest, views, orm, record-rules, traceback, translations, fastapi, e2e
Instance Management local, modules, bundles, roles, addons, tenants, setup, pipeline
Data & Migration diff, server, master-data, automation, sequences, periods, migrate, accurate
Tools shell, export, import, history, skill

Command Aliases

Hidden short aliases for common workflows (20 total):

Alias Expands to Alias Expands to
mi modules install acc accounting
mu modules upgrade inv inventory
ml modules list sal sales
hc doctor check rep report
di dashboard summary aud audit
bl bundles list mnt maintenance
bi bundles install dq data-quality
pl profiles list wf workflow
pi profiles install perf performance
tr test run dx doctor

Example:

kctl-odoo mi sale_management       # same as: kctl-odoo modules install sale_management
kctl-odoo tr base_management       # same as: kctl-odoo test run base_management

Global Options

--json            Output as JSON (machine-readable)
--quiet, -q       Suppress informational messages
--profile, -p     Use a named config profile
--url             Odoo URL override
--api-key         API key override
--database, -d    Database override
--username, -u    Username override
--version, -V     Show version and exit

Configuration

Profiles

kctl-odoo supports named profiles for managing multiple Odoo instances:

# Create profiles
kctl-odoo config add production --url https://erp.kodeme.io --database kodemeio --api-key $KEY
kctl-odoo config add staging --url https://staging.kodeme.io --database staging --api-key $KEY

# Switch default profile
kctl-odoo config use production

# Use per-command
kctl-odoo --profile staging modules list

# List all profiles
kctl-odoo config list

Config File

Configuration is stored in ~/.config/kctl-odoo/config.toml (XDG-compliant).

Shell Completions

# Install for your shell
kctl-odoo --install-completion bash
kctl-odoo --install-completion zsh
kctl-odoo --install-completion fish

See docs/completions.md for manual installation and troubleshooting.

Plugin Development

kctl-odoo supports extending the CLI via Python entry points. Create a package that registers a Typer app under the kctl_odoo.plugins entry point group:

# In your plugin's pyproject.toml
[project.entry-points."kctl_odoo.plugins"]
my_plugin = "my_plugin.cli:app"

The plugin's app (a typer.Typer instance) will be registered as a command group automatically on startup.

Recent Changes

  • CLI restructure — 94 groups (down from 100), 13 help panels. Standardized CRUD verbs (list/get/create/summary). Merged thin groups (dev-mode→dev, staging→deploy, repl→shell, auto-maintain→maintenance, clean→maintenance, self-test→doctor). All old names preserved as hidden aliases.
  • Performance — HTTP response cache (60s TTL, LRU), async commands (top-10 with asyncio.gather), connection pool tuning, pagination guards.
  • Workflow engineworkflow list/run/status with 3 built-in workflows (deploy-safe, maintenance-window, data-quality-sweep). Abort/skip/retry failure modes.
  • Doctor auto-fixdoctor fix remediates overdue crons, disabled mail servers, stale sessions.
  • Error hints — Actionable guidance on auth/config/connection errors.
  • Exception specificity — All 563 except Exception blocks replaced with specific types. BLE001 ruff rule enforced.
  • Feature flags@requires_model decorator gracefully skips commands when Odoo modules aren't installed.

Development

Running Tests

cd cli
uv run pytest tests/ -v

Linting and Formatting

cd cli
uv run ruff check src/
uv run ruff format src/

Type Checking

cd cli
uv run mypy src/kctl_odoo/

Project Structure

cli/
  src/kctl_odoo/
    cli.py              Main app + command registration
    __init__.py         Version
    core/
      callbacks.py      Global option handling (AppContext)
      client.py         JSON-RPC client for remote Odoo
      local.py          Docker Compose client for local dev
      config.py         Profile/config management
      exceptions.py     Custom exception hierarchy
      output.py         Output formatting (table, JSON, plain)
    commands/
      aliases.py        Short command aliases (20 aliases)
      dev/              Development tools (split into 5 sub-modules)
      report/           Report engine (split into 3 sub-modules)
      maintenance/      DB maintenance (split into 4 sub-modules)
      readiness/        Readiness checks (split into 4 sub-modules)
      accurate/         Accurate integration (split into 2 sub-modules)
      workflow_cmd.py   Workflow orchestration engine
      ...               (90+ command modules)
  tests/                pytest test suite (1,100+ tests)
  skills/odoo-admin/    Claude Code skill (auto-generated)
  pyproject.toml        Package metadata and tool config
  README.md             This file
  docs/                 Additional documentation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kctl_odoo-0.41.4.tar.gz (913.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kctl_odoo-0.41.4-py3-none-any.whl (889.8 kB view details)

Uploaded Python 3

File details

Details for the file kctl_odoo-0.41.4.tar.gz.

File metadata

  • Download URL: kctl_odoo-0.41.4.tar.gz
  • Upload date:
  • Size: 913.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for kctl_odoo-0.41.4.tar.gz
Algorithm Hash digest
SHA256 e4e9710abfc358da09766c6e3c008f8ff7af20aa9e4c02e58fb5c88d27d07f7d
MD5 afeb5e9f6f4669e07580a236bddeb727
BLAKE2b-256 4c515c9e11e79158ac08d8dff96585b377df22167cd4add9c1282b68d8c7bb9f

See more details on using hashes here.

File details

Details for the file kctl_odoo-0.41.4-py3-none-any.whl.

File metadata

  • Download URL: kctl_odoo-0.41.4-py3-none-any.whl
  • Upload date:
  • Size: 889.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for kctl_odoo-0.41.4-py3-none-any.whl
Algorithm Hash digest
SHA256 cb2ac8ca20505a6a9eeb98e66f967a29d3112ae8e0efcfe59fc488041168c632
MD5 3dddbc8ccc1fe484e1c7453fb0d9b635
BLAKE2b-256 d69b66d4b4aa1598c8f161f6fab7d0152f99696d4ed3de65854c43c2a7b4ab86

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page