Skip to content

Release v0.24.0 - #3781

Merged
kovtcharov-amd merged 9 commits into
mainfrom
v0.24.0-release
Sep 16, 2026
Merged

kovtcharov-amd merged 9 commits into
mainfrom
v0.24.0-release

Conversation

@kovtcharov-amd

@kovtcharov-amd kovtcharov-amd commented Sep 14, 2026 •

Copy link
Copy Markdown
Collaborator

GAIA v0.24.0 Release Notes

Breaking Changes

  • Thirteen per-task agents were removed — analyst, blender, browser, code, doc-search, docker, docqa, emr, fileio, jira, routing, sd, summarize; it's a SKILL.md in hub/skills/ on the flagship now. Installing one by id fails — use gaia hub install gaia --trust and load the matching skill. (PR #2995)
  • The TUI control API dropped its hub-browser fields — view is now splash | preflight | chat; hub_tab, hub_tab_index, selected_agent_id, visible_agent_ids, filtering, can_return_to_hub are gone, replaced by blocker. Anyone driving the TUI over this API needs to update. (PR #3120)
  • @tool(name=..., description=...) no longer works — the decorator rejects unrecognized keywords instead of silently discarding them. Use @tool(); name and description come from the function. (PR #3252)
  • gaia telegram start now requires --allowed-users, no opt-out — it used to start (and reply to anyone) without one. (PR #3306)
  • gaia api --host beyond loopback with no key now refuses to start, and GAIA_API_KEY gates chat completions too. (PR #3612)

What's New

  • gaia hub install gaia --trust actually installs and runs the flagship agent — the daemon had no sidecar entry for it, the installers didn't ship its binary, and gaia init set up the wrong agent. All three are fixed. (PRs #3031, #3146, #3330, #3125, #3120)

  • The agent draws pictures, summarizes meetings, and orients itself first — "draw me a red bicycle" reaches the image tools; summarize this meeting: standup.mp4 returns a transcript with action items; and every task scans the project first. Skills load themselves, and corrections are learned into memory, not hand-edited into SKILL.md. (PRs #3073, #3597, #3405, #3010, #3023)

  • Every answer states whether it was checked — the agent names what it ran and what passed, not just reporting success. --trace in the TUI records every tool call so a wrong answer can be replayed. (PRs #3397, #3579)

  • The TUI takes the mouse, draws to full width, and can go cloud — wheel-scroll, clickable links, no more 80-column wrapping, and a local, Fireworks, or AMD Gateway model via Lemonade. (PRs #3699, #3006, #3672)

  • Run Lemonade without the machine-wide installer — gaia lemonade embedded start runs your own Lemonade Server, no admin rights needed. (PR #3121)

  • Mine your own Claude Code sessions for usage stats — a deterministic, LLM-free pipeline turns your ~/.claude/projects/ transcripts into tool-usage, failure, and cost reports. See the Session Analytics guide. (PRs #3111, #3782)

Security

  • Any web page you visited could drive GAIA's local servers — a cross-origin request could start a tunnel, poison your RAG store, or send mail; a document link could make the chat agent fetch cloud metadata or the daemon's loopback API. Middleware now enforces Origin/Host checks everywhere, and web tools refuse private/loopback redirects. (PRs #3366, #3612)
  • A Telegram bot with no allowlist replied to anyone on the platform (the documented default) — off-allowlist users are now refused before a session or model call; the bot's tool surface is chat-only. (PR #3306)
  • Attaching a document could silently widen the agent's read scope to its whole parent directory — the grant is now the file itself; reads gained a credential denylist, and writes refuse shell rc files, PowerShell profiles, and git hooks. (PR #3594)
  • A chat turn could plant system/permission rows into every future prompt — only onboarding/admin paths can write them now. (PR #3614)

Bug Fixes

A selection of the user-visible fixes this release — the full list is in the changelog below.

  • The flagship agent's core model floor now matches what can actually run it (PR #3055) — installs no longer point at a Lemonade version too old to serve the agent.
  • A one-shot /query run no longer leaks an agent process (PR #3079).
  • The npm sidecar no longer attaches to a foreign server (PR #3078) — it now verifies the server it finds is actually its own before using it.
  • A turn parked on a confirmation prompt no longer hangs when stdin closes (PR #3080) — the agent ends the turn instead of waiting forever.
  • Telegram's background polling survives (PR #3272) — the adapter no longer silently stops receiving messages.
  • gaia uninstall --purge removes the embedded Lemonade runtime it installed (PR #3277) — previously a full purge left ~/.gaia/lemonade behind entirely; a live embedded daemon must be stopped first.
  • Outlook and Gmail search operators translate correctly for the email agent (PRs #3042, #3562, #3619) — a query that used to fail silently or match the wrong messages against Outlook's Graph API now works or fails loudly.
  • RAG indexing honors a document's actual success flag (PR #3678) — a failed index no longer gets reported as indexed at every call site that checked it.
  • Claude tool-call history survives across turns (PR #3410) — a multi-turn tool conversation no longer loses earlier tool results.
  • An ambiguous edit is refused instead of silently changing the first match (PR #3396) — edit_file asks for a more specific match rather than guessing which occurrence you meant.
  • A port collision between the MCP bridge, Agent UI, TUI, and Telegram is resolved (PR #3604) — the four no longer fight over the same default port.
  • Telegram reports unsupported media types instead of failing silently (PR #3263).
  • GET /health reports real component status (PR #2601) — it used to report ok even with a dead Lemonade backend; it now reports LLM and RAG status too.
  • A .bak backup file could be imported as the module it backed up (PR #3748) — .bak now goes last in the filename, so pytest no longer tries to collect a test file's own backup.
  • A PowerShell sink could execute untrusted text instead of just displaying it (PR #3359) — an apostrophe in an indexed document name, or in a notify_desktop message, ran as code; both now pass values out-of-band.
  • --scopes could request an OAuth scope outside a connector's declared ceiling (PR #3247) — the CLI's verbatim-scopes path skipped the check the Agent UI already had; both now enforce it.

Contributors

Thanks to the community members who contributed to this release:

  • @mikemikimike — Telegram background-polling and media-handling fixes, embedded-Lemonade uninstall cleanup, and TUI init-process reaping (PRs #3272, #3277, #3271)
  • @itomek — custom-agent guide fixes and CI reliability work, including provisioning the dev install in Claude Code cloud sessions (PRs #3317, #3033)
  • @Hashim1999164 — hub agent pages showing the GAIA install path alongside npm, structured JSON for unexpected email API errors, and Outlook Graph query-escaping fixes (PRs #3151, #3046, #3021)
  • @AmirF194 — Outlook/Gmail search-operator translation for the email agent (PRs #3042, #3562, #3619)
  • @sujikathir — the /health component-status endpoint and a Claude tool-history preservation fix (PRs #2601, #3410)
  • @SIBTAIN-ASAD — Telegram unsupported-media-type reporting and test coverage (PR #3263)
  • @wangzhengzhuo05 — MCP/Telegram/TUI port-collision fix across the bridge, Agent UI, and daemon (PR #3604)
  • @amd-pworfolk — stopped a non-LLM model's ctx_size from leaking into get_status() (PR #3595)

Full Changelog

230 commits since v0.23.0:

Expand full changelog (230 commits)

Full Changelog: v0.23.0...v0.24.0

Release checklist

  • util/validate_release_notes.py passes
  • docs && npx mintlify validate — could not run mintlify validate locally (npm TLS cert error in this environment), but util/check_doc_links.py passes internal + external link checks now that docs(reference): add a user guide for Claude Code session analytics #3782 is merged
  • src/gaia/version.py → 0.24.0; LEMONADE_VERSION unchanged at 11.8.1
  • webui package.json / package-lock.json → 0.24.0
  • Navbar label → v0.24.0 · Lemonade 11.8.1
  • Hub component manifests (terminal-hub, agent-ui) → 0.24.0; check_component_core_api.py --release-version 0.24.0 passes
  • hub/agents/gaia/python/{gaia-agent.yaml,pyproject.toml} min-version floor bumped 0.23.1 → 0.24.0 (0.23.1 was never tagged)
  • docs/releases/index.mdx corrected: 3 files → 5 (was missing the hub-manifest and webui-package files)
  • Rebased onto current main; changelog regenerated from the real range — 230 commits, no phantom SHAs, no missing merges
  • Every PR citation and contributor handle verified against gh pr view (33 PRs + 8 contributor logins)
  • Full commit range swept for security/breaking markers not caught by title alone
  • Review from @kovtcharov-amd addressed

@github-actions github-actions Bot added the documentation Documentation changes label Sep 14, 2026
@kovtcharov-amd
kovtcharov-amd marked this pull request as ready for review September 14, 2026 19:44
@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Skill audit

Skill Verdict Claimed tier Cleared tiers Findings Rules
hub/agents/email/npm ✅ ALLOW experimental experimental, community 2 medium, 1 info code.suppression, supply.undeclared_dependency
hub/skills/inbox-triage ✅ ALLOW community experimental, community none —

✅ All audited skills cleared the tier they claim.

Per-finding detail is withheld here on purpose. Read it in the Security > Code scanning tab, or download the skill-audit-reports artifact from this run. Offending source text is withheld from CI everywhere — reproduce it locally with gaia skill audit <dir> --show-snippets.

@github-actions

Copy link
Copy Markdown
Contributor

Verdict: Request changes

The v0.24.0 bump itself is clean — every version file agrees and the CLI, the Agent UI backend, and the release-notes validators all confirm 0.24.0. Two problems are in the notes themselves, and one of them turns a CI gate red.

Blocking:

  1. The "Session Analytics guide" link in the new notes points at a page that doesn't exist — it returns 404 today, and the guide that would create it is still an open PR. The docs link check runs on every PR touching docs/ and has no tolerance flag, so this fails the gate now and, if tagged as-is, ships a dead link to everyone reading the release. Either land that guide first or drop the link from the bullet.

  2. The full changelog is inaccurate in both directions. Four of its entries name commits that exist nowhere in this repository — they're from a branch that was squashed on merge, and two of them are a merge commit and a formatting-only commit that shouldn't appear in a user-facing list at all. Meanwhile two real merged fixes from this window are missing, and the "218 commits" headline doesn't match what actually shipped. Regenerate the list from the real history right before tagging.

Everything else reads well. Deleting the v0.23.1 page is correct — that tag was never cut, so folding its breaking change into these notes is the right call, and the compare link already points at v0.23.0.

Real-world evidence

The automated evidence stage ran on the no-inference lane and exercised every surface this bump touches. It confirms the bump and independently found the broken link above.

$ gaia --version
0.24.0

$ curl -s http://127.0.0.1:4200/api/system/status
HTTP 200
version         = 0.24.0
lemonade_status = None          # expected — no Lemonade on this runner

Version lock (the gate release_components.yml runs on a tag), replicated across all five files: core, both hub/components/*/gaia-agent.yaml, and both webui package files — ALL MATCH at 0.24.0.

$ python util/validate_release_notes.py docs/releases/v0.24.0.mdx --tag v0.24.0
✅ 1 file(s) validated successfully          exit=0

$ python util/check_doc_links.py --internal-only
Total links checked: 987   OK: 987   Broken: 0

$ python util/check_doc_links.py            # includes external URLs
BROKEN LINKS:
  docs/releases/v0.24.0.mdx:28
    URL: https://amd-gaia.ai/docs/reference/session-analytics
    Error: HTTP 404
FAILED: Found broken links                   exit=1

Nav wiring checked out: v0.24.0 present with its file, v0.23.1 removed from both nav and disk together, navbar label v0.24.0 · Lemonade 11.8.1. Spot regression exercised three adjacent operations — /api/health, /api/system/tasks, and a fresh gaia agent init scaffold (stamps 0.24.0 into the generated manifest and pyproject) — all pass. The Agent UI pixels (version string in the app chrome) are marked pending strix-halo lane; per the rubric that deferral is fine for merge-time CI since the underlying route was exercised. The bundle also notes a pre-existing isort failure in the gaia agent init scaffold template, which this PR does not touch.

🔍 Technical details

🔴 Broken external link fails the docs gate and ships a 404 (docs/releases/v0.24.0.mdx:28)

The bullet links https://amd-gaia.ai/docs/reference/session-analytics. That page does not exist locally (docs/reference/session-analytics.mdx is absent, and session-analytics appears nowhere in docs/docs.json), so publishing the site won't create it. It's added by PR #3782, which is still open — so the notes also credit an unmerged PR in a shipped changelog.

.github/workflows/check_doc_links.yml's check-external-links job runs python util/check_doc_links.py --external-only with no continue-on-error, on every PR touching docs/**. Confirmed red by the evidence bundle.

Two options — merge #3782 first (preferred, the guide is real content), or drop the link:

- **Mine your own Claude Code sessions for usage stats** — a deterministic, LLM-free pipeline turns your `~/.claude/projects/` transcripts into tool-usage, failure, and cost reports. (PR [#3111](https://github.com/amd/gaia/pull/3111))

🟡 Four changelog entries reference SHAs that don't exist; two merged PRs are missing (docs/releases/v0.24.0.mdx:171-394)

git cat-file -t reports not found for all four of these, and they're not reachable from any branch — they're pre-squash commits from a PR branch (pr3670):

  • 192c39d03 — style: black
  • 44a9a6ede — fix(agent): drop whole records from a JSON string, don't slice one
  • bc2871849 — Merge remote-tracking branch 'origin/main' into pr3670
  • b62eada91 — fix(agent): bound plain-string tool results with head and tail

A merge commit and a style: black commit don't belong in a user-facing changelog regardless of SHA validity.

Missing from the list but present in git log v0.23.0..HEAD:

Count check: 222 commits in v0.23.0..HEAD, minus the 6 release commits in this PR = 216 substantive, against the 218 the notes claim (214 real entries + 4 phantom). Regenerating with git log v0.23.0..<tag-sha> --no-merges immediately before tagging fixes the SHAs, the count, and the omissions in one pass.

🟢 Nits (2)

  1. Stale floor comment in the flagship agent package (hub/agents/gaia/python/gaia-agent.yaml:30-31, pyproject.toml:17-31). It pins min_gaia_version: "0.23.1" / amd-gaia>=0.23.1 with a comment saying the floor "only resolves once 0.23.1 is cut" — 0.23.1 was never tagged and never will be. Resolution still works (0.24.0 > 0.23.1), so this is cosmetic, but bumping the floor to 0.24.0 makes the comment true again.

  2. The release process doc is now out of date (docs/releases/index.mdx). It states a release PR "must update exactly 3 files", while this PR correctly bumps five — the two hub/components/*/gaia-agent.yaml manifests and the webui package.json / package-lock.json are now gated by release_components.yml too. Worth a one-line fix so the next release doesn't miss them.

Strengths

  • The bump is genuinely complete across every gated surface — core, both component manifests, and both webui package files — which is exactly the drift that made v0.23.1 untaggable.
  • Deleting docs/releases/v0.23.1.mdx is right, not an oversight: v0.23.1 has no tag and no GitHub release (latest is v0.23.0), so folding its "thirteen per-task agents removed" breaking change into these notes and keeping the v0.23.0...v0.24.0 compare link is the correct history.
  • The notes follow the house style well — user-observable impact first, mechanism second, security section leading with what an attacker could actually do.

Ovtcharov added 9 commits September 15, 2026 16:27
- Security bullet mischaracterized PR #3594 as fixing the reported
  read_file sandbox-bypass; that was already fixed by #2344 in v0.23.0.
  Rewrote to describe what #3594 actually changed: the attach-scope
  widening and missing credential denylist.
- Added the TUI control-API breaking change from #3120 that was missing.
- Fixed two wrong contributor GitHub handles.
- Corrected the embedded-Lemonade-uninstall bug fix bullet.
- Trimmed prose back under the 600-word budget after the additions.
- Add PR #3366 (cross-origin request could drive the local Agent UI
  backend) to Security — this was a significant omission found by
  scanning the full commit range for breaking/security markers.
- Add PR #3252 (@tool decorator now rejects unknown kwargs) to
  Breaking Changes.
- Trimmed other bullets to hold the 600-word narrative budget.
…notes

Third security/breaking omission found by scanning the full commit
range: Telegram bot replied to anyone by default with no --allowed-users.
Now required, with no opt-out. Moved lower-severity .bak/PowerShell
hardening notes to the uncapped Bug Fixes section to hold the 600-word
narrative budget.
- #3614: a chat turn could plant persistent system/permission memory
  rows reaching every future system prompt (memory-based privilege
  escalation) — Security.
- #3247: --scopes could request an OAuth scope outside a connector's
  declared ceiling via the CLI path — Bug Fixes.
Completes a full keyword sweep of all 216 commits in range for
security/breaking markers (fix(security) prefix, CWE/CVE mentions,
leak/expose/bypass/inject/escalat/auth/credential/secret/token/
sandbox/escape terms, and GitHub's breaking-change text search).
…s bullet

- #3612: a document link could make the chat agent fetch internal
  addresses (Lemonade API, daemon loopback, cloud metadata), and any
  browser tab could drive GAIA's local servers with no key. Added to
  both Breaking Changes (--api behavior change) and Security.
- Added a What's New bullet for the Claude Code session-analytics
  pipeline (#3111) and its new user guide (#3782), per user request.
- Merged the two cross-origin bullets (#3366, #3612) into one Security
  entry and trimmed further to hold the 600-word budget.
- Rebased onto current main (14 new commits landed, including #3782
  which fixes the broken Session Analytics link the docs gate caught).
- Regenerated the Full Changelog: the prior list carried 4 phantom SHAs
  from a squash-merged branch (192c39d, 44a9a6e, bc28718,
  b62eada) and was missing 2 real merged commits (#3744, #3745).
  Corrected count: 230 commits since v0.23.0.
- Bumped the flagship agent's own min_gaia_version/amd-gaia floor from
  the never-shipped 0.23.1 to 0.24.0, in gaia-agent.yaml and
  pyproject.toml (0.23.1 was never tagged, so the floor never resolved).
- Fixed docs/releases/index.mdx's stale '3 files' claim to '5 files',
  documenting the two hub-manifest and two webui-package files that
  release_components.yml now also gates.
Mintlify's live site only rebuilds on a tagged release, so an absolute
https://amd-gaia.ai/docs/... link to a page added this same cycle would
404 in CI until after tagging -- a structural chicken-and-egg the
external-link checker can never pass before merge. Internal doc-to-doc
references use root-relative paths (matching the merged
session-analytics.mdx page's own /reference/dev link), which the
checker resolves locally instead of hitting the live site.
- Rebased onto current main (245 commits since v0.23.0, up from 230).
- Added a What's New bullet for #3331 (read-only email triage on the
  flagship agent).
- Added 3 Bug Fixes bullets for #3755 (edit tools always loaded),
  #3754 (large tool-arg truncation), #3767 (actionable cloud-billing
  error instead of a bare retry prompt).
- Regenerated the Full Changelog against the new range.
@kovtcharov-amd kovtcharov-amd self-assigned this Sep 15, 2026
@kovtcharov-amd
kovtcharov-amd added this pull request to the merge queue Sep 16, 2026
Merged via the queue into main with commit 391cfc2 Sep 16, 2026
89 of 90 checks passed
@kovtcharov-amd
kovtcharov-amd deleted the v0.24.0-release branch September 16, 2026 00:19
kovtcharov-amd added a commit to kovtcharov/gaia that referenced this pull request Sep 17, 2026
Every PR that touches `docs/` is currently failing `Verify external
URLs`, and neither broken link is in the PR that trips over it.

`docs/releases/v0.15.3.mdx` links to the SD Agent Playbook and the SD
User Guide. Both pages were removed in v0.24.0 along with the standalone
`sd` agent, so both return 404. The link check has no tolerance flag and
scans the whole `docs/` tree, so an archived release note takes
unrelated PRs red — amd#3342 and amd#3781 are both sitting on it right now.

I kept the sentence saying what v0.15.3 actually shipped, since
rewriting that would make an archived note wrong, and pointed at where
image generation lives today.

## Test plan

- [x] No remaining references to either URL under `docs/`
- [ ] `Verify external URLs` green on this PR
- [ ] The same check goes green on amd#3342 and amd#3781 once this lands

Co-authored-by: Ovtcharov <kovtchar@amd.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Documentation changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant