Domain auto-join, builder hardening, idle CPU wins
Workspaces auto-join verified domains, the specialist builder gains markdown import and validated drafts, and the desktop app sits much quieter at idle.
Workspace admins can now verify a domain so matching teammates auto-join on login. The specialist builder gains markdown import, safer draft editing, and a unified chat experience. And a wide sweep of idle work means the desktop app stops waking up to do nothing.
Workspace auto-join by verified domain
You can now claim a domain you control and let teammates onto a workspace automatically. In Settings, switch the workspace policy to “Domain access,” add a domain, and follow the DNS instructions. Once verification succeeds, anyone whose email matches that domain joins the workspace as a member when they sign in.
The flow is locked down end to end. Verification tokens expire after seven days, with a 60-second cooldown between attempts and a retry cap. Public email domains like gmail.com and outlook.com can’t be claimed, and each verified domain belongs to a single workspace, so two workspaces can’t claim the same one.
Specialists builder, hardened
Editing custom specialists is more reliable. Edit screens load through a validated path, saved drafts are checked before they hydrate the builder, and published specialists open as proper drafts so saves route correctly whether you’re creating or updating.
Builder chat now matches regular chat. Builder messages carry the same model, provider, token, and latency information you see everywhere else, regenerating and sending guard against overlapping turns, and assistant metadata is preserved cleanly across reloads.
You can also import a specialist from a markdown bundle. The builder parses the markdown, creates a draft, previews the diff, and applies it through the same validated flow — useful for migrating specialists from external tools or sharing prompts as text.
Tasks are now first-class entities in the builder. Descriptions, prompt overrides, model overrides, and knowledge targeting attach to task records that round-trip reliably between the app and your workspace.
Quieter idle behavior
The desktop app does substantially less work when nothing is happening. Closed conversations release their connections on cleanup, idle workspaces stay quiet instead of polling, and the workflow scheduler only wakes up when a schedule actually changes instead of checking every second.
Hidden embedded browser views freeze in place, the embedded view pool reclaims older hidden views, and telemetry pauses while the app is idle or hidden. Connection-status checks pause when the window is hidden or unfocused, and there are fewer redundant refreshes when you tab away and come back. Together, idle CPU drops from roughly 7% to roughly 6% on the test machine.
Better OpenRouter analytics and Bedrock catalog
OpenRouter-routed requests now identify themselves as Zephyr Agency consistently — through the proxy, when validating your own API key, in the desktop client, and during sign-in. Your traffic correctly attributes to Zephyr Agency in OpenRouter analytics instead of going unattributed.
Bedrock model selection now includes both foundation models and inference profiles, pulled in automatically alongside other providers. Bedrock-backed providers appear in the model catalog without manual updates.
Benchmark runs now use the same provider selection as the rest of the app, and unknown usage data stays empty instead of silently collapsing to zero — so a benchmark that genuinely used zero tokens looks different from one whose usage never reported back.
Authentication migration window
During an in-progress identity migration, both the new and previous sign-in providers continue to work, so older desktop sessions keep validating while the change rolls out. The compatibility path is scheduled for removal at the documented sunset date.
Polish & fixes
- Logging out now redirects you to the login page instead of leaving the previous workspace in a broken state.
- Selecting a conversation marks it as read on desktop the same way it already does on mobile.
- Older direct-message avatars resolve to the actual user image instead of letter fallbacks.
- The Provider Settings page scrolls the highlighted provider into view, so deep links from chat land on the right card.
- A screenshot placeholder stands in for embedded browser views when dialogs open over them, so dialogs no longer render under floating views.
- Workspace creation failures now surface the actual error message instead of a generic toast.
- The traffic-light buttons on macOS no longer drift out of position when you change theme.
- The “non-discoverable” project badge no longer shows in the sidebar.
- The specialist builder header layout no longer breaks when toggling visual mode.
- Streaming messages keep their thinking indicator and live stream when you switch conversations and come back.
- The duplicated auth landing screen is gone — adding an account now uses the same QR-code login flow as the initial sign-in.
- Tray left-click no longer opens the menu on Windows or Linux; it brings the window forward instead.
- Sidebar background and borders cleaned up on Windows to match the rest of the chrome.
- Frozen views on Windows have been resolved.
- The project configuration dialog no longer asks you to save unchanged sandbox settings.
- Chat history no longer duplicates messages or grows unbounded on long conversations.
- App logs now write to a single rolling file under
~/Library/Logs/io.zephyr-agency.app/without duplicate entries.