The April 2026 LLM update that mattered inside a consumer Mac agent was a text field, not a benchmark.
Every roundup of LLM updates this month ranks Opus 4.7, GPT-5.2, Gemma 4, GLM-5.1, DeepSeek, and Qwen by benchmark and pricing. None cover the infrastructure shift that actually shipped inside a consumer macOS agent on April 11. Four lines of Swift now inject ANTHROPIC_BASE_URL into the ACP subprocess from a text field in Settings. Type a URL, press Return, and every future call from three concurrent Claude sessions exits through your proxy.
The April 2026 LLM updates every roundup covered, and the one it missed
The anchor fact
0 lines of Swift reroute every Claude session the app makes
The Fazm desktop app spawns one ACP bridge subprocess per install. The three visible Claude sessions (main chat, floating bar, background observer) all share it. The ACP bridge reads a single UserDefaults key before it runs the Anthropic SDK. If that key is non-empty, it becomes the ANTHROPIC_BASE_URL env var on the subprocess, and the SDK resolves every request against your URL instead of api.anthropic.com. The code is below. It is the entire feature.
Why one toggle covers three sessions
Three concurrent chat sessions, one ACP bridge, one env var
Fazm's main, floating-bar, and background-observer chats are separate sessions with different system prompts and different session IDs, but they are all delivered through the same ACP subprocess. That is why a single customApiEndpoint value is enough: it is spawn-time configuration for the shared process. The session table lives at ChatProvider.swift lines 1048 to 1050.
One text field, three rerouted sessions
The field in Settings > Advanced > AI Chat sets one UserDefaults value. The ACP bridge reads it at spawn time and sets one env var. The SDK inside the bridge uses that env var to resolve every request from every session.
How customApiEndpoint becomes ANTHROPIC_BASE_URL for every session
The restart handler
Change the field, stop the bridge, never restart the app
Changing the endpoint at runtime would be useless if it required relaunching Fazm. It does not. TextField.onSubmit calls restartBridgeForEndpointChange() on the ChatProvider. The function stops the subprocess and flips acpBridgeStarted back to false. The next sendMessage call sees the stale state and warms the bridge back up with the new env. The user's conversation state, session IDs, and chat history all survive.
What the log shows when you type a URL and press Return
The behavior is visible in the Fazm log file. The sequence below is what a single endpoint change looks like across the settings UI, the ChatProvider, and the ACP bridge. The bridge only pulls the new env on the next spawn, which happens the first time you send a message after the change.
The Settings card
One TextField, one onSubmit, one placeholder
The UI is deliberately minimal. A toggle to reveal the field, the field itself with the placeholder "https://your-proxy:8766", and a short helper text that names the two most common use cases: corporate proxy and GitHub Copilot bridge. The onSubmit handler fires the bridge restart. No save button. No confirmation dialog.
The April 2026 release path
Three releases that stack into a rerouteable LLM pipeline
The custom-endpoint feature did not land alone. Three point releases during April each added one piece. The ordering matters: clean error handling first, then user-facing endpoint control, then honest copy about what "local-first" means.
April 2026, one release at a time
April 3, 2026 — v2.0.1
Pop-out chat windows ship. The desktop app now routinely runs a main chat, a floating bar chat, and a background observer at the same time. This is the precondition that makes per-app endpoint routing useful: one switch changes where three sessions call out.
April 4, 2026 — v2.0.6
Smart/Fast toggle for the model picker lands in the chat header (Opus vs Sonnet). The picker exposes model selection to the user for the first time. Endpoint routing will arrive a week later; the combination lets a user pick both which model and where it is served from.
April 7, 2026 — v2.1.2
ACP protocol v0.25.0. Credit-exhaustion and rate-limit errors now surface cleanly through the bridge instead of silent hangs. This is the prerequisite for trusting a custom endpoint: a flaky self-hosted gateway now fails loudly.
April 11, 2026 — v2.2.0
The custom API endpoint setting is added. CHANGELOG.json line reads: 'Added custom API endpoint setting for proxies and corporate gateways'. The ACP bridge starts reading customApiEndpoint from UserDefaults and injecting ANTHROPIC_BASE_URL into its subprocess env. Four lines of code in ACPBridge.swift.
April 12, 2026 — v2.2.1
Follow-up bug fix: duplicate AI response bubble in pop-out and floating bar when sending follow-up messages. Unrelated to the endpoint work, but the same release window, and it ships against the same bridge codepath the endpoint feature lives in.
April 16, 2026 — v2.3.2
Onboarding and system-prompt language tightens from 'nothing leaves your device' to 'local-first'. Once the bridge can point at any URL, the honest description of where LLM calls go stops being a binary. The copy change is the self-correction that matches the April 11 feature.
Default path vs custom endpoint
What changes when the field is non-empty
The ACP bridge does not inspect or rewrite your request. The Anthropic SDK inside the bridge simply resolves its base URL against whatever env var it is handed. Everything else, including model IDs and headers, is identical.
| Feature | Default path (field empty) | Custom endpoint (field filled) |
|---|---|---|
| Where HTTPS traffic goes | api.anthropic.com (Anthropic SDK default) | Your URL (ANTHROPIC_BASE_URL env var on the ACP subprocess) |
| How you change it | Not changeable in product; requires forked build or shell env hack | Type a URL into one text field in Settings > Advanced > AI Chat |
| Restart required | N/A (no user-exposed endpoint control) | No app restart. Bridge stops in place, next sendMessage warms it back up |
| Scope of the override | Per-session or per-request only if the product exposes a picker | All three parallel Claude sessions (main, floating, observer) simultaneously |
| Model choice interaction | Model choice is coupled to vendor | Orthogonal. Pick any model your endpoint exposes (Haiku 4.5, Sonnet 4.6, Opus 4.7) |
| Observability | Request bodies leave the machine before your org can log them | Your proxy sees every LLM request body before it leaves your network |
| Credit-exhaustion error surface | Vendor-specific, often surfaces as a raw HTTP error in logs | Surfaces cleanly through ACP v0.25.0 as structured events in the UI |
What people put in the field
Six gateway patterns that unlocked enterprise Mac adoption
The field accepts any URL that speaks the Anthropic Messages API shape. In practice, six patterns cover most of what enterprise rollouts asked for during April.
Corporate egress proxy
Your firewall blocks api.anthropic.com at the gateway. Point Fazm at your internal proxy that enforces auth, rate limits, and logging. Request headers, model IDs, and message bodies are untouched; the proxy just forwards after logging.
Self-hosted LiteLLM
Run LiteLLM with an Anthropic-compatible route in front of multiple providers. Fazm talks Anthropic to LiteLLM; LiteLLM fans out to Anthropic, Vertex, or a self-hosted model behind the scenes.
GitHub Copilot bridge
Users with GitHub Copilot seats can front a Copilot-to-Anthropic bridge with their Copilot credentials. Fazm sees standard Anthropic responses; the bridge handles the auth translation.
Region-specific Anthropic
Data-residency requirements pin your LLM traffic to a specific region. Point the field at the regional endpoint your compliance team approved.
QA mock server
Test the Fazm desktop agent end-to-end without burning real API credits. Stand up a fake Anthropic endpoint that returns fixture responses, point Fazm at it, and run your UI tests against deterministic output.
Observability sidecar
Route every LLM call through a sidecar that mirrors request/response pairs to your own analytics store. Useful when you need audit trails for every prompt that runs against a shared Mac fleet.
Endpoints people actually point Fazm at
The quietest LLM update of the month
Every April roundup led with Opus 4.7. Enterprise buyers asked about a text field.
In the week after v2.2.0 shipped, the question that came up repeatedly from enterprise evaluators was not about the model. It was: "Does this go through api.anthropic.com, and if so, can I change that?" The April 11 release answered yes without requiring a new install, an environment variable in the launchctl plist, or a dotfile. Settings, one text field, press Return.
“Screen capture and macOS automation now uses native accessibility APIs instead of browser screenshot.”
Fazm CHANGELOG.json, v1.5.0, 2026-03-27 (the shipping decision that made rerouting worth offering in April)
FAQ: LLM updates, April 2026
What were the notable LLM updates in April 2026?
The month was model-dense. Anthropic moved Claude Opus 4.7 to GA while keeping Sonnet 4.6 and Haiku 4.5 as the mid and bottom tier. OpenAI shipped GPT-5.2. Google released Gemma 4 under Apache 2.0. Zhipu released GLM-5.1 in a 754B MoE variant. Alibaba shipped Qwen 3.6-Plus and DeepSeek shipped V3.2. But the change that actually altered behavior inside shipping consumer agents on the Mac was not a new model. It was Fazm's v2.2.0 release on April 11, 2026, which added a single text field in Settings > Advanced > AI Chat that sets ANTHROPIC_BASE_URL for the ACP subprocess. Every parallel Claude session, main chat, floating bar, background observer, reroutes through whatever URL you type.
What exactly does the custom API endpoint setting do?
When the Settings text field is non-empty, the ACP bridge reads it from the customApiEndpoint UserDefaults key and injects it as the ANTHROPIC_BASE_URL environment variable on the subprocess it spawns. The code is four lines in /Users/matthewdi/fazm/Desktop/Sources/Chat/ACPBridge.swift, lines 378 to 381. Every HTTP call the bridge makes to the Anthropic SDK now resolves against that URL instead of api.anthropic.com. No bundle edits, no dotfiles, no terminal commands, no app restart. Changing the field calls restartBridgeForEndpointChange() at ChatProvider.swift line 2101, which stops the bridge in place. The next sendMessage warms it back up with the new env var.
Where is the setting in the Fazm UI?
Settings > Advanced > AI Chat. The card header reads 'Custom API Endpoint' with the icon 'server.rack' and the helper text 'Route API calls through a custom endpoint (e.g. corporate proxy, GitHub Copilot bridge). Leave empty to use the default Anthropic API.' The placeholder inside the text field is literally 'https://your-proxy:8766'. The settings search index attached to this item (SettingsSidebar.swift line 57) uses the keyword list ['endpoint', 'proxy', 'base url', 'anthropic', 'copilot', 'gateway', 'corporate'], so any of those words typed into the Settings search field surfaces the card.
Why does this matter for LLM updates in April 2026?
Because the thing that makes an LLM update usable in production is not the benchmark. It is whether an app can deliver the model through a path your organization permits. Enterprise rollouts in early April kept hitting corporate egress policies that block api.anthropic.com at the proxy. Self-hosted gateways like LiteLLM, vLLM fronts, Anthropic-compatible bridges over GitHub Copilot credentials, and region-specific endpoints solve that problem, but only if the consumer app lets a non-engineer point at them. Most consumer Mac agents do not. Fazm's April 11 release added the shortest possible path to that rerouting. The LLM update everyone talked about was Opus 4.7. The LLM update that quietly unblocked enterprise Mac adoption was this text field.
Does the bridge restart automatically when I change the field?
Yes. The TextField has an onSubmit handler wired to restartBridgeForEndpointChange() on the ChatProvider. The toggle above the field does the same thing when flipped off. The function does not tear down the Claude session; it stops the subprocess. Your conversation state survives. The next time you send a message, ensureBridgeStarted() spawns a fresh ACP subprocess with the new environment, reads the session ID you had before, and continues the conversation. You never see a loading screen. The log file line in ChatProvider.swift line 2106 is: 'Stopping bridge to apply custom endpoint change (endpoint=<your url>, will restart on next query)'.
How does this compose with the other April 2026 LLM updates?
Three of the April 2026 Fazm releases stack into one usable pipeline. April 7, v2.1.2, upgraded the ACP protocol to v0.25.0 with credit-exhaustion and rate-limit error handling, which means a flaky self-hosted gateway now surfaces a clean error instead of a silent hang. April 11, v2.2.0, added the custom endpoint field. April 16, v2.3.2, tightened the onboarding and system-prompt language from 'nothing leaves your device' to 'local-first', which matters because once you can point the bridge at your own URL, the honest description of where LLM calls go is not a simple binary. Each release on its own is small. Together they shift what a consumer LLM agent is: a configurable LLM container, not a single-provider pipe.
What kind of endpoints actually work with the field?
Any URL that speaks the Anthropic Messages API shape and accepts the same request headers the ACP bridge sends. That includes: a direct api.anthropic.com replacement in a different region, a self-hosted LiteLLM proxy with an Anthropic-compatible route, a GitHub Copilot bridge that wraps Copilot credentials in an Anthropic-shaped facade, a corporate egress proxy that forwards to api.anthropic.com after logging, or a mock server for testing. The bridge does not change the request body, so model IDs (claude-sonnet-4-6, claude-opus-4-6, claude-haiku-4-5-20251001) stay the same. Whatever is on the far side has to respond with the shape the Anthropic SDK expects.
Which Claude models does Fazm ship as its defaults in April 2026?
Three sessions spawn on the main app path with claude-sonnet-4-6 hardcoded as the default model: 'main' (the primary chat), 'floating' (the floating bar), and 'observer' (the background screen observer). The initialization lives in ChatProvider.swift lines 1048 to 1050. Each session can be overridden per query via the sendMessage model parameter (ChatProvider.swift line 2220 documents the override for the floating bar). The floating bar model picker defaults to Sonnet after the April 4 v2.0.6 Smart/Fast toggle landed, and the custom endpoint setting is orthogonal to model choice: you can pick any model the endpoint exposes.
How do I verify the anchor facts in this guide?
Open the Fazm desktop source tree. The ANTHROPIC_BASE_URL injection is at /Users/matthewdi/fazm/Desktop/Sources/Chat/ACPBridge.swift lines 378 to 381. The restart handler is at /Users/matthewdi/fazm/Desktop/Sources/Providers/ChatProvider.swift lines 2101 to 2107. The UI card is at /Users/matthewdi/fazm/Desktop/Sources/MainWindow/Pages/SettingsPage.swift lines 903 to 949, with the placeholder 'https://your-proxy:8766' on line 933. The settings search index entry is at /Users/matthewdi/fazm/Desktop/Sources/MainWindow/SettingsSidebar.swift line 57. The changelog entry is in /Users/matthewdi/fazm/CHANGELOG.json under the v2.2.0 block dated 2026-04-11. Every claim in this guide maps to one of those paths.
Try the April 2026 LLM pipeline on your own Mac
Fazm ships with the custom API endpoint setting, the Smart/Fast model toggle, and ACP v0.25.0 error handling. Open Settings > Advanced > AI Chat, point the bridge at your own URL, and every future Claude call exits through it.
Download Fazm free →
Comments
Public and anonymous. No signup.
Loading…