From inside a shipping Mac agent
April 2026's model deluge, absorbed by a four-row Swift table
GPT-6, Claude Opus 4.7, Gemma 4, Qwen 3.6, DeepSeek V4, GLM 5.1. More frontier and open-weight launches landed in April 2026 than any month in the field's history. Almost every other guide on this lays out benchmarks and prices. This one walks through the four-line substring table inside Fazm, a consumer Mac app, that picked up Opus 4.7 the morning it shipped, with no app update, by relabeling its new ID as Smart in the floating-bar picker.
The short version
April 2026 was the busiest month the field has had for new model launches. Anthropic released Claude Opus 4.7. OpenAI shipped GPT-6 and previewed an agentic GPT-5.5. Google opened Gemma 4 under Apache 2.0. Alibaba shipped Qwen 3.6 and 3.5. DeepSeek pushed V4. Most pages writing about this either rank the launches by benchmark or curate a leaderboard. Inside Fazm, a consumer Mac app, the question that mattered was different: when Anthropic flipped Opus 4.7 to GA on April 22, what code already had to be in the shipped binary so the new model showed up in the picker that same morning, with no app update? The answer was four lines of Swift.
The four-row table
Every Claude model ID that the agent runtime exposes is one of three things to a Fazm user: Scary, Fast, or Smart. The mapping from the IDs the runtime hands you to those three labels lives in one Swift declaration. Four rows. Two of those rows are dedicated to Opus.
The fourth row is the one that earned its keep on April 22. ACP SDK v0.29 and later canonicalize the latest Opus build under the alias default rather than opus. Without that fourth tuple, Opus 4.7 would have arrived from the agent unmatched, sorted to the bottom of the list, and the floating-bar pill would have read default. With it, the pill kept reading Smart (Opus, latest) across the rename.
How a fresh model ID flows from the lab into the picker
The migration that catches stored preferences
A user who already had Smart selected on Fazm 2.3 carries the literal string opus in their stored preferences. After the protocol bump on April 20, the agent stops returning a row whose ID contains opus; it returns one called default. Without a migration, the lookup would silently miss and the picker would revert to Sonnet on first launch. The migration is six lines, sitting next to the substring table.
The unreleased entry on line 3 of the Fazm changelog tracks this exact carry-forward: “Fixed Smart (Opus) model preference not persisting after app update, now correctly maps stored opus to the new ACP model ID.”
The release timeline that produced the four-row table
Five dated events, a single shipped binary across all of them, no App Store review wait between any of the model arrivals.
April 2, 2026 - Gemma 4 lands
Google releases the Gemma 4 family under Apache 2.0. Four variants. The 31B Dense outperforms models 20x its size. Open-weight, runnable on capable Mac silicon via Ollama or MLX. Not in Fazm's picker; not the path Mac-side tool use is wired through.
April 7, 2026 - Anthropic ACP SDK 0.25.0
Tightens error shapes for credit exhaustion and rate limits. Fazm 2.1.2 ships the same day with the bridge bumped. The two-substring rate-limit guard inside ChatProvider stays stable across the bump.
April 16, 2026 - Qwen 3.6 35B-A3B
Alibaba releases the latest Qwen open-weight model the same morning Anthropic preps Opus 4.7 for staged rollout. Open-source agentic stacks gain a stronger backbone; Fazm's picker stays three slots wide.
April 20, 2026 - ACP SDK 0.29.2 + Fazm 2.4.0
Fazm 2.4.0 ships the agent protocol bump and the dynamic model list. The release-note line is verbatim: 'Available AI models now populate dynamically from the agent, so newly released Claude models appear without an app update.' The 'default' alias enters availableModels for the first time.
April 22, 2026 - Opus 4.7 GA + Fazm 2.4.1
Anthropic flips Opus 4.7 to GA. Existing Fazm 2.4.0 builds pick up the new model on the next session/new. The 2.4.1 hotfix lands the same day to handle a partial-list edge case where Sonnet users were briefly shown the Smart label. The unreleased migration of stored 'opus' to 'default' carries forward in 2.4.2.
Every major April 2026 release, at a glance
The full set the agent runtime, an LLM observatory, or a Mac agent has had to track this month. Two of these rows are how the floating-bar pills are populated. The rest are the backdrop.
Claude Opus 4.7
GA on April 22, 2026 inside Anthropic's API. Surfaces in Fazm under the alias 'default' from ACP SDK v0.29+. Drops into the Smart pill via the fourth row of the substring table.
Claude Sonnet 4.6
The everyday default through April. Hardcoded as DEFAULT_MODEL at acp-bridge/src/index.ts line 1245 and run on the main, floating, and observer sessions.
GPT-6 + GPT-5.5
OpenAI shipped GPT-6 and previewed GPT-5.5 as an agentic model. Not in Fazm's chat picker as of April 24, 2026; the agent runtime is Anthropic-first today.
Gemma 4 family
Google released four open-weight variants on April 2 under Apache 2.0. The 31B Dense outperforms models 20x its size on benchmarks. Reachable via Ollama from outside Fazm.
Qwen 3.6 + Qwen 3.5
Alibaba shipped Qwen 3.6 35B-A3B on April 16 and the 397B-A17B MoE flagship. Multimodal reasoning and ultra-long context are the headline capabilities.
DeepSeek V4
Two large MoE variants tuned for long-context reasoning, coding, and agentic workflows. Open weights, available locally on capable Mac silicon.
GLM 5.1
Claims to beat the best proprietary models on SWE-Bench Pro. The open-source benchmark gap continued to compress through April.
The byte budget that makes Opus 4.7 affordable inside a consumer subscription
The reason a $20-ish consumer Mac app can route Smart-pill traffic to Opus 4.7 is not that the model is cheap. It is that the per-step input is tiny. Fazm sends Claude a structured accessibility tree, not a screenshot. The bundled MCP binary at Contents/MacOS/mcp-server-macos-use harvests it through Apple's AXUIElementCopyAttributeValue, returning roughly two kilobytes of structured text per UI step.
“Available AI models now populate dynamically from the agent, so newly released Claude models appear without an app update.”
Fazm 2.4.0 release notes, /Users/matthewdi/fazm/CHANGELOG.json line 21, dated 2026-04-20
What the bridge sees on the morning of a model release
The literal string Raw models from ACP SDK is the actual log line emitted from line 1272 of /Users/matthewdi/fazm/acp-bridge/src/index.ts. The pseudo-entry filter is the next statement: availableModels.filter(m => m.modelId !== "default"). The Swift side's match logic at ShortcutSettings.swift line 185 finds the first family-map row whose substring is contained in the modelId.
Two ways to ship a brand-new model into a Mac app
The contrast is structural, not stylistic. One requires a build, a review, and a user reinstall. The other is a JSON message arriving on a Unix socket.
| Feature | Hardcoded picker | Fazm (substring table + dynamic list) |
|---|---|---|
| Adopting a fresh Claude model ID | Ship a new app build, push to App Store review, wait for users to update | Bridge re-emits the model list on session/new; substring table relabels in place |
| Per-step input to the model | ~80 KB base64 PNG screenshot of the active window | ~2 KB structured accessibility tree harvested via AXUIElementCopyAttributeValue |
| What the user picks from | Drop-down listing every model ID the lab exposes | Three pills: Scary, Fast, Smart, mapped via a 4-row substring table |
| Element targeting after a model upgrade | Re-validate vision pipeline against new tokenizer / image encoding | Stable AX identifiers; the model just names the row it wants to click |
| Stored preference across protocol renames | Manual coexistence shim per release | normalizeModelId at lines 170 to 177; three substring checks cover every Claude family |
Why this matters for picking a model in April 2026
Almost every recommendation guide at the top of this topic answers “which one” with benchmarks. That answer is brittle: GPT-6 leads on one row, Opus 4.7 on another, Qwen 3.6 on a third, GLM 5.1 on a fourth. The benchmarks will shuffle again in May. The more useful question for a Mac user is whether the surface they use today, the one running in their menu bar, can absorb a fresh model the morning it ships. Fazm absorbs it because four rows of Swift and one JSON message do the work. The same architecture would catch Haiku 5, Sonnet 5, Opus 5, or any future Anthropic family line. It does not yet catch Qwen, DeepSeek, or GLM. Adding them is a one-line patch the day the agent runtime exposes them.
Three pills, dozens of models, one shipped binary
A consumer Mac user opening the floating bar at Cmd+Shift+Space on April 24, 2026 sees three pills: Scary, Fast, Smart. Behind those three labels sit Anthropic's Haiku, Sonnet 4.6, and Opus 4.7. The picker stays three slots wide. Anything Anthropic adds to the family next month rides into the same slots. Anything OpenAI, Google, Alibaba, DeepSeek, or Z.ai released in April remains an open question for whichever local-LLM stack you point at your Mac. The surface above them, the one chained into Mail, Calendar, Messages, Linear, and a dozen Catalyst apps via a two-kilobyte accessibility tree, was already stable on the morning Opus 4.7 went live. That stability is what the four-row table buys.
Want this on your Mac before May?
Walk through the floating bar, the four-row picker, and the byte-budget trick on a 20-minute call.
Frequently asked questions
Which LLM models actually launched in April 2026?
Headlines for the month: Anthropic released Claude Opus 4.7 to GA on April 22 alongside Claude Sonnet 4.6 staying the everyday default; OpenAI shipped GPT-6 and previewed GPT-5.5 as an agentic model; Google released the Gemma 4 family on April 2 under Apache 2.0, with the 31B Dense outperforming models 20x its size; Alibaba dropped Qwen 3.6 35B-A3B on April 16 and Qwen 3.5 397B-A17B; DeepSeek pushed V4 with two large MoE variants; GLM 5.1 claims to beat the best proprietary models on SWE-Bench Pro. Most published roundups stop at this list. For a consumer Mac app, the question that mattered was different: what code does a shipped product need so a brand new model ID drops into the floating-bar picker the same morning Anthropic flips a flag, with no App Store review and no user reinstall.
How does a Mac app absorb a fresh Claude model ID without a new release?
Inside Fazm, the Agent Client Protocol (ACP) bridge re-emits its full model list on every session/new. The function is called emitModelsIfChanged at /Users/matthewdi/fazm/acp-bridge/src/index.ts line 1271. It filters out the 'default' pseudo-entry, hashes the JSON, and forwards the remainder to the Swift app over a Unix socket only when the JSON changed. On the Swift side, ShortcutSettings.swift takes that list and matches each entry against a four-row substring table at lines 160 to 163. The table maps any ID containing 'haiku' to Scary, 'sonnet' to Fast, and 'opus' or 'default' to Smart. When Anthropic added a new Opus build to availableModels on April 22, the picker label updated immediately. The 2.4.0 release notes for April 20 documented the path: 'Available AI models now populate dynamically from the agent, so newly released Claude models appear without an app update.'
What is the actual table that does the relabeling?
The literal Swift declaration at /Users/matthewdi/fazm/Desktop/Sources/FloatingControlBar/ShortcutSettings.swift lines 159 through 164 is: private static let modelFamilyMap: [(substring: String, short: String, family: String, order: Int)] = [ ("haiku", "Scary", "Haiku", 0), ("sonnet", "Fast", "Sonnet", 1), ("opus", "Smart", "Opus", 2), ("default", "Smart", "Opus", 2) ]. The fourth row is the load-bearing one. ACP SDK v0.29+ canonicalizes the latest Opus build under the alias 'default' instead of 'opus'. Without that fourth row, the new Opus 4.7 ID would have shown up unlabeled, sorted to the end of the list, and the user-facing pill would have read 'default' instead of 'Smart (Opus, latest)'.
Why does Opus 4.7 carry the alias 'default' inside Fazm and not 'opus'?
Because the ACP SDK that Fazm wraps switched canonical aliases between releases. The comment at ShortcutSettings.swift line 174 reads verbatim: 'ACP SDK v0.29+ uses default for Opus 4.7; migrate stored opus to match.' The 2.4.0 changelog entry on April 20 records the protocol bump: 'Upgraded Claude agent protocol to v0.29.2.' That same evening, the model list from the agent included an entry whose modelId was the literal string 'default'. Two days later, Anthropic pointed that alias at Opus 4.7. Fazm's Swift code did not need to know any of this happened. The substring map already contained the row that matches 'default' to Smart.
What happens to a user who already had Smart selected on the old build?
Their stored preference is the literal string 'opus' from before the protocol bump. After updating to 2.4.0, the new model list does not contain 'opus' anymore; it contains 'default'. Without a migration, the picker would silently revert to Sonnet because the lookup misses. The migration lives in normalizeModelId at ShortcutSettings.swift lines 170 to 177. It runs three substring checks: any stored ID containing 'haiku' returns 'haiku', any containing 'sonnet' returns 'sonnet', any containing 'opus' returns 'default'. The CHANGELOG.json file at /Users/matthewdi/fazm/CHANGELOG.json line 3 carries the unreleased entry that tracks this fix: 'Fixed Smart (Opus) model preference not persisting after app update, now correctly maps stored opus to the new ACP model ID.'
What about all the non-Anthropic models that shipped in April? GPT-6, Gemma 4, Qwen, DeepSeek?
Fazm's primary chat path uses Claude Sonnet 4.6 by default and Claude Opus 4.7 on the Smart slot, because that is what the ACP runtime exposes for Mac-side tool use. Gemini 2.5 Pro is wired separately into a background analysis service called GeminiAnalysisService at /Users/matthewdi/fazm/Desktop/Sources/GeminiAnalysisService.swift line 67, used for screen-recording sessionizing and not for the floating-bar conversation. Open-weight models such as Qwen 3.6, GLM 5.1, DeepSeek V4 are not in the picker as of April 24, 2026. The substring table makes adding them a one-line patch the day the agent runtime supports them; it does not magically run them locally. If you are reading this for a 'best open-source LLM for Mac' answer, every other roundup will list quantized weights and tokens-per-second on M-series silicon. Fazm sits one layer above that: it is the consumer surface that drives your Mac apps with whichever model it is pointed at.
Why does the picker only show three slots when there are dozens of models out there?
Because the Mac surface is consumer-grade, not a developer leaderboard. The defaultModels array at ShortcutSettings.swift lines 151 to 155 hard-codes three slots: Scary (Haiku, latest), Fast (Sonnet, latest), Smart (Opus, latest). The labels intentionally describe the trade-off, not the model name. A user choosing between Scary, Fast, and Smart is choosing between cost, speed, and quality, the way they would choose between ECO, normal, and turbo on a kettle. The full ACP-reported list arrives via updateModels at line 180 and overrides the defaults, but the substring map collapses every reported ID back into one of those three labels. A future Anthropic Haiku 5 lands in Scary. A future Sonnet 5 lands in Fast. A future Opus 5 lands in Smart. The picker stays three slots wide.
Where do I see the April 22 morning go live?
Two places. First, the Fazm changelog at /Users/matthewdi/fazm/CHANGELOG.json lines 7 to 14 (version 2.4.1, dated 2026-04-22) ships the on-the-day fix: 'Fixed model label showing Smart for Sonnet users when Anthropic reports a partial model list.' That is the bug surfaced by Anthropic's own staged rollout of Opus 4.7. Second, the unreleased line at /Users/matthewdi/fazm/CHANGELOG.json line 3, which records the carry-forward migration of stored 'opus' to 'default' so existing Smart users do not get bumped down to Sonnet on first launch after the update. Together those two entries are the concrete trace of how a four-row Swift table absorbed a major model release without anyone reinstalling anything.
What is the byte-budget trick that makes any of this affordable on a consumer subscription?
Fazm does not send Claude a screenshot of your Mac. It sends a structured accessibility tree harvested through AXUIElementCopyAttributeValue, bundled inside a Swift-native MCP server called mcp-server-macos-use that ships at Contents/MacOS/mcp-server-macos-use. A typical Gmail inbox accessibility tree is roughly two kilobytes of structured text. The same inbox as a base64-encoded PNG screenshot is roughly eighty kilobytes. Sonnet 4.6 charges by token, not by pixel, so the per-step input drops from roughly 28,000 image-like tokens to roughly 700 text tokens. Multiply across the forty-or-so turns a real Mac workflow chains together and that is the difference between Opus 4.7 being a developer-API-only luxury and Opus 4.7 being the Smart pill in the consumer picker.
Where can I check the file paths and line numbers in this article?
The four-row substring table sits at /Users/matthewdi/fazm/Desktop/Sources/FloatingControlBar/ShortcutSettings.swift lines 159 to 164. The migration function normalizeModelId is at lines 170 to 177 of the same file. The dynamic update entry point updateModels begins at line 180. The ACP bridge function emitModelsIfChanged is at /Users/matthewdi/fazm/acp-bridge/src/index.ts line 1271, with the DEFAULT_MODEL constant on line 1245 and the BUILTIN_MCP_NAMES set on line 1266. The 2.4.0 release notes carrying the dynamic-models entry are at /Users/matthewdi/fazm/CHANGELOG.json lines 17 to 30. The unreleased migration entry is on line 3.
Related guides from the Fazm field notes
Anthropic Claude latest updates April 2026
The byte-budget shift behind Sonnet 4.6 + Opus 4.7 on a Mac, with the bundled MCP server path and the per-call input math.
Anthropic new model April 2026
How a three-row picker stays three rows wide when a new Opus build lands. The substring map, the labels, the order.
AI model release or LLM launch April 2026
The same month from the model-runtime side: ACP bumps, error shapes, and how a consumer Mac app stays steady through them.