New AI projects on Hugging Face or GitHub, May 26 2026. The change that mattered most was a deletion, not a feature.
A trending list reads additions: new repos, new weights, new stars. It cannot show you the most useful thing a project did on a given day, because that thing was the removal of a line. On May 26, 2026 the open-source macOS agent Fazm deleted a 600-second timeout that had been quietly killing slow models in the middle of a correct answer. This is that one-line change, told from the commit log you can read yourself.
Direct answer, verified 2026-05-28
No platform publishes an official "May 26, 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:
- huggingface.co/models sorted by trending, for weights and quantized variants.
- huggingface.co/papers, for research with implementations linked.
- github.com/trending, for the agent code, harnesses, and applications.
For one record carrying that exact date: Fazm pushed 77 commits on 2026-05-26, and the most consequential was a deletion. Commit 787dbb33 removed the 600-second inactivity timeout from the agent query loop, citing the fact that the protocol it speaks defines no timeout at all. It shipped to users the next day in v2.9.41, recorded in CHANGELOG.json at the root of the repository. The rest of this page opens that change.
Why a dated question rarely has a 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 launch date. A trending repository climbed because of stars accrued over a week, not because it appeared this morning. The one artifact both platforms agree on is the commit log: an author, a message, and a timestamp to the second that you cannot retouch after the fact without leaving a trace.
That artifact has a second property a trending list does not. It records deletions. A roundup can only point at things that now exist, so the most valuable change a maintainer can make, removing something that was hurting you, is invisible to it. Reading one project's log closely on a single day catches exactly that kind of change. 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 one day is a real slice of work.
The change: one constant and two call sites, gone
The whole edit lives in Desktop/Sources/Chat/ACPBridge.swift. The agent runs a loop that blocks on the next message from the bridge subprocess. It used to hand that wait a deadline. Now it does not. Most of the 23 added lines are a comment explaining why the deadline was wrong; the actual change is the removal of a single constant and the two arguments that referenced it.
// Inactivity timeout: if no message arrives from the bridge
// for 10 minutes, consider the query stuck.
let inactivityTimeout: TimeInterval = 600
var messageCount = 0
while true {
let message = try await (sessionKey != nil
? waitForMessage(sessionKey: sessionKey!, timeout: inactivityTimeout)
: waitForMessage(timeout: inactivityTimeout))
// ...
}// No inactivity timeout on the steady-state query loop.
// ACP itself defines no timeout (StopReason has no Timeout
// variant). Cancellation is user-initiated via the stop button.
var messageCount = 0
while true {
let message = try await (sessionKey != nil
? waitForMessage(sessionKey: sessionKey!)
: waitForMessage())
// ...
}Commit 787dbb33, 2026-05-26 at 14:31 Pacific. 45 lines changed in one file: 23 insertions, 22 deletions. The companion commit 2aa4a9ce wrote the human-readable note into CHANGELOG.json two seconds earlier.
The argument hiding in the comment
The reason this deletion is more interesting than most additions is that it is justified at the protocol level, not by taste. Fazm drives Claude Code and Codex over the Agent Client Protocol. That protocol enumerates exactly five ways a prompt turn can end:
type StopReason = "end_turn" | "max_tokens" | "max_turn_requests" | "refusal" | "cancelled"There is no timeout in that union. You can confirm it in the protocol's own type definitions in the @agentclientprotocol/sdk package, and in the protocol documentation, where cancellation is the client's job and a turn otherwise runs to a model-defined stop. A reference client awaits the response and lets the user cancel; it does not start a stopwatch. Fazm's loop had been inventing a sixth stop reason the protocol never had, and the May 26 change brought the client back in line with the contract.
The pressure to add such a timer is understandable. A loading spinner that never resolves feels like a bug. But the cure punished the symptom it could not distinguish from the disease. A slow model mid-answer and a hung process both present as a quiet pipe. A clock cannot tell them apart. A person watching the screen, with a stop button, can.
What the cap felt like, on either side of the change
The behavior change is small in code and large in experience. Toggle between the two states below.
A long agent turn that went quiet for ten minutes, a slow model still thinking, a deep-research sub-agent grinding, a large refactor mid-stream, was treated as stuck. The query loop gave up at exactly 600 seconds and the window failed with “AI took too long to respond,” even when the model had been working the whole time.
- Hard 600-second ceiling on output silence
- Slow models (the changelog names Gemini Pro and GPT-5 high) failed mid-thought
- The app decided your work was dead before you did
They did not just remove a safety net
Deleting a timeout is only defensible if something better watches for real failure. The same day's log shows the trade made on purpose: one coarse timer out, several precise signals in. The observability work bracketed the deletion, with audit logging and hot-thread sampling in the morning and finer liveness tracking after the cap came out.
One day in the commit log, 2026-05-26
Audit logging
10:39 PDT, a131ea38, log every MCP tool execution (index.ts, +49)
Hot-thread diagnostics
11:41 PDT, df716d36, sustained-CPU and hot-thread sampling (ResourceMonitor.swift, +47)
Delete the 600s cap
14:31 PDT, 787dbb33, remove the inactivity timeout (ACPBridge.swift)
Liveness signals
16:26 PDT, 68ef0d18 and 00b0b1a3, stdin liveness plus heartbeat tool-silence tracking
The point of the finer signals is that they fire on the right thing. A per-tool watchdog watches a single tool call, not the whole turn, so a slow model between tools no longer trips it. The heartbeat log now records when an MCP tool has actually gone silent, so a genuine hang is visible in the logs instead of being papered over by a window-wide clock. If the bridge subprocess dies outright, the JSON-RPC pipe closes and the app recovers. None of that needs a 600-second guess.
The supporting commits, if you want to read them
Four commits made the deletion safe. Each is small, dated, and scoped to one file, which is the kind of change you can actually review.
How to read any project's real May 26
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 ties to versions. The commit log for the day you care about, which shows what landed and when. Then one diff, where the removed lines tell you as much as the added ones.
Pay special attention to deletions. A project that only ever adds is either very young or not listening; the willingness to take something out, especially a safety mechanism, is a sign someone is actually using the thing and feeling its rough edges. Fazm's May 26 is a deletion justified by the protocol and backed by new instrumentation, which is the most you can ask of a single day in a log.
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 26, 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. The closest thing to a true daily record is the commit log, where each change has an author, a message, and a timestamp to the second. As one record carrying the exact date 2026-05-26, the open-source macOS agent Fazm pushed 77 commits that day. The most consequential was not a new feature but a deletion: commit 787dbb33 removed the 600-second inactivity timeout from the agent query loop. It reached users the next day in release v2.9.41.
What exactly did Fazm delete, and where?
A single constant and the two call sites that used it. In Desktop/Sources/Chat/ACPBridge.swift the line let inactivityTimeout: TimeInterval = 600 is gone, and the two waitForMessage calls that previously passed timeout: inactivityTimeout now pass nothing. The commit is 787dbb33, dated 2026-05-26 at 14:31 Pacific, touching 45 lines in that one file (23 insertions, 22 deletions). Most of the added lines are a new comment explaining why the timeout was wrong, not new logic. A companion commit, 2aa4a9ce, recorded the change in CHANGELOG.json.
Without an inactivity timeout, won't a genuinely stuck query just spin forever?
No, because the blunt timeout was never the real stuck-process protection. Two finer-grained mechanisms still run. The agent bridge keeps a per-tool watchdog that synthesizes a tool failure to unblock the loop if one tool call goes silent, and if the bridge subprocess itself dies the JSON-RPC pipe closes and the app sees processExited and recovers. The 600-second loop-level cap sat on top of both and fired on the wrong signal: total output silence, which a slow model produces while it is still working. Removing it kept the protections that watch real failure and dropped the one that punished slow success.
Why is 'no inactivity timeout' the correct default rather than a lazy one?
Because the protocol Fazm speaks defines no such timeout. The Agent Client Protocol enumerates exactly five ways a prompt turn can end: end_turn, max_tokens, max_turn_requests, refusal, and cancelled. There is no Timeout variant. You can read this in the @agentclientprotocol/sdk type definition, where StopReason is the union of those five string literals. A reference ACP client awaits the prompt response and lets the user cancel; it does not impose a wall clock. Fazm's loop now matches that contract: a turn runs until the model ends it or you press stop, which responds with StopReason cancelled.
What made the old 600-second cap actively harmful?
It fired on output silence, not on actual failure, so it killed the cases it should have protected. The changelog entry names the symptom directly: slow models (it lists Gemini Pro and GPT-5 high) were failing with 'AI took too long to respond' even when the model was producing a correct answer, just slowly. Long legitimate work such as deep research, large refactors, and multi-step sub-agents looks identical to a hang from the outside: a quiet pipe. A clock cannot tell the difference between thinking and stuck. Cancellation by a human who can see the screen can.
What else landed on May 26 besides the deletion?
The same day carried a cluster of observability work that makes the deletion safe. In the morning, commit a131ea38 added MCP tool execution audit logging to the bridge, and df716d36 added sustained-CPU and hot-thread diagnostics to ResourceMonitor.swift. In the late afternoon, after the timeout came out, 68ef0d18 added stdin liveness instrumentation to diagnose tool-call hangs and 00b0b1a3 started tracking tool update times so the heartbeat log shows when an MCP tool has gone silent. The pattern is deliberate: replace one coarse timer with several precise signals.
Which release shipped the change, and how do I verify all of this myself?
It shipped in v2.9.41, dated 2026-05-27 in CHANGELOG.json at the root of the public repo. To verify, clone github.com/mediar-ai/fazm and run git show --stat 787dbb33 to see the 45-line change in ACPBridge.swift, then grep that file to confirm inactivityTimeout no longer exists. For the protocol claim, open node_modules/@agentclientprotocol/sdk after an install and find StopReason in the generated types: it is the union end_turn | max_tokens | max_turn_requests | refusal | cancelled, with no Timeout member.
Related guides
New AI projects, Hugging Face or GitHub, May 20 2026
Six days earlier in the same repo the headline was an addition, not a deletion: 12 commits wired an AI QA-testing engine into the agent so it can test the apps it builds.
Latest AI model releases, papers, open-source projects, May 25 and 26 2026
The wider 48-hour window across the model layer, for readers who want the whole field rather than one repository read closely.
New AI projects on Hugging Face or GitHub, May 2026
The monthly companion. Why the two platforms are complements, what each is good for, and how to triage a daily feed without drowning in roundups.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.