Two days in May. One open-source Mac agent. Six releases and a third backend.
Neither Hugging Face nor GitHub publishes a list keyed to a calendar day, so a query like latest AI model releases, papers, open-source projects, May 20-21 2026 rarely produces what it literally asks for. What it can produce is one open-source AI project whose own commit log carries those exact dates, and one decision inside those 48 hours that explains something about where desktop agents are going.
Direct answer, verified 2026-05-23
No platform publishes an official "May 20-21, 2026" roundup of new AI projects, papers, or open-source releases. The honest answer is three live feeds, each ranked by a rolling trending score with no notion of a calendar day:
- huggingface.co/models sorted by trending, for weights and quantized variants.
- huggingface.co/papers for research where an implementation is linked.
- github.com/trending for the application layer of agents, MCP servers, and inference engines.
For one verifiable open-source AI project whose commit log carries the exact dates 2026-05-20 and 2026-05-21: the macOS agent Fazm shipped six production releases over those 48 hours (v2.9.26, v2.9.30, v2.9.31, v2.9.32, v2.9.33, v2.9.34). The headline change was 18 commits on May 21 that added Gemini through the Agent Client Protocol as a third swappable backend alongside Claude Code and Codex. Every fact on this page is traceable to CHANGELOG.json at the root of the repository.
Why a dated 48-hour query and a trending feed disagree
A trending score is built to surface popular things, not new ones. The same model can hold the Hugging Face top slot for a week, and a paper that arrived three days ago can outrank a release that landed this morning. So when the question is literally what dropped on these exact dates, a homepage feed is the wrong instrument. The right instruments are project changelogs and per-day commit logs. They are not as social, but they carry timestamps you can trust.
That is why the rest of this page narrows in on one project. A list of ten trending repositories would tell you what is loud this week. One project's May 20 and May 21 tells you what shipping actually looked like across that two-day window, including the small decisions a trending feed will never index.
May 20: phone-to-popout routing, China mirror, graceful restart
The first 24 hours produced 129 commits and three production releases: v2.9.26, v2.9.30, and v2.9.31. The largest piece of work inside that day was extending the phone web chat at chat.fazm.ai so it could target a specific Mac pop-out window by name, not just the floating bar. After v2.9.30, a phone message now carries a sessionKey field equal to main or detached-<uuid>, and the desktop WebRelay broker dispatches to that exact session. The other two releases handled installer reliability and account-chooser fixes.
What shipped 2026-05-20
- v2.9.26 fixes pop-outs collapsing to the same workspace after a Mac restart; each detached chat now correctly restores to its original project directory.
- v2.9.30 ships per-popout phone routing on chat.fazm.ai: a session sidebar, model picker, workspace selector, and stream-target switcher so a phone message can target a specific Mac pop-out window by name.
- v2.9.30 also adds a programmatic browser-mode toggle: setBrowserMode:extension|managed control command, with the ACP bridge auto-restarting so FAZM_BROWSER_MODE takes effect immediately.
- v2.9.31 lets the personal account chooser reuse existing logged-in Claude or ChatGPT sessions instead of forcing a fresh OAuth flow.
- v2.9.31 fixes Python-based MCPs (Google Workspace, browser-harness, ai-browser-profile) failing to load on universal-DMG installs by resolving both thinned .venv and per-architecture .venv-arm64 / .venv-x86_64 directories.
- A Cloudflare R2 mirror is added to the Sparkle appcast feed (region=cn) so Mac users in China get update binaries from a mirror that is not behind the Great Firewall.
- A SIGHUP-based graceful bridge restart replaces SIGTERM, so the ACP bridge can drain active queries before recycling instead of cutting in-flight tool calls.
May 21: the 18 commits that added a third backend
The headline of these two days is not a foundation model release. It is a structural change inside one open-source product. Before May 21, Fazm wrapped two agent loops through the Agent Client Protocol: Claude Code (through claude-agent-acp) and OpenAI Codex (through codex-acp). On May 21, 18 commits added a third: Google's @google/gemini-cli, wrapped by a new GeminiProvider, with a probe handler on the bridge and Gemini Flash and Gemini Pro entries in the AI picker. Every chat window can now choose Claude Code, Codex, or Gemini as its agent loop.
What shipped 2026-05-21
- @google/gemini-cli is added as a dependency to acp-bridge, with a new GeminiProvider wrapper that runs gemini-cli in ACP mode.
- GEMINI_API_KEY is forwarded from the desktop into the bridge environment when Gemini is enabled, and GEMINI_CLI_TRUST_WORKSPACE is set when spawning the gemini-cli process.
- ACPBridge.swift gains a .geminiProbeResult case and a probe handler; the bridge now auto-probes the Gemini backend on startup and reports back which models are available.
- Gemini Flash and Gemini Pro (latest) are added to the AI picker with a curated model whitelist; the picker labels follow a tier-first convention.
- Multiple Fazm bundles (production, dev, beta) can now run side-by-side. FAZM_BUNDLE_SCOPE scopes distributed notifications, tmp paths, and the WebRelay control surface to the current app bundle so two instances no longer collide.
- A persistent stderr log with rotation is added so bridge crashes leave evidence behind across app restarts.
- v2.9.32 re-enables a per-tool watchdog with per-tool ceilings (Task subagent 30 min, Bash 15 min, MCP 5 min, default 10 min); previously a hung tool could freeze every other open conversation.
- v2.9.33 bundles the Assrt QA testing MCP as an opt-in browser automation tool and fixes a crash when popping out or closing chat windows during streaming responses.
- v2.9.34 fixes selectable chat text going blank or crashing in detached pop-outs, and fixes markdown content rendering blank after a detach.
Why Gemini went in through ACP, not the Google API directly
Calling Gemini through the Google REST API would have been a shorter path on day one and a longer path forever after. Tool calling, file system permissions, workspace trust, and the iterative agent loop are all problems that gemini-cli already solves. Going through ACP means Fazm inherits the maintained loop instead of rebuilding a parallel one, and the same UI layer (persistent sessions, one-click forking, no auto-compacting of context, the WebRelay bridge from chat.fazm.ai) works for all three backends without a per-backend code path.
The probe pattern is the load-bearing piece. When the desktop app starts, the ACP bridge probes each backend and asks: are you available, and which models do you expose. The probe result arrives back as a typed .geminiProbeResult case (alongside the existing probe cases for Claude Code and Codex), and the AI picker shows only the models the user's key actually unlocked. The two new commits worth opening on this are 38661865 (probe support) and e2ab98ad (auto-probing and result handler).
The three backends, after May 21
Per-chat backend choice is the part of this story that is hard to feel from a screenshot. The same window, the same persistent transcript, the same Mac-side tool surface, and you swap the agent loop underneath. The list below is what exists after v2.9.32.
Swappable per chat
Backends Fazm wraps through ACP
Claude Code
Wrapped through claude-agent-acp. The same agent loop you would run from the terminal, in a native Mac UI with persistent sessions and one-click forking. Available since launch.
Codex
Wrapped through codex-acp. A swappable per-chat backend, useful when you want a different agent loop for a specific window without quitting your Claude Code chats.
Gemini
Wrapped through @google/gemini-cli in ACP mode. Added on May 21, 2026 in v2.9.32. Gemini Flash and Gemini Pro (latest) are exposed in the AI picker, with the bridge auto-probing which models are actually available on your key.
Six releases on the wire, in 48 hours
Numbered chronologically, the way the Sparkle update feed served them.
| Version | Date | Headline |
|---|---|---|
| 2.9.26 | May 20 | Pop-outs no longer collapse to the same workspace after a Mac restart. |
| 2.9.30 | May 20 | Phone web chat at chat.fazm.ai gains a sidebar and can route to a specific Mac pop-out window. |
| 2.9.31 | May 20 | Personal account chooser reuses existing Claude or ChatGPT sessions. Python MCPs work on universal builds. |
| 2.9.32 | May 21 | Per-tool watchdog re-enabled with per-tool ceilings. 1M context picker entries removed. |
| 2.9.33 | May 21 | Assrt QA MCP bundled. Crash fix when popping out chats during streaming. |
| 2.9.34 | May 21 | Selectable text and markdown no longer go blank inside detached pop-outs. |
“Releases v2.9.26 through v2.9.34 are all present in the public CHANGELOG.json, with dates 2026-05-20 and 2026-05-21.”
github.com/mediar-ai/fazm/blob/main/CHANGELOG.json
What the two days mean together
May 20 expanded where a single chat can be driven from (a phone now talks to a specific Mac pop-out). May 21 expanded which agent loop a single chat can run (Claude Code, Codex, or Gemini). Both changes push in the same direction: one persistent conversation with portable identity across devices and providers, instead of an account tab in three different desktop apps.
That is not a frontier model release. The trending feeds will never index a per-popout sessionKey or a probe handler. It is the kind of small, dated decision that explains why three days later an article like this one exists, and why the trending-feed answer to a calendar-date question keeps disappointing.
How to verify any claim on this page yourself
- Open CHANGELOG.json in the public Fazm repo and filter for dates 2026-05-20 and 2026-05-21. Every release version listed on this page is in there.
- Run
git log --since="2026-05-20" --until="2026-05-21 23:59"against a clone of github.com/mediar-ai/fazm. The Gemini commits cluster on May 21. - Open huggingface.co/papers and github.com/trending if you want the broader trending picture; the trending order is volatile but the submission dates are stable.
Want a walkthrough of the Gemini, Codex, and Claude Code swap inside one chat?
Fifteen minutes on a call. I will share the screen, swap backends mid-conversation, and show how the per-popout session machinery from May 20 keeps the transcript intact across the swap.
Frequently asked questions
In one paragraph, what new AI shipped on May 20 and May 21, 2026?
Neither Hugging Face nor GitHub publishes a release list keyed to a calendar day. Both order discovery by a rolling trending score that has no notion of dates. The three live feeds worth opening on any given day are huggingface.co/models sorted by trending, huggingface.co/papers, and github.com/trending. For one open-source AI project whose own commit log carries the exact dates 2026-05-20 and 2026-05-21, the macOS agent Fazm shipped six production releases in those 48 hours: v2.9.26, v2.9.30, v2.9.31 on May 20, and v2.9.32, v2.9.33, v2.9.34 on May 21. The headline change was 18 commits on May 21 that added Gemini as a third swappable backend through the Agent Client Protocol, alongside the existing Claude Code and Codex backends. May 20 also landed cross-device phone-to-popout routing on chat.fazm.ai, a Cloudflare R2 mirror for Sparkle updates in China, and a SIGHUP-based graceful bridge restart.
What is the Gemini backend that landed on May 21, 2026?
Fazm already wrapped Claude Code (through claude-agent-acp) and OpenAI Codex (through codex-acp) as two interchangeable backends per chat. On May 21, 2026 the acp-bridge package gained a third: @google/gemini-cli, wrapped by a new GeminiProvider, with a probe handler in ACPBridge.swift, a .geminiProbeResult case added to the bridge protocol, GEMINI_API_KEY forwarding from the desktop into the bridge environment, and Gemini Flash plus Gemini Pro entries in the AI picker with a curated model whitelist. Every chat window can now choose Claude Code, Codex, or Gemini as its agent loop, and the choice is persisted per window through the same per-popout session machinery that landed on May 20.
How can I verify these commits and releases myself?
Open https://github.com/mediar-ai/fazm and read three dated artifacts. CHANGELOG.json at the root lists every release with its date; the entries for 2.9.26, 2.9.30, 2.9.31, 2.9.32, 2.9.33, and 2.9.34 all carry 2026-05-20 or 2026-05-21. git log filtered to those two dates shows the commits in chronological order. The Gemini integration touches acp-bridge/package.json (the @google/gemini-cli dependency), a new GeminiProvider file, and ACPBridge.swift (the .geminiProbeResult case). The per-popout phone routing touches web/components/SessionSidebar.tsx (204 lines) and Desktop/Sources/Chat/WebRelay.swift. All commits are public.
Why does the Gemini integration go through ACP instead of the Google API directly?
Two reasons. First, Fazm is a wrapper around the Agent Client Protocol; every existing backend (Claude Code through claude-agent-acp, Codex through codex-acp) speaks the same protocol, so a chat window does not care which agent loop is running underneath. Wrapping gemini-cli through ACP keeps the swap mechanic uniform; you change one identifier in the bridge probe and the same UI, the same session persistence, and the same one-click forking apply. Second, gemini-cli already has its own agent loop, tool calling, workspace trust model, and file system semantics. Hitting Gemini through the Google API directly would mean rebuilding that loop inside Fazm, with two copies of every fix. The ACP route gets the maintained loop for free and adds one Mac-native UI layer on top.
What did the six Fazm releases over May 20 to 21, 2026 actually contain?
Six entries in CHANGELOG.json. v2.9.26 (May 20) fixed pop-out chat windows collapsing to the same workspace after an app restart and restored the copy button on the active question bubble. v2.9.30 (May 20) added a session sidebar, model picker, workspace selector, and stream-target switcher to chat.fazm.ai for phone-to-popout routing, and added a programmatic browser-mode toggle. v2.9.31 (May 20) let the personal account chooser reuse existing Claude or ChatGPT sessions and fixed Python-based MCP loading on universal-DMG installs. v2.9.32 (May 21) re-enabled the per-tool watchdog with per-tool ceilings (Task subagent 30 min, Bash 15 min, MCP 5 min) and removed the 1M-context picker entries that were producing entitlement errors. v2.9.33 (May 21) bundled the Assrt QA testing MCP and fixed a crash when popping out chat windows during streaming. v2.9.34 (May 21) fixed selectable text and markdown going blank inside detached pop-outs.
Was there a 'big' frontier model release on either day?
Not a foundation model release with new public weights. The trending lists on huggingface.co/models and huggingface.co/papers carry their own daily rotation, with no notion of a calendar date built into the ranking. What did land on these two dates, in a real shipping open-source AI product, was the Gemini backend integration on May 21 and the cross-device phone-to-popout routing on May 20. The two are connected: each lets one agent loop reach further out of its sandbox, one across providers, one across devices.
What is the per-popout phone-to-popout routing that landed on May 20?
Fazm runs as a native Mac app in which each chat can detach into its own pop-out window with its own working directory, agent backend, and model. After v2.9.30 on May 20, 2026, the phone web chat at chat.fazm.ai exposes a sidebar that lists every pop-out currently open on your Mac, identified by its workspace path and active model. You pick one, type from your phone, and the message routes to that specific window. Internally, a phone message now carries a sessionKey field equal to 'main' or 'detached-<uuid>', and the desktop WebRelay dispatches to that exact session. Combined with the May 21 Gemini integration, you can now send a phone message into a specific Mac window running a specific backend (Claude Code, Codex, or Gemini).
Where can I track AI releases day to day if trending lists are date-blind?
Three feeds plus one habit. huggingface.co/models sorted by trending for weights and quantized variants. huggingface.co/papers for research where an implementation is linked. github.com/trending for the application layer of agents, MCP servers, and inference engines. The habit is to read the CHANGELOG of one open-source project you actually use. The trending feeds tell you what is loud this week. A real changelog tells you what shipping actually looked like that day, including the small decisions a trending feed will never index.
Does Fazm itself ship its own foundation model?
No. Fazm is a native macOS wrapper that runs Claude Code, Codex, and now Gemini as agent-loop backends through the Agent Client Protocol. You bring your own Claude Pro or Claude Max, your own ChatGPT account, or your own GEMINI_API_KEY, and usage hits whichever plan you logged into. Voice input is on-device through WhisperKit. The source is at github.com/mediar-ai/fazm, and the app is free to start and runs on macOS 14 and newer.
If I want to read about a single day instead of the two-day arc, where do I go?
The companion page focused on May 20 alone lives at https://fazm.ai/t/new-ai-model-releases-papers-open-source-may-20-2026. It narrows in on the 129 commits that produced v2.9.26, v2.9.30, and v2.9.31, and explains the per-popout phone routing in more depth. This page covers the next 24 hours on top of that and centers on the Gemini integration that landed May 21.
Adjacent reading
Related guides
New AI model releases, papers, open source, May 20, 2026
The single-day companion. Narrows in on the 129 commits and three releases that landed on May 20, with the per-popout phone routing explained in more depth.
AI model releases, new papers, open source, past 24 hours, May 2026
The rolling monthly companion that explains how to triage trending feeds without drowning in any single day's noise.
Open source LLM releases, May 2026
What landed at the model layer this month, and how to evaluate a release the moment the weights drop.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.