Release v0.109.0
Sep 01, 2026
Multi-factor sign-in is complete for every kind of account, AI agents graduate from proposing to acting — under a closed set of rules and a per-org circuit breaker — and can triage tickets, ticketing lands on the mobile app with attachments and a timer, and organizations can be archived or merged. It is the largest Breeze release so far; self-hosters should read the upgrade notes before pulling.
Sign-in & Security
- Multi-factor authentication is complete. Every account type can enrol an authenticator app, SMS, or a passkey, and recovery codes are shown once at enrolment — the moment they exist — instead of being fetched later. A mistyped code during setup now tells you so and keeps the QR on screen; before this release it silently collapsed the setup and, in one path, signed you out.
- 'View codes' is gone. It was secretly generating a new set of recovery codes and invalidating the ones you had saved. There is one action now, 'Regenerate', and it warns you before it does anything.
- When an SSO identity first links to an existing Breeze account, you confirm with your password or MFA instead of hitting a dead end. Turning on Enforce SSO now runs a lockout preflight first, so you can't lock every admin out of the tenant.
- Self-hosters reaching Breeze through an SSH tunnel or a LAN address no longer bounce back to the sign-in page with 'session expired' after every successful login. Same-origin requests are accepted, and if an origin is refused the login page now says which one and why.
- Hardening under the hood: release and update downloads and the bring-your-own-LLM provider all go through a guarded fetch path that refuses redirects into private networks; a helper that could look up user names across tenant boundaries is no longer exported; the images that actually ship are the ones that get vulnerability-scanned. Recommended upgrade.
AI Agents
- Agents can act. An agent that used to only propose can now carry out a closed, rule-equivalent set of operations — re-validated right before it runs and verified right after — and every step is written to an execution ledger with the agent, not a technician, as the actor. A per-organization circuit breaker and a kill switch let you stop it cold.
- Ticket triage. Point an agent at a queue and it reads the ticket, drafts a reply you send as yourself (or discard), or proposes resolving with a prefilled note. An autonomy toggle decides whether it drafts or waits; provenance guards mean it can only write the fields it was allowed to.
- Alert verdicts, scheduled sweeps, and a weekly organization narrative — agents can now judge whether a grouped alert is real, run on a schedule with batch approve/decline, and write a plain-English weekly summary per customer as a system-managed report.
- Everything above stays off unless you turn it on, gated by the AI agents permission and a per-agent policy — nothing runs unattended unless a policy explicitly allows it.
- Bring-your-own LLM gets a provider catalog and per-partner endpoint selection, with an egress layer that bounds where your key can send data.
Ticketing & Mobile
- Ticket comment attachments — on the web, the API, and the customer portal.
- Tickets on mobile: a running timer with start/stop from the ticket, a weekly timesheet, an offline queue so time entries written without signal sync when you're back, push categories with per-user notification preferences, and comment attachments.
- Auto-suggested time entries. When a technician finishes a remote session, Breeze can suggest the time entry for them to confirm with one tap — never written without that tap, and off until a partner admin turns it on under Ticketing → Time Tracking.
- New partners start with inbound email-to-ticket switched off, so a mailbox is only opened deliberately. Existing partners are unchanged.
Organizations & Onboarding
- Archive an organization. An archived customer goes read-only with everything intact and a Restore action, instead of the only option being deletion.
- Merge two organizations, with a merge engine that moves devices, tickets, and billing history together and records the merge as an auditable event.
- Installer and enrollment keys now default to 30 days and 50 devices, so a staged rollout no longer dies when the download window closes. The Windows install one-liner downloads through your own server instead of GitHub.
- QuickBooks: map Breeze customers and catalog items to their QuickBooks counterparts before anything syncs.
Remote Desktop & Terminal
- Paste Text in the Viewer now delivers exactly what you pasted, on any keyboard layout. It used to be typed out key-by-key against a US layout, so paths and operators came through mangled on non-US Macs — a real problem for pasting commands.
- The macOS desktop helper reconnects after sleep instead of quitting, so Desktop no longer greys out on a MacBook that closed its lid — and it stops asking for Screen Recording on every start once you've granted it.
- The web Terminal connects on the first open (no more switching to File Browser and back), and the 'Connected Bang' welcome string is fixed in every language.
- The Viewer falls back gracefully when the system WebView has no WebRTC instead of failing to connect.
Reliability & Housekeeping
- Recurring maintenance windows now have a start time. Previously every daily, weekly, or monthly window fired at local midnight regardless of what you meant; existing windows keep their schedule until you edit them.
- Alert acknowledge, suppress, resolve, and dismiss can no longer lose an update when two people act at once.
- When a patch job partially fails, the reboot policy is still honoured, and each patch records its own result instead of inheriting the batch's failure.
- Retention jobs delete in batches and audit-log pruning uses the index, so cleanup no longer stalls a busy database; job outcomes are exported as Prometheus metrics.
- The devices list stays on the organization you selected after login, in-page links switch device tabs without a refresh, and long lists no longer land on an empty page when rows shrink.
- Time displays respect your browser's 12/24-hour preference everywhere.
- The currency roll-up on billing reports now says why it can't show an approximate total (for example, no exchange rate for a currency) instead of quietly showing nothing.
Self-Hosting
- 53 database migrations apply automatically on first boot. Take a snapshot first. Two of them take blocking locks on tables that can be large (`remote_sessions` and `time_entries`) — check their row counts and use a maintenance window if they're in the millions. Full detail in the GitHub Release notes.
- One soft-breaking change: a bare-metal install that points `MCP_LLM_BASE_URL` at `localhost` for a local LLM will stop reaching it — loopback is now refused by the guarded fetch path. Point it at the model host's LAN or container address instead. Containerised deployments are unaffected.
- No new required environment variables. Optional: a worker-split profile (`BREEZE_ROLE=worker`) moves monitors, SNMP, backup, and discovery into their own process with its own metrics endpoint.
- The guided-setup reboot-startup service could never be installed (systemd rejected its unit file). Fixed, and now verified in CI.
- Remember `portal` in your pull and up commands — it is a separate container.
Breeze v0.109.0 is the largest release we have shipped, and most of it is five efforts that were built in waves finishing at once. The one every technician will notice first is sign-in: multi-factor authentication now covers every kind of account, recovery codes appear at the one moment they can, and a mistyped code during setup tells you instead of quietly undoing your work.
The second is AI agents crossing from advice to action. An agent can now carry out a closed set of operations — re-checked right before it runs, verified right after, every step attributed to the agent in the ledger — and it can work a ticket queue: drafting replies you send as yourself, or proposing a resolution. It stays off until you turn it on, and a per-organization circuit breaker plus a kill switch mean you are never more than one click from stopping it.
Ticketing arrives properly on the mobile app, organizations can be archived or merged instead of deleted, and a run of remote-desktop fixes closes long-standing macOS papercuts. Self-hosters: this one carries 52 migrations and one soft-breaking change for bare-metal local-LLM setups — the GitHub Release has the specifics. Snapshot first.