> ## Documentation Index
> Fetch the complete documentation index at: https://amd-gaia.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# v0.25.0

> A larger local default model where the GPU holds it, a single-chat Agent UI that sets itself up, a much smaller install, and setup that works behind corporate proxies.

# 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. (PR [#4520](https://github.com/amd/gaia/pull/4520))
* **`gaia talk` transcribes and speaks through Lemonade** (Whisper and `kokoro-v1`), and stops with the reason if Lemonade is down. The `[audio]` extra is gone. (PR [#4665](https://github.com/amd/gaia/pull/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. (PR [#4509](https://github.com/amd/gaia/pull/4509))
* **The retired nomic embedder is removed** — memory saved with it is re-embedded on first start. (PR [#4489](https://github.com/amd/gaia/pull/4489))
* **Indexed documents are re-indexed once** — the first query after upgrading rebuilds the document cache. (PR [#4624](https://github.com/amd/gaia/pull/4624))
* **A skill that asks for more than its tier allows no longer loads**, including one already on disk; the refusal gives the reason. (PR [#4849](https://github.com/amd/gaia/pull/4849))

## What's New

* **The Agent UI opens straight to a chat and sets itself up** — a fresh install runs the TUI's setup steps in the window, with provider, model and permission settings and revocable "always allow" grants. (PR [#4509](https://github.com/amd/gaia/pull/4509))
* **A new chat answers its first message sooner** — its prompt is cached as the chat opens, cutting a first "hello" on Qwen3.6 from \~43 s to \~21 s. (PR [#5041](https://github.com/amd/gaia/pull/5041))
* **Long Agent UI turns keep running while they make progress.** A turn stops only after a stretch with no progress (75 minutes by default, set in seconds with `GAIA_STREAM_TIMEOUT`). (PRs [#4916](https://github.com/amd/gaia/pull/4916), [#5200](https://github.com/amd/gaia/pull/5200))
* **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. Qwen3.8 Flash Next is opt-in on 128 GB Strix Halo. (PRs [#4479](https://github.com/amd/gaia/pull/4479), [#4670](https://github.com/amd/gaia/pull/4670), [#4671](https://github.com/amd/gaia/pull/4671), [#4658](https://github.com/amd/gaia/pull/4658), [#4655](https://github.com/amd/gaia/pull/4655))
* **A much smaller install** — PyTorch, transformers and accelerate are gone; the desktop app's Python environment drops from \~0.9 GB to \~0.1 GB on Windows. (PRs [#4666](https://github.com/amd/gaia/pull/4666), [#4621](https://github.com/amd/gaia/pull/4621), [#4665](https://github.com/amd/gaia/pull/4665))
* **One Windows installer for the desktop app and the terminal**, with a GAIA Windows Terminal profile. (PRs [#4720](https://github.com/amd/gaia/pull/4720), [#4707](https://github.com/amd/gaia/pull/4707))
* **Setup works behind a TLS-inspecting corporate proxy** — GAIA, `install.ps1` and the desktop app's first-run setup trust the OS certificate store, where IT installs the proxy's certificate. (PRs [#4952](https://github.com/amd/gaia/pull/4952), [#4937](https://github.com/amd/gaia/pull/4937), [#4938](https://github.com/amd/gaia/pull/4938))
* **Setup installs GAIA agent 0.3.0, built from this release** — the Agent Hub's previous build predated tool approvals. (PRs [#4939](https://github.com/amd/gaia/pull/4939), [#4940](https://github.com/amd/gaia/pull/4940), [#4941](https://github.com/amd/gaia/pull/4941))
* **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](https://github.com/amd/gaia/pull/4460), [#4461](https://github.com/amd/gaia/pull/4461))
* **Answers are checked against what the tools actually did**, and a short note appears only when work isn't confirmed. (PRs [#4532](https://github.com/amd/gaia/pull/4532), [#4501](https://github.com/amd/gaia/pull/4501), [#4508](https://github.com/amd/gaia/pull/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](https://github.com/amd/gaia/pull/4408))
* **Memory surfaces what's relevant to each request**, keeps what fixed a failure as a lesson, and saves after the answer instead of before it. (PRs [#4061](https://github.com/amd/gaia/pull/4061), [#4066](https://github.com/amd/gaia/pull/4066), [#4406](https://github.com/amd/gaia/pull/4406))
* **Long chats say when older turns leave the model's view**, in the Agent UI and the TUI. (PR [#5038](https://github.com/amd/gaia/pull/5038))
* **Document and memory indexing runs on the GPU** — freeing \~11 CPU cores on Strix Halo. (PR [#5051](https://github.com/amd/gaia/pull/5051))
* **DeepSeek V4.1 Flash is the default cloud model** on the AMD LLM Gateway and Fireworks. (PR [#4879](https://github.com/amd/gaia/pull/4879))

## Bug Fixes

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

### Agent UI

* **Tool approvals work with the Hub-installed GAIA agent** — gated tools get Allow once / Deny instead of a "Nothing was executed" card that hung the run, a chat's Full access mode reaches the agent, and answers to its mid-run questions are accepted. (PRs [#4943](https://github.com/amd/gaia/pull/4943), [#4945](https://github.com/amd/gaia/pull/4945), [#4944](https://github.com/amd/gaia/pull/4944))
* **Documents reach the agent** — files attached to a chat or with the composer's + button, and documents indexed with no chat open, which now go into the next chat. (PRs [#4974](https://github.com/amd/gaia/pull/4974), [#4955](https://github.com/amd/gaia/pull/4955), [#5001](https://github.com/amd/gaia/pull/5001))
* **Follow-up questions keep the conversation's context** with the Hub-installed GAIA agent. (PR [#4926](https://github.com/amd/gaia/pull/4926))
* **A chat is named once, from its first exchange**, instead of after its latest question, and is never named "safe" by a safety-classifier model. (PRs [#5033](https://github.com/amd/gaia/pull/5033), [#5037](https://github.com/amd/gaia/pull/5037))
* **A message sent right after Stop is answered** instead of refused until the stopped answer would have finished. (PR [#4982](https://github.com/amd/gaia/pull/4982))
* **An agent installed while the Agent UI is running is picked up** without restarting the server. (PR [#4935](https://github.com/amd/gaia/pull/4935))
* **One unreachable MCP server no longer stalls every message** by 10 seconds. (PR [#4896](https://github.com/amd/gaia/pull/4896))
* **A bare-number answer shows the number**, the status line counts seconds, and a failed or denied tool step is labelled failed. (PRs [#5034](https://github.com/amd/gaia/pull/5034), [#4995](https://github.com/amd/gaia/pull/4995), [#5005](https://github.com/amd/gaia/pull/5005), [#5008](https://github.com/amd/gaia/pull/5008))
* **A failed turn shows its error without a click**, and answers keep streaming in a chat that had a non-streaming turn. (PRs [#4957](https://github.com/amd/gaia/pull/4957), [#4897](https://github.com/amd/gaia/pull/4897))
* **`gaia-ui` exits with the backend's error when the backend dies**, instead of pointing at a page nothing serves. (PR [#4933](https://github.com/amd/gaia/pull/4933))
* **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](https://github.com/amd/gaia/pull/4711), [#4550](https://github.com/amd/gaia/pull/4550))
* **Enter can't approve a permission prompt**, and prompts wait 10 minutes before timing out. (PRs [#4700](https://github.com/amd/gaia/pull/4700), [#4699](https://github.com/amd/gaia/pull/4699))
* **Stopping a run keeps the turn and its steps visible.** (PR [#4743](https://github.com/amd/gaia/pull/4743))

### Terminal

* **Setup step 1 installs Lemonade only**, retries included, so you can pick a cloud provider before any model downloads. (PRs [#4959](https://github.com/amd/gaia/pull/4959), [#4993](https://github.com/amd/gaia/pull/4993))
* **The setup gate starts a stopped daemon and agent itself**, and gives a kept cloud key back to Lemonade after a reboot instead of asking you to reconnect. (PRs [#4975](https://github.com/amd/gaia/pull/4975), [#4958](https://github.com/amd/gaia/pull/4958))
* **A cloud chat no longer needs the local chat model downloaded** to get past the setup gate. (PR [#4967](https://github.com/amd/gaia/pull/4967))
* **`/model` and the provider picker switch models** instead of sending the choice to the agent as a chat message. (PR [#4976](https://github.com/amd/gaia/pull/4976))
* **A mistyped provider key no longer replaces one that works**, and `/provider` keeps working after GAIA's Lemonade restarts. (PRs [#4994](https://github.com/amd/gaia/pull/4994), [#5002](https://github.com/amd/gaia/pull/5002), [#4997](https://github.com/amd/gaia/pull/4997))
* **Quitting right after an answer keeps that turn's memories** — the TUI waits for them to be saved. (PR [#5046](https://github.com/amd/gaia/pull/5046))
* **Windows remedies work in PowerShell** — the Lemonade start hint and the `LEMONADE_SERVER_PATH` fix give Command Prompt and PowerShell forms. (PRs [#5045](https://github.com/amd/gaia/pull/5045), [#5047](https://github.com/amd/gaia/pull/5047))
* **Edit prompts keep their line breaks**, and an answer's time no longer counts the time you spent deciding. (PR [#5036](https://github.com/amd/gaia/pull/5036))
* **`gaia llm "hello"` answers on Qwen3.6** instead of thinking until its token cap. (PR [#4920](https://github.com/amd/gaia/pull/4920))
* **The TUI remembers the chosen model** across restarts and agent-process restarts. (PRs [#4497](https://github.com/amd/gaia/pull/4497), [#4710](https://github.com/amd/gaia/pull/4710))
* **`gaia uninstall --purge` removes installer binaries, PATH edits and daemon state.** (PR [#4413](https://github.com/amd/gaia/pull/4413))

### Install and setup

* **A 16 GB PC no longer runs out of memory on the desktop app's first launch** — GAIA checks free memory before it loads a model, shrinks the context window to fit (to no less than 32K), and otherwise says how much memory it needs and what to close. First launch runs setup once, and PCs under 24 GB of RAM load the model with the first message. (PR [#5117](https://github.com/amd/gaia/pull/5117))
* **A `default_model` you chose is downloaded instead of Gemma**, which image questions now fetch the first time you ask one, and **an interrupted desktop install finishes setup on the next launch** instead of reporting GAIA as installed. (PR [#5117](https://github.com/amd/gaia/pull/5117))
* **No surprise model downloads** — `gaia init --skip-models` downloads nothing and says the chat model was skipped, the Agent UI and the GAIA agent don't download a skipped model when they start, and cloud chats work without it. (PRs [#4919](https://github.com/amd/gaia/pull/4919), [#4964](https://github.com/amd/gaia/pull/4964), [#4956](https://github.com/amd/gaia/pull/4956), [#4961](https://github.com/amd/gaia/pull/4961), [#4960](https://github.com/amd/gaia/pull/4960))
* **`gaia init` shows each model's size and the total before asking to continue.** (PR [#4922](https://github.com/amd/gaia/pull/4922))
* **Setup reports failure when the GAIA agent can't be installed from the Agent Hub**, naming the cause, instead of saying GAIA is ready. (PR [#4950](https://github.com/amd/gaia/pull/4950))
* **The first daemon start on a fresh install no longer times out.** (PR [#4951](https://github.com/amd/gaia/pull/4951))
* **An older GAIA is only offered agent versions it can run.** (PR [#4948](https://github.com/amd/gaia/pull/4948))
* **`pip install --pre` gives a GAIA that can chat** — httpx and APScheduler are capped below their next major versions. (PRs [#4921](https://github.com/amd/gaia/pull/4921), [#4925](https://github.com/amd/gaia/pull/4925))
* **Background processes on Windows no longer open blank console windows.** (PR [#5018](https://github.com/amd/gaia/pull/5018))
* **`gaia init` fails when model verification fails**, shows downloads live, and no longer hangs while Lemonade hashes a large model. (PRs [#4620](https://github.com/amd/gaia/pull/4620), [#4564](https://github.com/amd/gaia/pull/4564), [#4673](https://github.com/amd/gaia/pull/4673))
* **`gaia init` adds a profile's extras without reinstalling GAIA**, which failed on Windows while `gaia.exe` was running. (PR [#4672](https://github.com/amd/gaia/pull/4672))
* **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. (PR [#4674](https://github.com/amd/gaia/pull/4674))

### Agent and models

* **Chats survive a Lemonade restart** — an open chat follows GAIA's Lemonade to its new port and gives it back the cloud key, and cloud keys go only to GAIA's own Lemonade or the one in `LEMONADE_BASE_URL`. (PRs [#4977](https://github.com/amd/gaia/pull/4977), [#4981](https://github.com/amd/gaia/pull/4981), [#4999](https://github.com/amd/gaia/pull/4999), [#5000](https://github.com/amd/gaia/pull/5000))
* **The agent's shell tool now validates every command in a pipeline.** (PR [#5048](https://github.com/amd/gaia/pull/5048))
* **Every file tool checks the allowed-folders rule**, and paths inside an inline shell script are checked one by one. (PRs [#4656](https://github.com/amd/gaia/pull/4656), [#4758](https://github.com/amd/gaia/pull/4758))
* **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](https://github.com/amd/gaia/pull/4848), [#4847](https://github.com/amd/gaia/pull/4847))
* **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](https://github.com/amd/gaia/pull/4635), [#4659](https://github.com/amd/gaia/pull/4659))
* **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](https://github.com/amd/gaia/pull/4655))
* **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](https://github.com/amd/gaia/pull/4754), [#4679](https://github.com/amd/gaia/pull/4679), [#4734](https://github.com/amd/gaia/pull/4734))
* **Document answers cite the right document and page**, and every chunk is embedded whole instead of its first 1,200 characters. (PRs [#4688](https://github.com/amd/gaia/pull/4688), [#4723](https://github.com/amd/gaia/pull/4723))
* **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](https://github.com/amd/gaia/pull/4657), [#4627](https://github.com/amd/gaia/pull/4627))
* **Local chat stays cached across turns** — the system prompt is fixed and side requests no longer evict the conversation. (PRs [#4698](https://github.com/amd/gaia/pull/4698), [#4543](https://github.com/amd/gaia/pull/4543))
* **A cloud model selection never preloads a local model**, and cloud models no longer get llama.cpp-only fields. (PRs [#4757](https://github.com/amd/gaia/pull/4757), [#4709](https://github.com/amd/gaia/pull/4709))
* **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](https://github.com/amd/gaia/pull/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](https://github.com/amd/gaia/pull/4588))
* **A meeting or document summary is never cut off mid-sentence** — a thinking model used to spend the summary's output budget reasoning. (PR [#4827](https://github.com/amd/gaia/pull/4827))
* **"What can you do?" gets an answer** instead of an attempt to generate an image of the question. (PR [#4809](https://github.com/amd/gaia/pull/4809))
* **`gaia connectors connect google --grant-agent installed:gaia` works** — it now asks for read-only Gmail and grants exactly that. (PR [#4859](https://github.com/amd/gaia/pull/4859))
* **A "no" to creating a folder also covers writing into it.** (PR [#4857](https://github.com/amd/gaia/pull/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](https://github.com/amd/gaia/pull/4849))
* **Memory off and private chats apply to scheduled and background runs too.** (PRs [#4842](https://github.com/amd/gaia/pull/4842), [#4821](https://github.com/amd/gaia/pull/4821))
* **Memory stops false apologies and reusing deleted values**, saves "remember this" requests, and skips loading the embedder when memory is off. (PRs [#4708](https://github.com/amd/gaia/pull/4708), [#4756](https://github.com/amd/gaia/pull/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](https://github.com/amd/gaia/pull/4054), [#4556](https://github.com/amd/gaia/pull/4556))
* **The GPU no longer sits at 100% on ROCm** — with llama.cpp on ROCm, the embedding model runs on the CPU, and Settings → Model server says so. (PR [#5274](https://github.com/amd/gaia/pull/5274))
* **GAIA no longer saves over the file you asked it to read from** — "save the items in X as Y" writes Y, not X. (PR [#5167](https://github.com/amd/gaia/pull/5167))
* **Pulling every item out of a document outside your folders asks first** instead of refusing. (PR [#5218](https://github.com/amd/gaia/pull/5218))
* **Fetch errors name the page you asked for**, and web addresses in answers no longer turn into broken folder links. (PR [#5238](https://github.com/amd/gaia/pull/5238))
* **The Agent UI fits better** — wide tables scroll, composer menus stay inside the window, the model-wait hint stays quiet while a tool runs, and the Memory page shows chat titles. (PRs [#5193](https://github.com/amd/gaia/pull/5193), [#5196](https://github.com/amd/gaia/pull/5196), [#5192](https://github.com/amd/gaia/pull/5192), [#5194](https://github.com/amd/gaia/pull/5194))
* **Chat models also labeled audio appear in the model picker.** (PR [#5140](https://github.com/amd/gaia/pull/5140))
* **The Linux tray shows the GAIA logo** instead of a red square. (PR [#5273](https://github.com/amd/gaia/pull/5273))
* **The Windows setup links to the docs and offers to open each app it installed.** (PRs [#5207](https://github.com/amd/gaia/pull/5207), [#5208](https://github.com/amd/gaia/pull/5208))
* **`gaia.log` stays bounded** — it rotates at 10 MB with three backups (`GAIA_LOG_MAX_MB`, `GAIA_LOG_BACKUPS`). (PRs [#4668](https://github.com/amd/gaia/pull/4668), [#4760](https://github.com/amd/gaia/pull/4760))

## Known Issues

* **Gemini models on the AMD LLM Gateway fail with the Hub-installed GAIA agent** — the Agent UI and the TUI's second and later sessions reply "Sorry, I ran into an unexpected problem"; pick another gateway model. Stop there also waits for the current model call to return. Fix in review: [#5006](https://github.com/amd/gaia/pull/5006).

## Contributors

Thanks to the community members who contributed to this release:

* [@itomek](https://github.com/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](https://github.com/amd/gaia/pull/4407), [#4408](https://github.com/amd/gaia/pull/4408), [#4406](https://github.com/amd/gaia/pull/4406), [#4465](https://github.com/amd/gaia/pull/4465), [#4414](https://github.com/amd/gaia/pull/4414), [#4413](https://github.com/amd/gaia/pull/4413))
* [@mikemikimike](https://github.com/mikemikimike) — chained shell command timeouts, bundled skills in frozen builds, and sidecar cleanup reporting (PRs [#4463](https://github.com/amd/gaia/pull/4463), [#4467](https://github.com/amd/gaia/pull/4467), [#4419](https://github.com/amd/gaia/pull/4419))
* [@madcow4242](https://github.com/madcow4242) — the `GAIA_STREAM_TIMEOUT` setting for long Agent UI turns (PR [#4916](https://github.com/amd/gaia/pull/4916))
* [@Hashim1999164](https://github.com/Hashim1999164) — honoring `GAIA_HOME` for cache, chat and index paths (PR [#4381](https://github.com/amd/gaia/pull/4381))
* [@krtadev](https://github.com/krtadev) — `~` expansion in file and document tool paths (PR [#4576](https://github.com/amd/gaia/pull/4576))
* [@aksh8b](https://github.com/aksh8b) — telling a broken agent install apart from a missing one, with a reinstall hint that works (PR [#4588](https://github.com/amd/gaia/pull/4588))
* [@Dev-next-gen](https://github.com/Dev-next-gen) — numeric prerelease ordering in the hub (PR [#4517](https://github.com/amd/gaia/pull/4517))
* [@vianmangal](https://github.com/vianmangal) — recording denied tool calls as unsuccessful in memory (PR [#4412](https://github.com/amd/gaia/pull/4412))
* [@GaetanVDB07](https://github.com/GaetanVDB07) — links to upstream credential setup guides for connectors (PR [#4669](https://github.com/amd/gaia/pull/4669))
* [@rradjabi](https://github.com/rradjabi) — moving self-hosted CI jobs to the xsj-dispatch runner pool (PR [#4534](https://github.com/amd/gaia/pull/4534))

## Full Changelog

**818 commits** since v0.24.1:

<details>
  <summary>Expand full changelog (818 commits)</summary>

  * `a9380f2bb` — docs(plans): context efficiency and graceful overflow plan (#5263)
  * `7a0d02eb0` — fix(daemon): tests stop the daemons they start, and a daemon exits when its home is gone (#5294)
  * `592a3b9bd` — fix(daemon): log how GAIA's model server exited when it stops unexpectedly (#5292)
  * `595446f57` — fix(eval): answer prompts and clean up after timed-out scenarios (#5309)
  * `bc249048c` — fix(ui): keep composer menus inside the window (#5196)
  * `53591176b` — ci(unit): run unit tests in parallel and drop quadratic per-test setup (#5161)
  * `ca5ca1bd0` — fix(lemonade): run the embedder on the CPU when llama.cpp uses ROCm (#5274)
  * `79c9e4d02` — fix(linux): show the GAIA logo in the tray instead of a red square (#5273)
  * `064e5bef4` — fix(web): show the requested URL in fetch errors, not host\@ip (#5238)
  * `72360ad4a` — fix(ui): label Memory dashboard conversations by chat title (#5194)
  * `f775de8e5` — fix(ui): model-wait hint skips running tools, survives repeated statuses (#5192)
  * `a4c2e3e20` — fix(ui): list chat models that are also labeled audio in the model picker (#5140)
  * `adf2e74ca` — fix(webui): show a visible scrollbar on wide answer tables (#5193)
  * `fdb2c9c6e` — fix(agent): extraction asks before reading a file outside the allowed folders (#5218)
  * `c8d5475d2` — fix(installer): finish page offers to open each installed app (#5208)
  * `f1e66ba54` — fix(installer): the setup's documentation link opens the docs, not the home page (#5207)
  * `04542d63c` — ci(eval): run each eval category on a fresh, empty GAIA home (#5202)
  * `23914f2d7` — docs(release): describe the Agent UI turn timeout as a no-progress limit (#5201)
  * `3a38894c6` — fix(ui): stop an Agent UI turn only when it makes no progress (#5200)
  * `6ca6e1661` — fix(permissions): shell commands that run scratch-folder code ask every time (#5176)
  * `5e23720d5` — fix(agent): never save over a source file; allow requested empty files (#5167)
  * `69e8fb475` — fix(permissions): scratch-folder scripts ask on every run, allow once only (#5168)
  * `5d9181a26` — fix(lemonade): restart on GAIA's port, timeout key, gaia llm errors (#5166)
  * `763d41f94` — test(tui): generous ceilings instead of tight deadlines for macOS -race flakes (#5164)
  * `ddb4a35d6` — fix(daemon): never stop GAIA's Lemonade while a process is using it (#5159)
  * `a5d37ee0d` — fix(agent): never replace a finished answer with a gate's report (#5156)
  * `4ff51a62b` — fix(agent): answer gates no longer misread plan steps or re-ask over file figures (#5158)
  * `1b15173ed` — ci(eval): run self-hosted evals only on release and RC tags (#5157)
  * `56d1abfec` — fix(tui): a confirmation timer only denies the prompt it was armed for (#5154)
  * `42d8a4f6f` — fix(tools): report a not-found existence probe as an answer, not a failure (#5150)
  * `fc06e70d2` — ci(eval): run the gaia\_\* eval with the venv's python, not PATH's (#5149)
  * `fe890eb21` — fix(lemonade): never change the setup of a Lemonade the user runs (#5141)
  * `debd8706c` — fix: stream JSON answers again and repair main CI (#5147)
  * `e00538e68` — fix(ui): honest Agent UI states for expired questions, stalls and missing models (#5139)
  * `4c02ff144` — fix(ui): run Agent UI schedules in the user's local time zone (#5137)
  * `9e2ce8142` — fix(llm): abandoned model-stream readers exit on every OS (#5138)
  * `4a7da49f7` — feat(mcp): drive Agent UI turns unattended over MCP (#5132)
  * `360468089` — fix(ui): hold native tool-call markup and long calls out of the chat (#5131)
  * `481aebc56` — fix(config): MCP server list and agents folder follow GAIA\_HOME (#5130)
  * `bcce28a71` — fix(webui): turn totals in the footer, agent step count, openable answer paths (#5129)
  * `c856f9835` — docs(claude): describe the free-memory check and the user-chosen default model (#5123)
  * `cb2e50e42` — style(ui): two blank lines before SSEOutputHandler (#5146)
  * `204d3a04e` — fix(ui): never stream the agent's JSON envelope into the chat (#5121)
  * `e3a0063ec` — fix(lint): clear pylint warnings failing main and keep lint output in CI logs (#5135)
  * `5546baf3a` — fix(chat): run run\_python in the scratch dir when the cwd is off-limits (#5019)
  * `ad6fb56b6` — fix(memory): hold memory extraction until the user is idle (#5016)
  * `85bb5273e` — fix(agent): stop truncating JSON answers at their first quote (#4973)
  * `eaf23e772` — feat(tui): ask where chat runs before the first-run model download (#5109)
  * `1ac126fe6` — feat(tui): select past the screen edge, copy any message or the whole chat (#5108)
  * `eb334768a` — fix(tui): rc12 header version, word delete, plan noise, error lines, token meter (#5095)
  * `61a3033dd` — feat(shell): ask the user instead of refusing shell commands (#5094)
  * `34d3cf81c` — fix(agent): let long Python jobs finish and stop abandoned ones cleanly (#5104)
  * `2a53bb9c2` — fix(agent): read failures that tools report in JSON strings (#5114)
  * `4f87d337b` — fix(tools): no silent success for RAG outages, failed email batches, frozen pip hints (#5113)
  * `e6a142f53` — fix(daemon): keep the model lease visible to the stream reader thread (#5134)
  * `fdd0bad26` — fix(ci): run the tool-failure honesty tests in the chat agent lane (#5133)
  * `a07d7801d` — fix(tools): report failed commands and external calls as errors (#5112)
  * `d9e541889` — fix(agent): read a few documents in full; never cut a web page silently (#5100)
  * `917dbd796` — fix(agent): check the figures in files the agent writes (#5110)
  * `0e6835d40` — fix(agent): stop false grounding re-asks on names and unit numbers (#5073)
  * `da5e07b34` — fix(gateway): record and surface a gateway model that answers 404 (#5107)
  * `6d453e156` — fix(llm): end and retry a model stream that stops sending (#5126)
  * `02b0955e5` — feat(llm): retry transient model-endpoint failures, and keep the run when they persist (#4867)
  * `13c90641b` — fix(agent): run DeepSeek DSML tool-call markup instead of answering with it (#5103)
  * `49e2b0df5` — fix(agent): keep finished work when scripts write outputs or streams cut off (#5128)
  * `5f74758df` — fix(agent): never run a plan step with placeholder arguments (#5099)
  * `c2ee1e1a9` — fix(lemonade): reuse the last port on Linux after a stop (#5125)
  * `20c379a05` — fix(agent): a plan-budget stop no longer counts as answering the request (#5096)
  * `48e0900fe` — fix(tests): get main's unit tests green after the #5115-#5120 batch (#5127)
  * `121851bca` — feat(agent): budget-aware turns deliver what they have before the step limit (#4865)
  * `6680c9ccc` — fix(gaia): one-line model notice, sourced RAG chunks, honest turn log (#5092)
  * `873f2ca46` — fix(agent): run\_python works in the frozen release agent (#5093)
  * `d813ae30c` — feat(security): GAIA\_ALLOWED\_PATHS narrows an agent's file scope per run (#5120)
  * `53a6f5741` — feat(lemonade): use the Lemonade you already run instead of a second one (#5119)
  * `702a9529a` — fix(lemonade): free GAIA's Lemonade when GAIA closes; keep its port (#5118)
  * `3edef3b04` — fix(llm): check free memory before a model load; set up once on first launch (#5117)
  * `8534b653c` — feat(ui,tui): show Lemonade's server and backend, and let users pick it (#5116)
  * `47a859c05` — fix(skills): let agents read a skill's reference files, and document them (#5115)
  * `71bed605f` — test(agent): guard that tool calls plus a plan run each step once (#5105)
  * `12ae918b6` — fix(website): pause control works with storage blocked and reads consistently (#5091)
  * `f92574cdc` — feat(website): AMD-brand redesign, warp-speed starfield, findable release candidates (#5078)
  * `91e13946d` — fix(version): stop the missing-metadata warning from polluting stdout (#5074)
  * `158dd432c` — fix(llm): cache the conversation history on the Claude provider (#5071)
  * `16ab41c69` — ci(unit): give the Linux unit job 60 minutes (#5057)
  * `fbd78e3c3` — fix(llm): stop telling a rejected key to try again in a moment (#4906)
  * `ff0f68170` — fix(llm): report a streamed cloud 429 as a rate limit (#4898)
  * `81e8667c4` — fix(agent): plan-step progress quotes the user, not the memory context (#4899)
  * `afbe1c874` — fix(init): npu profile installs the GAIA agent from the Agent Hub (#5056)
  * `d2e359f79` — docs(release): refresh v0.25.0 notes for the final (#5055)
  * `f58c1582a` — fix(eval): give code-retrieval queries the SWE-bench gold patch again (#5054)
  * `68eb509b5` — perf(lemonade): run the embedder on the GPU, with the CPU as a fallback (#5051)
  * `01ad0bc42` — test(eval): name the relay history window in the audit fixtures (#5053)
  * `86a5466f7` — fix(eval): read the renamed relay history window in the architecture audit (#5052)
  * `055b1d274` — fix(shell): validate every pipeline segment (#5048)
  * `d41ea8764` — fix(tui): provider panel restores a saved key when the daemon is down (#4908)
  * `5928f18f9` — feat(ui): make the streaming-turn timeout configurable via GAIA\_STREAM\_TIMEOUT (#4916)
  * `a49e16962` — feat(ui): prime a new chat's exact prompt before the first message (#5041)
  * `d2ecf8399` — fix(tui): give Windows shells a working LEMONADE\_SERVER\_PATH remedy (#5047)
  * `bfc8d88f6` — fix(lemonade): give the Windows start hint for PowerShell too (#5045)
  * `e888398e4` — fix(tui): save the last turn's memories before the agent exits on quit (#5046)
  * `5830d1acf` — feat(chat): tell the user when older turns leave the model's view (#5038)
  * `2a9f5bafe` — fix(ui): never let a safety classifier name a chat (#5037)
  * `ab889bcd2` — fix(windows): stop background processes from opening blank console windows (#5018)
  * `cb141bfdd` — fix(tui): keep line breaks in edit prompts and stop billing approval waits (#5036)
  * `a313a63ea` — fix(webui): show bare-number answers, live wait time, honest activity labels (#5034)
  * `73db85243` — ci(release): fail a final release whose flagship agent predates it (#4940)
  * `e28c9a948` — fix(ui): name a chat once instead of after its latest question (#5033)
  * `0bd0af103` — fix(gaia-agent): name /provider in the /model list's empty-provider line (#5017)
  * `08259943d` — fix(tui): clean up doubled Done, path backslashes, prompt quotes, slash menu (#5014)
  * `d5be24284` — fix(tui): tidy the first-launch restore and warm-up screens (#5013)
  * `2d99e6eb4` — fix(ci): classify a Claude session limit as quota exhausted (#5015)
  * `9fc819a0a` — fix(tui): drop a /gateway token that finds no models instead of saving it (#5007)
  * `d139ff317` — fix(shell): run Windows find/sort when called with /x switches (#4989)
  * `a75726fa2` — test(tui): stub the Slack probe once so live-UI tests stop racing (#4913)
  * `224d7bac4` — fix(website): open a doc's tab for ./SPEC.md links on hub agent pages (#5011)
  * `025c1cb03` — fix(lemonade): strip no\_fetch\_executables and write config atomically (#4990)
  * `ea3a6bdb2` — fix(lemonade): quote Windows env assignments in the start hint (#4991)
  * `2435ea701` — fix(tui): composer shows one cursor, and the control API reports cursor cells (#5012)
  * `89df6ef8a` — test(tui): install the setup-check stub once so live-UI tests stop racing (#4988)
  * `2bdc0d614` — fix(ui): show only this OS's ngrok install command in Mobile Access (#5010)
  * `f52ade24c` — fix(webui): close the library, file browser and mobile dialogs on Esc (#5009)
  * `d3c9353ad` — fix(webui): don't call a tool step that never finished done (#5008)
  * `5d2bd76b0` — fix(webui): label a failed or denied tool step as failed (#5005)
  * `4be63bc8e` — fix(webui): give the next chat the documents indexed with no chat open (#5001)
  * `0f2a7923d` — docs(tui): list /provider, /gateway and /slack in the command table (#5004)
  * `ca4c7bb99` — docs(tui): link the latest terminal binaries and an absolute AI providers page (#5003)
  * `ae93cdfcd` — fix(tui): follow GAIA's restarted Lemonade when reading providers (#5002)
  * `1683ce3ac` — fix(tui): send cloud keys only to GAIA's own or the chosen Lemonade (#5000)
  * `8f65038d1` — fix(tui): blame the model name, not the key, for an id a provider lacks (#4998)
  * `8df0f88ff` — fix(agent): report the Lemonade port the agent uses now in status pings (#4997)
  * `cd512d2ad` — fix(tui): put the kept provider key back when a typed one fails (#4994)
  * `6187953ca` — fix(tui): keep a retried setup step 1 from downloading the models (#4993)
  * `7bd1f7995` — fix(llm): keep cloud keys off the default port during Lemonade restarts (#4999)
  * `2721dceab` — fix(ui): show a failed or denied GAIA-agent tool step as failed (#4995)
  * `8cda4e21d` — fix(webui): name the GAIA agent's common tool steps (#4996)
  * `dabcec43e` — fix(ui): list the GAIA agent's skills in Settings when it is the Hub binary (#4983)
  * `a2344fd50` — docs: show an icon on the Code Index cards (#4987)
  * `1f33bea17` — fix(tui): open the model picker on the provider chat already uses (#4986)
  * `f974a6a47` — fix(agent): switch models on the port Lemonade restarted on (#4985)
  * `47a0a0a5b` — fix(llm): give a restarted Lemonade the kept cloud key mid-chat (#4981)
  * `b88cf0919` — fix(webui): say "1 chunk" in the document library, not "1 chunks" (#4984)
  * `bafafee6b` — fix(gaia): answer a message sent right after Stop instead of refusing it (#4982)
  * `d4ec34334` — test(ui): wait for the permission prompt, not just the armed approval (#4980)
  * `967eba149` — test: fail when a unit test imports a hub agent package unguarded (#4979)
  * `3b71c8ac5` — test(llm): skip the ChatAgent restart test where the chat package isn't installed (#4978)
  * `3211179bd` — fix(llm): follow the embedded Lemonade to its new port after a restart (#4977)
  * `0236fa64d` — fix(tui): switch models over the daemon relay instead of asking the agent (#4976)
  * `4d574d77f` — fix(tui): start a stopped daemon and agent from the setup gate (#4975)
  * `6df394d8f` — fix(ui): send a chat's attached documents to a relayed flagship (#4974)
  * `31b63566e` — fix(tui): stop reporting a failed model restore on every relayed launch (#4969)
  * `6e3eb1594` — fix(tui): don't title a first-run step "failed" in the details pane (#4972)
  * `9af2f29a6` — fix(tui): ask for folder access in words, not as allow\_path\_access (#4971)
  * `69e6c26eb` — fix(tui): don't demand the local chat model when chat runs in the cloud (#4967)
  * `b4fdb49c1` — fix(agents): stop warning that the installed GAIA agent has no agent.py (#4966)
  * `debdd3792` — fix(webui): stop the setup screen saying a model is missing after it downloads (#4965)
  * `e8a650ec9` — fix(init): say the chat model was skipped, and drop the gaia chat hint (#4964)
  * `ba11ae531` — fix(ui): hide local-model controls in Settings when the model is a cloud one (#4963)
  * `06f0c38c4` — fix(daemon): stop logging a credential-forward traceback every 5 minutes (#4962)
  * `1ace147ad` — fix(gaia): stop the agent downloading a skipped model when it starts (#4961)
  * `3d4f7aea7` — fix(ui): answer gateway chats when the local default model isn't downloaded (#4960)
  * `84489e22a` — fix(tui): hand back the kept cloud key before the gate says reconnect (#4958)
  * `595756ce1` — fix(tui): setup step 1 installs Lemonade only, no models (#4959)
  * `d388b7647` — fix(webui): show a failed turn's error without a click (#4957)
  * `cbff63a11` — fix(ui): don't download a model when the Agent UI starts (#4956)
  * `2ab94b31f` — fix(ui): let the agent open files attached in the composer (#4955)
  * `603bbd8ee` — fix(daemon): accept a release candidate's flagship version (#4954)
  * `6f4fbb5de` — test(ui): skip the relay-body test where the agent packages aren't installed (#4953)
  * `7969f83bf` — fix(tls): trust the OS certificate store for GAIA's HTTPS (#4952)
  * `af1b7a80d` — fix(daemon): first start no longer times out on a fresh install (#4951)
  * `f0a0f062d` — fix(init): fail setup when the GAIA agent can't be installed from the hub (#4950)
  * `521f7dc8c` — fix(hub): install and offer only agent versions this core can run (#4948)
  * `22ccad4d0` — feat(hub-worker): record min\_gaia\_version per published version (#4947)
  * `604a47c2f` — test(release): the RC Windows setup bundles its own flagship build (#4949)
  * `96480dfb3` — fix(ui): approve or deny a Hub-installed GAIA's gated tool from the Agent UI (#4943)
  * `1a7ba4266` — fix(ui): a relayed GAIA chat follows the chat's Full access mode (#4945)
  * `5c2348387` — fix(gaia-agent): accept the spec's `value` field when answering a question (#4944)
  * `8955a5742` — chore(gaia): bump the flagship agent to 0.3.0 for GAIA 0.25.0 (#4941)
  * `c6c10be1a` — ci(release): release candidates ship and install their own flagship agent (#4939)
  * `9d30a5cae` — fix(ci): switch Claude accounts when the primary is out of quota (#4942)
  * `b5b293962` — ci(release): attach the combined Windows setup to release-candidate pre-releases (#4934)
  * `ac0a0e06c` — fix(webui): setup keeps the cloud provider the user picked (#4929)
  * `1433e86cb` — fix(ui): don't report the embedding model as the wrong chat model (#4931)
  * `b26597e78` — fix(ui): reconnect the cloud provider after Lemonade restarts (#4928)
  * `688d03d82` — fix(ui): AMD gateway setup picks DeepSeek V4.1 Flash, not A-Z first (#4923)
  * `b3ba0c2be` — fix(ui): keep conversation context when the flagship runs as a sidecar (#4926)
  * `fd8b86bd1` — fix(ui): pick up an agent installed while the Agent UI is running (#4935)
  * `4b434a66e` — fix(deps): cap httpx below 1.0 and APScheduler below 4.0 (#4925)
  * `4fccfd01b` — fix(installer): install.ps1 works behind a TLS-inspecting proxy (#4938)
  * `7522f49db` — fix(webui): first-run backend install works behind a TLS-inspecting proxy (#4937)
  * `f83ea8ec5` — fix(webui): gaia-ui exits when its backend dies instead of waiting (#4933)
  * `a71f07f14` — fix(init): the flagship profile installs the daemon it needs (#4930)
  * `7aa47bb2e` — fix(init): show download size before gaia init asks to continue (#4922)
  * `5afe31225` — fix(llm): gaia llm answers instead of thinking until its token cap (#4920)
  * `6bed5c6b6` — fix(init): --skip-models no longer downloads the chat model (#4919)
  * `7a30a0c5b` — fix(tui): one-shot --query runs on the model the chat remembers (#4936)
  * `96197dbce` — fix(daemon): name the missing \[api] extras instead of "exited early" (#4932)
  * `19f222f82` — fix(daemon): recognise a daemon started through a Windows venv launcher (#4927)
  * `862641072` — fix(deps): keep httpx below 1.0 so --pre installs can chat (#4921)
  * `86d7e41fb` — docs: point Discord links at the public invite (#4918)
  * `36811bd76` — docs: make the getting-started Python examples run as written (#4917)
  * `55c555aca` — fix(tui): don't auto-start a local Lemonade for a remote LEMONADE\_BASE\_URL (#4912)
  * `8d1ca9ccb` — fix(tui): stop tests from starting the developer's real Lemonade (#4911)
  * `05fb50bf5` — fix(tui): provider row no longer calls a rejected key configured (#4907)
  * `b2e43072f` — test(llm): keep launch-dispatch tests off a dev box's GAIA Lemonade (#4910)
  * `0b3c66f54` — docs(tui): describe the permission prompt's real first line (#4905)
  * `8c98fef89` — test(tui): stop live-TUI tests from running the real gaia CLI (#4904)
  * `102727937` — fix(tui): esc on the setup gate's details pane closes the pane (#4903)
  * `8207bea83` — fix(webui): point RC users of gaia-ui at the next channel (#4902)
  * `d29dd3b94` — fix(webui): handle the mcp\_status stream event (#4901)
  * `fb9c92675` — fix(memory): keep extracted facts whose domain comes back as a list (#4900)
  * `22f93c657` — fix(ui): stream answers in a chat that had a non-streaming turn (#4897)
  * `91267ee1d` — fix(mcp): stop retrying a failed MCP server on every chat turn (#4896)
  * `095d8e430` — fix(ci): base a final's generated release notes on the previous final, not its RC (#4895)
  * `ddf55c4e1` — fix(ui): keep the package version out of the Agent UI schema snapshot (#4894)
  * `d783de7ea` — feat(website): move the release-candidate entry to the foot of the page (#4893)
  * `38da39906` — fix(agent): refuse a permission answer that arrives before its prompt (#4886)
  * `09028da37` — ci(claude): switch every Claude workflow to a second account when the first runs out (#4892)
  * `6c3bb5cf9` — feat(llm): make DeepSeek V4.1 Flash the default cloud model (#4879)
  * `bb061049f` — fix(tui): don't pass the setup gate with a cloud model GAIA can't reach (#4882)
  * `1162187d1` — fix(tui): connect to AMD's gateway with the header it accepts (#4881)
  * `68073eebf` — fix(tui): ignore an embedded Lemonade record whose server has died (#4880)
  * `f682f90d0` — fix(agents): the install hint names the tag a release candidate was cut from (#4868)
  * `d181deafc` — Release v0.25.0 (#4850)
  * `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)
  * `41d3cb3e5` — fix(memory): show memories saved under a context label (#4062)
  * `4a0a069dd` — chore(agents): raise the tool description budget to 500 chars
  * `6494a1cec` — fix(agents): verify completion and preserve exhaustive inventories (#4374)
  * `f45f621f4` — docs(plans): adaptive memory and nightly benchmark plans (#4392)
  * `d33ae5736` — fix(agent): answer from the work done when the loop guard stops (#4035)
  * `dc6b4500e` — fix(skills): a skill loaded mid-turn offers its tools on the next step (#4021)
  * `4a6863d65` — feat(skills): let the agent install and sign in to a skill's CLI (#3335)
  * `82bd56c56` — fix(agent): read jest, vitest, mocha, go and cargo test summaries as checks (#4387)
  * `4b96321ab` — fix(agent): failed tool calls no longer use up the retries for a malformed reply (#4031)
  * `f687b816b` — feat(daemon): start and supervise the local model server (#3122)
  * `762613030` — feat(ui): pin one design language across website, Agent UI, and TUI (#4186)
  * `e89162a8a` — fix(talk,ui): mic echo, dropped talk flags, server stdin hang (#3616)
  * `441670be6` — docs(eval): remove legacy eval commands removed in v0.18 (#4324)
  * `81d972f63` — feat(website): show live GitHub/npm stats and a release stream on the homepage (#4382)
  * `065bb810b` — fix(ci): clear pylint reimport/f-string errors and wire up a test lane
  * `2e0b6ab77` — test(webui): fail CI when the Agent UI's API types drift from the backend (#4345)
  * `c5027ad04` — fix(ui): bound the Agent UI file search and report truncation (#4354)
  * `6f140a462` — refactor(installer): unpack agent bundles through the shared safe extractor (#4342)
  * `ec9556608` — fix(llm): load an auto-downloaded model at GAIA's context size (#4336)
  * `8feac73f6` — fix(api): give gaia api the whole conversation and honour sampling settings (#4270)
  * `aa2d7fd24` — fix(email): reject --base-url instead of checking one server and using another (#4334)
  * `b989d3f2d` — fix(webui): persist agent settings across desktop app restarts (#4330)
  * `9492f63d6` — fix(ui): stop flagging Macs, Linux and Ryzen AI laptops as unsupported (#4325)
  * `8e012edad` — chore: delete dead and unimportable code, and test that every module imports (#4360)
  * `ce0e97f1a` — fix(email-npm): bound shutdown's wait after the forced kill (#4323)
  * `73b24d5e3` — fix(schedule): reject undeliverable sinks when a schedule is added (#4273)
  * `7b9057ede` — fix(rag): make LLM-based chunking terminate and fail loudly (#4262)
  * `3b95a0da5` — feat(lemonade): state GAIA's eviction policy instead of inheriting it (#4308)
  * `9daf94996` — docs(agent-ui): remove fictional /api/mcp/\* routes, document the rest of the API (#4340)
  * `a903cb63f` — fix(installer): keep a failed Windows install from closing the user's terminal (#4298)
  * `3c81159bb` — ci(lemonade): smoke-test Lemonade candidates before they become releases (#4306)
  * `71956ed30` — fix(ui): don't evict a session's agent while a turn is running on it (#4277)
  * `b879400f1` — fix(ui): keep a session busy until its timed-out worker thread exits (#4276)
  * `77cf8b158` — test(mcp): run the MCP client workflow tests offline in CI (#4350)
  * `0bdbe4dc8` — fix(ui): store uploads and managed documents under GAIA\_HOME (#4348)
  * `07188f5f5` — ci(test): run the offline integration suites and make the lane check blocking (#4344)
  * `e2e7f8c4a` — test: repair the unwired test files that drifted into failure (#4343)
  * `10b3ca243` — docs(cli): document gateway disable and its global-flag exception (#4386)
  * `2ec88e21a` — feat(tools): refuse to edit a file the agent hasn't read (#4029)
  * `7fc92fe62` — perf(agent): offer tools in admission order so the prompt cache survives a skill load (#4036)
  * `4fa0d90bd` — fix(connectors): pass the GitHub token under the name the server reads (#4359)
  * `16aa14669` — refactor(utils): one safe archive extractor for hub, skills, models, Lemonade (#4341)
  * `5904a1fb0` — fix(memory): only extract knowledge the user or a tool established (#4060)
  * `23c7e5b69` — perf(tools): a budget for tool descriptions, enforced by lint (#4038)
  * `a02a23342` — feat(agent): record where each step's time went in the trace (#4067)
  * `7f9ba26c5` — feat(agent): a sleep tool so the agent can wait out a rate limit (#4024)
  * `3d89b6ace` — docs(installer): match installer/README.md to what actually shipped (#4337)
  * `1e6c789bc` — docs(cli): document mcp serve, eval code, install --silent, and gaia slack (#4327)
  * `670aa1404` — docs(claude): fix subagent and skill examples that cite deleted agents/paths (#4326)
  * `a711f849b` — fix(security): refuse an overwrite when its backup can't be made (#4314)
  * `7b8249273` — fix(telegram): stop only a process that is really the adapter (#4313)
  * `c1cee09af` — fix(cli): accept backend flags only on commands that honour them (#4310)
  * `2dd9020b9` — fix(api): stop the agent when a streaming client disconnects (#4282)
  * `4034479b9` — fix(mcp): make the gaia mcp bridge answer in MCP spec shapes (#4280)
  * `5f95ec686` — fix(daemon): kill a sidecar's server child even after its bootloader exits (#4279)
  * `8a3a9ae07` — feat(tui): offer the benchmark's best Fireworks models, ranked (#4040)
  * `02b9eae5d` — fix(llm): stop telling users to run `gaia download \<model>` (#4293)
  * `e3f1afcaa` — fix(gaia-agent): honour provider on an existing /query session (#4264)
  * `4e28784ef` — feat(lemonade): scale the request budget to the context window GAIA pins (#4307)
  * `6a07c23d0` — fix(memory): distil only what is new, off the first turn (#4033)
  * `2551f99d6` — fix(schedule): allow one schedule daemon per store and lock store writes (#4272)
  * `ef861f9b8` — feat(daemon): start GAIA's Lemonade Server on demand (#4193)
  * `bab7d3217` — ci(claude): move Claude workflows to Opus 5.5; stop audits losing their findings (#4191)
  * `b8427592b` — fix(lemonade): find GAIA's own server everywhere, not the default port (#4309)
  * `c1f67511e` — fix(electron): fail startup loudly on port errors and validate tray config (#4299)
  * `03cc7f827` — fix(llm): recognise Windows refusals and connect timeouts as Lemonade down (#4289)
  * `5808068cc` — fix(llm): load the model once when ensure\_ready() calls race (#4278)
  * `0cba774b6` — fix(gaia-agent): stop pointing users at the removed lemonade-server CLI (#4181)
  * `40f9381b6` — fix(npm): exit 1 when Ctrl+C fails to stop the sidecar (#4268)
  * `38a9a8092` — fix(email-npm): parse --flag=value and reject malformed CLI flags (#4267)
  * `193501078` — feat(llm): run GAIA agents on AMD LLM gateway models (#3118)
  * `239a690f2` — fix(email-npm): refuse to start on a port another server already holds (#4266)
  * `cf170250a` — fix(test): match the actual overpromise-corrected refusal wording (#4380)
  * `3e82b2b4a` — fix(skills): declare run\_shell\_command in the coding skill (#4295)
  * `71a8e9e20` — feat(shell): --bypass-permissions lifts the shell guardrails too (#3394)
  * `201f85df7` — fix(docs): skip code.visualstudio.com in the external-link checker (#4378)
  * `6e12162fc` — fix(eval): read the audit's constants under their current names (#4377)
  * `96d322fdd` — docs(vscode): fix broken link to VS Code's language-models guide (#4375)
  * `52c373f67` — fix(agent): answer from what it found when the step limit runs out (#4373)
  * `7e134c689` — fix(llm): stop a launched Lemonade without killing the caller (#4372)
  * `d417ae058` — fix(chat): keep sessions in \~/.gaia/sessions and refuse corrupt files (#4371)
  * `e40c63825` — fix(skills): a loaded skill brings the tools it declares (#4369)
  * `0e553bbad` — fix(agent): give cloud models a 32K output-token cap (#4368)
  * `78b1983fe` — fix(hub): let Intel Macs install the gaia and email agents (#4367)
  * `7d275c7e4` — fix(ci): clear the pylint/black regressions blocking every PR's merge (#4370)
  * `e9dfc3e7a` — fix(memory): record every reconciled pair so confidence drops only once (#4319)
  * `7efe632fa` — fix(installer): treat an MSI "installed, reboot required" as success (#4318)
  * `258edc32d` — ci(vscode): run every extension test file in npm test (#4316)
  * `4c19e0c52` — fix(screenshot): say why the capture failed instead of "install mss" (#4315)
  * `b52287e9f` — ci(lemonade): refresh the embeddable digests in the auto-bump PR (#4305)
  * `b95437dd4` — fix(schedule): run jobs that fire late instead of silently skipping them (#4271)
  * `a9865fc19` — fix(rag): keep the RAG cache in \~/.gaia/cache/rag and clear only its files (#4260)
  * `c5db215a4` — chore(deps): bump Lemonade Server to v2026.39.1 (#4303)
  * `1caad2ade` — fix(ui): goal ticks take the session lock and look up the right agent (#4275)
  * `071349047` — chore(tooling): let the doc-version gate see the pins it was missing (#4304)
  * `212ffb2e8` — fix(vlm): load the vision model once, at the right context, and surface load errors (#4290)
  * `e6e32a8c2` — fix(ui): clear a cached agent's stale cancel signal before reusing it (#4274)
  * `13b614755` — test(unit): stop the unit suite from killing and replacing the real daemon (#4301)
  * `b06416396` — fix(llm): size model downloads from Lemonade's catalog and model cache (#4297)
  * `a2eed43aa` — fix(hub-worker): keep a published version's manifest immutable (#4296)
  * `3fbd0cea7` — docs(hub-worker): document /reindex and REINDEX\_TOKEN; test its auth failures (#4329)
  * `e9364d000` — test(electron): drive IPC handlers with bad input instead of checking registration (#4338)
  * `28270ced6` — test(stdio): pin the TUI-agent stdio wire in one shared fixture (#4339)
  * `fcd3ea3d1` — fix(connectors): pin every catalog MCP server to an exact version (#4356)
  * `fae6fa34a` — fix(eval): let the email judge run on the subscription credential (#3490)
  * `874192505` — feat(skills): widen the shell grant to the build, test, and land loop (#3390)
  * `a0beca195` — feat(shell): adaptive timeouts and a wait-for-condition primitive (#3402)
  * `8705c51a1` — feat(skills): detect skill-lock drift and flag a stale hub catalog (#2929)
  * `c1877695c` — fix(skills): make a user's correction to a skill actually land (#3937)
  * `160a16a2a` — fix(npu): install the FLM backend before pulling FLM models (#3338)
  * `1e605573c` — test(api): pin the flagship construction the API server depends on (#3072)
  * `d540acf52` — ci(claude): name a capped review bot instead of "review failed" (#4126)
  * `f8f8ddd5f` — test(tool-loader): measure reduction guards against a same-run baseline (#4125)
  * `f4b63ff4d` — fix(lemonade): read Lemonade's CalVer version format in every version gate (#4302)
  * `69f76ab57` — fix(agent): tell the user where their conversation is actually processed (#3706)
  * `9d2d4c3f3` — feat(tui): say something to the agent while it is still working (#3707)
  * `291da7341` — chore: anchor the Playwright ignore to root directories only (#4363)
  * `932dfdf08` — chore: ignore the Playwright CLI browser profile directory (#4361)
  * `641e40b66` — fix(utils): find JSON after placeholder braces in model output (#4332)
  * `451c5d146` — docs: say the email agent supports Gmail or Outlook, not just Gmail (#4328)
  * `0984028f9` — docs(skills): stop daily-brief and the starter guide underclaiming TTS (#4322)
  * `562aaa720` — test: drop stale skip markers and the dead set\_params client call (#4321)
  * `a55b07e47` — docs(gaia-npm): fix min core version claim and untangle SPEC 5.2 ordering (#4317)
  * `099d1a4d4` — fix(installer): point the Windows banner at /agents, not /hub (#4294)
  * `bcabb3304` — fix(tui): let `gaia daemon start` take the start lock on a cold start (#4261)
  * `ec30c89a1` — ci(unit): drop the py3.10 matrix leg, add a Windows smoke job (#4188)
  * `806a66a96` — fix(skills): teach the coding skill the pytest spelling that actually works (#4174)
  * `af2e70c74` — fix(agent): a line of warnings or skips alone is not a test run (#4173)
  * `35fff21dd` — ci(workflows): fix triggers that skip the code they cover (#4098)
  * `4bb0a4291` — fix(cpp): preserve serialized session content parts (#3658)
  * `01af64faf` — fix(shell): the rate-limit wait stops when the agent cancels the call (#4168)
  * `ffe2acd97` — fix(tools): run scripts from the project root so tests can import the project (#3902)
  * `7c4d2785d` — test(eval): validate the four parity-critical skills in the existing lanes (#4105)
  * `b85930aab` — fix(tests): let the installer suites run on a Windows host (#4130)
  * `7a8fea58b` — fix(agent): preserve tool evidence across TUI turns and restarts (#3666)
  * `9e3a57526` — ci(eval): run the scenario eval in parallel lanes and upload the evidence (#4097)
  * `556b04d4c` — ci(eval): consolidate the scenario eval onto the flagship agent and widen CI (#4096)
  * `1cc425c82` — fix(schedule): reload running schedules after store changes (#4143)
  * `e295c4cc2` — fix(installer): name the Launchpad outage instead of blaming the package (#4117)
  * `0ef463296` — fix(ui): reach the hub-installed flagship agent from Agent UI chat (#4165)
  * `57e5f4b14` — fix(memory): quote literal words in full-text searches (#4142)
  * `3ce81e6d6` — fix(security): keep edit backups out of the user's working tree (#3992)
  * `06078dee1` — fix(tools): bound search\_file so a missing directory can't hang the agent (#3905)
  * `e33dca971` — feat(skills): show the model every installed skill instead of guessing one (#3765)
  * `c234e50ae` — fix(tests): stop importing OpenAIProvider after its removal (#4185)
  * `dc42bece1` — fix(test): drop the retired OpenAI provider from the system-prompt test (#4183)
  * `c98ca714e` — fix(tools): reject stale whole-file writes (#3656)
  * `9e149c677` — fix(llm): stop sending repetition penalties to cloud models (#4068)
  * `f1a53d8d4` — ci(util): find test files that no CI lane ever runs (#4124)
  * `519799a2b` — test(eval): write scorecard fixtures as UTF-8 so Windows can run them (#4119)
  * `11bb3d5bd` — fix(ci): read "weekly limit" as a quota outage, not an unknown failure (#4120)
  * `d673122a9` — ci(cpp): probe mingw32-make before trusting a cached w64devkit (#4116)
  * `64544f218` — fix: apply reviewed maintenance repairs for #3602 (#3716)
  * `9abaa0b29` — fix(chat): apply system prompts once per request (#3864)
  * `bee77fce3` — fix(hub): advertise declared agent distribution packages (#3866)
  * `60656af23` — fix(llm): retire providers that discard tool calls (#3899)
  * `8a1178cdc` — fix(memory): say when there are no past conversations to search (#4059)
  * `69ca7601e` — ci(heartbeat): monitor the devlab-dispatch pool, not just the idle boxes (#4129)
  * `f2e96d0b9` — fix(eval): read a usage-limit outage as a harness failure, not a bad answer (#4133)
  * `0e5e4637f` — test(shell): run the platform-independent shell tests on Windows (#4136)
  * `74cce1854` — ci(sd): size the SD job budget to a cold devlab checkout (#4137)
  * `88fe05ded` — fix(tui): reap persistent agents when closing completed turns (#4144)
  * `e481de996` — test(shell): pin that an approval-required command never runs unapproved (#4043)
  * `68162fedb` — fix(shell): tell the model the shell rules, read git -C correctly, and stop throttling reads (#3909)
  * `69fc540b5` — fix(agent): the loop guard corrects before it stops, and names the real cause (#3908)
  * `224df1533` — feat(daemon): converge the flagship agent onto one supervised path (steps 1-4a) (#3698)
  * `c026d0912` — fix(eval): name a judge outage instead of dying in an SDK traceback (#4123)
  * `fc94ec759` — fix(tests): let asyncio start under the unit-suite network guard (#4115)
  * `8983f21ef` — feat(eval): adversarial tasks and a tests-actually-ran check in the CI task eval (#4027)
  * `d54ed0072` — fix(eval): resolve the eval MCP interpreter to the running Python (#3982)
  * `b2731c025` — fix(factory/harvest): split shell commands with quoting honoured (#3965)
  * `886e1404a` — fix(factory/harvest): stop serving a stale request snapshot silently (#3963)
  * `83db3ef39` — Show why an empty chat agent switch was rejected (#4030)
  * `15c2bfabd` — fix(agent): analyze\_data\_file understands common quarter formats and refuses the rest (#3904)
  * `2fe137677` — fix(memory): handle disabled sessions without warnings or crashes (#3848)
  * `e7ed1d163` — feat(tui): show what a session costs — time, steps, tools, tokens, dollars (#3739)
  * `f89ecc965` — fix(cli): report incomplete stops and bound port inspection (#3847)
  * `f5579302a` — fix(webui): show a version on Hub cards for not-yet-installed agents (#3878)
  * `204adf013` — docs(ui): plan shared terminal-inspired GAIA design (#3803)
  * `aa5eb44f9` — feat(eval): compare models on one table, and stop pricing cloud runs at zero (#3741)
  * `a38fe3d43` — feat(slack): drive the flagship agent from Slack, set up in the TUI (#3697)
  * `f067bf1ac` — fix(code-index): clear stale indexes after empty rebuilds (#3663)
  * `72f6bb6da` — fix(audio): clean scratch files and surface refinement errors (#3687)
  * `dcac76b7f` — fix(skills): stop a mailbox question landing on github-triage (#4162)
  * `d9902ff53` — docs(email): lead the mail guide with the flagship's real tool surface (#4163)
  * `bf17a2cbc` — fix(webui): stop the notification center blanking the Agent UI (#4178)
  * `f136d1c87` — fix(tui): tell the user up front when a provider key already exists (#3940)
  * `9d45a8a2c` — ci: add nightly patch-release drafting workflow (#3874)
  * `6c2ed5fe9` — fix(webui): drop AgentInfo fields no backend endpoint sends (#3846)
  * `5dcd7ab04` — fix(email): stop the flagship repeating a phishing lure's instructions (#4155)
  * `dd5babda7` — feat(gaia): eval corpus, tracked scorecard CI, and skill capture (#3074)
  * `d338119be` — fix(tools): give the agent its own scratch directory instead of the user's repo (#3907)
  * `7c3bc609e` — fix(email): find mail the user describes in their own words (#4148)
  * `fb6a7b7d5` — fix(connectors): let --grant-agent installed:gaia grant mailbox access (#4149)
  * `a55169a20` — fix(email): reject a Gmail error body that parses but isn't an object (#4147)
  * `c3f949f3f` — fix(agents): stop run\_python from swallowing a turn on an unusable import (#4087)
  * `88441a017` — fix(email): bound mail reads per turn, not just per message (#4111)
  * `4fe3f6069` — fix(llm): size a context overflow against the machine's own device profile (#4095)
  * `754b51734` — fix(email): build Graph errors from error.code, not the raw response body (#4109)
  * `83aa69dd9` — feat(email): read Gmail from the flagship agent's email tools (#4085)
  * `6768e91a2` — ci(eval): tell an exhausted judge quota apart from a bad credential (#4100)
  * `9ec590539` — fix(connectors): author the work and Workspace mailbox setup walkthroughs (#4099)
  * `0816b018e` — fix(eval): verify which agent answered each eval scenario (#4092)
  * `4fd28f2c4` — fix(llm,vlm): keep the configured Lemonade URL instead of rebuilding it (#3720)
  * `5aa589013` — feat(llm): ask Fireworks what it serves instead of trusting a gateway's list (#3749)
  * `741c16fd0` — fix(memory): stop storing permission refusals as errors to avoid (#4058)
  * `b869e9a35` — feat(factory/harvest): add optional Claude Code labelling and synthesis steps (#3968)
  * `05ecb4e14` — fix(agent): check a test claim against the record before answering (#4049)
  * `2d080dde5` — feat(agents): record the tool schema in the --trace artifact (#4093)
  * `a6002476e` — fix(tui): attach to a running sidecar when the launch asked for no mode (#4094)
  * `12874fe27` — fix(tui): surface a failed tool's error when it draws no card (#4091)
  * `9d90939c6` — docs(dev): stop describing a uv config block that no longer exists (#4089)
  * `2983c1a2e` — fix(email): validate the Outlook message id before it reaches the request path (#4088)
  * `158e2a71d` — fix(connectors): stop requesting the openid scope on the Microsoft connectors (#4081)
  * `56ca48db1` — fix(tools): search the session's project, not the whole disk, under full access (#4064)
  * `e769ee820` — fix(factory/harvest): validate label prefixes against the corpus (#3964)
  * `54e4d65eb` — fix(chat): stop replaying tool calls to the model as "None" (#3758)
  * `93cc8188d` — docs(skills): a skill for benchmarking the flagship agent (#4039)
  * `736447160` — fix(test): count run\_python among ChatAgent's inline tools (#4016)
  * `d31e17dff` — fix(agents): save guard fires on plan text and misses four phrasings (#4065)
  * `e260ef2f3` — fix(agents): block final answers that claim a save no tool performed (#4012)
  * `54e71c928` — fix(eval): point five scenarios at a real agent, and reject unknown agent types (#3906)
  * `c6bf18373` — chore(deps-dev): bump the agent-ui-dependencies group in /src/gaia/apps/webui with 4 updates (#4046)
  * `992add8ab` — chore(deps): bump the root-npm-dependencies group with 2 updates (#4045)
  * `9f07a8a80` — fix(email): ground received invites by organizer (#3265)
  * `39c860b74` — test(skills): let the starter-skill guard see ChatAgent's run\_python (#4051)
  * `b1a339a48` — chore(deps): bump anthropics/claude-code-action from 1.0.224 to 1.0.230 in the github-actions group (#4047)
  * `1a4cccaad` — fix(agent): judge a repeated check by its latest run (#3993)
  * `f866d0daf` — feat(tools): run\_python runs a snippet without leaving a file in the repo (#3994)
  * `fcaa4efce` — feat(eval): gate CI on the flagship agent's outcome-scored tasks (#4007)
  * `b46327fe7` — fix(llm): count a local call's tokens from its own usage, not /stats (#4005)
  * `e97123f6b` — ci(eval): keep judge credentials away from the agent under test (#4001)
  * `b7e9976df` — fix(agent): emit exactly one verification statement per answer (#3704)
  * `c0e1cee61` — chore(eval): stop committing Claude Code session transcripts (#4002)
  * `69eeabeb8` — fix(chat): replay native tool calls as native tool calls for every backend (#3997)
  * `1cc32746e` — fix(tui): clear flagship conversation context over stdio (#3650)
  * `761a842ec` — fix(agents): report missing tool-mixin setup instead of failing silently (#3337)
  * `9f4209ce9` — fix(email-agent): reject near-duplicate sender addresses in preference tools (#3799)
  * `eaf6351c7` — feat(connectors): guided Gmail setup for mailbox onboarding (#3813)
  * `953b6589e` — fix(connectors): revoke Google OAuth grant on disconnect (#3816)
  * `3815ac31d` — fix(llm): clamp requested ctx\_size to a model's real context ceiling (#3003)
  * `66ff8c99f` — fix(email): improve fake Gmail body and phrase search (#3894)
  * `73cd240a6` — fix(agent): skill discovery scores clean text, not the memory-augmented message (#3998)
  * `f809e35d9` — fix(tui): stop /memory vanishing on an outdated agent, and blaming it for a timeout (#4004)
  * `482390a16` — fix(agent): bound tool output and recover omitted evidence (#3670)
  * `dbe1ed526` — fix(ui): honor config.json's default\_model when creating a session (#3850)
  * `14e1b9474` — fix(electron): block file links, per-chat grants, tray crash, cold-start links (#3618)
  * `10d62d19b` — fix(shell,skills): close the allowlist holes that let a read run code (#3593)
  * `6e5a43ed8` — ci(eval): run the email eval once instead of three times (#2930)
  * `188f61adc` — fix(memory): stop a second OpenMP runtime from aborting memory search (#3986)
  * `3af861562` — fix(tui): scope the memory capability to the agent that has the route (#3988)
  * `d14ea1e9b` — feat(tui): name the running agent, fix /memory on a hub install, add /agents (#3987)
  * `079853938` — docs(install): select a cleanup tier in preview example (#3868)
  * `3d5738704` — fix(rag): reject incomplete embedding batches (#3860)
  * `ad91e9a29` — docs(factory/harvest): stop the report citing sections it does not contain (#3966)
  * `4d1b95d47` — fix(tui): drop the redundant Verification line from chat answers (#3939)
  * `73e4ba412` — docs(plans): reconcile the autonomy-engine plan against the shipped daemon (#3973)
  * `ddcc2a087` — fix(project-map): find the project root at any depth below it (#3977)
  * `d408dc6ac` — fix(tools): bound recent-file results before entering context (#3849)
  * `2187c567b` — fix(agent): catch final answers that only describe the next step (#3910)
  * `4c2ad4232` — fix(api): keep non-streaming completions off event loop (#3944)
  * `c152e07a8` — test(release): close the job-level failure-tolerance bypass too (#3976)
  * `2cabd979c` — docs(chat): correct ChatAgent installation instructions (#3845)
  * `9051c024b` — fix(agents): name a directory instead of leaking a raw errno from file tools (#3891)
  * `7fd8468b1` — fix(agent): recognize Python runner verification results (#3862)
  * `313edc813` — fix: apply reviewed maintenance repairs for #3617 (#3715)
  * `9e21658cb` — fix(chat): restore history after failed or cancelled turns (#3861)
  * `e47a34670` — fix(tools): prevent turns from leaving Python files syntactically broken (#3740)
  * `bc1bd78a1` — fix(project-map): discover roots four directories above cwd (#3856)
  * `618593a7d` — ci(gaia): cover shared flagship dependencies (#3659)
  * `610144a22` — fix(debian): preserve personal data during package purge (#3844)
  * `d430c77a6` — fix(agent): a loop break is never "Task completed" (#3751)
  * `6cea49635` — fix(installer): disclose shared cleanup and default to keep (#3867)
  * `6dc3423ad` — fix: apply reviewed maintenance repairs for #3615 (#3718)
  * `e55d88148` — fix(gaia): refuse deletion of active sessions (#3863)
  * `2e8a0bda4` — test(eval): pin credential and MCP launch contracts (#3858)
  * `49ac2f4c8` — docs(reference): disclose that session-analytics scans the whole machine (#3817)
  * `b662e4e9b` — docs(releases): name the release that actually removed the SD pages (#3970)
  * `85f9124f1` — test(release): reject tolerated backend test failures (#3857)
  * `090c37098` — docs(releases): drop two dead SD links from the v0.15.3 notes (#3924)
  * `c8ae6b35d` — fix(email): qualify a pre-scan summary when a mailbox failed (#3780)
  * `8a8f55240` — fix(daemon): stop --dev-src-dir errors from suggesting paths that don't exist (#3869)
  * `e007cbafd` — fix(net): handle RemoteDisconnected at every except-URLError site (#3818)
  * `280256375` — fix(connectors): stop leaking provider response bodies on the OAuth flow paths (#3877)
  * `3f4ebb801` — chore(deps): bump the github-actions group across 1 directory with 2 updates (#3761)
  * `c5548635a` — chore(deps): bump the root-npm-dependencies group across 1 directory with 2 updates (#3759)
  * `fc173d825` — chore(deps-dev): bump the agent-ui-dependencies group across 1 directory with 7 updates (#3760)
  * `264b1e48b` — fix(hub/gaia): commit the real binaries.lock.json hashes from v0.2.0's release (#3932)
  * `23e986e59` — ci: add a linter for GitHub Actions' ancestor-skip gotcha (#3931)
  * `fcc3edb86` — ci(release): stop redeploy-website from silently skipping on the ancestor-skip bug (#3929)
  * `de33d9c19` — docs: add missing email and skill\_learning rows to CLAUDE.md's tool table (#3928)
  * `3a2294f21` — fix: stop swallowing profile-save and sidecar-shutdown failures (#3927)
  * `307ca8cb6` — chore: remove dead references to deleted per-task agents (#3926)
  * `4b5f69bec` — fix(hub/gaia): stop the frozen sidecar crashing on stdio startup (#3925)
  * `0f204100b` — fix(release): record v0.24.1 in RELEASED\_DAEMON\_API (#3921)
</details>

Full Changelog: [v0.24.1...v0.25.0](https://github.com/amd/gaia/compare/v0.24.1...v0.25.0)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.