Skip to content

v0.25.0-rc2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Oct 23:08
· 101 commits to main since this release
05fb50b

Important

Release candidate for v0.25.0. A pre-release for testing before the final ships. Installers and package managers keep offering the last final release unless you ask for this one.

GAIA v0.25.0 Release Notes

Breaking Changes

  • gaia chat runs the flagship GAIA agent, the same agent as the TUI and Agent UI, instead of the retired ChatAgent. gaia chat -q "…" queries it once. (PR #4520)
  • gaia talk transcribes and speaks through Lemonade — it uses Lemonade's Whisper and kokoro-v1, and stops with the reason if Lemonade is down. The [audio] extra is gone; pip install amd-gaia[audio] only warns. (PR #4665)
  • The Agent UI runs only the GAIA agent — the Agent Hub home, agent picker, and custom-agent export/import are removed from the UI. The CLI and eval harness can still run other agents. (PR #4509)
  • The retired nomic embedder is removed — memory saved with it is re-embedded on first start. (PR #4489)
  • Indexed documents are re-indexed once — the document cache is now keyed on chunking settings, so the first query after upgrading rebuilds it. (PR #4624)
  • A skill that asks for more than its tier allows no longer loads — the permission ceiling is checked at every load, so a skill already on disk that exceeds it is refused with the reason. (PR #4849)

What's New

  • A larger local model where the GPU holds it — gaia init picks Qwen3.6-35B-A3B on a 64 GB+ Strix Halo or a 32 GB GPU and keeps Gemma-4-E4B elsewhere, with each context window sized to available memory. Qwen3.8 Flash Next is opt-in on 128 GB Strix Halo. (PRs #4479, #4670, #4671, #4658, #4655)
  • The Agent UI opens straight to a chat and sets itself up — a fresh install runs the same setup steps as the TUI in the window, with provider, key and model settings, permission modes, and revocable "always allow" grants. (PR #4509)
  • A much smaller install — PyTorch, transformers and accelerate are gone from the core, [ui] and [talk] installs; the desktop app's Python environment drops from ~0.9 GB to ~0.1 GB on Windows. (PRs #4666, #4621, #4665)
  • One Windows installer for the desktop app and the terminal, with a GAIA Windows Terminal profile. (PRs #4720, #4707)
  • A "no" holds — a declined action isn't retried through another tool; the agent asks again with the exact command. The TUI gains Shift+Tab permission modes. (PRs #4460, #4461)
  • Answers are checked against what the tools actually did — the agent looks at files you name before answering about them, and a short plain-English note appears only when work isn't confirmed. (PRs #4532, #4501, #4508)
  • One shell session — commands share a persistent shell, risky ones ask instead of being refused, and "full access" is one setting everywhere. (PR #4408)
  • Memory surfaces what's relevant to each request, with its age, keeps what fixed a failure as a lesson for that workspace, and extracts after the answer instead of before it. (PRs #4061, #4066, #4406)
  • gaia.log stays bounded — it rotates at 10 MB with three backups (GAIA_LOG_MAX_MB, GAIA_LOG_BACKUPS). (PRs #4668, #4760)
  • Child processes get a trimmed environment — shell, MCP and skill children no longer inherit GAIA's internal credentials; GAIA_NO_DOTENV skips loading .env. (PRs #4635, #4659)
  • Every file tool checks the allowed-folders rule, and paths inside an inline shell script are checked one by one. (PRs #4656, #4758)

Bug Fixes

A selection of the user-visible fixes; the full list is in the changelog below.

  • Local Qwen models no longer loop on repeated tool calls — they run with their model card's sampling instead of near-greedy settings. (PR #4655)
  • Qwen3.6 runs on a Strix Halo with an older AMD driver — it used to crash on its first token, so gaia init failed; GAIA now turns off the Vulkan path that crashes on those drivers only, and newer drivers keep the faster path. (PR #4674)
  • A long PDF no longer hangs or times out while indexing — big documents index in the background, and PDFs that only carry owner-password restrictions now index. (PRs #4754, #4679, #4734)
  • Document answers cite the right document and page, and every chunk is embedded whole instead of its first 1,200 characters. (PRs #4688, #4723)
  • gaia init fails when model verification fails, shows downloads live, and no longer hangs while Lemonade hashes a large model. (PRs #4620, #4564, #4673)
  • gaia init adds a profile's extras without reinstalling GAIA, which failed on Windows while gaia.exe was running. (PR #4672)
  • Every SDK and CLI entry point starts GAIA's own Lemonade, and every call goes to the resolved URL with its API key. (PRs #4657, #4627)
  • Local chat stays cached across turns — the system prompt is fixed and side requests no longer evict the conversation. (PRs #4698, #4543)
  • A cloud model selection never preloads a local model, and cloud models no longer get llama.cpp-only fields. (PRs #4757, #4709)
  • The Agent UI stops claiming "100% local" while chat goes to a cloud model, and the chat header names the session's real model. (PRs #4711, #4550)
  • Enter can't approve a permission prompt, and prompts wait 10 minutes before timing out. (PRs #4700, #4699)
  • Stopping a run keeps the turn and its steps visible. (PR #4743)
  • A file edit keeps the file's line endings — a one-line edit on Windows used to rewrite every line ending, so a small change showed up as the whole file changed. (PR #4864)
  • A broken agent install is reported as broken, not as missing — the error names both package versions and the real import error, and suggests a reinstall that works. (PR #4588)
  • A meeting or document summary is never cut off mid-sentence — a thinking model used to spend the summary's output budget reasoning, so a long meeting lost its second half. (PR #4827)
  • "What can you do?" gets an answer instead of an attempt to generate an image of the question. (PR #4809)
  • Writes and approved edits can't reach credential folders (~/.ssh, ~/.aws, ~/.kube and others), and shell option values and script arguments get the same path check as plain paths. (PRs #4848, #4847)
  • gaia connectors connect google --grant-agent installed:gaia works — it used to fail with no sign-in link for the shipped agent; it now asks for read-only Gmail and grants exactly that. (PR #4859)
  • A "no" to creating a folder also covers writing into it — GAIA no longer asks again to create the same folder a different way. (PR #4857)
  • gaia skill import runs the same checks as a hub install — https only, the audit, the permission ceiling, and an explicit opt-in for skills that ship code. (PR #4849)
  • Memory off and private chats apply to scheduled and background runs too. (PRs #4842, #4821)
  • Memory stops false apologies and reusing deleted values, saves "remember this" requests, and skips loading the embedder when memory is off. (PRs #4708, #4756)
  • A reply cut off by the token limit is continued instead of ending mid-sentence, and a tool call cut off at the output cap is retried shorter. (PRs #4054, #4556)
  • The TUI remembers the chosen model across restarts and agent-process restarts. (PRs #4497, #4710)
  • gaia uninstall --purge removes installer binaries, PATH edits and daemon state. (PR #4413)

Contributors

Thanks to the community members who contributed to this release:

  • @itomek — the flagship's browser and tool picker, one shell session, memory extraction off the answer path, stale tool-result eviction, the TUI's sourced Fireworks rankings, and --purge cleanup (PRs #4407, #4408, #4406, #4465, #4414, #4413)
  • @mikemikimike — chained shell command timeouts, bundled skills in frozen builds, and sidecar cleanup reporting (PRs #4463, #4467, #4419)
  • @Hashim1999164 — honoring GAIA_HOME for cache, chat and index paths (PR #4381)
  • @krtadev — ~ expansion in file and document tool paths (PR #4576)
  • @aksh8b — telling a broken agent install apart from a missing one, with a reinstall hint that works (PR #4588)
  • @Dev-next-gen — numeric prerelease ordering in the hub (PR #4517)
  • @vianmangal — recording denied tool calls as unsuccessful in memory (PR #4412)
  • @GaetanVDB07 — links to upstream credential setup guides for connectors (PR #4669)
  • @rradjabi — moving self-hosted CI jobs to the xsj-dispatch runner pool (PR #4534)

Full Changelog

300 commits since v0.24.1:

Expand full changelog (300 commits)
  • c5c9141ba — fix(tools): stop file edits rewriting every line ending in the file (#4864)
  • f2e55aff2 — fix(agents): stop saying a broken agent install is not installed (#4588)
  • 9ce659803 — fix(lemonade): turn off Vulkan coopmat on Strix Halo drivers that crash Qwen3.6 (#4674)
  • 1021f3b74 — fix(connectors): derive the flagship's mail scopes for --grant-agent installed:gaia (#4859)
  • 8a783b6eb — ci(eval): make the code retrieval workflow valid so it can run (#4858)
  • be1e0df20 — test(agent): give the prompt-timeout test room for a slow runner (#4861)
  • e0fd6717f — fix(agent): a "no" to creating a folder also covers writing into it (#4857)
  • 8c26439c9 — feat(website): lead with the agent factory, with a way in for users and builders (#4851)
  • 5d9308ccf — fix(skills): imports go through the same checks as hub installs (#4849)
  • a7d77a8fb — fix(security): extend protected-path checks to writes and approved edits (#4848)
  • 3798ac97d — fix(shell): tighten path checks for inline scripts and option values (#4847)
  • c4daa37ae — feat(release): publish release candidates from vX.Y.Z-rcN tags (#4856)
  • 1fadb48c2 — docs(install): state the real first-launch download (~6 GB, ~23 GB on Ryzen AI Max) (#4855)
  • fa5f96ae4 — docs: remove obsolete plans and stale per-task-agent references (#4839)
  • 5f71e4e0d — refactor(agents): remove the Agent Builder (#4843)
  • 693c07244 — fix(ui): memory off and private chats apply to background runs too (#4842)
  • 5c1fc112e — chore(deps): bump the root-npm-dependencies group across 1 directory with 5 updates (#4703)
  • 11adf184a — chore(deps-dev): bump the agent-ui-dependencies group across 1 directory with 4 updates (#4837)
  • 0dca5fac9 — fix(ui): stop silent failures in memory, schedules, and DB upgrades (#4821)
  • 78fef2895 — fix: fail-loud fixes in scratchpad, code index, SD, VLM extraction, skill lock (#4831)
  • c33bd94df — test: fix two stale expectations failing main's chat and unit jobs (#4844)
  • c40076bd1 — fix(webui): show newly indexed documents in the chat, and drop dead code (#4810)
  • b44831903 — fix(agent): stop forcing an image when an answer mentions image generation (#4809)
  • 9dc6b5d9a — fix(rag): a document summary is never cut off mid-sentence (#4827)
  • f4e5c0047 — test: cover the Stop marker on the wire; make five tests machine-independent (#4794)
  • f3e1a7acf — docs: release sweep fixes (connectors steps, gaia email CLI, Download button) (#4767)
  • 83f111648 — ci: run every workflow on Node 22 (#4793)
  • a7f577c7f — fix(webui): a deleted memory leaves every dashboard panel, not just the table (#4765)
  • 30dde5559 — docs(install): correct first-launch model, minimal size and app path (#4764)
  • 0be3a3502 — fix(webui): the message box stays one line tall on first launch (#4762)
  • e1124bb1b — fix(webui): keep a stopped turn visible with its steps (#4743)
  • 5abe45099 — fix(tests): add confirmation_timed_out to the turn-metrics _SlowHuman double
  • 3b3f8cc70 — fix(webui): memory dashboard fits its panel and confirms deletes (#4717)
  • a6dc50272 — fix(ui): plain-language path cards, live phase status, empty-stat dash (#4718)
  • 8e8a55253 — fix(ui): keep an answer's first word in its paragraph; Esc twice denies (#4712)
  • 375abe5ad — fix(ui): keep top banners clear of the floating sidebar button (#4755)
  • 6eab87427 — feat(webui): one simple chat app for the GAIA agent, with first-run setup (#4509)
  • bab941e13 — fix(shell): check the paths inside an inline script, not the script as a path (#4758)
  • 3c19dd788 — fix(webui): the chat header names the session's model (#4550)
  • 763e7a69e — fix(agent): GAIA's own checks no longer trip the after-answer scope guard (#4540)
  • ba9e6d1b6 — fix(logging): weigh log records in bytes so gaia.log holds its cap on Windows (#4760)
  • 5644695a1 — fix(tui): proportionate permission prompts, Shift+Tab modes, timeouts as timeouts (#4461)
  • e8af2d32c — fix(tools): every file tool checks the allowed-folders rule (#4656)
  • c168dffd1 — test(eval): stage the eval fixtures once per file, not six times (#4759)
  • 067cc6ecd — fix(agent): a declined action is not run another way (#4460)
  • dc6a8c56b — fix(lemonade): never preload a local chat model for a cloud selection (#4757)
  • 5c36abb2c — docs(email): the mail guide describes one agent — the flagship (#4530)
  • 665e3ec01 — fix(rag): stop big documents from hanging index_document until timeout (#4754)
  • cea8a86a1 — test(eval): validate every flagship capability at four tiers (#4472)
  • fcfeadc16 — fix(gaia): answer everyday questions in three plain sentences (#4753)
  • 58325b45a — fix(memory): don't load the embedder when memory is off (#4756)
  • 61df81c68 — test(eval): point the file scenarios at a folder the agent may write to (#4752)
  • f69287048 — test(ui): cover a document attached to a running chat (#4751)
  • 285c67a64 — test(memory): seed the prompt-growth test in one transaction (#4750)
  • 30f257fdf — feat(eval): RAG retrieval, answer-accuracy and scale benchmark (#4733)
  • 645d41499 — fix(agent): keep the answer a model sends alongside its last tool call (#4745)
  • 38e7d2eb7 — feat(eval): code search benchmark on real repositories (#4742)
  • 025a7b68f — fix(rag): index PDFs that only carry owner-password restrictions (#4734)
  • 22e66b24b — fix(agent): offer the shell when the user asks for it by name (#4728)
  • 88728f83b — fix(agent): a file you allow is usable for document Q&A in that chat (#4726)
  • a1dbf09ac — fix(agent): keep the read-back check out of the user's answer (#4719)
  • 64a43e891 — fix(agent): stop the completion check discarding correct code walkthroughs (#4725)
  • b2a0df88d — fix(ui): the Agent UI remembers by default, and says why when it doesn't (#4715)
  • bf72c85c2 — feat(installer): one Windows installer for the desktop app and the terminal (#4720)
  • f8418fd2d — fix(memory): embed dashboard-saved memories; run profile inference locally (#4716)
  • fa44742ef — fix(eval): point honesty_no_fabricated_triage at a repo gh cannot reach (#4722)
  • 5472194cf — fix(rag): embed every chunk whole instead of its first 1,200 chars (#4723)
  • b37a55ec2 — fix(ci): run test_sd_rule_gating.py in the chat-wheel lane
  • 454754566 — fix(agent): check answers against what the turn's tools actually did (#4532)
  • b5f86655e — fix(agent): look at named files before answering about them (#4501)
  • 20c14f34a — fix(memory): stop false apologies, deleted-value reuse, and unsaved 'remember' (#4708)
  • 69c86c962 — fix(agent): a tool call cut off at the output cap is retried with shorter arguments (#4556)
  • 4c3a9a4cb — fix(gaia): offer the flagship every tool on every turn, as the Agent UI does (#4554)
  • 32a5e2c22 — test: restore the global tool registry around every test (#4702)
  • 7bbb71af4 — feat(agent): the project map says which dependencies are missing and where the agent may work (#4537)
  • 26fdff83f — fix(ui): stop claiming "100% local" while chat goes to a cloud model (#4711)
  • cd129bd40 — feat(installer): GAIA Windows Terminal profile with IBM Plex Mono (#4707)
  • fad0d3be4 — fix(agent): tell the flagship its working directory outside a project (#4546)
  • 1c1518932 — fix(tui): keep the /model choice when the agent process restarts (#4710)
  • 8790d772a — fix(llm): stop sending llama.cpp's id_slot to cloud models (#4709)
  • d868f2b6b — chore(deps): bump anthropics/claude-code-action from 1.0.235 to 1.0.240 in the github-actions group (#4705)
  • d8e95187c — feat(agent): plain-English verification note, shown only when work isn't confirmed (#4508)
  • 82e294ecd — feat(tools): a Literal-typed tool argument is sent as a JSON-schema enum (#4575)
  • 3a6acc83f — fix(chat): only teach image generation when the session has it (#4574)
  • 9d01f582a — feat(models): offer Qwen3.8 Flash Next as an opt-in on 128 GB Strix Halo (#4658)
  • 36dbe0c13 — ci(unit): Windows and macOS unit jobs run every test and can fail the build (#4691)
  • e0ed41db6 — fix(agent): keep the system prompt fixed so local turns stay cached (#4698)
  • 7a2bc39e6 — fix(webui): Enter can't approve a permission prompt; countdown follows the backend (#4700)
  • 2ac88a63f — fix(ui): stopping an email relay on Windows unblocks it at once (#4690)
  • 5911c7414 — test(lemonade): keep mocked client tests off the developer's own Lemonade (#4694)
  • fb70c1989 — test(eval): run a CI eval lane locally; stress corpus for hostile files (#4697)
  • 688d04c10 — fix(tui): the live line names what the model is doing, not "Getting started" (#4689)
  • 4b718245c — fix(agent): a declined write is a finished answer, not unfinished work (#4693)
  • 7ca949e62 — fix(rag): a document is never cited with another document's page (#4688)
  • 64da3ea23 — fix(ui): first-run setup downloads the model chat will actually use (#4692)
  • 573887300 — fix(ui): permission prompts wait 10 minutes and denials name a real remedy (#4699)
  • 8776c09ac — fix(installer): gaia init on Windows keeps the PATH it started with (#4695)
  • baeaeae8a — fix(memory): learned skill changes saved in one clock tick keep their order (#4696)
  • 7f31fdd49 — feat(models): make Qwen3.6-35B-A3B the local default where a GPU holds it (#4479)
  • c7a3fb044 — fix(memory): turn thinking off for memory's short JSON side calls (#4687)
  • a9d8689f7 — fix(data): analyze_data_file matches column names in any case (#4685)
  • 0264c157d — fix(rag): unindexed large PDF no longer times out and indexes twice (#4679)
  • f5a627094 — test(lemonade): run the mocked client tests in CI and fix the six that rotted (#4681)
  • 6b2490472 — test(chat): run ChatAgent indexing/retrieval tests offline in CI (#4683)
  • eef7bdf70 — fix(tools): read UTF-16 text as text and show search hits on long lines (#4686)
  • f010eb71c — fix(gaia-agent): bundle the Anthropic client in the frozen binary (#4682)
  • 4d8069e8c — fix(email-agent): bundle faiss in the frozen binary (#4684)
  • ac605391f — fix(tests): match pip-extras install assertions to gaia_extra_requirements
  • 7f1e0aaed — perf(llm): local chat model keeps the conversation cached across side requests (#4543)
  • 42b5de30b — fix(llm): load local chat models with one llama.cpp slot on any Lemonade (#4678)
  • 3faa7f561 — fix(init): pass a thinking model's smoke test, and find models under HF_HOME (#4676)
  • 279bf6329 — test(cli): give the exit-code stub agent the session-reset hook (#4675)
  • e8bccfcfe — fix(init): don't hang up on a large model while Lemonade hashes it (#4673)
  • 8ce740997 — fix(init): add a profile's extras without reinstalling GAIA itself (#4672)
  • a5e41279d — docs(connectors): link upstream credential setup guides (#4669)
  • 89d4061b9 — fix(models): size a Windows Strix Halo iGPU from its driver, so it gets Qwen3.6 (#4671)
  • 6ffc75287 — fix(llm): size each model's context to the model, not the device profile (#4670)
  • 1c8d9eaec — fix(llm): run local Qwen models with their model card's sampling (#4655)
  • 1769af212 — fix(cli): gaia chat runs the flagship GaiaAgent (#4520)
  • 341120717 — fix(deps): drop PyTorch from the [ui] extra (#4666)
  • 68bb8ea54 — fix(eval): the SWE-bench instance cache no longer holds the gold patch (#4559)
  • 733659142 — test: keep every test off the developer's real ~/.gaia config (#4667)
  • c4a5c427d — test: clear the Windows-only failures behind the smoke job's first stop (#4585)
  • d1cc07723 — fix(logger): cap gaia.log size safely across GAIA processes (#4668)
  • 8fdbac078 — fix(talk): transcribe and speak through Lemonade, drop local Whisper/Kokoro (#4665)
  • 1462b8bf8 — fix(tests): use an OS-portable absolute path in the dev-gate fixture
  • ea736a235 — docs(claude): replace a baseline from the nightly, not --save-baseline (#4664)
  • 71fec08e9 — ci(unit): give the macOS and Windows smoke jobs time to finish (#4580)
  • 53e6929d5 — fix(init): gaia init fails when model verification fails (#4620)
  • 5c9381ec9 — fix(installer): install and suggest packages that work on the installer's venv (#4617)
  • 1440c9ed0 — fix(sdk): give reasoning models room to answer in the Agent SDK tests (#4616)
  • 4246c7836 — fix(gaia): stop startup on an undeclared GAIA_SKILL_SET (#4619)
  • 5f8e36350 — fix: surface failures GAIA was hiding and drop dead code (#4618)
  • 418dc8dbb — fix(rag): resolve the exact indexed file instead of the first substring hit (#4613)
  • 93e0f4bc3 — ci: make the nightly drafter SIGPIPE-safe and test the Python 3.10 floor (#4615)
  • c19e7dfbe — fix(cli): exit non-zero when gaia chat --query or gaia stats fails (#4612)
  • 1c94ebca1 — docs: correct the stale setup facts a new user hits first (#4614)
  • 02d6a6657 — fix(deps): drop transformers and accelerate from the core install (#4621)
  • 64a40d0cf — fix(lemonade): start GAIA's own Lemonade from every SDK and CLI entry point (#4657)
  • 4b7192722 — fix: programs GAIA starts for skills and tools get the trimmed environment (#4659)
  • 32e4ffae7 — fix(audio): importing the Whisper ASR module no longer loads torch (#4662)
  • fa096f468 — fix(memory): index every embedded memory, not just the top 100 (#4653)
  • 5656dc94b — fix(agent): the loop guard catches a short cycle of repeated calls (#4652)
  • a85f8cfbe — test(gaia): pin the flagship's index root to _code_search_start (#4663)
  • 85e2ede65 — test(eval): commit the first flagship scenario baseline (#4629)
  • eb429a3df — fix(eval): run memory scenarios with memory actually switched on (#4631)
  • e38f0f77a — test(ci): stop green runs that hide skipped coverage (#4623)
  • 59fcf3608 — fix(llm): send every Lemonade call to the resolved URL, with its API key (#4627)
  • 7ce29bf22 — docs(gaia): document the /query body and commit the sidecar OpenAPI (#4622)
  • 787e57ae8 — fix(ui): Agent UI status reports its own probe failures (#4628)
  • f8cc0ad43 — fix(rag): key the document cache on chunking settings (#4624)
  • 6c5de67d7 — chore: remove leftovers from the deleted per-task agents and demos (#4626)
  • 1903fdc92 — test: ratchet hard-coded GAIA home paths so the count can only shrink (#4625)
  • 9ed151b9b — ci: stop the Claude audits failing on their own plumbing (#4630)
  • 9e29a8e1f — fix(eval): run the github-triage scenarios against the fake gh, not the runner's (#4636)
  • 2c9bd0218 — chore(review): keep the review bot's instructions in sync with the repo (#4634)
  • a2f125e4a — fix(llm): a Lemonade server below the version floor is actually reported (#4632)
  • 4176d8682 — fix: shell and MCP children drop GAIA internal credentials; add GAIA_NO_DOTENV (#4635)
  • 9ac4cb87f — fix(eval): gh stand-ins answer the sign-in check github-triage runs first (#4633)
  • f4f409a2a — docs(skills): correct stale agents, commands and claims in skill files (#4640)
  • 6620d5d54 — fix(eval): give gaia_* scenarios their staged files, keep answers out of reach (#4641)
  • 427ab8f14 — ci(init): run gaia init from a cold state on Strix Halo hardware (#4639)
  • a699b25ba — ci(sd): fail the SD lane when init or the SD server fails (#4637)
  • a3127cdab — ci(heartbeat): monitor the xsj-dispatch pool, not fixed runner names (#4638)
  • 6c9d2f597 — docs(skills): add pr-backlog-triage, the parallel-subagent PR audit pattern
  • 595e86f7b — fix(agent): a scratchpad table the turn built stays in the request's scope (#4650)
  • 3b90366c8 — fix(tests): match the flagship's code-search index-root pin to #4647 (#4661)
  • a5786ee4e — fix(chat): stop abandoning request_user_input before the user can answer (#4645)
  • b4113943b — fix(skills): load the coding skill where only python is on PATH (#4643)
  • 3cbfcd096 — fix(memory): warn when a memory is saved without a search vector (#4646)
  • 638a89ce0 — fix(rag): summarize each section on its own, and stop when abandoned (#4648)
  • 3f28709ed — fix(code-index): stop an abandoned index build instead of racing the next one (#4644)
  • e7e5ad279 — fix(tools): expand ~ in the data, file-info, browse and grep tools (#4642)
  • 26545d552 — fix(gaia): start code search in a folder the chat can reach (#4647)
  • 731950926 — ci: remove workflows nothing runs (#4651)
  • 77743ea0a — ci(swebench): report tokens and estimated cost in the job summary (#4649)
  • 4a7595338 — fix(lemonade): stop telling gaia init users Lemonade is not installed (#4572)
  • cb588159d — fix(agent): a file saved where the user said is not reported missing (#4568)
  • 27e66cecc — fix(installer): stop warning Windows users about a UAC prompt that never comes (#4577)
  • 23f8687a4 — fix(tools): expand ~ in file and document tool paths (#4576)
  • 40aef707f — fix(init): show model downloads live and say why one failed (#4564)
  • 191ba6bbd — docs(website): say which tool calls ask first, not every one (#4563)
  • 162c645b6 — feat(tui): a fresh session opens on a few things to try (#4578)
  • c8a226356 — fix(ui): onboarding says Google needs setup, not which env vars to set (#4573)
  • 3d72d3cbb — fix(tools): a folder listing says "1 file", not "1 files" (#4567)
  • 23acda6c8 — fix(lemonade): probe a pid by the real OS, not platform.system() (#4570)
  • 1278382c9 — fix(eval): point the judge's Agent UI tools at --backend, not port 4200 (#4581)
  • 3c074ba2c — feat(security): ask before denying a path outside the session's scope (#4579)
  • 2fe7cbf14 — fix(tools): find_files finds a file by the words in its name (#4569)
  • a6c9c18b7 — perf(lemonade): run the embedder on CPU instead of slowing every model (#4512)
  • 4e4e04dee — fix(eval): stop a task's checkout replacing packages GAIA imports (#4515)
  • e0c605d31 — ci(eval): stage the gaia_mcp stub servers in the flagship scenario lanes (#4506)
  • 842d0147d — fix(ci): unbreak the Windows and macOS unit-test smoke jobs on every PR (#4562)
  • 7ff8642fb — fix(eval): keep the host's installed packages out of SWE-bench runs (#4561)
  • e55a313ba — chore(deps): bump Lemonade Server to v2026.40.0 (#4541)
  • c76002a28 — fix(tools): writing Python that will not parse says so in the write's result (#4558)
  • d6869d35b — fix(tools): a spreadsheet's header is found below its title rows (#4560)
  • 15a2c9bc7 — fix(tui): Python runners and CLI setup get honest confirmation badges (#4542)
  • e737783b9 — fix(eval): a full-access run lifts the shell guardrails, as Claude Code's does (#4555)
  • 2f5de5b68 — fix(tui): a one-step turn's stats read '1 step · 1 tool' (#4544)
  • 963374b6e — fix(webui): reloading a chat's link reopens that chat (#4551)
  • a66429b65 — fix(webui): hide the no-op 'Verification: unverified' line under chat answers (#4549)
  • 1aeddb7c3 — fix(gaia): /model lists only models that chat (#4547)
  • 63fda4028 — feat(agent): a long tool call shows its progress while it streams (#4557)
  • 8113e868c — fix(ui): a cloud model is never reported as having too small a context (#4548)
  • 0e3020bcb — fix(tools): a data summary says per-category totals need group_by (#4545)
  • 1fe1cf577 — test(lemonade): assert what the foreign-port refusal guarantees (#4553)
  • af5fd0f29 — test(daemon): expect taskkill in the Windows stray-process error (#4552)
  • 585578b95 — fix(eval,agent): one eval at a time on Windows; keep the PC awake while GAIA works (#4511)
  • 34362512c — fix(filesystem): stop re-indexing unchanged folders on Windows (#4504)
  • 4b2a629e8 — fix(daemon): keep the daemon inside GAIA_HOME (#4513)
  • 315fac21a — test(eval): stage the MCP stub around gaia_mcp only, and clean it up (#4507)
  • b350a99ef — fix(tui): stop the AI provider screen reporting faults that aren't there (#4505)
  • 67be7ebe7 — fix(ui): stop the chat pre-flight evicting models every turn (#4510)
  • e9d2bb9e7 — fix(eval): grade SWE-bench from Linux when the host is Windows (#4521)
  • 9fe14e7c9 — fix(shell): keep backslashes in a Windows cd target (#4518)
  • 1fe8255ea — fix(eval): stop counting URL test data as internet use (#4519)
  • 1da1e7cb0 — fix(cli): keep gaia chat stdout to the answer (#4522)
  • f26b29b36 — feat(eval): record each model call's latency and prefill/decode timing (#4514)
  • 8eee006fa — feat(tools): read_file reads by line range (#4525)
  • 86d5c0282 — fix(llm): stop forcing temperature 0.1 on cloud reasoning models (#4524)
  • 41db56875 — fix(hub): order prereleases numerically and ignore build metadata (#4517)
  • a0f36b39a — perf(agent): build the code index on first search, not at task start (#4538)
  • f88d364ea — feat(tools): an edit to a Python function lists the project code it reaches (#4535)
  • 4845714ac — fix(shell): accept cmd.exe's 2>nul and cd /d (#4526)
  • 8ae15a6ad — fix(agent): count shell failure streaks per program, not per tool (#4527)
  • e9198d1bc — feat(eval): pick a seeded SWE-bench sample with --sample N (#4529)
  • da2d3a729 — feat(agent): a failed call carries what the task has already learned (#4536)
  • f79946b98 — fix(shell): point a refused python -c at run_python (#4528)
  • c335efb6f — ci(eval): run the flagship on fixed SWE-bench subsets on PRs and nightly (#4539)
  • 6003c7dd2 — ci: move self-hosted jobs to the xsj-dispatch runner pool (#4534)
  • d4bb243a8 — fix(lint): suppress the abstract-method false positive on two intentional mixins
  • c5df3128f — fix(agent): end the turn when the request is done (#4480)
  • 675b5222a — test(eval): gaia_email — offline scenarios for the flagship's mailbox tools (#4496)
  • a6c09abca — fix(tui): remember the chosen model and restore it on the next launch (#4497)
  • 011588ff7 — fix(windows): stop treating a null stdin as a person at a terminal (#4499)
  • 313d02e1f — fix(agent): catch a test claim that follows advice in a heading (#4500)
  • 30b9fe607 — fix(eval): handshake MCP servers in preflight; stop on repeated INFRA_ERROR (#4498)
  • f76ff0d9d — fix(tui): display fixes across chat and secondary screens (#4494)
  • 5200f5ba8 — test(eval): add gaia_mcp scenarios backed by a stub MCP server (#4481)
  • 4222072b4 — test(eval): add CI-safe gaia_media scenarios for transcription and vision (#4482)
  • 65a775678 — fix(lemonade): start Lemonade with the Vulkan coopmat workaround and say why memory failed (#4487)
  • 230addd29 — fix(embeddings): remove the retired nomic embedder; re-embed legacy memory (#4489)
  • 016191e60 — feat(tui): get the model ready before the chat opens (#4488)
  • 234d6daa3 — fix(tui): hide the "still working" hint while a prompt waits on the user (#4493)
  • f295bdc6c — fix(providers): keep a Fireworks/AMD key across TUI instances and restarts (#4485)
  • 0bce786cb — docs(eval): correct eval docs that contradict the code (#4483)
  • 393dfb894 — test(eval): add gaia_voice scenarios for how the agent talks (#4486)
  • 1b972a7a9 — fix(tui): one short row per step, drag-select, and resize-safe frames (#4457)
  • 06a7d7cd3 — fix(tui): first-run setup as steps; "ready" only once the models load (#4459)
  • 4e38c4ffb — feat(gaia): a browser, a smaller picker, and a fast path — the flagship's tool surface (#4407)
  • f6a1d326e — fix(lemonade): keep cloud providers across embedded restarts (#4469)
  • 34de16194 — ci(eval): measure gaia_* lanes as intended and gate nightly suites on repeated runs (#4470)
  • 18ed19878 — docs(plans): eval design & hillclimbing plan (#4478)
  • b02b1bbf5 — Fix timeouts for chained shell commands (#4463)
  • a4659a426 — fix(eval): make the gh stand-in answer argv calls on Windows (#4458)
  • 4adb360ce — docs(plans): adaptive recovery — stop, ask and remember when a tool reports a blocker (#4471)
  • fdfd44e93 — fix(gaia): avoid self-shadowing bundled skills in frozen builds (#4467)
  • df799e24b — fix(test): stop the disconnect race in test_client_disconnect_cancels_the_agent (#4421)
  • c54ebdf0b — feat(gaia): add developer-only coding-agent MCP handoffs (#3911)
  • 4d883aa3a — fix(agent): stop /model calling a cloud model local in the switch message (#4365)
  • 86fb455b1 — feat(agent): evict stale tool results from the sent context, price-gated (#4465)
  • f4924e35a — fix(email): stop mail search settling for the wrong messages (#4159)
  • 2c21f486e — Honor GAIA_HOME for cache chat and index write paths (#4381)
  • cad93d0fc — fix(npm): report failed sidecar cleanup (#4419)
  • 58e9bfa3f — fix(shell): full access runs anything inside the workspace, heredocs included (#3995)
  • 9a3054455 — feat(tui): show the sourced measurement behind each ranked Fireworks pick (#4414)
  • cb92072bf — fix(uninstall): --purge removes installer binaries, PATH edits and daemon state (#4413)
  • 296c91652 — fix(agent): resolve symlinked directories when keying write evidence on Windows (#4417)
  • 83e53b7f3 — ci(unit): give the Linux unit-test job a 45-minute budget
  • 322cb9f28 — test(cli): drop 7 stale entries from the removed-Lemonade-CLI pending list
  • c064e5e8a — docs(cli): name the swebench capture flag --no-evaluate (#4418)
  • cd46ce73b — docs(cli): document gaia eval tasks swebench (#4416)
  • 36fad14a7 — fix(ui): label the shell-session and CLI-setup tools in the sidecar relay
  • 6f9383fec — fix(agent): restore run_python's tool-redirect guidance, refresh doc-profile pins
  • ff1e216ee — fix(agent): restore single-period punctuation on the Lemonade start hint
  • 21b1239f6 — chore(deps-dev): bump the agent-ui-dependencies group across 1 directory with 5 updates (#4415)
  • c1bb8a18c — fix(tui): stop treating leftover config.json as proof of a working install (#3870)
  • 722f82191 — fix(connectors): persist the scopes Google actually granted on reconnect (#3865)
  • cb50e77ce — fix(email): make --trace write a real trace on the daemon-relay path (#3346)
  • 63c6915f7 — fix(email): stop detect_calendar_conflicts reporting a busy slot as free (#3611)
  • 30d87b872 — fix(agent-ui): make the Memory Dashboard beta confirmation a real dialog (#4288)
  • 9491e863d — chore(deps): bump the github-actions group across 1 directory with 2 updates (#4404)
  • 7440e01a1 — chore(deps): bump the root-npm-dependencies group across 1 directory with 2 updates (#4402)
  • b91b8e8c7 — fix(memory): record denied tool calls as unsuccessful (#4412)
  • 5895dd467 — fix(tests): resolve expected GAIA_HOME path in uninstall test
  • 6d0d0c4d7 — fix(cli): remove a redundant local re-import in _serve_gateway
  • 143c697f2 — feat(memory): take extraction off the answer path, and keep lessons in their workspace (#4406)
  • 551fc36ea — fix(agent): a corrected test claim must not cost the user the whole answer (#4401)
  • e00d290fe — feat(eval): run and grade SWE-bench Verified through the agent benchmarks (#4400)
  • 3afaf2e1e — feat(eval): reproducible harness × model benchmarks (Claude Code harness, TheRock tier, metering) (#4335)
  • 4bc33c926 — ci(test): run the hub-wheel suites and fail on unlisted file skips (#4353)
  • 2927f1a13 — feat(shell): one shell story — persistent session, confirm instead of refuse, one name for full access (#4408)
  • 228ee5b81 — feat(agent): index large tool results by their structure (#4379)
  • 6c2dfcb6c — feat(memory): surface memories relevant to each request, with their age (#4061)
  • 2f08108f4 — feat(agent): keep the model's reasoning and send it back within a request (#4055)
  • d7c06557a — fix(agent): offer the shell whenever the session works in a code repository (#4376)
  • 9cbd7562a — fix(agent): continue a reply cut off by the token limit instead of ending on it (#4054)
  • cf147c82f — feat(memory): keep what fixed a failure as a lesson for the workspace (#4066)
  • e633b0e88 — fix(skills): load the coding skill when pytest is only in a virtualenv (#3791)

Full Changelog: v0.24.1...v0.25.0


Installing this release candidate

Desktop app

Download the installer for your platform from the assets below:

  • Windows — gaia-agent-ui-0.25.0-rc.2-x64-setup.exe
  • macOS — gaia-agent-ui-0.25.0-rc.2-arm64.dmg (Apple Silicon only)
  • Linux — gaia-agent-ui-0.25.0-rc.2-amd64.deb (Debian/Ubuntu) or gaia-agent-ui-0.25.0-rc.2-x86_64.AppImage (any distro)

The terminal hub is attached as standalone binaries (gaia-<os>-<arch>, checksums in gaia-tui-SHA256SUMS.txt). The one-step Windows setup and the terminal's .pkg/.deb/.rpm packages ship with the final release.

Python CLI

pip install --pre amd-gaia            # newest pre-release
pip install amd-gaia==0.25.0rc2     # exactly this one

npm

npm install -g @amd-gaia/agent-ui@next

Found a problem? Open an issue and mention v0.25.0-rc2.