April 2026, from inside a shipping consumer Mac app
The Anthropic API changelog for April 2026, sorted by what actually broke a build
Eleven changelog entries. One required a code change. The rest absorbed silently through a dynamic model list. This is the month, walked through the one file that moved and the ten that did not.
The month, in one paragraph
Anthropic shipped Claude Opus 4.7 at general availability on April 16 at the same pricing as 4.6. Managed Agents went public beta on April 8. The Advisor tool followed on April 9. Sonnet 4 and Opus 4 got deprecation notices on April 14 for a June 15 retirement. The 1M context beta for Sonnet 4 and 4.5 is scheduled to retire on April 30. Haiku 3 retired on April 20. A caching bug that was quietly dropping thinking history plus a verbosity prompt regression degraded Claude Code output quality until Anthropic reverted both on April 23 and reset usage limits for affected accounts.
Every other walkthrough of this list treats it as cloud and pricing news. For a consumer Mac app that consumes the API, the more useful question is: which of these entries forced a client release, and which ones moved through the pipes without anyone having to do anything.
The anchor fact
Of 0 changelog entries, exactly 0 required a code change
The ACP SDK v0.29+ renamed its Opus slot from opus to default. Users who had previously picked Smart (Opus) had the literal string opus persisted in UserDefaults. Without a migration, they silently fell back to Sonnet after updating. Fazm 2.4.0 shipped an eight-line normalizeModelId function that fixes it at app launch.
The function in full
This is the entire migration, straight from Desktop/Sources/FloatingControlBar/ShortcutSettings.swift. Three branches, one fallback. The comment on line 174 names the reason.
The migration is triggered in the ShortcutSettings initializer. If the user had a saved model ID, run it through the function. If the normalized value differs from the saved one, write the new value back to UserDefaults. One read, one conditional write, and Opus users keep their preference after updating to Fazm 2.4.0.
How an Anthropic changelog entry reaches the picker
The majority of the month's entries did not need a build because there is no hardcoded model list anywhere in the app. The picker rebuilds from whatever the Claude Code agent SDK reports on each warmup. Here is the whole path, from Anthropic's release switch to the user seeing a new row.
Anthropic release → Fazm model picker, no app update
The April 2026 changelog, entry by entry
Nine entries from Anthropic, two Fazm releases shipped in response. The only one that required a code change on the client is the ACP SDK rename, highlighted in the sixth step.
April 2026, sorted by what actually hit the build queue
April 7: Messages API on Bedrock, no client impact
Anthropic made Messages available through Amazon Bedrock in research preview at /anthropic/v1/messages. Fazm does not route through Bedrock; the app talks to Anthropic-hosted Claude via the Claude Code SDK inside its ACP bridge. Zero code change. Absorbed silently.
April 8: Managed Agents public beta, architectural-only impact
Sandboxed fully managed agents with secure tool use and SSE streaming at $0.08 per session-hour plus tokens. Interesting to read; irrelevant to the build queue because a sandboxed hosted agent cannot see Messages.app or Xcode. Fazm keeps the local accessibility-tree path.
April 9: Advisor tool public beta, no code change
Pair a cheap executor with a stronger advisor mid-generation under the advisor-tool-2026-03-01 header. Fazm's existing three-session warmup (main, floating, observer) already does an app-level variant of the same pattern. No rewire.
April 14: Sonnet 4 / Opus 4 deprecation announced
Retirement scheduled for June 15, 2026. Fazm's picker defaults are claude-sonnet-4-6 and the Opus family slot, so nothing to fix today. Added to the June build horizon, not the April one.
April 16: Opus 4.7 GA, absorbed through the dynamic model list
Same $5 / $25 pricing as Opus 4.6, updated tokenizer, stronger software engineering. Fazm's picker rebuilt the next time the app launched; the user saw Smart (Opus, latest) with the new capabilities, no app update required.
April 20 (client side): Fazm 2.4.0 ships for the SDK v0.29 rename
The only entry all month that required a code change. ACP SDK v0.29 renamed the Opus slot from 'opus' to 'default'. Fazm 2.4.0 added normalizeModelId in ShortcutSettings.swift (line 170) and a UserDefaults migration at lines 325-333. Existing Opus users migrate silently on next launch.
April 22: Fazm 2.4.1 for the partial-model-list regression
When Anthropic briefly returned a truncated availableModels list during the April 23 investigation, the picker mislabeled Sonnet users as Smart because the shortLabel fallback chain hit Opus by accident. 2.4.1 tightened ShortcutSettings.shortLabel to walk availableModels, defaultModels, and the normalized alias before falling back.
April 23: Anthropic reverts cache and verbosity regression
Anthropic admitted a caching bug had been dropping thinking history and a verbosity prompt regression had hurt Claude Code output quality. They reverted both and reset usage limits for affected accounts. Zero Fazm code change; the symptom cleared the moment the revert landed.
April 30: 1M context beta retirement for Sonnet 4 / 4.5
The output-1m-2025-xx-xx beta header retires for the older Sonnet variants. Fazm does not request the 1M beta header on any session, so this is a silent absorbing case for us. Teams that do opt in will lose the header without a future build change.
Why the dynamic model list does most of the work
The shortest version of why most changelog items absorbed for free is that Fazm never hardcoded a model ID in the first place. On every warmup, the ACP bridge calls session/new. The SDK response includes the list of models the user's auth can reach. The bridge filters out the pseudo-default model, dedupes against the last emitted list, and sends a models_available event up to Swift. The Swift side calls updateModels, which runs a four-row substring family map and updates the @Published property. SwiftUI re-renders the picker.
The family map on the Swift side is the other half of the story. It is a four-row lookup table that tags each model ID with a user-friendly label, a family name, and a display order. The map lives at ShortcutSettings.swift lines 159-164.
Notice the fourth row. Once the SDK started returning default as the Opus slot, a new row was added so the picker label resolves correctly for either spelling. The migration function handles the saved preference; the family map handles the live rendering. Two tiny changes, and Opus 4.7 reached every existing user without anyone noticing.
Same changelog, two consumption shapes
A hardcoded Anthropic client (direct Messages API calls with pinned model strings) and a dynamic agent-SDK client (Claude Code through ACP, like Fazm) pick up April's changelog very differently. This is the same month, mapped to both shapes.
| Feature | Direct API + pinned IDs | Fazm (ACP + family map) |
|---|---|---|
| Opus 4.7 model ID reaches the user | Hardcoded string, app release required | ACP availableModels rebuild, day zero |
| v0.29 'opus' → 'default' rename | Saved preference silently fails | normalizeModelId migrates UserDefaults on launch |
| April 23 cache/thinking regression | Client patches for a server-side bug | No code change, symptom clears on revert |
| Haiku 3 retirement (April 20) | 404 on direct API calls if still pinned | Scary slot already points at latest Haiku |
| Managed Agents (April 8 beta) | Hosted sandbox, cannot see local apps | Local accessibility tree, sees every Mac app |
| Partial availableModels regression | Label desyncs, Sonnet shown as Smart | shortLabel walks 3 fallback tables before giving up |
“The single normalizeModelId function is the entire April 2026 Anthropic-API client migration for Fazm.”
Desktop/Sources/FloatingControlBar/ShortcutSettings.swift lines 170-177
What the April 23 regression looked like in the log
The April 23 cache-and-verbosity revert was entirely server-side. On the client, the only signal was longer observer-batch latencies and a few turns where the assistant re-asked something it had already answered earlier in the session. Here is the shape of the log lines during the window. No code change was required; the symptom cleared when Anthropic reverted.
The month, at a glance
One April entry required code: the ACP Opus rename
Everything else absorbed through the dynamic availableModels list. The v0.29 rename of 'opus' to 'default' is the only client change in the entire month's changelog.
normalizeModelId, 8 lines
Substring-matches haiku, sonnet, opus. Returns the current SDK slot name. Migrates stored UserDefaults on launch. Lives at ShortcutSettings.swift:170.
Opus 4.7 lands day zero
No build, no setting, no user action. The picker rebuilds from the ACP availableModels response on next launch. Smart (Opus, latest) points at 4.7 automatically.
April 23 revert, zero code
Anthropic's caching and verbosity regression was server-side. Reverted on April 23. Fazm shipped nothing for it. Usage limits were reset for affected accounts.
Managed Agents do not help consumer Mac apps
Hosted sandboxed agents cannot see Messages.app, Mail, Notes, Xcode, Figma, or anything behind Accessibility permission. That is precisely what a local Mac agent fills in.
Why the consumer-Mac perspective matters for this changelog
Managed Agents and the Advisor tool dominated the April coverage because they are cloud-shaped stories that read well in cloud-shaped publications. Neither one helps a user who wants an agent to read their Mail drafts or rename a layer in a Figma document open on screen. Fazm uses Anthropic's API to power an agent that runs locally, on the user's Mac, against real accessibility APIs surfaced through AXUIElement calls in Desktop/Sources/AppState.swift. That is why the changelog reaches Fazm through the ACP bridge rather than direct Messages API calls, and why the two Fazm releases triggered by the month were both about translating SDK-level changes into the existing model-picker contract, not about rewiring for new primitives.
The single migration function is the visible receipt. Everything else that moved the world this month, the tokenizer shift, the Opus 4.7 ceiling, the cache revert, the deprecations, crossed the bridge silently and reached the user without a release.
The short version of the whole month
Eleven Anthropic API changelog entries in April 2026. One of them required eight lines of Swift on the client. The rest arrived through a dynamic model list and a server-side revert. If you consume the API through a framework that respects dynamic model availability, April was an absorbing month. If you hardcoded model IDs, it was a release month.
Watch the month play out
April 7-9
Want to see the picker rebuild live after an ACP version bump?
Book 20 minutes and we will screenshare a Fazm launch with the ACP models_available event tailing in the log, so you can watch the family map absorb a new slot in real time.
Questions
What were the biggest Anthropic API changes in April 2026?
The headline entries were Claude Opus 4.7 reaching GA on April 16 at the same $5 / $25 per million token pricing as 4.6, Managed Agents going public beta on April 8 under the managed-agents-2026-04-01 header, the Advisor tool public beta on April 9 under advisor-tool-2026-03-01, a formal deprecation of Claude Sonnet 4 and Opus 4 announced April 14 with retirement scheduled for June 15, 2026, the scheduled retirement of the 1M context beta for Sonnet 4 and 4.5 on April 30, Claude Haiku 3 retiring on April 20, and an April 23 admission from Anthropic that a caching bug had been dropping thinking history and a verbosity prompt regression had quietly degraded Claude Code output quality. The caching bug and the verbosity regression were reverted and affected users had their usage limits reset.
Did Fazm have to ship a build for every Anthropic API changelog item in April 2026?
No. Most of them absorbed automatically. Fazm consumes the Claude API through the Agent Client Protocol (ACP) bridge that wraps the Claude Code agent SDK. When Anthropic flipped Opus 4.7 on at the SDK level, the bridge's models_available event fired with the new model ID, ShortcutSettings.updateModels rebuilt the picker with a new Smart (Opus, latest) row, and the user saw it the next time they opened the floating bar. The one entry that did require code was the v0.29 SDK rename of the Opus slot, which broke the saved user preference until Fazm 2.4.0 (2026-04-20) shipped the normalizeModelId function to migrate it.
What is the normalizeModelId function and why was it needed?
normalizeModelId lives at Desktop/Sources/FloatingControlBar/ShortcutSettings.swift line 170. It substring-matches a model ID. If the string contains 'haiku' it returns 'haiku'. If it contains 'sonnet' it returns 'sonnet'. If it contains 'opus' it returns 'default'. The third case exists because ACP SDK v0.29+ renamed the Opus slot from 'opus' to 'default' in its availableModels payload. Users who had previously selected Smart (Opus) had the string 'opus' saved in UserDefaults under the key shortcut_selectedModel. On v2.4.0 launch, the init code at lines 325-333 reads that saved string, runs it through normalizeModelId, writes the result back to UserDefaults, and the picker keeps matching the newly renamed slot. Without this function, Opus users silently fell back to Sonnet after updating Fazm.
Why did Anthropic rename the Opus slot to 'default'?
The ACP SDK used by Claude Code reports availableModels as a small list of human-ish slots, not raw API model IDs. Before v0.29 the three slots were haiku, sonnet, and opus, mapped server-side to whichever versions the user's auth had access to. In v0.29 the top slot was renamed 'default' so the SDK could ship the user's best-available model (Opus 4.7 today, whatever comes next tomorrow) without the slot name implying a specific family. The rename is forward-compatible for any new user. For existing users with stored selections it is a breaking change, which is why a client-side migration is required.
Which April 2026 entries did NOT require a Fazm build?
Opus 4.7 GA on April 16 landed on day zero because Fazm does not hardcode model IDs; the picker rebuilds from the ACP availableModels response. The April 23 cache-and-verbosity revert required nothing on the client side because the bug was entirely server-side. The April 14 Sonnet 4 / Opus 4 deprecation notice is a future concern rather than a breaking change today. The April 30 1M context beta retirement is silently absorbed because Fazm's main chat does not request the beta header. Haiku 3 retirement on April 20 had no effect because Fazm was already pointing the Scary slot at the newer Haiku family. The Messages API landing on Amazon Bedrock on April 7 was irrelevant because the app talks to Anthropic-hosted Claude through Claude Code, not Bedrock.
What about Managed Agents and the Advisor tool? Did those affect Fazm?
Not directly, and the reason is the most interesting one for consumers. Managed Agents run inside Anthropic's sandbox. They cannot see an individual user's Messages.app, Mail, Notes, Figma document, or Logic Pro session because they have no access to the Mac's accessibility tree and no local file-system permissions. Fazm is the opposite shape: it runs locally on the user's Mac with Accessibility permission granted and drives real apps through AXUIElement calls in Desktop/Sources/AppState.swift. The Advisor tool is interesting as an architectural pattern (a fast executor paired with a stronger advisor), and Fazm's three-session warmup in ChatProvider.swift lines 1047-1051 already echoes it in spirit, but we did not rewire anything for April's beta.
Did the April 23 Claude Code caching bug show up in the Fazm log file?
Yes, visible in /tmp/fazm-dev.log as longer observer-batch latencies and a few turns where the assistant re-asked a question it had already answered. Because Fazm talks to Claude through Claude Code's SDK, the thinking-history drop showed up as the main chat losing short-range context on long sessions. No Fazm code change was needed. Anthropic reverted the bug on April 23, affected accounts had their usage limits reset per Anthropic's own statement, and the symptom cleared without an app update.
How does Fazm pick up a new Anthropic API model without a release?
The acp-bridge subprocess calls session/new against Claude Code on every warmup. The response includes models.availableModels, scoped to the user's authenticated plan. The bridge filters out the sentinel default pseudo-model if the real list has other entries, dedupes against the last emitted list, and sends a models_available event up to the Swift app at acp-bridge/src/index.ts lines 1271-1281. On the Swift side, setModelsAvailableHandler routes to ShortcutSettings.updateModels, which runs the family-map substring match and publishes @Published availableModels. SwiftUI re-renders the picker automatically. No user action required.
Is there any April 2026 changelog entry that would have been easier to handle if Fazm had used the Anthropic API directly instead of through Claude Code?
Arguably the v0.29 ACP SDK rename itself. If Fazm called the Messages API directly with a hardcoded claude-opus-4-7 model string, the rename would not have applied and normalizeModelId would not exist. The trade is that direct Messages API calls lose automatic model availability from the user's auth, lose the ACP session resume protocol, lose the dynamic model list, and lose the memory system that ships with Claude Code. The migration function is a one-time cost for durable benefits everywhere else.
What does the Opus 4.7 tokenizer change mean for a consumer Mac app?
Opus 4.7 shipped an updated tokenizer on April 16, 2026. Token counts for the same input string may differ slightly from Opus 4.6 output. For Fazm this is invisible because the app does not enforce a local token budget per-turn. It relies on the Anthropic API to report actual usage, which Claude Code surfaces through the ACP protocol. If the app had been computing local token estimates for a progress bar or paywall gate, those estimates would be off by a few percent until the tokenizer was swapped client-side. This is a silent absorbing case.
Adjacent corners of the Anthropic release, written up from the same shipping Mac app
More on April 2026
Anthropic Claude latest model April 2026
Why Fazm runs two Claude Sonnet 4.6 sessions per user: one for the chat, one batching every 10 turn pairs to quietly rewrite your memory files.
Anthropic new model April 2026
The three-row substring family map that relabels raw Claude model IDs as Scary, Fast, and Smart so new models land day zero.
Anthropic April 2026 news
One function, one config file, zero app updates. The rewiring story behind a full month of Anthropic releases on a shipping Mac.