Local LLM news, April 2026Single env var wiringAccessibility-tree payload

Local LLM news, April 2026: one environment variable is the whole thing

Every April 2026 recap names the same open-weights releases: Qwen 3, Gemma 4, Mistral Medium 3, Llama 4 Scout, DeepSeek R2. None of them show you what it takes to route a consumer Mac agent's tool calls through any of them. Inside Fazm, the whole wiring is a single line in Desktop/Sources/Chat/ACPBridge.swift that copies a UserDefaults string into ANTHROPIC_BASE_URL. The payload is accessibility-tree text, not screenshots, which changes which April 2026 release you should actually reach for.

F
Fazm
12 min read
4.9from 200+
Every local-endpoint fact traced to a line in the Fazm desktop source tree
Accessibility-tree text payload means April 2026 vision SKUs are the wrong pick
One env var wiring, documented end to end with the three files it touches

The April 2026 local-LLM numbers, and the four that matter inside a shipping Mac agent

0Environment variable that makes local routing work (ANTHROPIC_BASE_URL)
0Line in ACPBridge.swift where the env var is set
0Source files involved end to end (Settings, ChatProvider, ACPBridge)
0Parameter count (B) of the Qwen 3 SKU that fits accessibility-tree control loops

The headline local-LLM SERPs around this query all lead with parameter counts, license strings, and Arena rankings. The four numbers above are the ones that actually govern whether an April 2026 open-weights release can drive your Mac apps today.

1 env var

Custom API endpoint (allows proxying through Copilot, corporate gateways, etc.) — env['ANTHROPIC_BASE_URL'] = customEndpoint

ACPBridge.swift lines 379-381, April 2026

The anchor fact: the entire local-routing surface is five lines of Swift

Every April 2026 local-LLM article stops at "pick your weights and run a server." None of them cross the last mile: how does a shipping consumer agent actually let a user point at that server without recompiling? Inside Fazm the answer is five lines. Read the UserDefaults key, check it is not empty, copy it into the ACP subprocess environment under the name the Claude Agent runtime respects. That is the whole thing.

Desktop/Sources/Chat/ACPBridge.swift, lines 379-382

Two things matter here. First, the shim does not need to be Anthropic; it needs to speak the Anthropic messages protocol. Ollama, LM Studio, llama-server from llama.cpp, MLX-LM, any local runtime can sit behind a ~200-line proxy that translates POST /v1/messages into your runtime's native call. Second, this runs at ACP subprocess spawn time. Change the endpoint, and SettingsPage.swift line 939 calls restartBridgeForEndpointChange so the next message goes through the new URL with no app relaunch.

Desktop/Sources/MainWindow/Pages/SettingsPage.swift, line 936

What happens when you press Enter in the Custom API Endpoint field

The settings screen writes to UserDefaults, the bridge tears itself down, and the ACP subprocess respawns with a new environment variable. This is the sequence, literal file and line numbers included.

Settings → UserDefaults → ACPBridge respawn → local model

Settings UIUserDefaultsChatProviderACPBridgeLocal shim@AppStorage customApiEndpoint = 'http://localhost:8766'restartBridgeForEndpointChange()stop(); start()string(forKey: 'customApiEndpoint')'http://localhost:8766'spawn with env[ANTHROPIC_BASE_URL] = URL/v1/messages responses from Qwen 3 32B

Local April 2026 models on the left, your Mac apps on the right, one shim in the middle

The April 2026 local-LLM news cycle usually draws the diagram with the model at the center. From the Fazm seat, the model is one of many interchangeable left-side inputs. The middle is always the same: an Anthropic-protocol shim plus the accessibility-tree tool runtime. The right side is whatever Mac app you are automating.

Any April 2026 local model → Anthropic shim → Fazm accessibility-tree loop → your Mac apps

Qwen 3 32B
Gemma 4
Mistral Medium 3
Llama 4 Scout
Qwen3-Coder-Next
Fazm (accessibility tree)
Mail
Safari
Xcode
Notes

The accessibility-tree hub is the reason the left column works with small text-first locals. Fazm does not send pixels. It sends AXUIElement text (role, label, value, coordinates for each on-screen element), captured through AXUIElementCreateApplication and walked by the macos-use MCP. A 7B to 32B April 2026 local model chews through that fine; you do not need a multimodal 70B giant.

Screenshot-based local agent vs accessibility-tree local agent

This is the part the April 2026 local-LLM recaps almost never draw. The choice of payload shape is upstream of the choice of local model. Send screenshots and you are stuck shopping the vision SKUs. Send accessibility trees and the field of viable April 2026 open weights widens dramatically.

Same local hardware, two payload shapes

Every frame is a PNG. The local model has to be vision-capable just to read what is on screen. In April 2026 that pushes you into the large multimodal locals (70B+ class), which run slowly on most consumer Macs and still trail cloud vision on fine-grained UI detail.

  • Requires a local vision SKU (70B class or big multimodal)
  • Cold start is heavy; inference is slow on consumer Macs
  • Fine-grained UI text (labels, coordinates) still lossy
  • Context spent on pixels that structured text already encodes

The April 2026 local-LLM lineup, rated by whether they work for a Mac automation loop

Not a benchmark table. A task-fit read. Every card below answers one question: if you point Fazm's Custom API Endpoint at this model through an Anthropic-protocol shim, does the accessibility-tree control loop actually work?

Qwen 3 32B (thinking mode)

April 8, 2026, Apache 2.0. Dual-mode thinking / fast. Strong reasoning, decent tool-call format. The practical April 2026 pick for a local Mac agent, if you have the memory. Good at accessibility-tree payloads because it is text-first.

Gemma 4

Four variants under Apache 2.0. Small and mid-size are viable on consumer Macs. Solid instruction following, weaker multi-step planning. Fine for short agent loops through an Anthropic-protocol shim.

Mistral Medium 3

April 9, 2026, open weights. Fills the gap between small local and large proprietary. Strong on European languages. Workable for Mac automation if you pair it with a strict tool-call validator in the shim.

Llama 4 Scout

Mixture of experts into mainstream open weights. Surprisingly capable for its footprint. Quirky with nested JSON tool arguments, which matters once the accessibility tree gets deep.

DeepSeek R2

AIME 92.7%, ~70% cheaper than frontier cloud. Great on reasoning, mostly run via API rather than local weights. Reachable through the same Custom API Endpoint shim; not strictly a local play.

Qwen3-Coder-Next

The overwhelming community pick for local coding in April 2026. Not the main fit for accessibility-tree control loops, but strong as a local code model behind the same Fazm shim when the task is 'write a script and run it.'

How to point Fazm at an April 2026 local model, step by step

Five steps, no rebuild. Everything below is grep-able against the Fazm desktop source tree.

1

1. Start an Anthropic-protocol shim on your Mac

Pick any ~200-line proxy that accepts POST /v1/messages and rewrites to your local server. Ollama, LM Studio, llama.cpp's llama-server, or MLX-LM all work behind this. Run it on http://localhost:8766.

2

2. Open Fazm > Settings > Advanced > AI Chat

SettingsPage.swift at lines 906 to 952 renders the Custom API Endpoint card. Toggle it on. The TextField placeholder at line 936 reads 'https://your-proxy:8766' and it is not decorative; paste your local URL there and press Enter.

3

3. The bridge restarts automatically

SettingsPage.swift line 939 wires onSubmit to chatProvider?.restartBridgeForEndpointChange(), which tears down the ACP subprocess and respawns it. ACPBridge.swift lines 379 to 382 copy your URL into the child process env as ANTHROPIC_BASE_URL before the Claude Agent runtime starts.

4

4. The accessibility-tree loop is now local

Every tool call that Fazm's agent fires (reading menus, clicking buttons, typing into text fields through the macos-use MCP) is now serviced by your local model. No rebuild, no code change, no relaunch beyond the bridge restart that step 3 already did.

5

5. Keep an eye on the shim log

Accessibility-tree payloads for big apps can exceed your local model's context window. Log truncations in the shim, not in Fazm. If you see the model returning empty tool arguments, that is almost always a context-overflow fingerprint, not a Fazm bug.

Verify the one-env-var claim yourself

If you do not trust the claim that Fazm's entire local-LLM surface is one environment variable, here is the check. Every line below is grep-able against the Fazm desktop source tree.

Three greps, one contract

Accessibility-tree local agent vs a vision-based local agent, April 2026

The axis that matters most for April 2026 is not parameter count or license, it is which payload shape your control loop uses. That decision is upstream of model selection.

FeatureScreenshot-based local agentFazm (accessibility tree)
Required local model classMultimodal 70B+Text-first 7B to 32B
Runs on a laptop-class MacUsually noYes
Fine-grained UI element identitiesInferred from pixels, lossyExact (AXUIElement role, label, value)
Latency to first tool callSlow (image preprocessing)Fast (text tokens)
Good April 2026 local pickLimited; most local vision SKUs underperformQwen 3 32B in thinking mode
Required to change modelUsually a rebuildOne env var (ANTHROPIC_BASE_URL)
Works offlineYes, with the matching constraintsYes, once the shim is local

April 2026 local-LLM news, condensed

Every open-weights release the recaps cover. All reachable through Fazm's Custom API Endpoint plus a thin Anthropic-shaped shim.

Qwen 3 0.6BQwen 3 7BQwen 3 32BQwen 3 72BQwen3-Coder-NextGemma 4 2BGemma 4 9BGemma 4 27BMistral Medium 3Llama 4 ScoutLlama 4 MaverickDeepSeek R2OllamaLM Studiollama.cppMLX-LM

Three things the April 2026 local-LLM recaps miss

Not instead of the recaps. Beside them. The recaps tell you what weights shipped. A shipping consumer agent tells you what it takes to actually run them.

Payload shape is upstream of model selection

If you send screenshots, the April 2026 local lineup narrows to big multimodal SKUs. If you send accessibility trees, it widens to 7B to 32B text-first models. Most recaps do not even mention this tradeoff.

Tool-call format drift is the real constraint

Qwen 3 32B matches or beats GPT-4o on reasoning benchmarks. Under chained tool calls it still drifts on JSON shape more than Sonnet 4.6 does. April 2026 local models need a strict tool-call validator in the shim.

Consumer agents already accept local endpoints

Every April 2026 "run local" article treats this as a developer-only story. Fazm's Custom API Endpoint field lives in the Advanced settings page; the whole onboarding from Ollama to accessibility-tree agent is a TextField and an onSubmit handler.

Run Fazm with an April 2026 local model

The Custom API Endpoint field at Settings > Advanced > AI Chat copies your URL into ANTHROPIC_BASE_URL on the next bridge restart. Point it at a thin Anthropic-shaped shim in front of Ollama, LM Studio, llama.cpp, or MLX, and the entire accessibility-tree agent loop runs on your local Qwen 3 or Gemma 4. No rebuild, no relaunch, no developer framework.

Download Fazm

Frequently asked questions

What were the biggest local LLM releases in April 2026?

Alibaba's Qwen 3 family (0.6B to 72B, dual thinking + fast mode, Apache 2.0) on April 8. Mistral Medium 3 with open weights on April 9, targeting the gap between small local and large proprietary. Google's four Gemma 4 variants under Apache 2.0. Meta's Llama 4 Scout and Maverick pushing mixture-of-experts into mainstream open weights. DeepSeek R2 landed at AIME 92.7% with a ~70 percent price cut relative to frontier cloud offerings. The consensus community picks for 'run it locally on a Mac' in April 2026 are Qwen 3 32B for general reasoning and Qwen3-Coder-Next for coding.

Can Fazm actually run on a local LLM?

Yes, if the local model is fronted by an Anthropic-protocol shim. Fazm's agent loop speaks the Anthropic messages API, and ACPBridge.swift lines 379 to 382 read a UserDefaults string called customApiEndpoint and inject it into the ACP subprocess environment as ANTHROPIC_BASE_URL. Point that at a local proxy that translates Anthropic request shapes into Ollama, llama.cpp, or MLX calls, and the accessibility-tree control loop runs on Qwen 3 32B or Gemma 4 without a rebuild. The SettingsPage.swift UI at lines 906 to 952 is the front door: a simple TextField with the placeholder 'https://your-proxy:8766' that the user pastes their local endpoint into.

Which April 2026 local model is actually a good fit for Mac automation?

The accessibility-tree payload inside Fazm is structured text, not pixels. That makes the text-first reasoning SKUs a better fit than the multimodal ones. Qwen 3 32B in thinking mode is a strong candidate because it was benchmarked to match or exceed GPT-4o on reasoning tasks and has stable function-calling output. Gemma 4 mid-size variants are workable if you are willing to engineer the tool-call wrapper a bit. The local-vision SKUs from April 2026 mostly underperform for this job because the control loop never needs to see a screenshot.

What is the exact plumbing that makes a local endpoint work?

Three specific files: SettingsPage.swift at lines 906 to 952 renders the Custom API Endpoint card with an @AppStorage('customApiEndpoint') binding. ChatProvider.swift at line 2103 reads the same key when the bridge restarts. ACPBridge.swift at lines 379 to 382 copies the value into ANTHROPIC_BASE_URL before the ACP subprocess spawns, alongside FAZM_TOOL_TIMEOUT_SECONDS at line 387 so your local model has enough time to finish a tool call without triggering a retry. No code path in Fazm calls Ollama or llama.cpp directly; the one env var is the whole contract.

What does the April 2026 self-sovereign-LLM trend mean for a consumer Mac agent?

The self-sovereign framing (local, private, user-controlled weights) matches the privacy story of an accessibility-tree-based agent almost perfectly: both keep your Mac's contents on your Mac. Where they diverge is tool-call reliability. Anthropic's April 2026 Sonnet 4.6 and Opus 4.6 still have an edge on tool-format stability under chained calls, which is exactly what a Mac automation loop hammers. A local model running through an Anthropic shim in April 2026 gets you privacy and offline operation at the cost of needing a stricter tool-call validator in the shim.

Why doesn't Fazm ship with a local model bundled?

Three reasons. First, the April 2026 local lineup is strong but still moving fast; pinning a weights file into a signed, notarized Mac bundle freezes the user to whatever SKU was best the week of release. Second, local model performance is tightly coupled to the user's Mac: an M1 Air and an M4 Max do not run the same model class well, and Fazm wants both users. Third, the Custom API Endpoint path at SettingsPage.swift line 936 lets any Ollama, LM Studio, or llama.cpp server the user already has running become a first-class provider without a new Fazm release.

How does the accessibility-tree payload change local model selection?

Most screenshot-based agents need a vision-capable local SKU, which in April 2026 means big, slow, and memory-hungry. Fazm sends structured text: for each on-screen element, a role (AXButton, AXTextField, AXMenuItem), a label, a value, and coordinates, captured through AXUIElementCreateApplication and walked by a traversal in the macos-use MCP. A 7B to 32B text-first local model handles that payload fine; you do not need a 70B multimodal giant. That collapses the hardware requirement for 'run locally' by an order of magnitude.

What is the simplest way to try an April 2026 local model with Fazm today?

Pick an Anthropic-protocol shim. A small proxy that accepts POST /v1/messages and rewrites it into whatever local server you are running (Ollama, LM Studio, llama-server from llama.cpp, MLX server) is ~200 lines. Run it at http://localhost:8766. Open Fazm settings, scroll to Advanced > AI Chat, toggle Custom API Endpoint on, paste http://localhost:8766, and press Enter. The SettingsPage.swift onSubmit handler at line 939 calls chatProvider?.restartBridgeForEndpointChange() which tears down the ACP subprocess and respawns it with the new ANTHROPIC_BASE_URL. Your next message goes through the local model.

What breaks when you point Fazm at a local endpoint?

Mostly tool-call format drift. Claude models produce very regular JSON inside their tool_use blocks; April 2026 local models are close but not identical, so your shim needs to validate and coerce. Second, long context. Accessibility trees for big apps (Xcode, Logic Pro) can push 100k+ tokens, and a local 32B model with a shorter context window truncates and loses tool argument fidelity. Third, the Claude Agent SDK rate-limit signals at ChatProvider.swift line 511 onward will still fire even though your local model has no rate limit, because the shim may pass through a fake 429 on backpressure.

Is there an April 2026 local LLM that actually matches Claude Sonnet 4.6 for this job?

Not yet, at least not on sustained tool-call reliability across multi-minute agent sessions driving real Mac apps. Qwen 3 32B in thinking mode is close on raw reasoning but produces noisier tool-call format under chained calls. Gemma 4 is good on instruction following but weaker on planning depth. Llama 4 Scout is surprisingly capable for its size but has quirks with nested JSON. The honest read in April 2026 is: local is viable for reflexive queries and short task loops; frontier cloud is still the pick for sustained agent work. Fazm's Custom API Endpoint lets you use both, one for the fast path and one for the hard path.

The April 2026 local-LLM story, from a shipping consumer Mac app

Qwen 3, Gemma 4, Mistral Medium 3, Llama 4 Scout, DeepSeek R2. The April 2026 lineup is real and is the best open-weights moment in the local-LLM era so far. What the recaps do not tell you is that making any of them drive actual Mac apps comes down to two upstream choices. First, payload shape: accessibility-tree text, not screenshots, keeps the local model class small and fast. Second, one environment variable at ACPBridge.swift:381 that lets a consumer app accept whatever local endpoint you want without rebuilding.

Read through that lens, the April 2026 news is less a horse race between open-weights drops and more a coming-of-age moment for a specific stack: a small text-first local model, a thin Anthropic-shaped shim, and a consumer-friendly accessibility-tree agent. Fazm ships the last of those today. The first two are a ten-minute setup on your own Mac.

fazm.AI Computer Agent for macOS
© 2026 fazm. All rights reserved.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.