GAIA v0.24.1 Release Notes
v0.24.0 was tagged, but a CI bug blocked its GitHub Release until npm already had that version published. v0.24.1 is identical content, republished under a version npm accepts.Breaking Changes
- Thirteen per-task agents were removed —
analyst,blender,browser,code,doc-search,docker,docqa,emr,fileio,jira,routing,sd,summarizeare now aSKILL.mdon the flagship. Installing one by id fails; usegaia hub install gaia --trustand load the matching skill. (PR #2995) - The TUI control API dropped its hub-browser fields —
viewis nowsplash | preflight | chat;hub_tab,hub_tab_index,selected_agent_id,visible_agent_ids,filtering,can_return_to_hubare gone, replaced byblocker. Anyone driving the TUI over it needs to update. (PR #3120) @tool(name=..., description=...)no longer works — the decorator rejects unrecognized keywords instead of discarding them silently. Use@tool(); name/description come from the function. (PR #3252)gaia telegram startnow requires--allowed-users, no opt-out — it used to start (and reply to anyone) without one. (PR #3306)gaia api --hostbeyond loopback with no key refuses to start, andGAIA_API_KEYgates chat completions too. (PR #3612)
What’s New
-
gaia hub install gaia --trustfinally installs and runs the flagship agent — the daemon had no sidecar entry for it, the installers didn’t ship its binary, andgaia initset up the wrong agent. (PRs #3031, #3146, #3330, #3125, #3120) -
triage my inboxnow works on the flagship agent — read-only, so mail and documents no longer need separate agents; sending and drafting stay on the standalone email agent for now. (PR #3331) -
summarize this meeting: standup.mp4now works — fully local, no PyTorch or gated downloads — a speaker-diarized transcript, a brief with decisions and action items, and follow-up Q&A with verbatim quotes. 94.1% word-level match against a WhisperX+pyannote reference, all speakers correctly identified. (PR #3597) - The agent draws pictures, orients itself, and its skills load themselves — “draw me a red bicycle” reaches the image tools; every task scans the project before acting; a skill matches your question instead of you naming it. (PRs #3073, #3405, #3010, #3023)
-
Every answer states whether it was checked, and
--tracerecords the proof — the agent names what it ran and what passed instead of just claiming success;--tracein the TUI logs every tool call for replay. (PRs #3397, #3579) - The TUI takes the mouse and can go cloud — wheel-scroll and clickable links; point it at a local, Fireworks, or AMD Gateway model via Lemonade. (PRs #3699, #3006, #3672)
-
gaia lemonade embedded startruns your own Lemonade Server — no machine-wide installer. (PR #3121) -
Mine your own Claude Code sessions for usage stats — a deterministic, LLM-free pipeline turns your
~/.claude/projects/transcripts into tool-usage, failure, and cost reports. See the Session Analytics guide. (PRs #3111, #3782)
Security
- Any web page you visited could drive GAIA’s local servers — a cross-origin request could start a tunnel, poison your RAG store, or send mail; a document link could reach cloud metadata or the daemon’s loopback API.
Origin/Hostchecks are enforced everywhere now. (PRs #3366, #3612) - A Telegram bot with no allowlist replied to anyone (the documented default) — off-allowlist users are refused before a session or model call now; the bot’s tool surface is chat-only. (PR #3306)
- Attaching a document could silently widen the agent’s read scope to its whole parent directory — the grant is the file itself now; reads gained a credential denylist, and writes refuse rc files, PowerShell profiles, and git hooks. (PR #3594)
- A chat turn could plant
system/permissionrows into every future prompt — only onboarding/admin paths write them now. (PR #3614)
Bug Fixes
A selection of the user-visible fixes this release — the full list is in the changelog below.- The flagship agent’s core model floor now matches what can actually run it (PR #3055) — installs no longer point at a Lemonade version too old to serve the agent.
- A one-shot
/queryrun no longer leaks an agent process (PR #3079). - The npm sidecar no longer attaches to a foreign server (PR #3078) — it now verifies the server it finds is actually its own before using it.
- A turn parked on a confirmation prompt no longer hangs when stdin closes (PR #3080) — the agent ends the turn instead of waiting forever.
- Telegram’s background polling survives (PR #3272) — the adapter no longer silently stops receiving messages.
gaia uninstall --purgeremoves the embedded Lemonade runtime it installed (PR #3277) — previously a full purge left~/.gaia/lemonadebehind entirely; a live embedded daemon must be stopped first.- Outlook and Gmail search operators translate correctly for the email agent (PRs #3042, #3562, #3619) — a query that used to fail silently or match the wrong messages against Outlook’s Graph API now works or fails loudly.
- RAG indexing honors a document’s actual success flag (PR #3678) — a failed index no longer gets reported as indexed at every call site that checked it.
- Claude tool-call history survives across turns (PR #3410) — a multi-turn tool conversation no longer loses earlier tool results.
- An ambiguous edit is refused instead of silently changing the first match (PR #3396) —
edit_fileasks for a more specific match rather than guessing which occurrence you meant. - A port collision between the MCP bridge, Agent UI, TUI, and Telegram is resolved (PR #3604) — the four no longer fight over the same default port.
- Telegram reports unsupported media types instead of failing silently (PR #3263).
GET /healthreports real component status (PR #2601) — it used to reportokeven with a dead Lemonade backend; it now reports LLM and RAG status too.- A
.bakbackup file could be imported as the module it backed up (PR #3748) —.baknow goes last in the filename, so pytest no longer tries to collect a test file’s own backup. - A PowerShell sink could execute untrusted text instead of just displaying it (PR #3359) — an apostrophe in an indexed document name, or in a
notify_desktopmessage, ran as code; both now pass values out-of-band. --scopescould request an OAuth scope outside a connector’s declared ceiling (PR #3247) — the CLI’s verbatim-scopes path skipped the check the Agent UI already had; both now enforce it.- The flagship agent always has its edit tools now (PR #3755) — a coding request used to get them only if the model happened to fetch them itself; some models looped instead.
- Tool history no longer loses which file a large write or edit touched (PR #3754) — arguments were truncated by cutting the serialized JSON mid-string; large args are now stored as valid JSON.
- A suspended or over-limit cloud account gets an actionable error, not “try again” (PR #3767) — retrying a 402/412 from a cloud provider could never have worked.
Contributors
Thanks to the community members who contributed to this release:- @mikemikimike — Telegram background-polling and media-handling fixes, embedded-Lemonade uninstall cleanup, and TUI init-process reaping (PRs #3272, #3277, #3271)
- @itomek — custom-agent guide fixes and CI reliability work, including provisioning the dev install in Claude Code cloud sessions (PRs #3317, #3033)
- @Hashim1999164 — hub agent pages showing the GAIA install path alongside npm, structured JSON for unexpected email API errors, and Outlook Graph query-escaping fixes (PRs #3151, #3046, #3021)
- @AmirF194 — Outlook/Gmail search-operator translation for the email agent (PRs #3042, #3562, #3619)
- @sujikathir — the
/healthcomponent-status endpoint and a Claude tool-history preservation fix (PRs #2601, #3410) - @SIBTAIN-ASAD — Telegram unsupported-media-type reporting and test coverage (PR #3263)
- @wangzhengzhuo05 — MCP/Telegram/TUI port-collision fix across the bridge, Agent UI, and daemon (PR #3604)
- @amd-pworfolk — stopped a non-LLM model’s
ctx_sizefrom leaking intoget_status()(PR #3595)