Changelog

v1.20.1 (since v1.15.1)

Breaking Changes

  • Stdio transport is now the defaultoduflow starts in stdio mode by default (previously HTTP). Use oduflow --transport http for HTTP mode. (34e42fa, f33dfe6)

Features

  • Auto-initialize on startupoduflow automatically runs initialization (system setup, Docker check) on first start, removing the need for a separate oduflow init step (34e42fa, f33dfe6)
  • MCP tools refinement — output cache for long-running tool results, 7 new MCP tools, 3 enhanced tools; renamed exec_in_odoo to run_odoo_command (44810aa)
  • Include odoo.conf in upgrade — module upgrades now apply odoo.conf changes, skipping files that haven't changed (f69bc2f)
  • Show template database name in list-templates output (c816229)
  • Default odoo.conf values — added workers=0 and db_maxconn=4 to the odoo.conf template for single-process development (f16ab37)

Dashboard

  • Rebuild button — added rebuild button to web UI; pull Docker image before create/rebuild operations (0004ac7)

Bug Fixes

  • Sanitization: delete mail servers — delete mail servers entirely instead of just disabling them during database sanitization (4f729b1)
  • search_in_odoo filenames and limit — always show filenames in search results and fix max_results limit not being applied correctly (fc3c53c)
  • Missing team parameter in pull_environment — pass team parameter when running module operations during pull (dc43104)
  • delete_service_preset lock — fix locking for delete_service_preset operation (18b18b1)

Documentation

  • Add MCP tools refinement spec (mcp-ref.md) (87edd27, 417eba7)
  • Rename Mutex → Lock in documentation, add glightbox for image zoom (18b18b1)
  • Rename exec_in_odoorun_odoo_command, add 7 missing tools to docs (518e2c8)
  • Advise agents to prefer local search over container search for Odoo sources (961b9dc)

v1.15.1 (since v1.10.1)

Breaking Changes

  • Team-based multi-tenancy replaces instance-based isolation — configuration migrated from .env / ODUFLOW_INSTANCE_ID to TOML-based oduflow.toml with per-team settings (workspaces, templates, credentials, port ranges, hostnames). The .env.example file has been removed. (ad3b382, 14503a0)

Features

  • Team-based multi-tenancy — per-team isolation with dedicated hostnames, git credentials, port ranges, and MCP token auth; auto-generated Traefik dynamic config for per-team routing; team resolution from Host header or bearer token (ad3b382, 14503a0)
  • CLI: run-instance command, --version and --instance flags — run a named instance directly from CLI with version info support (0094369)
  • CLI: systemd-install / systemd-uninstall commands — install/remove Oduflow as a systemd service (d266ca9)
  • Per-environment PostgreSQL credentials — each environment gets its own isolated database role and password (e4949b0)
  • Two-tier database sanitization — system-wide sanitization scripts plus per-repo .odoo_sanitize/ folder support (cd0b9ec)
  • MCP tool: read_file_in_odoo — read files and list directories inside Odoo containers without shell commands (abcc525)
  • MCP tool: reset_admin_password — reset the admin user password in any environment's database (608b476)
  • Extra repos: fetch summary and propagationupdate_extra_repo returns a summary of fetched branches and propagates updates to running environments (a80ba53)
  • Per-branch locking module — new LockManager replaces the single global mutex with per-branch and per-team locks (ad3b382)
  • Docker publishing support — added .dockerignore and Docker publishing instructions (24f653a)

Dashboard

  • Interactive SQL console (psql) — run SQL queries directly from the web dashboard (15d0e59)
  • Interactive Odoo shell console — access Odoo shell via the web dashboard (894f1ea)
  • Colored logs rendering — dashboard shows ANSI-colored logs; MCP tools receive clean stripped output (2e3989b)
  • Detailed sync results popup — sync operations show detailed results in a popup instead of a plain toast (ade3ee6)
  • Editable restore service dialog — service restore dialog shows editable preset values before confirming (4eac120)
  • Wider logs modal — logs modal expanded to 80vw with horizontal scroll (e9d0273)

Bug Fixes

  • MCP concurrency — pass stateless_http=True to unblock concurrent MCP requests; run sync MCP tools in thread pool to prevent event loop blocking during long operations (81457b1, ed4a265)
  • TLS certresolver name — match Docker label to Traefik's ACME provider name ("letsencrypt" not "le") (727448b)
  • HOME fallback for systemd — add HOME=/root to GIT_ENV so git operations work under systemd (a982b9d)
  • Reject SSH repo URLs — SSH URLs caused hangs due to interactive host-key prompts; now rejected early with a clear error (ad3b382)
  • Database ownership on template clone — fixed ownership reassignment for tables, sequences, views, and materialized views; switched to GRANT role approach (31df320, afb66d0, 5c7b737)
  • Environment deletion — drop database before role to avoid dependency errors (4b28e9e)
  • Strip db_password from odoo.conf — ensures the Docker entrypoint uses environment variables instead (f9f89d5)
  • Template publish — prevent self-copy in reload_template, scope publish to environments matching the template (b92631a)
  • Git sync — replace git pull --rebase with fetch + reset --hard for reliable sync; use explicit refspec in pull_repo (d57ee7e, 74ef53d)
  • Load extra_addons from template metadata in create_environment (3d629e6)
  • Dump restoration — handle gzip files and verify table count (7ef7a02)
  • Fallback data dir — fallback ODUFLOW_HOME to ~/oduflow_data_{id} when /srv is read-only (d45307c)

Refactoring

  • TOML-based configuration — replace .env with oduflow.toml; oduflow init auto-bootstraps default config (ad3b382)
  • Merge external_host and base_domain into per-team hostname (ad3b382)
  • Rename ODUFLOW_HOMEODUFLOW_DATA_DIR with instance subdirectories (52224cb)
  • Move odoo.conf and odoo_sanitize from etc/ to instance data directory (dbfc969)
  • Require explicit branch for extra_addons — format is now name:branch (9254169)
  • chown_recursive() helper — replaces manual os.chown loops with macOS fallback support (872059d)
  • Rename get_environment_statusget_environment_info with comprehensive details (20e4abf)
  • Rename get_agent_guideget_agent_skill (8625790)
  • Rename MCP tools for clarity (fbbcf54)
  • Async MCP tool wrapperhandle_errors decorator converted to async, offloading all tools to thread pool (ed4a265)

Documentation

  • Comprehensive docs rewrite for TOML-based multi-team architecture (ad3b382)
  • Add MCP tools refinement spec (mcp-ref.md) (87edd27)
  • Add missing features to documentation, fix inaccuracies (e0c3bc3, 1aaa6a5)
  • Add llms-full.txt for complete LLM-consumable documentation (e330ad4)
  • Add screenshots to documentation pages (8726d01)
  • Add macOS vs Linux file ownership section (ac4a7a8)
  • Add CLAUDE.md with project architecture and dev commands (008d43f)

v1.10.1 and earlier

Features

  • Add reset_admin_password MCP tool to reset the admin password in Odoo environments (608b476)
  • Refactor Agent Guides into multi-guide system with Odoo version-specific development guides (8680a18)
  • Add import_template_from_odoo — import templates from running Odoo instances (a6d53fc)
  • Store use_overlay flag in template metadata instead of computing filestore size on every env creation (e393c44)
  • Show use_overlay mode in CLI list-templates and dashboard UI (cf85489)
  • Show template name in get_environment_info and dashboard UI (e79a6ae)
  • Add Sync button to environment UI (66ceed8)
  • Add ODUFLOW_TRACE=1 trace logging for sync/classify pipeline (af7b9bc)
  • Docker deploy added (e934bea)
  • Append /web?debug=1 to environment URLs in dashboard (ff913ad)
  • Add logo to Web UI header (6fd52ce)
  • Add run_db_query MCP tool for executing SQL queries against environment databases (d7b1b44)
  • Credentials management UI + git auth improvements (259164e)
  • Per-user git credentials for repo operations (5c28100)
  • Add oduflow cleanup CLI command to remove orphaned resources (d1fa09c)
  • Add protect/unprotect for extra repos (1245d6c)
  • Add update_extra_repo MCP tool; remove one-off migration SQL (3c678cc)
  • Report elapsed time in create_environment response (90ca9e1)
  • Show filestore and dump sizes in template listing (a1403a7)
  • Add Recreate button for environments in web UI (31afb9e)

Fixes

  • Show friendly error when Docker is not available (5df6df7)
  • Service logs filtering and state isolation from env logs (9926c2a)
  • Update test_settings to match current Settings API (b92fe80)
  • Restart container after successful module installation (b819c65)
  • Fix tests: expect ToolError instead of ValueError (dcf7f23)
  • License load fix (8e66e8f)
  • Stream dump file to container to avoid OOM; save dump to workspace on reload-template --dump-path (8615fe2)
  • Eliminate OOM in all container file extraction (init_template, template_down, publish_env_as_template) (b40395b)
  • Surface database drop failures as warnings in delete_environment (02a628b)
  • Use odoo_image version as fallback branch for extra addons worktree (ea297fd)
  • Configure fetch refspec for bare extra repos so git fetch updates branches (54bc937)

Documentation

  • Rework README — add missing config vars, licensing, template metadata, CLI flags (0b8de7e)
  • Restructure README — reorder sections, remove odoo.sh comparison, merge internals (70af4df)
  • Update README.md (fe6674f)
  • Add MkDocs with Material theme, build site to docs/ for GitHub Pages (bbcf1e9)
  • Switch to GitBook theme, use gh-pages branch for deployment (3cfbbb2)
  • Add requirements-docs.txt for mkdocs setup (b620ff5)
  • Split README into structured mkdocs documentation (c52084f)
  • Add database migrations workflow guide for agents (63629fd)
  • Document extra addons pinning behavior in environments (651f877)

Refactor

  • Rename CLI command promote to template-from-env (ecaaf84)
  • Rename template DB prefix to oduflow_template_{id}_{name}, make template_name required (c3bee0f)

Chore

  • Make dev guide hint more assertive in create_environment output (b9933ce)
  • Clean up startup logs: use websockets-sansio, suppress docker noise (a486d87)
  • Add site/ to .gitignore, remove tracked build output (b36e832)
  • Add logo.png to tracked files for package distribution (935f5f7)