Highlights
Ollama Cloud as a cloud-mode chat provider
You can run cloud deployment mode with Ollama Cloud as the primary LLM without switching Jarvis to local mode or rebuilding cloud Memory/Intelligence databases. Your OLLAMA_BASE_URL host login first using ollama signin and once authenticated pull the cloud models you want to use, then you can use in jarvis-voice.
LLM_PROVIDER=ollamainconfig/cloud.envkeeps cloud DBs, cloud embeddings (by default), and cloud Tool RAG.- New
OLLAMA_CLOUD_MODELselects the cloud-tagged primary model (minimax-m3:cloud,qwen3.5:cloud,*-cloud, etc.). LocalOLLAMA_MODELinlocal.envis not used as the cloud primary unless it is already cloud-tagged. - New
EMBEDDING_PROVIDERsplits chat from embeddings: cloud defaults toopenai(1536-dim) so existing cloud vector data stays valid; local defaults toollama(768-dim). - Cloud mode no longer silently appends
localhosttoOLLAMA_BASE_URL. List every host you intend to use, in priority order. - Ollama Cloud usage omits local GPU
num_ctxtuning, keeps token counts, and reports subscription billing as unknown instead of$0. - See:
docs/ollama/README.md
Mode isolation and scoped config
Runtime config is now scoped per request so one Web UI process can serve cloud and local sessions without cross-reading provider, model, embedding, or URL settings.
config_scope(mode)wraps API routes, orchestrator runs, intelligence reflection, embeddings, and related scripts.- Web chat, Canvas, Memory, Intelligence, and Docs honor session startup mode; Web UI settings stay aligned with the active session mode instead of drifting from a stale global default.
- Sync and migration scripts validate the selected mode before touching the matching Memory database.
- Regression coverage added for scoped config, intelligence mode cache, and API mode boundaries.
Docker stack refinements
Follow-up hardening on the experimental Docker path introduced in v2.52.0.
- Compose service map — default
docker compose up -dstartsjarvis-api,jarvis-web,jarvis-canvas, andjarvis-services(background daemons). Memory, Intelligence, and Docs need--profile extras. - Proactive speech in Docker — reminders and price alerts route through browser TTS when
JARVIS_DEPLOYMENT=docker. Keep the Web tab open with TTS enabled; native installs still use host speakers and do not duplicate audio in hybrid setups. - MCP tool sync — Docker MCP discovery and
sync-tools.pyrun fromjarvis-webonly (notjarvis-api). Missing MCP sidecar images no longer block Web UI startup; init retries sync on the nextjarvis-webrecreate after you pull images. web_config.jsonbind — Compose usescreate_host_path: falseso a missing settings file fails fast instead of mounting an empty directory (which broke Settings saves).- Shared fonts — Web UI font routes serve bundled assets consistently inside containers.
- Docs — Linux guide documents default vs extras services, config reload steps, and MCP socket GID discovery on Windows/macOS. See
docs/docker/README.md,docs/docker/MAC-WINDOWS.md.
Model prompt overrides
Small YAML overlays under config/models/<provider>/<model>/prompt_overrides.yaml patch model-specific quirks without editing global prompts.
- Applies to routing, QA synthesis (auto/casual TTS condensation), tool calling, Completion Guard eval, and intelligence reflection sections.
- Runtime IDs like
minimax-m3:cloudresolve to base folders such asconfig/models/ollama/minimax-m3/(Windows-safe; no:in paths). - Overrides load from disk on each orchestrator request — add or edit a folder while containers run; the next chat picks it up without a full rebuild.
- Shipped example: MiniMax M3 cloud suppresses spoken meta lead-ins during voice condensation (no "Here is the condensed voice-friendly summary:" preamble).
- See:
docs/MODEL_PROMPT_OVERRIDES.md,config/models/README.md
Tools and hygiene
create_social_clip—MONEYPRINTER_API_URLis required in env; the hardcoded homelab default was removed. Set the URL inconfig/cloud.envorconfig/local.envbefore using the tool.- Superseded design and planning docs moved under
docs/archive/(OAuth, OpenAI Responses plan, sequential thinking architecture, Docker planning, and others).
Fixes & Polish
- Hardened mode isolation at API, intelligence, embedding, and scheduled-task boundaries.
- Docker MCP startup tolerates missing sidecar images and retries Tool RAG sync later.
- OAuth archive doc placeholders sanitized (no live redirect URIs in tracked examples).
- Docs index and install guides aligned with scoped config, Ollama Cloud, and current Docker behavior.
Docs & README
- Rewrote
docs/ollama/README.mdfor cloud vs local Ollama, embedding split, and Docker host URLs. - Docker quick start lists all seven Compose services and what
--profile extrasadds. - MAC/WINDOWS guide adds a config-change cheat sheet (which services to recreate after env edits).
- Changelog and README cross-links updated for v2.53.1.
Upgrade Notes
Compare your env files first
If you installed before v2.53.1, diff your live env against the new examples. Several keys were added or clarified; copying the whole file will wipe your secrets.
cd ~/jarvis-voice
git fetch --tags
git diff v2.52.0..HEAD -- config/cloud.env.example config/local.env.example docker.env.exampleThen merge the new lines into your existing config/cloud.env, config/local.env, and root .env.
Native installs
git pull
source ~/jarvis-venv/bin/activate # or your JARVIS_VENV
./bin/start --stop && ./bin/startOptional after pull:
./bin/backfill-memory-types cloud # and/or local
./bin/check-memory-sync-health.py cloud
./bin/check-embeddings-health.py cloudIf you use Ollama Cloud as your cloud chat provider, set the new keys in config/cloud.env (see below) and restart Jarvis.
Docker users
No compose file restructure beyond v2.52.0. Pull latest, rebuild when code or dependencies changed, recreate containers after env edits.
docker compose down
git pull
docker compose build --pull
docker compose --profile extras up -d --force-recreateBefore first bring-up on a fresh clone:
cp -n jarvis-web/config/web_config.json.example jarvis-web/config/web_config.jsonConfig edits do not hot-reload inside running containers. Bind mounts update on disk immediately, but Python services read env at startup. After changing cloud.env, local.env, or root .env, recreate the affected services. See the cheat sheet in docs/docker/MAC-WINDOWS.md.
Tool RAG after pull:
# Standard stack
docker compose exec jarvis-api python bin/sync-tools.py cloud --force
docker compose exec jarvis-api python bin/sync-tools.py local --forceMCP stack (docker-compose.mcp.yml): run sync through jarvis-web, not jarvis-api:
docker compose -f docker-compose.yml -f docker-compose.mcp.yml exec -T jarvis-web rm -f data/.docker_tool_profile_synced
docker compose -f docker-compose.yml -f docker-compose.mcp.yml up -d --force-recreate jarvis-webDo not run the native watchdog cron while Docker manages background services.
Canvas links in old conversations still show whatever CANVAS_PUBLIC_URL was when those messages were saved. Set the correct public URL in env and recreate jarvis-web + jarvis-canvas; new chats pick it up. Old thread URLs are not rewritten automatically.
Local mode
Unchanged entry points:
./bin/start --localOr from the dashboard: Start All Services (Local).
New and updated environment variables
Review these against your live files. Defaults shown match *.env.example as of v2.53.1.
config/cloud.env
# Chat provider — ollama is now a first-class cloud option
LLM_PROVIDER="xai"
# NEW — primary Ollama model when LLM_PROVIDER=ollama (cloud-tagged only)
OLLAMA_CLOUD_MODEL="minimax-m3:cloud"
# NEW — independent of chat provider; keep openai for existing cloud vector data
EMBEDDING_PROVIDER=openai
# Ollama Cloud example (uncomment and set when using ollama in cloud mode):
# LLM_PROVIDER="ollama"
# OLLAMA_BASE_URL="http://your-signed-in-ollama-host:11434"
# OLLAMA_CLOUD_MODEL="minimax-m3:cloud"
# EMBEDDING_PROVIDER=openai
# Cloud mode does NOT append localhost to OLLAMA_BASE_URL — list hosts explicitly
# OLLAMA_BASE_URL="http://gpu-host:11434"
# User-facing Canvas links (set to LAN IP/hostname for Docker or remote browsers)
CANVAS_PUBLIC_URL="http://localhost:8890"
# Social clips — required when using create_social_clip (no baked-in default URL)
# MONEYPRINTER_API_URL="http://your-moneyprinter-host:8080"
# MONEYPRINTER_MAX_WAIT_SEC=1200
# MONEYPRINTER_VOICE="en-CA-LiamNeural-Male"config/local.env
OLLAMA_MODEL="gemma4"
# NEW — local embeddings default; use openai only if you intentionally share cloud vectors
EMBEDDING_PROVIDER=ollama
CANVAS_PUBLIC_URL="http://localhost:8890"
# MONEYPRINTER_API_URL="http://your-moneyprinter-host:8080"Root .env (Docker Compose only — not mounted into app config)
JARVIS_MODE=cloud
JARVIS_DOCKER_UID=1000
JARVIS_DOCKER_GID=1000
# Keep docker here even when using docker-compose.mcp.yml
JARVIS_DOCKER_TOOL_PROFILE=docker
# MCP stack only — socket group for jarvis-web Docker access
# Linux: stat -c '%g' /var/run/docker.sock
# Windows/macOS: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock alpine stat -c '%g' /var/run/docker.sock
# JARVIS_DOCKER_SOCKET_GID=999
JARVIS_DOCKER_API_AUTH=falsePull MCP sidecar images before first MCP stack start if Brave Search or Fetch are enabled:
docker pull mcp/fetch
docker pull mcp/brave-searchLinks
- Full changelog:
docs/README.md— Change Log section - Previous release: v2.52.0
- Ollama in Jarvis:
docs/ollama/README.md - Docker (Linux):
docs/docker/README.md - Docker (macOS/Windows):
docs/docker/MAC-WINDOWS.md - Model prompt overrides:
docs/MODEL_PROMPT_OVERRIDES.md