Changelog
v1.20.1 (since v1.15.1)
Breaking Changes
- Stdio transport is now the default —
oduflow starts in stdio mode by default (previously HTTP). Use oduflow --transport http for HTTP mode. (34e42fa, f33dfe6)
Features
- Auto-initialize on startup —
oduflow 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_odoo → run_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 propagation —
update_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_HOME → ODUFLOW_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_status → get_environment_info with comprehensive details (20e4abf)
- Rename
get_agent_guide → get_agent_skill (8625790)
- Rename MCP tools for clarity (fbbcf54)
- Async MCP tool wrapper —
handle_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)