Open source AI projects with GitHub releases in the last day. Lists are the wrong surface. Here is the 36-line Fazm loader that makes the daily feed a desktop tool.
Every top-10 result for this query is a curated list: TLDR AI, Hugging Face trending, awesome-llm trackers, Twitter roundups. Lists go stale the minute the next tag lands. This page is about the only durable surface for a rolling daily release feed on your own Mac: a consumer AI agent with a user-editable MCP config. Fazm v2.4.0 shipped that on 2026-04-20. The entire loader is 36 lines of TypeScript at acp-bridge/src/index.ts lines 1102 to 1137, plus one pinned path at MCPServerManager.swift line 42. Drop a GitHub Releases MCP into ~/.fazm/mcp-servers.json, restart the bridge, and you have a daily feed your agent can call and follow up on, not just read.
Open source AI projects that typically ship tags on any given day
What the top results for this keyword all cover, and what every one of them misses.
I ran the exact phrase. The first page is consistent: Hugging Face Models sorted by updated desc, TLDR AI's daily digest, a handful of awesome-llm-* GitHub lists, a few Reddit r/LocalLLaMA weekly threads, and the usual newsletter recaps. Every one of them renders the last 24 hours as a list: project name, tag, one-line note, link. The lists are genuinely useful as a zeroth-hour signal.
None of them is callable. None can answer "which of these is already cloned under ~/src on my Mac", "which has a breaking change in the release body", or "pull the new Ollama model for me". The moment your follow-up goes past what a paragraph of prose can render, a list is the wrong surface.
The durable surface for a rolling daily feed is an MCP server attached to an agent that lives on your desktop. Fazm v2.4.0 shipped that surface. The entire delta is 36 lines.
The 36-line user-MCP loader, lifted verbatim.
Read the lines yourself. This is acp-bridge/src/index.ts from 1102 to 1137. Every surface of the user-MCP feature, the path resolution, the existsSync gate, the JSON parse, the enabled gate, the missing-command warning, the env-array conversion, the servers.push, the success log, fits on one screen. It is the exact machinery that makes a GitHub Releases MCP work inside Fazm.
“The config path is pinned in one line of Swift. The loader is pinned in 36 lines of TypeScript. There is no other surface that matters for user-defined MCPs inside Fazm.”
MCPServerManager.swift line 42 + index.ts lines 1102 to 1137
The Swift side, for completeness.
The Swift side does not run the loader. It pins the same path, exposes a Settings UI for add/edit/toggle, and watches the file for changes. The whole thing is 130 lines, but only one of them, line 42, has to agree with the bridge.
A minimum viable ~/.fazm/mcp-servers.json for this workflow.
Three entries. A GitHub Releases MCP for structured tag data, a Hugging Face trending MCP for model-side releases, and a tiny local Node watcher that filters to a hand-curated REPO_LIST. Drop the file on disk, restart Fazm, and the bridge logs three lines to stderr at index.ts line 1132. All three MCPs are then callable tools on your next prompt.
How a GitHub Releases MCP, plus your own browser tab, get stitched into one agent call
Six data paths a daily-release agent can combine.
Three bundled at build time, three you plug in. All six hit the same agent tool list through the loader at line 1126. The difference between a static digest and a live desktop workflow is which of these you are willing to wire up.
GitHub Releases MCP
Any npx-runnable GitHub MCP server. Query releases with owner/repo, get the last day's tag + body. Drops into ~/.fazm/mcp-servers.json under any name you pick. Parsed at index.ts line 1108.
macos-use (bundled)
Reads any Mac app via accessibility APIs. Binary bundled at acp-bridge/src/index.ts lines 1057 to 1063. Ask Fazm to read your Chrome GitHub Releases tab and it uses this MCP, no scraping.
playwright (bundled)
Chrome DevTools Protocol controller. Bundled at lines 1049 to 1054. Drives your real logged-in Chrome. Combined with macos-use, the agent sees both the accessibility tree and the DOM of the same tab.
Hugging Face trending MCP
Community MCP that exposes trending models. Point the config at its npx or binary path, set enabled: true, hit reload. Lands in the same servers.push() array at line 1126 as the bundled ones.
Local watcher (Node script)
Your own Node script that polls a REPO_LIST env var once an hour. The env object at index.ts line 1122 becomes { name, value } pairs the bridge passes through. Enables private feeds the public MCPs can't cover.
FileIndexerService
Built in. Indexes ~/Developer, ~/Projects, ~/Code, ~/src, ~/repos, ~/Sites (FileIndexerService.swift lines 82 to 95), skipping .git, node_modules, .venv, .build (13 entries at lines 13 to 18). Tells the agent which repos you already have cloned locally.
From list on a blog to callable tool on your Mac
0. Install Fazm v2.4.0 or later.
Pull the latest binary from fazm.ai or run a local build from github.com/mediar-ai/fazm. The user-MCP loader is a v2.4.0 addition. Any older version silently has no loader, so the file on disk does nothing.
1. Pick your GitHub Releases MCP server.
Any MCP that speaks stdio and knows the GitHub API works. The community GitHub MCP package on npm is the easiest zero-install option. Internal version, npx-runnable, language-agnostic.
2. Drop a { command, args, env, enabled } block into ~/.fazm/mcp-servers.json.
Shape is pinned by MCPServerManager.swift's RawServerConfig (lines 124 to 129) and index.ts's parse at line 1108. command is the only required field. Paste any existing Claude Code mcpServers entry directly.
3. Restart Fazm (or reload the bridge).
The bridge reruns the loader at index.ts line 1102 on every start. Each successful server logs 'User MCP server loaded: <name> (<command>)' to stderr at line 1132. Tail the log at /tmp/fazm.log to confirm.
4. Ask Fazm 'what open source AI projects had GitHub releases in the last day?'
The ACP agent sees the newly registered MCP tools in its tool list. Prompt-level: the agent decides when to call list_releases, filters to AI repos, and renders a summary. No scraping, no browser click-through, no copy-paste.
5. Follow up with questions the list cannot answer.
Which of these is already on my Mac (Fazm's FileIndexerService answers). Which support the new Claude 4 tokenizer (Fazm can read the repo's README via the accessibility tree of your Chrome tab). Which has a breaking change (Fazm can grep the release body through the MCP).
You wake up and open this query. What happens next?
You open the top result. You read the list. You recognise three names. You open each repo's /releases tab, skim the body, close it, forget. Next morning you run the same query, get a near-identical list minus last night's tags, and repeat. The only state that carries across days is your browser history. Everything the list knew about the other 20 projects falls on the floor.
- List is read-only prose
- No follow-up beyond re-opening tabs
- No cross-reference with what you already have cloned
- No way to turn a noteworthy release into an action
- Next day, same click-through from scratch
- State lives in your head, not in a tool
From prompt to three tool calls and back, on a fresh Fazm launch
Grep it yourself.
Every claim on this page is three greps away from verification. Clone the Fazm source (public at github.com/mediar-ai/fazm) and run these against your local checkout.
Curated list vs Fazm v2.4.0 with a GitHub Releases MCP
| Feature | Daily digest list (TLDR AI, awesome-llm, HF trending) | Fazm (~/.fazm/mcp-servers.json + acp-bridge) |
|---|---|---|
| Source of truth | Static list rendered at publish time | MCP server callable at any moment, wired via ~/.fazm/mcp-servers.json at MCPServerManager.swift line 42 |
| Freshness | As of article timestamp; stale within hours | Live on every agent call; tool invocation goes through the bridge loader at index.ts line 1126 |
| Follow-up questions | None; list is one-shot prose | Agent-side; combines MCP data with your desktop context (macos-use, playwright, file indexer) |
| Works with your private repos | Only public signal | GITHUB_PERSONAL_ACCESS_TOKEN in the env object at index.ts line 1122 exposes private releases to the agent |
| Integration with local clones | None | FileIndexerService.swift lines 82 to 95 scans ~/Developer, ~/Projects, ~/Code, ~/src, ~/repos, ~/Sites |
| Ingestion of the list itself | Reader skims, forgets | Fazm's deep-research + web-scraping skills accept the list as context and cross-reference |
| How the agent reads UI | Screenshot-based automation (error-prone, OCR fallback) | macOS Accessibility APIs via the bundled macos-use MCP at lines 1057 to 1063 |
| Config shape | Proprietary | Identical to Claude Code's mcpServers (comment at MCPServerManager.swift line 4) |
Fourteen independently grep-verifiable claims
- CHANGELOG.json 2.4.0 entry on 2026-04-20 lists 'Added custom MCP server support via ~/.fazm/mcp-servers.json'
- MCPServerManager.swift line 4 comment 'Format mirrors Claude Code\'s mcpServers'
- MCPServerManager.swift line 13 declares private let configURL: URL
- MCPServerManager.swift line 42 pins configURL to ~/.fazm/mcp-servers.json
- index.ts line 1104 resolves the same path via join(homedir(), '.fazm', 'mcp-servers.json')
- index.ts line 1107 reads the file as utf-8
- index.ts line 1108 parses the { command, args, env, enabled } shape
- index.ts line 1115 skips servers where cfg.enabled === false
- index.ts line 1116 warns and skips servers without command
- index.ts lines 1122 to 1123 convert env object to { name, value } pairs
- index.ts line 1126 appends the user server onto the same array as bundled ones
- index.ts line 1132 logs 'User MCP server loaded: <name> (<command>)'
- index.ts lines 1049 to 1063 register playwright + macos-use as bundled accessibility MCPs
- index.ts line 1139 calls emitMcpServers(servers) with the combined list
Why 36 lines are enough.
Because the MCP protocol already carries the hard part. The bridge does not need to know what a GitHub release is. It does not need to know what Hugging Face trending is. It does not need to know what your private watcher is doing. It only needs to spawn the process, hand it a stdin/stdout pipe, and register whatever tools the process advertises at handshake time. That is the same shape as the bundled playwright and macos-use MCPs at lines 1049 to 1063, so the user-side loader at line 1126 reuses the exact servers.push() shape, no special casing.
The difference between the digest-list world and the desktop-tool world is entirely on the other side of the MCP handshake. Write (or install) a GitHub Releases MCP, and the tag feed becomes just another tool. Write a Hugging Face trending MCP, and the model feed does too. The bridge's loader is agnostic to both, which is why 36 lines do the job.
This is also why the config shape intentionally mirrors Claude Code's mcpServers (explicit comment at MCPServerManager.swift line 4). Any MCP that already works with Claude Code works with Fazm the moment you paste its configuration into ~/.fazm/mcp-servers.json.
Watch a GitHub Releases MCP go from JSON to callable tool on a live Mac.
15-minute demo: drop the config, restart Fazm, ask for the last 24 hours of open-source AI releases. Answer comes back with local-repo cross-reference.
Book a call →Frequently asked questions
What does 'open source AI projects with GitHub releases in the last day' even mean in practice?
The phrase maps to a rolling 24-hour window of /releases tags on GitHub across a user-defined universe of AI repos: Hugging Face transformers, vLLM, llama.cpp, Ollama, LangChain, LlamaIndex, Axolotl, AnythingLLM, CrewAI, OpenAI-compat runtimes, MCP server repos, desktop-agent repos like Fazm itself. Plenty of daily digests (TLDR AI, Hugging Face trending, awesome-llm style lists) will tell you which tags landed. None of those lists is a tool you can ask a follow-up to. Once the digest is on your Mac as an MCP server, it is not a list anymore, it is a callable tool.
Why is 'list of releases from the last day' the wrong surface for this query?
Because the half-life of a list is shorter than the cadence of the feed it summarises. If vLLM cuts a release three hours after the list is published, the list is wrong. If your teammate asks "which of these supports the new Claude 4 tokenizer?", the list cannot answer. The durable surface for a rolling daily release feed is a tool, not a document. The MCP server protocol was designed for exactly this kind of always-fresh, callable data source. Pasting an MCP server definition into ~/.fazm/mcp-servers.json gives the agent the same view you want from the list, plus the ability to drill down.
What shipped on 2026-04-20 in Fazm that makes this possible?
Version 2.4.0. The first bullet of the release is: 'Added custom MCP server support via ~/.fazm/mcp-servers.json with Settings UI to add, edit, and toggle servers' (CHANGELOG.json, repo root). Before that release, every MCP server in the agent was bundled (playwright, macos-use, whatsapp, google-workspace). After it, any user can point the bridge at a GitHub Releases MCP, a Hugging Face API MCP, a npm/pypi watcher, or anything else that speaks MCP stdio. The loader is 36 lines of TypeScript.
Where exactly is the user-MCP loader in the source?
Two files. First, /Users/matthewdi/fazm/Desktop/Sources/MCPServerManager.swift line 42 pins the config path: 'self.configURL = fazmDir.appendingPathComponent("mcp-servers.json")'. Second, /Users/matthewdi/fazm/acp-bridge/src/index.ts lines 1102 to 1137 contains the runtime loader. Line 1104 resolves the path with join(homedir(), ".fazm", "mcp-servers.json"). Line 1106 existsSync-gates. Line 1107 reads as utf-8. Line 1108 parses the Claude-Code-compatible shape. Line 1115 gates on cfg.enabled !== false. Line 1116 warns on missing command. Lines 1120 to 1125 convert cfg.env object into the bridge's env-array shape. Line 1126 pushes onto the same servers array the bundled MCPs already populated.
Why does MCPServerManager.swift mirror Claude Code's shape?
Explicit comment at line 4: 'Format mirrors Claude Code\'s mcpServers: { "name": { "command": "...", "args": [...], "env": {...}, "enabled": true } }'. If you already have a .mcp.json or a Claude Code mcpServers block, you can paste the same JSON into ~/.fazm/mcp-servers.json and it works. The bridge's RawServerConfig struct in MCPServerManager.swift (lines 124 to 129) and the TypeScript parse at index.ts lines 1107 to 1113 agree on the four fields: command (required), args, env, enabled.
What is different about reading GitHub releases through Fazm vs through a scraper?
Scraping a list page is one-shot and stateless: you get markup, you lose the rest of the tab tree. Fazm's bundled automation MCPs (macos-use at acp-bridge/src/index.ts lines 1057 to 1063, playwright at lines 1049 to 1054) read UI via macOS Accessibility APIs and real Chrome DevTools Protocol, not screenshots. So the agent can see your open GitHub Releases page in Chrome, see the sidebar filters you have applied, see the starred repos you track, and see the terminal tab next to it where you ran a clone. The GitHub Releases MCP you plug in at line 1126 adds structured data on top of that. None of those three surfaces is a screenshot.
What does a minimum viable ~/.fazm/mcp-servers.json for this use case look like?
Two entries. One points at any public GitHub Releases MCP (npx-runnable). The second is a tiny local watcher that filters to AI tags. Each entry is the { command, args, env, enabled } shape. As long as command exists, the bridge at index.ts line 1116 does not skip it. The loader calls logErr at line 1132 with 'User MCP server loaded: <name> (<command>)' on every successful add, so you can tail the bridge log and see your server attach.
How does the agent stay local-first when an external MCP is talking to GitHub?
Version 2.3.2 tightened the privacy language specifically here (CHANGELOG.json 2026-04-16: 'Tightened privacy language in onboarding and system prompts to accurately say "local-first" instead of "nothing leaves your device"'). The scope is precise: the model, transcription, file indexing, and screen-reading surfaces are local unless the user opts into cloud. Any MCP the user adds is outside that boundary by definition, which is why the loader at index.ts lines 1115 to 1116 logs each added server by name and command. Enabled/disabled toggle is at MCPServerManager.swift lines 110 to 115.
Why should the agent be the surface, not a RSS feed or a newsletter?
Because agents are callable and RSS feeds are not. A newsletter tells you Ollama shipped 0.5.4 with a Phi-4 update. It cannot tell you whether your Ollama folder on disk (FileIndexerService scans ~/Developer, ~/Projects, ~/Code, ~/src, ~/repos, ~/Sites, FileIndexerService.swift lines 82 to 95) is already on that version. It cannot open your terminal, type 'ollama pull phi4:latest', and watch the tab for the pull-rate line. Fazm can, via the same bundled macos-use MCP (index.ts lines 1057 to 1063) that lets it read the accessibility tree of any app on your Mac.
What is the full bundled MCP list as of v2.4.0?
Read acp-bridge/src/index.ts and count the servers.push() calls between lines 900 and 1100. As of 2026-04-20 the bundle is: playwright (lines 1049 to 1054), macos-use (1057 to 1063), whatsapp (1067 to 1073), google-workspace (1081 to 1099). The user-MCP loader at 1102 to 1137 appends onto the same array, so a GitHub Releases MCP you add lands in the same pool as the bundled ones and is called the same way by the ACP agent. The final emitMcpServers(servers) at line 1139 ships the combined list to the MCP registry.
How do I verify any of this?
Three greps. 1) 'grep -n mcp-servers.json /Users/matthewdi/fazm/Desktop/Sources/MCPServerManager.swift' shows line 4 and line 42. 2) 'grep -n userMcpConfigPath /Users/matthewdi/fazm/acp-bridge/src/index.ts' shows lines 1104, 1106, 1136. 3) 'grep -A2 "2.4.0" /Users/matthewdi/fazm/CHANGELOG.json' shows the 2026-04-20 date plus the Added custom MCP server support bullet. Everything on this page resolves to those greps.
What if I want a raw list of tags from the last day anyway?
Use any of the big rollups: Hugging Face Models sorted by updated desc, GitHub Trending filtered to Python/Rust and an AI topic, TLDR AI's daily email, the awesome-llm-ai-tracker monorepo, Reddit r/LocalLLaMA. They all work as a zeroth-hour signal. The thesis of this page is not that lists have zero value; it is that the list is an input to your agent, not the end state. Once it is behind an MCP server wired through ~/.fazm/mcp-servers.json, the list becomes tool output that the agent can join with the rest of your desktop context.
Related guides on the same bridge process
Open source AI projects with GitHub releases in the past day
Sibling guide. Different angle, same repo: how Fazm's own release pipeline polls api.github.com on every Sparkle appcast request, EdDSA-signs each build, auto-rolls back on 3 crashes in 60 seconds.
LLM new model release April 2026
The 60-line ShortcutSettings.swift picker plus the 10-line emitModelsIfChanged forwarder that absorb every new model ID without an app rebuild. Same bridge process, model side of it.
MCP servers for Claude Code and desktop automation
How MCP works, why it is shaped like a stdio tool registry, and why that shape is what makes ~/.fazm/mcp-servers.json a one-file integration surface.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.