# Changelog
All notable changes to `grr` are recorded in this file.
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- **mcp:** enrich tool descriptions with returns, body flow, and siblings
### Internal
- 3 internal commits (chore 3)
### Other
- **compare:** refresh daily benchmark snapshot
## [2.1.5] - 2026-10-26
### Fixed
- **mcp:** negotiate the client's requested revision in initialize
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [2.1.4] - 2026-10-26
### Fixed
- **mcp:** answer the legacy initialize handshake so standard clients connect
### Documentation
- **winget:** update winget status and validation war story for v2.1.3
### Internal
- 14 internal commits (chore 14)
### Other
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
## [2.1.3] - 2026-10-20
### Fixed
- **winget:** use generic ARMv8 baseline for windows-aarch64
### Internal
- 5 internal commits (chore 5)
### Other
- **compare:** refresh daily benchmark snapshot
## [2.1.2] - 2026-10-20
### Changed
- **core:** remove unused transport wrappers, builder, and error variants
### Fixed
- **cli:** print help and exit 0 on bare invocation for winget validator
### Internal
- 15 internal commits (chore 15)
### Other
- **compare:** refresh daily benchmark snapshot
## [2.1.1] - 2026-10-16
### Fixed
- **winget:** feed the komac checksum the real filename
- **winget:** name the komac tarball what checksums.txt expects
### Internal
- 7 internal commits (chore 5, ci 2)
### Other
- **compare:** refresh daily benchmark snapshot
## [2.1.0] - 2026-10-16
### Added
- **http:** route the data plane through the probed engine, publish winget manifests
### Internal
- 6 internal commits (chore 5, ci 1)
### Other
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
## [2.0.1] - 2026-10-15
### Fixed
- **auth:** trim the login set, keep the stored grant on refresh
### Internal
- 6 internal commits (chore 6)
### Other
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
## [2.0.0] - 2026-10-15
### Breaking changes
- **auth:** request a small default scope set, widened per service
### Fixed
- **tests:** satisfy clippy::panic and expect\_used in the scope tests
### Documentation
- **auth:** a scope declaration takes minutes to apply, and the consent needs ticking
- **auth:** correct the multi-account claim, cover a fresh account first grant
### Internal
- 6 internal commits (chore 6)
### Other
- **compare:** refresh daily benchmark snapshot
## [1.0.1] - 2026-10-14
### Fixed
- **auth:** name both consent-screen traps in the login timeout
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [1.0.0] - 2026-10-14
### Breaking changes
- **mcp:** serve only the stateless 2026-07-28 revision
### Internal
- 6 internal commits (chore 6)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.15.0] - 2026-10-13
### Added
- **auth:** GRR\_TOKEN\_STORE=file - the keyring-free token store
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.14.0] - 2026-10-13
### Added
- **mcp:** speak the stateless 2026-07-28 revision
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.13.5] - 2026-10-13
### Fixed
- **auth:** store the granted scopes, not the requested ones
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.13.4] - 2026-10-12
### Fixed
- **auth:** give the browser login five minutes, not two
### Internal
- 3 internal commits (chore 3)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.13.3] - 2026-10-13
### Fixed
- **build:** drop the trim-paths gate Cargo stabilized in 1.101
- **auth:** make grr auth login --device actually work
### Internal
- 7 internal commits (chore 7)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.13.2] - 2026-10-12
### Fixed
- **auth:** drop Chat app-authentication scopes from the consent set
### Internal
- 10 internal commits (chore 10)
### Other
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
## [0.13.1] - 2026-10-12
### Fixed
- preserve search UI and correctly merge patch updates
- **automation:** set owner identity for generated commits
- **site:** update vulnerable transitive dependencies
- **site:** use public registry URLs in lockfile
### Internal
- 10 internal commits (chore 10)
### Other
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
## [0.13.0] - 2026-10-09
### Added
- **cli:** shell completions for bash, zsh, powershell and elvish
### Internal
- 9 internal commits (chore 9)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.12.0] - 2026-10-06
### Added
- **auth:** consent to every scope the embedded index names
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
## [0.11.3] - 2026-10-06
### Fixed
- **verify:** keep --json stdout parseable, annotations go to stderr
### Internal
- 3 internal commits (chore 3)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.11.2] - 2026-10-07
### Fixed
- **ci:** run the rustsec audit on a resolved lockfile, re-aim the release changelog check
- **verify:** assert benchmarks.json drift and protocol instead of a calendar age
### Internal
- 8 internal commits (chore 8)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.11.1] - 2026-10-05
### Fixed
- **windows:** v2 CPU baseline and no UPX — portability over the last percent
- **windows:** keep v3 and UPX — the label's cause is the invocation, not the artifact
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
- **compare:** refresh daily benchmark snapshot
## [0.11.0] - 2026-10-04
### Added
- **site:** the essay gets BlogPosting structured data
### Internal
- 2 internal commits (chore 2)
## [0.10.0] - 2026-10-05
### Added
- **brand:** the mascot generator gates itself — assets and banner parity
- **packaging:** a container for MCP introspection hosts
### Fixed
- **windows:** the distribution binaries carry their runtime
### Internal
- 6 internal commits (chore 6)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.9.1] - 2026-10-04
### Fixed
- **verify:** anchor the release grace window to the tag while the release builds
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.9.0] - 2026-10-04
### Added
- **site:** sitewide search — a Pagefind index and a keyboard dialog
- **skills:** installs that migrate themselves
### Changed
- **site:** out with the deprecated, in with the dead weight cut
- **auth:** one token\_request helper for the three token flows
### Fixed
- **demo:** prompt identities are scrubbed, and the validator fails closed
- **auth:** the keychain is read at first credential use, never at startup
### Documentation
- **site:** the getting-started page tells the winget story straight
- the audit's drift sweep
- **site:** the live-site audit's fixes + the System One section
- README, CONTRIBUTING and the GCP walkthrough, reviewed and trimmed
- the self-migrating installs are a headline, so say so
### Internal
- 11 internal commits (chore 10, ci 1)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.8.1] - 2026-10-04
### Fixed
- **release:** archives ship the binary as grr, not the target name
- **docs-rs:** inject the cfg gates through cargo-args; render the demo GIF per release
- **release:** tag-release finally accepts the dispatch it has always been sent
### Internal
- 4 internal commits (chore 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.8.0] - 2026-10-04
### Added
- **cli:** grr skills install — the packaged agent skills, globally
- **bench:** as-shipped sizes and the peak-memory metric
### Changed
- **scripts:** delete dead weight, share the flag contract
- delete dead code across the CLI
- **scripts:** Node 26's import.meta.dirname/filename, stat over read
- **site:** native CSS for what the shell hand-rolled
### Performance
- **ci:** PR creators wake the merge poller — kill the 5-7 min approval wait
- async the last blocking paths, trim hot-path allocations, drop dead deps
### Fixed
- **ci:** merges with GITHUB\_TOKEN fire no downstream workflows
- **ci:** token-authored pushes and releases start nothing — dispatch the chain
- **site:** the live audit's twelve content corrections
- **ci:** poller retry, changelog in the release dispatch, dead input
- **crate:** the published manifest parses without this repo's config gates
### Documentation
- packaging status told the truth (0.7.0; winget unpublished)
- grr skills install across every surface
### Internal
- 12 internal commits (chore 8, ci 4)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.7.0] - 2026-10-03
### Added
- unattended releases + the stale-count sweep
- **site:** draw the service illustrations and glyphs as real pixel art
- **cli:** draw the grr crab in the version banner
### Performance
- **site:** 100 in every Lighthouse category
- **release:** pack with UPX --lzma — measured 20% smaller
### Fixed
- **site:** the last stale counts - 401/14 everywhere
- **automation:** release correctness, dependency freshness and workflow cost
- **site:** stop deriving the site's numbers by hand
- **changelog:** restore the PR body swallowed by add-paths
- **site:** a real gutter between the docs sidenav and the content
- **assets:** the repo-root logos are the current pixel art
- strip UTF-8 BOMs from twelve tracked files
- **bench:** the arm runner measured the wrong gog binary
- **ci:** \`gh pr view --json state\` returns OPEN, not open
- **ci:** merging needs contents:write, not contents:read
- **ci:** --admin has no bypass for the app token; fall back on any rejection
- **changelog:** the file cannot list the commit that writes it
- **site:** the gutter rule was losing to Tailwind's core .container
- **site:** stale metadata and doc counts, now derived
- **site:** the homepage stops advertising commands that do not exist
- **site:** honest data displays on compare and the stats strip
- **site:** the live demo plays the cast on main, not a rotted copy
- **release:** the bump PR title said vv0.7.0
### Documentation
- 0.6.0 release stats - 5-platform binary sizes
- **demo:** the README matches the self-maintaining reality
- bring the prose back in line with the tree
- 22 corrections against the current tree
- the Homebrew tap is debanjanbasu/tap
### Internal
- 11 internal commits (chore 9, ci 2)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.6.0] - 2026-10-02
### Added
- cover the full consumer Workspace family - 14 APIs, 401 methods
- grr mcp server + safety profiles (--readonly, --deny-service, --deny-verb)
- grr ask - natural language to a typed method + params via System One
- terminal demo - asciinema cast with a real opencode agent segment
- linux-aarch64 release target (5th platform) + ARM runners everywhere GA
- demo embed + docs for mcp/ask/safety/account
- the API reference - all 401 methods documented, baked from the index
- the site maintains itself - CI demo recording + auto release
- the whole tree works offline - --dry-run needs no credential
- **demo:** carry-forward for transport and agent segments everywhere
### Fixed
- the demo player renders correctly - three stacked fixes
- **demo:** the scattered rendering was bare \\\\n in the cast frames
- **ci:** the generated-artifact gates and the demo recording are cross-platform
- **api:** list/describe/refresh work with zero configuration
- **release:** update Cargo.lock for v0.6.0
### Documentation
- 0.5.0 release stats - 4-platform binary sizes
### Internal
- 7 internal commits (chore 2, ci 5)
### Other
- **compare:** refresh daily benchmark snapshot
## [0.5.0] - 2026-09-28
### Breaking changes
- the command tree is generated from Google's Discovery Service
### Added
- **site:** round four - modern CSS/SVG cool pass + Rust Rewrite app-name signals
### Fixed
- restore the linux io\_uring deps the transport probe still needs
- **release:** UPX windows step - drop disabled add-path, fix GITHUB\_ENV format
- **release:** GITHUB\_PATH takes effect for later steps, not the install step itself
- **release:** pack a copy and verify before replacing - UPX segfaults on the ARM64 PE
### Documentation
- 0.4.0 is live - release stats + packaging status
- 0.5.0 changelog + refreshed stats
## [0.4.0] - 2026-09-26
### Breaking changes
- http3 is now the default feature of every crate
- 0.4.0 - one crate, full API coverage, pixel-art site
### Added
- 0.4.0 hardening - http3 always-on, nightly-only, pixel 3D site
### Fixed
- **packaging:** crates.io category slug is date-and-time
- **ci:** rewrite publish.yml byte-clean (BOM broke workflow parsing)
- **pages:** checkout the repo root, not a nested site path
- **packaging:** crates.io allows at most 5 keywords
- **packaging:** crates.io allows at most 5 categories
### Documentation
- crates.io is live — 0.3.0 published, trusted-publishing-only
### Internal
- 5 internal commits (chore 3, ci 2)
## [0.3.0] - 2026-09-24
### Added
- v0.3.0 — one CLI, six services (Gmail, Calendar, Drive, Contacts, Chat, Forms)
## [0.2.0] - 2026-09-23
### Added
- **config:** add TOML config file support with env var overrides
- **error:** remove client-side throttling, improve 429 handling with Retry-After
- **models:** add EmailMessage, ThreadMessage, AttachmentInfo, DraftInfo, LabelInfo, HistoryRecord, SendAsInfo
- **client:** add all 30+ missing API methods (messages, drafts, labels, threads, history, send-as, watch, import)
- **core:** fix h3/h2 prior-knowledge exclusion, add verified TransportInfo with h3 fallback
- **core:** add fs\_io abstraction — io\_uring-backed file I/O on Linux, tokio elsewhere
- **core:** single-allocation attachment decode + streamed disk writes
- **core:** true streaming send/import via media-upload endpoints; incremental base64 MIME assembly
- **cli:** add transport introspection command
- rename to gmail-cli; auth rework, gzip decode, model fixes, release CI
- grr v0.2.0 — zero-config rework, keyring auth, agent surface
### Changed
- cleanup and optimize workspace
### Fixed
- **core:** force per-request HTTP\_3 version on probe and all data-plane requests when h3 effective
- rejected refresh token returns Auth error instead of implicit OAuth flow
- **auth:** add token\_path override hook so tests never touch real credentials
- **auth:** preserve stored refresh token when grant response omits one
- **client:** fail fast with Auth error on 401 instead of futile stale-token retry
- **cli:** route send-with-attachments through legacy JSON path when --thread\_id given
- **io:** report io\_uring only when the io\_uring feature is compiled in
- **config:** accept snake\_case OAuth keys for TypeScript-era config migration
- **ci:** drop stray aarch64 linker from x86\_64-linux table; pass -D warnings after --
- **ci:** clippy is\_multiple\_of + -p grr-cli package refs for release
### Documentation
- add cleanup & optimization design spec
- clarify zstd/brotli removal - payload compression stays via reqwest features
- add performance-claims design spec (HTTP/3, streaming, io\_uring file I/O)
- add performance-claims implementation plan
- commit spec media-upload amendment and config path fix
### Internal
- 5 internal commits (chore 3, style 1, test 1)
### Other
- Initial commit: gmail-opencode-rust - High-performance Gmail API client with HTTP/3, QUIC, zero-copy streaming
- small fix wave partial
[unreleased]: https://github.com/debanjanbasu/grr-cli/compare/v2.1.5...HEAD
[2.1.5]: https://github.com/debanjanbasu/grr-cli/compare/v2.1.4...v2.1.5
[2.1.4]: https://github.com/debanjanbasu/grr-cli/compare/v2.1.3...v2.1.4
[2.1.3]: https://github.com/debanjanbasu/grr-cli/compare/v2.1.2...v2.1.3
[2.1.2]: https://github.com/debanjanbasu/grr-cli/compare/v2.1.1...v2.1.2
[2.1.1]: https://github.com/debanjanbasu/grr-cli/compare/v2.1.0...v2.1.1
[2.1.0]: https://github.com/debanjanbasu/grr-cli/compare/v2.0.1...v2.1.0
[2.0.1]: https://github.com/debanjanbasu/grr-cli/compare/v2.0.0...v2.0.1
[2.0.0]: https://github.com/debanjanbasu/grr-cli/compare/v1.0.1...v2.0.0
[1.0.1]: https://github.com/debanjanbasu/grr-cli/compare/v1.0.0...v1.0.1
[1.0.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.15.0...v1.0.0
[0.15.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.14.0...v0.15.0
[0.14.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.13.5...v0.14.0
[0.13.5]: https://github.com/debanjanbasu/grr-cli/compare/v0.13.4...v0.13.5
[0.13.4]: https://github.com/debanjanbasu/grr-cli/compare/v0.13.3...v0.13.4
[0.13.3]: https://github.com/debanjanbasu/grr-cli/compare/v0.13.2...v0.13.3
[0.13.2]: https://github.com/debanjanbasu/grr-cli/compare/v0.13.1...v0.13.2
[0.13.1]: https://github.com/debanjanbasu/grr-cli/compare/v0.13.0...v0.13.1
[0.13.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.12.0...v0.13.0
[0.12.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.11.3...v0.12.0
[0.11.3]: https://github.com/debanjanbasu/grr-cli/compare/v0.11.2...v0.11.3
[0.11.2]: https://github.com/debanjanbasu/grr-cli/compare/v0.11.1...v0.11.2
[0.11.1]: https://github.com/debanjanbasu/grr-cli/compare/v0.11.0...v0.11.1
[0.11.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.10.0...v0.11.0
[0.10.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.9.1...v0.10.0
[0.9.1]: https://github.com/debanjanbasu/grr-cli/compare/v0.9.0...v0.9.1
[0.9.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.8.1...v0.9.0
[0.8.1]: https://github.com/debanjanbasu/grr-cli/compare/v0.8.0...v0.8.1
[0.8.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.7.0...v0.8.0
[0.7.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.6.0...v0.7.0
[0.6.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.5.0...v0.6.0
[0.5.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.4.0...v0.5.0
[0.4.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/debanjanbasu/grr-cli/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/debanjanbasu/grr-cli/releases/tag/v0.2.0