MAY 20 2026 / 129 COMMITS / 12 ON ONE NEW CAPABILITY

New AI projects on Hugging Face or GitHub, May 20 2026. The one worth opening is an agent that learned to QA-test its own work.

A trending list ranks projects by stars. It cannot tell you what a project actually did on a given day. On May 20, 2026 the open-source macOS agent Fazm pushed 129 commits, and the most interesting cluster, 12 of them, wired an AI QA-testing engine into the agent loop so it can open a real browser and check the web app it just built. This is that change, told from the commit log you can read yourself.

M
Matthew Diakonov
8 min read

Direct answer, verified 2026-05-23

No platform publishes an official "May 20, 2026" list of new AI projects. Both Hugging Face and GitHub order discovery by a rolling trending score, not by calendar date. New work surfaces continuously across three live feeds:

For one record carrying that exact date: Fazm pushed 129 commits on 2026-05-20, and 12 of them added AI-powered QA testing by bundling the @assrt-ai/assrt MCP server into the agent. The core commit is 9db5fc85. It reached users the next day in release v2.9.32, recorded in CHANGELOG.json at the root of the repository. The rest of this page opens that change.

Why a dated question has no dated answer

People search for new projects by date because that is how news works, but neither Hugging Face nor GitHub thinks in days. A model card carries a last-modified timestamp, not a release date. A trending repository climbed because of stars accrued over a week, not because it launched this morning. The closest thing to a true daily record is the one artifact both platforms agree on: the commit log. A commit has an author, a message, and a timestamp to the second, and you cannot retouch it after the fact without leaving a trace.

So the honest way to answer "what was new on May 20" is to pick a project whose log you can read and open the day itself. Fazm is a useful subject because it is fully open source, it wraps the real Claude Code and Codex agent loops rather than reimplementing them, and it ships often enough that a single day is a real slice of work rather than a quiet gap.

The capability that landed: an agent that tests what it ships

Fazm already drives your real browser. The May 20 work closed the obvious loop: if the agent can write a web app and open it in Chrome, it should also be able to test it there. Twelve commits did that by bundling @assrt-ai/assrt as a sibling MCP server and registering it inside the agent bridge. The headline commit, 9db5fc85, added 52 lines to acp-bridge/src/index.ts to spin up a server named assrt running on the bundled Node binary.

The tools it exposes are the spine of a QA loop: assrt_plan reads a running page and drafts test scenarios, assrt_test runs a scenario and returns structured pass or fail with screenshots, and assrt_diagnose does root-cause analysis on a failure. Three more tools, assrt_seed_cookies, assrt_seed_localstorage, and assrt_seed_indexeddb, prime a logged-in state before a run so the agent can test flows that live behind a sign-in.

One tool stays conditional. assrt_analyze_video only registers when a GEMINI_API_KEY is set, because reviewing a recorded run is the one step that needs an outside multimodal model. The bridge passes that key through if present and leaves the tool dark if not.

What one QA pass looks like in the agent loop

The flow stays inside the same window the agent already works in. There is no separate dashboard and no CI step. The agent calls a tool, the assrt server drives the managed Chrome, and the result comes back as something the model can act on.

assrt_plan, then assrt_test, against the real browser

Chat agentassrt MCPChrome :9655assrt_plan(url): read the running app, draft scenariosopen real Chrome, walk the page, capture stateDOM, console logs, network, screenshotsstructured scenarios with a scenarioIdassrt_test(scenarioId): seed cookies, replay stepspass / fail per step, ready for the next edit

The detail that makes it Fazm and not a CI runner

The registration in index.ts pins ASSRT_CDP_ENDPOINT to http://127.0.0.1:9655, the same managed Chrome port the existing browser-harness flow uses. That single line is the whole philosophy. Tests do not run in a fresh headless container that knows nothing about you. They run in the actual Chrome the agent drives, with your cookies and your session, on the port the rest of the product already speaks to. When browser-harness is not running, the assrt server auto-spawns its own Chrome with a persistent profile at ~/.assrt/managed-chrome, so the state survives between runs.

A second commit, c1a59b9c, added a FAZM_ASSRT_ENABLED gate in ACPBridge.swift. The bridge only sets that variable when an assrtEnabled flag is on, and that flag is a toggle in Settings under Browser Automation. The v2.9.32 changelog calls it an "optional Assrt QA testing MCP (beta)". A tool that can click around inside your logged-in browser should be off until you ask for it, and it is.

Verify it yourself in four commands

None of this needs to be taken on faith. The repository is public and every claim above is a dated artifact you can pull up in under a minute.

reproduce the May 20 record

The work landed in the commit log on 2026-05-20 but shipped to users the following day, in v2.9.32 dated 2026-05-21. That gap is normal: code lands, a release rolls it up, and the changelog records the version, not the commit hour. If you want the hour, the commit timestamps have it. Commit 9db5fc85 is stamped 17:15 Pacific, and the FAZM_ASSRT_ENABLED gate two minutes before it.

Why this belongs inside the agent, not beside it

The reason a QA engine is interesting as a desktop-agent feature rather than a standalone product is context. The agent that wrote the code already holds the full conversation that produced it, already controls the browser the app is running in, and already has your session loaded. A separate testing tool starts from zero on all three. Wiring assrt in as a sibling MCP server means the model can write a change, open the running app in the Chrome it controls, walk the flow, read the console and the network tab, and fold the failures back into the next edit without ever leaving the window.

That is the same instinct behind every other reach Fazm makes past the terminal. The agent uses real accessibility APIs and a real browser rather than screenshots, which is why it can act on what it sees instead of guessing at pixels. QA testing is the natural extension: not a new kind of magic, just the agent using the browser it already has to check its own work before handing it to you.

How to read any project's real May 20

The method generalizes to any repository that catches your eye on Hugging Face or GitHub. Skip the README, which is marketing, and read three dated artifacts in order. The changelog, which the maintainer authors and ties to versions. The commit log for the day you care about, which shows what landed and when. Then one diff, where the inline comments and the registration calls tell you what the change actually wires together.

If the changelog is stale, the commits are a single launch push, and the diffs carry no real wiring, you are looking at a project running on momentum. Fazm's May 20 passes all three checks, which is the only reason a dated question is worth answering with one capability instead of a list of ten trending repositories you will forget by lunch.

Bring a repo you are about to depend on

In twenty-five minutes we open its changelog, its commit log, and one diff together and decide whether it earns a place in your stack.

Frequently asked questions

What new AI projects appeared on Hugging Face or GitHub on May 20, 2026?

Neither platform publishes a dated release list. Models, datasets, papers, and repositories surface continuously, ordered by a rolling trending score rather than by calendar date. The three live feeds worth watching are huggingface.co/models sorted by trending, huggingface.co/papers for research with linked implementations, and github.com/trending for the application layer. As one concrete record carrying the exact date 2026-05-20 at the commit level, the open-source macOS agent Fazm pushed 129 commits that day, and 12 of them added an AI QA-testing capability: the agent can now drive a real browser and verify a web app end to end through the bundled @assrt-ai/assrt MCP server. That work reached users in release v2.9.32 on 2026-05-21.

What was the single most consequential thing Fazm shipped on May 20, 2026?

An in-app QA-testing engine. Across 12 commits the project bundled @assrt-ai/assrt@0.4.8 as a sibling MCP server and exposed its tools (assrt_plan, assrt_test, assrt_diagnose, plus cookie / localStorage / IndexedDB seeders) to the agent loop. The core wiring is commit 9db5fc85, which added 52 lines to acp-bridge/src/index.ts to register a server named 'assrt'. A second commit, c1a59b9c, added the FAZM_ASSRT_ENABLED gate to ACPBridge.swift so the feature stays off until you turn it on in Settings. The point is that the same agent that drives your real browser can now also test the thing it just built there.

Does the QA agent run against a headless browser?

No. The registration in acp-bridge/src/index.ts pins ASSRT_CDP_ENDPOINT to http://127.0.0.1:9655, the same managed Chrome port the existing browser-harness flow uses. The two are siblings and either can be running. When browser-harness is not up, the assrt server auto-spawns its own Chrome with a persistent profile at ~/.assrt/managed-chrome. So tests run in a real Chromium with real cookies and real session state, which matches how Fazm drives the browser everywhere else: through accessibility and real CDP, not a throwaway headless instance.

Is the QA-testing feature on by default?

No. It shipped as a beta gated behind FAZM_ASSRT_ENABLED. ACPBridge.swift only sets that environment variable when the assrtEnabled flag is true, and that flag is wired to a toggle in Settings under Browser Automation > Assrt. The v2.9.32 changelog entry describes it as 'optional Assrt QA testing MCP (beta)'. Off until you opt in is the correct default for a tool that can click around inside your logged-in browser.

What does assrt_analyze_video need, and why is it conditional?

It only registers when a GEMINI_API_KEY is present in the environment. The bridge passes that key through to the assrt server, and the inline comment in index.ts notes assrt_analyze_video is available 'only when GEMINI_API_KEY is set'. Video analysis of a recorded test run is the one tool that needs an outside multimodal model, so it stays dark unless you supply the key. The plan, test, diagnose, and seed tools work without it.

How can I verify any of this myself?

Clone github.com/mediar-ai/fazm and read three dated artifacts in order. Run git log filtered to 2026-05-20 and grep for assrt to see the 12 commits. Run git show --stat 9db5fc85 and confirm acp-bridge/src/index.ts gained 52 lines. Open CHANGELOG.json at the repo root and find the v2.9.32 entry dated 2026-05-21 describing the beta. The bundle pin lives in run.sh as ASSRT_PKG_VERSION=0.4.8, and @assrt-ai/assrt is a published npm package you can look up with npm view.

Why build a QA agent into a desktop app instead of using a separate testing tool?

Because the agent already has the browser. Fazm wraps Claude Code and Codex in a native macOS UI and reaches past the terminal into your real Chrome, native Mac apps, and Google Workspace. A separate testing tool would spin up its own throwaway environment with none of that context. Putting QA inside the same agent loop means the model that wrote the code can open the running app in the browser it controls, walk the flow, read the console and network, and feed the failures straight back into the next edit, all in one window.

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.