Her er 44 versioner af gogcli, fra 15. februar 2026 til den aktuelle 0.47.0. Hver version linker til udgiverens egne installationsfiler.
| Version | Dato | Størrelse | Filer |
|---|---|---|---|
| 0.47.0Nyeste | 23. oktober 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.47.0 - 2026-10-23
Highlights: Opt-in HTML Gmail bodies, selected search headers, and calendar settings updates, with OAuth error redaction and certificate trust fixes.
- Gmail: add opt-in --html-from-text (or GOG_GMAIL_HTML_FROM_TEXT) to generate an escaped HTML alternative for plain send, reply, and draft bodies; preserve plain-text defaults and explicit HTML. (#1251) — thanks @mathieu-ships.
- Gmail: expose up to 50 selected headers in message-search JSON and MCP with --headers, reusing existing reads and preserving sanitization and untrusted-content wrapping. (#1190, #1249) — thanks @obokaman-com.
- Calendar: add update-calendar to inspect or patch calendar-level names, descriptions, locations, and timezones, with field validation, offline previews, and explicit optional-field clearing. (#1245) — thanks @sorenisanerd.
- Auth: omit OAuth provider descriptions, URLs, and response bodies from command errors, per-item results, backup diagnostics, health checks, and watch/verbose logs; retain fixed recovery guidance, authentication exit codes, and both Calendar/Zoom rollback causes. (#1243) — thanks @pkyIntelligence.
- Security: upgrade Alpine's default CA packages in Docker image build and runtime stages to reject the compromised eMudhra certificate chains. (#1244) — thanks @joshavant.
- Auth: make Google Ads (ads) an explicit opt-in instead of part of the default user/all-user set; Google can gate the Ads scope behind mandatory passkey enrollment, which blocked ordinary reauth. Request it with --services user,ads.
- Dependencies: update Pub/Sub, Google API and x/tools plus Cloudflare Workers types and Wrangler; retain Go 1.26 and the tracking worker’s 24-hour release cooldown.
- Gmail: retry 403 rate limits with the existing bounded backoff and stop remaining detail fetches when a search fails; preserve error bodies and open the watch circuit on 403 rate limits. (#1241, #1242) — thanks @xyrolle.
- Gmail: leave quoted search operators to Gmail instead of silently narrowing results with label filters. (#1247) — thanks @SebTardif.
- Gmail: include nonempty Cc and Bcc headers in thread text output. (#1248) — thanks @alexpriest.
- Gmail: preserve the direction of reply and forward headers beside right-to-left text, and add Gmail's quote classes without altering plain text or quoted content. (#1250) — thanks @malob.
- Drive: preserve requested false booleans in list/search JSON, including grouped fields, slash paths, and wildcards; keep conditionally absent fields omitted. (#1246) — thanks @SebTardif. |
| 0.46.0 | 21. oktober 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.46.0 - 2026-10-20
Highlights: Safely re-encrypt auth stores, route Google API calls through credential-free relays, and compose richer Gmail forwards, with Go security fixes.
- Auth: add gog auth rekey <outdir> to write and verify a separate re-encrypted directory while leaving the live keyring untouched; hold the store lock throughout, publish only complete fsynced output, and retain the old directory during installation. (#1224) — thanks @sorenisanerd.
- Google APIs: add GOG_GOOGLE_API_BASE_URL to send *.googleapis.com requests to a test server, emulator, proxy, or relay that adds credentials outside gog; requests keep path and query, pass the original host as X-Forwarded-Host, carry no gog credentials, and refuse cross-origin redirects. (#1225, #1226) — thanks @km-tr.
- Gmail: add --note-html and --note-html-file to forwards and preserve plain-note line breaks in HTML output. (#1215) — thanks @malob.
- Auth: accept gog auth <email> as shorthand for gog auth add <email>; bare gog auth and mistyped subcommands keep their existing errors. (#1221)
- Gmail: lay out the forwarded-message header block the way Gmail Web does: plain text with the sender's name in bold, Name <email> (or <email>) for the sender and each recipient with addresses linked in HTML, and two blank lines before the original body. (#1236) — thanks @malob.
- Drive: preserve requested top-level false booleans in drive get --json, including the default starred and hasThumbnail fields; keep conditionally absent fields omitted. (#1223) — thanks @postoso.
- Security: build release binaries and Docker images with Go 1.27.3 and test the minimum series with Go 1.26.10 to address the crypto/x509 vulnerability GO-2026-6809, while preserving the Go 1.26 minimum.
- CI: use macOS 27 runners for Darwin checks and release preflight while enforcing the macOS 15.0 deployment target.
- Dependencies: refresh the Google API client and generated API definitions while retaining the Go 1.26 minimum and the tracking worker's 24-hour release cooldown.
- Dependencies: refresh the Google API client, golangci-lint, Cloudflare Workers types, Wrangler, PostCSS, and Undici while retaining Go 1.26, pnpm 11, and the worker’s 24-hour release cooldown.
- Dependencies: update Vitest and Cloudflare Workers types within the worker’s 24-hour release cooldown.
- Dependencies: refresh Wrangler, Cloudflare Workers types, Oxlint, and Oxfmt within the tracking worker's 24-hour release cooldown. |
| 0.45.0 | 16. oktober 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.45.0 - 2026-10-16
Highlights: Preserve Gmail search results for negated and OR queries, warn about unmatched JSON selections, and improve reply formatting.
- Gmail: derive labelIds only from system-label terms that hold for every result; a term under NOT or -, inside a negated group, or in a query with OR, | or {…} is left to Gmail, so search, --count, archive, trash, mark-read, unread and autoreply no longer silently narrow such queries. (#1212) — thanks @wstock.
- Output: warn on stderr when a --select path matches no objects in a nonempty result, preserving JSON output and exit status. (#1210) — thanks @postoso.
- Gmail: render the reply attribution line the way Gmail Web does in both text and HTML: no comma after the date, Name <email> (or <email>) with the address linked in HTML, and a narrow no-break space before AM/PM (also in forwarded Date: lines). (#1213) — thanks @malob.
- Auth: clarify that auth login opens the browser account manager, and document manual authorization and unattended health checks. (#1214) — thanks @jingtying.
- Dependencies: refresh Google API and MCP clients plus tracking-worker tooling within the Go 1.26 floor and 24-hour worker release cooldown; add a non-publishing release-pipeline dry run. |
| 0.44.0 | 11. oktober 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.44.0 - 2026-10-11
Highlights: Upload Photos media, configure Meet settings, and add Gmail signatures, with Go security fixes and dependency updates.
- Photos: upload media and list/create app-created albums with an explicit append-scope opt-in; preserve read-only defaults and narrowed grants during reauthorization. (#1185) — thanks @beyondzero.
- Meet: configure recording, transcription, smart notes, attendance reports, and moderation through explicit create/update flags; preserve omitted settings with per-field update masks. (#1182) — thanks @regaw-leinad.
- Gmail: add --signature, --signature-from, and --signature-file to gmail drafts create, gmail drafts update, gmail forward, and gmail drafts forward; the signature follows the sending alias and sits above the quote or between the note and the forwarded message. (#1193) — thanks @adameq.
- Security and dependencies: build with patched Go 1.27.2, test the Go 1.26 minimum series on 1.26.9, and refresh goimports, deadcode, and Cloudflare Workers types while preserving the Go 1.26.0 floor and worker release cooldown.
- Gmail: include recipient headers and optionally sanitize message-search content through CLI and MCP; preserve untrusted sender/recipient wrapping across JSON projection. (#1188) — thanks @kendrickkester.
- Gmail: preserve omitted Cc/Bcc recipients when updating drafts and allow explicit empty values to clear them. (#1186) — thanks @karyandrew.
- Gmail: allow explicitly empty bodies with attachments while still rejecting omitted message content. (#1189) — thanks @jaysonsantos.
- Gmail: preserve standard payload header identifiers under --wrap-untrusted, keep custom names and values wrapped, and wrap flattened sender/recipient display text. (#1183) — thanks @postoso.
- Docker: pre-create /persist/gogcli owned by the non-root gog user so the documented named-volume GOG_HOME is writable on first run, and document the one-time ownership step for bind mounts and pre-existing volumes. (#1197) — thanks @wstock.
- Dependencies: refresh Google API and telemetry modules, tracking-worker packages, pnpm 11, and x/tools while retaining the Go 1.26 floor and worker release cooldown.
- Dependencies: update Google API/auth, MCP, networking and cryptography modules, Wrangler, Workers types, Vite, and patched Sharp 0.35.5 (GHSA-wq5f-xc86-pv6w) while retaining Go 1.26, pnpm 11, and the worker's 24-hour release cooldown.
- Gmail: document the option delimiter for search queries beginning with -, with thread and message examples and flags-before-delimiter guidance. (#1184) — thanks @postoso.
- Auth: make the documented doctor preflight inspect diagnostic status before continuing, and clarify diagnostic exit semantics. (#1195, #1198) — thanks @coygeek and @goutamadwant.
- Auth: direct doctor recovery hints to preserve recorded services, scope modes, extra scopes, and the OAuth client instead of requesting the default grant. (#1196) — thanks @coygeek.
- Docs: select gog skills explicitly during installation and identify the separate maintainer-only Crabbox skill. (#1194) — thanks @coygeek. |
| 0.43.0 | 1. oktober 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.43.0 - 2026-09-30
Highlights: JSON error envelopes and page metadata, a default auth/config status view, and clearer Gmail MIME guidance.
- Output: add stable JSON error envelopes without appending a second document after command results, and include returned-row count and has_more in common paged lists and Drive file listings. (#1172) — thanks @amiruluniten.
- CLI: show executable, description, and auth/config status when invoked without arguments; use gog --help for the command overview. Preserve JSON-only status output and command policies. (#1172) — thanks @amiruluniten.
- Gmail: clarify full-payload versus raw MIME reads, quote source selection, and the limits of offline reply previews. (#1173) — thanks @hashtag1974.
- Dependencies: update Wrangler and Cloudflare Workers types to their latest releases eligible under the tracking worker’s 24-hour cooldown; retain the pnpm 11 and Go 1.26 floors. (#1178)
- Dependencies: refresh Google API/authentication, MCP and gRPC clients, golangci-lint, pnpm 11, and tracking-worker tooling while retaining Go 1.26 compatibility and the worker's 24-hour release-age policy. (#1175) |
| 0.42.0 | 25. september 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.42.0 - 2026-09-25
Highlights: Batch editing across Sheets, Docs, Slides, and Forms; native Contacts batch commands; typed Gmail MCP tools; auth_required exit code, allowlist rejection, and correct batch end --continue-on-error exit status.
- Sheets: queue structural edits across commands with --batch, reuse one captured metadata snapshot, and submit an atomic update with explicit endpoint permission and guarded non-atomic recovery. (#1099) — thanks @sebsnyk.
- Sheets: submit atomic structural request arrays with sheets batch-request, preserving explicit JSON values, previewing exact requests, and requiring explicit grants in restricted command policies. (#1108) — thanks @gurgeous.
- Slides: queue native slides, elements, text, and table edits across commands with --batch, then submit one revision-locked atomic update while preserving generated IDs and explicit service permissions. (#1097) — thanks @sebsnyk.
- Forms: queue questions, moves, deletions, and settings with --batch, project append positions under the queue lock, and submit one revision-locked atomic update with explicit service permissions. (#1100) — thanks @sebsnyk.
- Contacts: add native batch get/create/update/delete commands with etag-checked field-specific updates, offline previews, and explicit partial progress; batch dedupe deletion while retaining changed-contact guards. (#1101) — thanks @sebsnyk.
- MCP: add typed Gmail draft and mailbox tools with literal label entries, reject empty runtime tool allowlists, and require separate send and permanent-delete opt-ins that preserve account policies, no-send restrictions, and destructive confirmations. (#1137) — thanks @alex-strattab.
- Gmail: optionally replace genuinely missing quoted inline images with visible placeholders in reply drafts, preserving strict defaults and valid resources and reporting degradation for review. (#1113) — thanks @hashtag1974.
- Auth: return the documented auth_required exit code (4) for expired or revoked OAuth grants, preserving reauthorization advice in unattended and read-only commands. (#1152)
- CLI: reject comma-only runtime command lists instead of silently treating malformed allowlists as unrestricted access; preserve empty overrides and valid CSV lists. (#1157)
- Docs: reject explicitly empty or whitespace-only --batch values before input or authentication, preventing accidental immediate edits when a batch variable is empty. (#1156)
- Docs: return a nonzero exit status when batch end --continue-on-error retains failed requests, while preserving its result summary and successfully applied edits. (#1154)
- Groups: use the documented single-label membership query in listings and backups, preserving native pagination and escaping member identities correctly. (#1059) — thanks @hengshan.
- Sheets: preserve caller cancellation when immediately submitting links set updates. (#1099)
- Sheets: preserve zero IDs, false flags, empty and null values, and unknown fields in lossless sheets raw output, including pretty and wrapped output. (#1155)
- Raw JSON: preserve explicit values and unknown fields across Docs, Slides, Drive, Gmail, Calendar, Forms, Tasks, and People/Contacts; retain Drive redaction and lossless Docs tab projection. (#1158)
- Comments: clarify that quoted Drive API comments are unanchored in Google editors and warn on stderr, including dry runs, while preserving payloads and machine-readable output. (#1160) — thanks @ignacioreyna. |
| 0.41.0 | 22. september 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.41.0 - 2026-09-22
Highlights: Raw RFC822 drafts, Search Console URL inspection, automatic Slides image sizing, and fixes for lost Gmail results, cancellation, and Sheets crashes.
- Dependencies: retain patched gRPC 1.83.2 with Google API 0.298 to avoid GHSA-2v4p-qf9q-27wj; gog does not use the affected xDS server. (#1150)
- Gmail: stage and replace raw RFC822 drafts, retrieve their MIME, and preview safely offline; bound raw draft/send input to 35 MiB while preserving no-send policies. (#1126) — thanks @darkamenosa.
- Search Console: add searchconsole inspect for per-URL index status via the URL Inspection API (coverage state, indexing/page-fetch/robots.txt state, canonical, sitemaps, last crawl time), using the existing webmasters OAuth scope. (#1094) — thanks @laihenyi.
- Slides: derive either missing image dimension from local files or anonymously readable public HTTPS images, preserving explicit size pairs and documenting the public-fetch requirement. (#1112) — thanks @sebsnyk.
- Sheets: return an error instead of crashing when append responses omit update metadata, without retrying the potentially completed write. (#1142) — thanks @SebTardif.
- Calendar: show failed Zoom meeting cleanup alongside a failed Calendar write, preserving both causes through CLI error formatting. (#1144) — thanks @SebTardif.
- Gmail: fail thread searches when a detail fetch fails instead of silently returning partial results after a discarded retry. (#1138) — thanks @SebTardif.
- Gmail: accumulate repeated --add and --remove label flags across thread, message, batch, and label modifications while preserving literal comma/backslash splitting and normalization. (#1139) — thanks @ShacharBialick.
- Gmail: inspect Pub/Sub notifications matching the saved watch cursor so pending history changes can reach the hook. (#1140) — thanks @kazuyuki-eguchi.
- API: honor in-flight command cancellation in YouTube, Chat unread lookups and sends, and People profile and relation requests. (#1145) — thanks @SebTardif.
- API: honor api list --plain with stable, sanitized TSV columns while preserving default and JSON catalog responses. (#1141, #1146) — thanks @postoso and @goutamadwant.
- API: close upload bodies when the circuit breaker rejects a request or retry buffering fails, preventing leaked files and streams. (#1136)
- Apps Script: keep file names within one TSV field in appscript content, escaping line breaks instead of splitting output rows. (#1091) — thanks @haosdent.
- Docs: identify the queued batch UUID in revision-mismatch errors so it can be inspected or aborted. (#1143) — thanks @SebTardif.
- Search Console: preserve permission-denied exit codes when adding API setup or scope guidance. (#1094)
- Dependencies: refresh Google/MCP clients and protocol modules, gofumpt, Node 26/Corepack, pnpm 11, Docker build pins, and tracking-worker Vite, PostCSS, Undici, Nano ID, and tooling pins while retaining Go 1.26 compatibility and release-age limits. (#1134, #1148)
- CI: verify the Go 1.26 minimum, worker types, and generated skills; avoid duplicate pull-request test runs and repair remote validation setup. (#1131, #1147) |
| 0.40.0 | 11. september 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.40.0 - 2026-09-11
Highlights: Preserve Slides styling, format paragraphs, and reuse cached Discovery documents; duplicate or inspect individual spreadsheet tabs and sort Drive files.
- Slides: preserve leading text styling during insert-text --replace, including template inheritance, with revision protection and correct empty-target and UTF-16 handling. (#1111, #1122) — thanks @sebsnyk.
- Slides: add paragraph-style for shape and table-cell alignment, spacing, indentation, and direction, with explicit field masks and zero-value support. (#1098, #1123) — thanks @sebsnyk.
- API: cache Discovery documents for 24 hours with bounded disk usage, isolated endpoint/version keys, and explicit --no-cache bypass; keep API responses and authorization checks uncached. (#1106, #1121) — thanks @gurgeous.
- Sheets: duplicate a tab within its spreadsheet, with an explicit destination name and optional insertion index. (#1102, #1116) — thanks @gurgeous.
- Sheets: filter raw API reads by exact tab title with --sheet, including A1-like names and apostrophes, while retaining spreadsheet metadata and the grid-data opt-in. (#1104, #1115) — thanks @gurgeous.
- Drive: add opt-in ls --sort and --order controls while preserving the existing modification-time default and native pagination. (#1105, #1117) — thanks @gurgeous.
- Slides: delete several page elements in one guarded API batch, retain single-element output compatibility, and document replacing WordArt elements. (#1109) — thanks @sebsnyk.
- Sheets: preserve zero-valued dimension indices so inserting before the first row or column succeeds. (#1107, #1114) — thanks @gurgeous.
- Docs: replace the reserved default alias command with the account manager's Set default action and explain account-selection precedence. (#1092, #1093) — thanks @gianpaj and @goutamadwant.
- Dependencies: refresh Go networking, authentication and cryptography modules and tracking-worker tooling, including the patched Sharp dependency, while retaining Go 1.26 compatibility and the worker's 24-hour release-age policy.
- Tooling: refresh goimports and deadcode to x/tools v0.50.0 while retaining the Go 1.26 minimum. (#1120) |
| 0.39.1 | 5. september 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.39.1 - 2026-09-05
Highlights
- Backups: stop repeated page tokens across Drive, Calendar, Contacts, Tasks, Groups, Admin, Keep, Workspace, and Apps Script without adding new page limits; retain earlier ACL and membership rows on ordinary API failures. (#1078, #1079, #1080, #1081, #1082, #1087) — thanks @SebTardif.
- Calendar: stop cyclic recurring-instance lookups while preserving success as soon as the requested occurrence is found. (#1084, #1087) — thanks @SebTardif.
- Gmail: stop cyclic query scans before bulk message changes or automatic replies, including empty result pages. (#1086, #1087) — thanks @SebTardif.
- Drive and Contacts: stop tree, inventory, disk-usage, and contact-dedupe scans on repeated page tokens before emitting a partial report or applying contact changes. (#1083, #1085, #1087) — thanks @SebTardif.
- Docs: stop open-comment scans when Drive repeats a page token, preserving first-open-page results. (#1087) — thanks @SebTardif.
- Dependencies: refresh Google API support modules, tracking worker tooling and Undici, pnpm, and the Pages deployment action while retaining Go 1.26 compatibility.
- MCP: update the protocol SDK to 1.0 while preserving existing stdio clients. |
| 0.39.0 | 3. september 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.39.0 - 2026-09-03
Highlights
- AdSense: add explicitly opted-in read-only account, inventory, and report commands, including saved reports and validated reporting timezones. (#1047) — thanks @ptz0n.
- Chat: search messages across Workspace spaces with paging, formatted text, optional read-state metadata, and read-only/untrusted-output support; unavailable read state stays unknown. (#1069, #1068) — thanks @wrgrant.
- Auth: explicitly select a Google Cloud quota project with --quota-project or GOG_QUOTA_PROJECT, preserving default auth behavior and forwarding the setting through Gmail watch and MCP requests. (#1056, #1055) — thanks @prateek.
- Gmail: expose flattened reply_to in message JSON and default metadata reads, including sanitized messages and threads, with untrusted-content wrapping support. (#1057) — thanks @hashtag1974.
- Docs: accept the A3 page-size preset in docs page-layout and docs write, preserving the current page mode unless explicitly changed. (#1050) — thanks @ryo-touch.
Fixes and maintenance
- Chat: wrap formattedText in existing raw Chat and Discovery API JSON responses when --wrap-untrusted is enabled, preserving ordinary JSON output. (#1069) — thanks @wrgrant.
- Docs: preserve underscores in enum values and environment-variable names in rendered command references instead of treating them as emphasis. (#1073)
- Dependencies: refresh Google API clients, Goldmark, and Go cryptography dependencies while retaining Go 1.26 compatibility.
Validation notes
- Live-tested Docs A3, Gmail Reply-To output, and quota-project opt-in boundaries with existing account grants. Successful Workspace Chat search, AdSense publisher reports, and valid quota-project requests remain unverified; their local regression coverage and expected account/scope failures were checked. |
| 0.38.3 | 3. september 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.38.3 - 2026-09-02
- Chat: wrap flattened sender display names in message and thread listings when --wrap-untrusted is enabled, preserving ordinary JSON output. (#1069) — thanks @wrgrant.
- Releases: reject an existing generic Unreleased section before the post-release helper changes the changelog or development version.
- Build: update the preferred Go toolchain and pinned Docker builder to Go 1.27.1 while retaining Go 1.26 compatibility.
- Backup: stop Chat and Classroom pagination loops while preserving already-fetched Classroom child rows when a later ordinary API request fails. (#1063) — thanks @SebTardif.
- Drive: reject repeated page tokens during drive sync push scans before writing files or emitting a partial plan. (#1065) — thanks @SebTardif.
- Drive: stop permission audits and bulk permission preflights on repeated page tokens without partial audit output or permission writes. (#1066) — thanks @SebTardif.
- CLI: isolate baked safety-profile locked flags, output precedence, and diagnostic notes per command invocation, fixing shared locked-flag state races. (#1067)
- Gmail: document the HTML-body workaround for drafts that Gmail web rewraps when sending, without changing MIME defaults. (#1064, #1058) — thanks @daveotero. |
| 0.38.2 | 2. september 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.38.2 - 2026-09-02
- Gmail: preserve direct --access-token / GOG_ACCESS_TOKEN authentication in gmail watch serve push handlers without requiring stored OAuth credentials; token expiry and refresh behavior remain unchanged. (#1042) — thanks @bill-starfoundry.
- Gmail: stop --from-contact fallback lookup with a clear error when Google repeats a page token, while preserving exact-match and ambiguity checks across all pages. (#1045) — thanks @SebTardif.
- People/Contacts: stop raw email-identifier lookup when Google repeats a page token, preserving unique-resource matching and ambiguity checks without partial output. (#1044) — thanks @SebTardif.
- Contacts: stop contact exports safely when group listings repeat a page token, preserving vCard categories across all pages without writing a partial export. (#1046) — thanks @SebTardif.
- Backup: update age encryption to reject headers larger than 2 MiB or containing more than 1024 recipient stanzas when reading encrypted shards. (#1053)
- Docs: validate page-layout sizes and margins before dry-run, and preview the resolved document-style request used for execution. (#1052, #1051) — thanks @ryo-touch.
- HTTP: cap Google Retry-After delays at 60 seconds per retry, including numeric values that exceed integer or duration limits. (#1043) — thanks @SebTardif.
- Sheets: preserve zero-valued sheet, row, and column indexes in Connected Sheets refresh status references, keeping A1 anchors identifiable. (#1041, #938) — thanks @ryo-touch.
- Dependencies: prefer Go 1.27 while retaining Go 1.26 compatibility, refresh Google and MCP SDKs, update tracking worker dependencies and Go tooling, and refresh Docker build actions. (#1040, #1053)
- API: resolve service-hosted Discovery documents such as Meet v2 after a default-directory 404, preserving explicit overrides and Google request-host safeguards. (#1049, #1048) — thanks @goutamadwant. |
| 0.38.1 | 26. august 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.38.1 - 2026-08-25
- Gmail: send exact prebuilt RFC822 messages with verified sender/account guards, normalized thread IDs, and content-safe offline dry runs. (#1032, #1029) — thanks @higginz777.
- Auth: add least-privilege Gmail send and read-send authorization, reject read-only/send conflicts, and preserve narrow Gmail grants during reauthorization. (#1033) — thanks @higginz777.
- Downloads: honor explicit new output directories for Drive, Docs/Sheets/Slides exports, Docs tabs, Photos, and Photos Picker without changing existing defaults or overwrite protections. (#1036)
- Gmail: honor attachment-download dry runs for threads and drafts without opening account credentials, fetching messages, or writing files. (#1035)
- Security: redact authenticated Git remotes and configured API keys from backup/config command output and dry-run previews. (#1035)
- Sheets: reject missing Connected Sheets refresh replies without claiming success or retrying a potentially billable execution. (#1037)
- Backup: honor dry-run for all backup push commands without authenticating, fetching Google data, creating local caches or checkpoints, or changing Git repositories. (#1034)
- Auth: make remote authorization dry runs side-effect-free instead of creating OAuth state or exposing authorization URLs. (#1034)
- Config: preserve concurrent account aliases, client mappings, and security settings by keeping every configuration update inside its shared file lock. (#1034) |
| 0.38.0 | 25. august 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.38.0 - 2026-08-25
- Sheets: add the full BigQuery Connected Sheets lifecycle—create, update, refresh, and safely delete data sources—with explicit billing and authorization, protected SQL previews, correct source matching, and reliable extract reads. (#938, #1001) — thanks @ryo-touch.
- Gmail: never silently drop a requested quoted message when sending, replying, forwarding, or creating drafts; surface fetch failures and warn when the original has no quotable text. (#996) — thanks @malob.
- Calendar: add --no-reminders when creating or updating events and correctly clear custom overrides when restoring calendar-default reminders. (#1002, #1016) — thanks @sorenisanerd.
- Gmail/Calendar: stop safely when Google repeats a pagination token, preventing stalled listings and resumed Gmail backups. (#1004) — thanks @SebTardif.
- Apps Script: pull project source and inspect deployments and versions without mutating remote projects. (#1018) — thanks @haosdent.
- Chat: include user mentions and emoji-reaction summaries in message-list JSON while preserving existing text output. (#1000) — thanks @Ben-Living.
- Slides: skip and unskip slides and expose their visibility without changing existing plain-text output. (#1009) — thanks @marnunez.
- Auth: explain Google Account and OAuth requirements, preserve enabled services during reauthorization, and provide client-specific repair guidance when credentials are missing. (#1014, #1015, #1017) — thanks @coeur-de-loup.
- Config: prevent intermittent Windows access-denied errors by safely serializing concurrent configuration updates.
- Output: clarify that --results-only unwraps command output before --select applies field projection. (#1007)
- Security: bound Google HTTP clients, Gmail watch listeners, and local OAuth callbacks so stalled, slow, or oversized requests cannot hang the CLI. (#995, #998)
- Security: harden HTML sanitization, untrusted-output allocation, tracking encryption, and live-evaluation session identifiers without changing public output formats. (#1011, #1012, #1013)
- Security: restrict GitHub Actions repository tokens to the minimum read-only permissions required by CI. (#1010) |
| 0.37.0 | 14. august 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoterv0.37.0 - 2026-08-14
- Gmail: emit sanitized message headers and bodies once in gmail get --json --sanitize-content, while retaining the message envelope and --results-only unwrapping. (#986) — thanks @ronny-rentner.
- Sheets: add read-only Connected Sheets discovery, full data-source descriptions and execution status, plus bounded reads for anchored data-source tables (extracts) behind an explicitly opted-in BigQuery scope. (#938) — thanks @ryo-touch. |
| 0.36.0 | 13. august 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoterv0.36.0 - 2026-08-13
Highlight: Gmail grows full draft-side reply workflows — reply, reply-all,
and forward compose real drafts (never auto-sending), with address-aware
recipient validation.
- Gmail: add draft-only reply, reply-all, and forward workflows with shared send-side composition, no-send compatibility, and address-aware recipient validation. (#977) — thanks @malob.
- Gmail: add opt-in exact-or-lower-bound match counts to thread and message searches without treating Gmail's result estimate as exact. (#983, #984) — thanks @chrischall.
- Auth: offer one-time re-authorization for expired or revoked stored OAuth refresh tokens after interactive confirmation, while preserving non-interactive recovery guidance. (#973) — thanks @inamiy.
- Calendar: anchor --days at an explicit --from, preserve calendar-day windows across DST, and reject conflicting window flags instead of silently discarding them. (#981) — thanks @frankhli843.
- Safety: allow custom baked profiles to lock boolean CLI flags against command-line, environment, and config overrides without echoing the locked value in override errors. (#976) — thanks @ronny-rentner.
- Dependencies: update Kong, Google protobuf/genproto, Cloudflare Workers types, and pnpm to their latest releases. |
| 0.35.0 | 9. august 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.35.0 - 2026-08-09
- Install: move the Go module to github.com/openclaw/gogcli; new releases install with go install github.com/openclaw/gogcli/cmd/gog@latest instead of the former github.com/steipete/gogcli path.
- Security: carry forward the golang.org/x/text (GO-2026-5970) and gRPC-Go (GO-2026-6061) advisory remediations prepared for the tagged but unpublished 0.34.2 release.
- Docs: add opt-in --locate and --tab to docs comments list, resolving all comment locations from one shared document fetch. (#961, #965) — thanks @ryo-touch.
- Gmail: allow GOG_GMAIL_AUTO_FROM_ADDRESSED_ALIAS to enable the existing addressed-alias sender policy for replies and reply-context drafts. (#964) — thanks @ronny-rentner.
- Gmail: add opt-in compact 0-based attachment references across search, message, thread, draft, and download workflows. (#963) — thanks @ronny-rentner.
- Gmail: add opt-in attachment metadata to message search in JSON and text output without rendering decoded bodies. (#962) — thanks @ronny-rentner.
- Security: redact credentials embedded in Gmail watch hook URLs, including userinfo, path, query, and fragment components, unless --show-secrets is set. (#960) — thanks @bunlongheng.
- Gmail: add guarded single-message RFC822/EML import from a file or stdin, with labels, internal-date, spam, calendar-processing, and parse-only dry-run controls. (#956) — thanks @holgergruenhagen.
- Gmail: warn before a draft update replaces an existing rich-text body with plain text only, while keeping JSON stdout clean. (#955) — thanks @mcinteerj.
- Dependencies: update the Google API and OpenTelemetry stacks, Go developer tools, pnpm, and email-tracking worker toolchain to their latest policy-eligible releases.
- Docs: rewrite the README as a concise front door and move task examples into a dedicated guide. |
| 0.34.1 | 16. juli 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter- Drive: add non-destructive drive sync push for recursive local-directory uploads with checksum skips, ID-preserving updates, full conflict preflight, deterministic dry-run plans, and shared-drive support. (#925) — thanks @Avg8888.
- Gmail: add gmail attachment --inline for bounded base64 content output to remote callers while always fetching fresh bytes and retaining path-only fallback above 3 MiB. (#919) — thanks @chrischall.
- Docs: preserve external and internal text-run link targets in docs cat --chips, JSON, tab, table, and numbered output while keeping default text unchanged. (#917, #921) — thanks @neo-wanderer.
- Gmail: enforce per-account no-send guards before dry-run exits for first-class and Discovery send paths while preserving no-guard keyring avoidance. (#915, #916) — thanks @veteranbv.
- Gmail: accept padded Gmail API base64url payloads in gmail get --format raw while retaining unpadded compatibility. (#922, #923) — thanks @goutamadwant.
- MCP: add optional global and per-account capability ceilings in config.json, with narrow persistent write authorization, runtime-only restriction, and fail-closed selector validation. (#913) — thanks @mcaldas.
Full changelog: https://github.com/openclaw/gogcli/blob/v0.34.1/CHANGELOG.md |
| 0.34.0 | 11. juli 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter- Calendar: add --timezone / --tz display overrides to calendar events and calendar event, including uniform multi-calendar output without changing range parsing. (#908) — thanks @bxxd.
- Calendar: render event-local fields in the event's own timezone when present, falling back to the containing calendar timezone. (#905) — thanks @Hilo-Hilo.
- Docs: add opt-in smart-chip rendering to docs cat --chips and structured person, date, and rich-link metadata to JSON output while preserving default text output. (#907, #909) — thanks @TurboTheTurtle.
- Release: sign and notarize macOS artifacts locally with the OpenClaw Foundation Developer ID while preserving the existing com.steipete.gogcli.gog identifier; ordinary builds and GitHub CI remain credential-free.
Full changelog: https://github.com/openclaw/gogcli/blob/v0.34.0/CHANGELOG.md |
| 0.33.0 | 6. juli 2026 | — | 64-bit ZIPARM64 ZIP |
| 0.32.0 | 3. juli 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.32.0
- Docs: add docs suggestions list for read-only pending text insertions and deletions, including exact UTF-16 ranges, segment context, and tab selection. (#876)
- Auth: retry one replayable Google API request after an insufficient scopes 403 by refreshing stored OAuth credentials, while preserving ordinary permission failures and non-replayable requests. (#889) — thanks @ortonom.
- CLI: add read-only update status / update check release metadata, platform asset, checksum, and install-method reporting. (#882) — thanks @titus7490.
- YouTube: add opt-in videos list --parts all full metadata while preserving the existing compact default and explicit owner-only part requests. (#871) — thanks @coeur-de-loup.
- Docs: add docs format --spacing-mode for setting paragraph spacing collapse behavior alongside --space-above and --space-below. (#885) — thanks @odyssey4me. |
| 0.31.1 | 26. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.31.1
- Calendar: add calendar changed for listing recently modified events, including cancellations, across one or more calendars. (#875) — thanks @sorenisanerd.
- Calendar: add a ;resource attendee modifier for event create, attendee replacement, and additive attendee updates. (#881) — thanks @titus7490. |
| 0.31.0 | 24. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.31.0
- Gmail: preserve HTML fragments from --signature-file instead of escaping their markup, without broadening HTML detection for message display or reply quoting. (#879) — thanks @kesslerio.
- Docs: honor --tab when setting document layout so page-layout --tab (and write --pageless --tab) target the specified tab instead of always the default tab. Page layout is per-tab; previously these silently no-opped on secondary tabs of multi-tab documents. (#878) — thanks @atmasphere.
- Auth: recover from corrupt stored OAuth token payloads by routing only classified decode corruption through the normal re-authentication flow while preserving operational keyring errors. (#872, #874) — thanks @KrasimirKralev.
- Calendar: add repeatable or comma-separated events --event-types filtering across single, selected, and all-calendar listings while preserving the existing unfiltered default. (#870) — thanks @malob.
- Gmail: render quoted-reply and forwarded-message dates in Gmail's human-readable style using the configured account timezone. (#873) — thanks @malob.
- Evals: add reproducible structural and live Codex/OpenClaw gog/gws comparisons with correctness assertions, token/tool/latency metrics, cache-counterbalanced repetitions, methodology, and CI coverage.
- CLI: add GOG_HELP=agent compact root help with common read-only recipes and targeted schema guidance so agents can execute Gmail, Calendar, and Drive tasks without traversing multiple help levels.
- Auth: add auth setup for guided Google Cloud project/API preparation, OAuth client installation, and optional browser authorization.
- API: add Discovery-backed api list, api describe, and scoped api call access for Google methods outside the first-class command surface, with dry-run plans and explicit write opt-in.
- Safety: add global --readonly / GOG_READONLY=1 runtime enforcement that blocks mutating Google and Zoom API requests before dispatch while preserving read-only query POSTs and least-privilege OAuth setup.
- Add schema-generated service skills and curated agent workflows for inbox triage, meeting prep, attachment archival, Drive audits, weekly digests, and contact cleanup.
- Docs: sharpen the README and overview around task-first workflows, predictable automation, identity routing, layered agent safety, and honest product boundaries. |
| 0.30.0 | 22. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.30.0
Added
- Sheets: add structured formula-error verification to sheets update --fail-on-formula-error, using exact updated-range grid data and canonical --values-json @file input. (#849) — thanks @alexknowshtml.
- Docs: add first-class footnote, section-break, horizontal-rule, and section-column commands with shared index, anchor, tab, dry-run, and batch behavior where supported. (#856) — thanks @sebsnyk.
- Docs: add header/footer lifecycle commands plus segment-aware plain-text insert, update, delete, format, and range lookup across headers, footers, and footnotes. (#857) — thanks @sebsnyk.
- Docs: add table cell borders, padding, and vertical content alignment to docs cell-style. (#855) — thanks @sebsnyk.
- Docs: add minimum height and page-overflow controls to docs table-row style. (#855) — thanks @sebsnyk.
- Docs: add docs table-row pin-header --rows N for pinning or unpinning repeated table header rows. (#855) — thanks @sebsnyk.
- Docs: add paragraph bullet and numbering creation/removal plus indentation, spacing, and keep controls to docs format and plain-text docs write. (#852) — thanks @sebsnyk.
- Docs: add replace-image with exact object-ID, alt-text, single-image, tab, public-URL, and local-file targeting while preserving the original image position and bounds. (#853) — thanks @sebsnyk.
- Docs: add insert --markdown to convert markdown to Google Docs formatting and place the converted block at a position resolved by --index/--at/--occurrence, giving insert parity with the existing update --markdown and write --markdown paths. (#851, #854) — thanks @sebsnyk. |
| 0.29.0 | 19. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.29.0
Added
- Auth: make keyring open/operation timeouts configurable with GOG_KEYRING_OPEN_TIMEOUT, using a 30s macOS default for permission prompts while retaining 10s elsewhere. (#845) — thanks @malob.
- Calendar: add create --timezone/--tz to apply one IANA timezone to both event endpoints while retaining granular start/end timezone flags. (#844) — thanks @malob.
- Docs: add non-destructive insert-image --before and --after anchors while clarifying that --at replaces its placeholder. (#839) — thanks @sebsnyk.
- Slides: allow insert-image and replace-slide to use public HTTPS image URLs without temporary Drive sharing. (#825) — thanks @sebsnyk.
- Slides: add structured element geometry, styled text runs, table-cell content, image source URLs, native presentation metadata, and read-only text location with exact UTF-16 ranges. (#822) — thanks @sebsnyk.
- Slides: add range-scoped styling, links, bullets, and object-scoped replacement; replace-text now requires explicit --object, --page, or --all scope instead of silently changing the whole deck. (#823, #835) — thanks @sebsnyk.
- Slides: add native table creation and zero-based table-cell targeting for insert-text, including atomic cell replacement. (#824, #834) — thanks @sebsnyk.
- Slides: add revision-locked native table row/column insertion and deletion plus merge/unmerge operations with provider bounds checks. (#824, #847) — thanks @sebsnyk.
- Slides: add revision-locked table row/column sizing, cell fill/alignment/text styling, and range-scoped border styling. (#824, #848) — thanks @sebsnyk.
- Slides: add native themed slide creation, duplication, and reordering with predefined or exact custom layouts and explicit zero-based positions. (#826, #833) — thanks @sebsnyk.
- Slides: add native shape and line creation plus element transforms, fill/outline styling, z-order, grouping, alt text, and guarded deletion. (#826) — thanks @sebsnyk.
Changed
- Docs: expose all current Slides feature guides in the documentation site, enforce their coverage, and document table sizing and styling constraints.
Fixed
- Docs: preserve the matched paragraph's list or heading structure on the first plain paragraph of a block Markdown replacement. (#838) — thanks @sebsnyk.
- Calendar: report multi-calendar event truncation on stderr for text output and as per-calendar page tokens in JSON. (#831) — thanks @TurboTheTurtle.
- Downloads: protect Drive downloads, Docs/Sheets/Slides exports, Docs tab exports, and Slides thumbnails from replacing existing files unless --overwrite is passed. (#827, #829) — thanks @WadydX.
- Docs: update the Docker authentication example to persist file-keyring tokens with GOG_HOME. (#828, #830) — thanks @WadydX. |
| 0.28.0 | 15. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.28.0
Added
- Contacts: add guarded contacts dedupe --apply merging with exact dry-run plans, repeatable --resource scoping, confirmation, full updatable-field preservation, etag checks before deletion, and refusal of ambiguous or unmergeable groups. (#815) — thanks @privatenumber.
- Docs: expose heading IDs in docs headings list --json and docs paragraphs list --json for building in-document deep links. (#819, #820) — thanks @sebsnyk.
Changed
- Gmail: show ordinary message bodies in full by default in text output, retain a generous cap for unusually large messages, and point truncated output to --full or --json. (#807) — thanks @privatenumber. |
| 0.27.1 | 15. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.27.1
Fixed
- Calendar: accept relative and date-only freebusy --from/--to values using the same timezone-aware range parsing as events. (#806, #811) — thanks @privatenumber.
- Gmail: add --reply-all to draft create and update so reply drafts can infer original recipients while preserving explicit recipient overrides. (#804, #805) — thanks @privatenumber.
- Gmail: make truncated text bodies point to --full or --json and align thread help with full-body behavior. (#807, #809) — thanks @privatenumber.
- CLI: mention --all or --all-pages in next-page hints while retaining page-token guidance. (#808, #810) — thanks @privatenumber.
- Docs: validate local Markdown heading anchors during docs coverage checks, including Unicode and encoded fragments. (#812) — thanks @kiranmagic7. |
| 0.27.0 | 14. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.27.0
Added
- Gmail: add first-class gmail reply and gmail reply-all commands with inherited Re: subjects, quoted originals by default, preserved display names and CID inline images, additive recipient placement, automatic moves between To/Cc/Bcc, and repeatable --remove; reply-mode gmail send also inherits omitted subjects, while forwards preserve inline images without incorrectly claiming the original reply thread.
- YouTube: add playlists items list for public and private playlist contents with pagination, and videos list --my-rating like|dislike for authenticated rating history. (#787) — thanks @coeur-de-loup.
Fixed
- Docs: reject ambiguous docs cat --tab ... --all-tabs and MCP docs_get requests before contacting the Docs API. (#801) — thanks @kiranmagic7. |
| 0.26.0 | 14. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.26.0
Added
- YouTube: add subscription listing and management plus playlist create, add, remove, and delete commands with least-privilege OAuth, dry-run support, structured output, and destructive-operation confirmation. (#767) — thanks @beezly.
- Calendar: add unsubscribe for removing calendar-list entries and delete-calendar for deleting owned secondary calendars, with dry-run, confirmation, and structured output.
Fixed
- Contacts: remove the nonfunctional contacts other delete command; the public People API has no delete operation for Other Contacts, and its copy-then-delete workaround reported success without removing the source. Existing invocations now return unknown-command usage.
- Meet: return empty history and participant collections as JSON arrays, and make participants --fail-empty control the no-conference exit instead of misclassifying it as invalid usage.
- MCP: validate typed tool calls against their closed schemas before command execution, rejecting unknown fields, wrong types, and missing required fields.
- CLI: classify malformed OAuth token imports as usage errors and missing Gmail tracking setup as configuration errors.
- CLI: classify invalid Docs batch IDs and incomplete Gmail filter definitions as usage errors with exit code 2.
- Docs: keep batch list/show, batch target validation, and batch end dry-runs read-only without creating state directories or lock files.
- Docs: persist successful split and individual batch submissions before reporting a missing response revision, preventing retries from submitting already-applied requests again.
- Gmail: make watch status read atomic watch state without creating state directories or lock files.
- Gmail: make watch serve --dry-run return a secret-free daemon plan without creating/locking/updating watch state, saving hook settings, creating clients, or opening a socket.
- Backup: make status, verify, cat, and export use read-only repository setup and file-free dry-run plans, support pre-created empty repository directories, keep failed clones clean, disable Git credential prompts under --no-input, redact credentials from Git errors, preserve clone failures instead of initializing a new repository, and give status/verify the existing --no-pull flags while retaining hidden compatibility for legacy write-only options.
- Auth: make auth manage --dry-run preview the browser flow without touching the keyring or server, and fail fast when real execution uses --no-input.
- Docs: make docs cell-style table, row, and column coordinates one-based like adjacent table commands, with negative table indexes counting from the end.
- Docs: make positional docs sed image selectors deterministic by ordering anchored positioned images with document content and unanchored positioned images by object ID.
- Docs: make addressed docs sed substitutions honor nth-match flags, use UTF-16 document indices, and ignore table or table-of-contents preview text instead of producing invalid mutation ranges.
- Docs: keep docs sed formatting, footnote, break, and structural targets aligned when earlier image or text replacements change document length.
- Docs: avoid overlapping deletes when a docs sed addressed range includes the final paragraph.
- Docs: make docs sed table-cell substitutions use UTF-16 indices, honor nth-match flags, expand captures independently per wildcard cell, refetch before repeated same-cell expressions, and report the exact replacement count.
- Docs: make docs sed table-creation placeholders use UTF-16 indices and share cell-fill Markdown range planning with table-cell replacement.
- Docs: validate unaddressed docs sed delete/insert/append regexes before fetching and keep their top-level paragraph selection and reverse mutation ordering consistent with addressed commands.
- Auth: clarify that auth import always requires a refresh-token source and only optionally accepts a current access token plus expiry.
- Calendar: make alias set/unset dry-runs preview config change |
| 0.25.0 | 12. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.25.0
Added
- Photos: add an explicit-opt-in Google Photos Picker workflow for creating selection sessions, waiting for completion, listing chosen media, and downloading selected files. (#754)
- Docs: add persisted, revision-locked request batches for composing supported mutations locally and submitting them atomically, with explicit split and partial-recovery modes. (#755)
- CLI: remove the separate gog agent and exit-codes helpers; expose stable exit codes and effective automation safety state through gog schema --json, and summarize the contract in root help. (#677)
- CLI: add Git-style gog help <command>, make explicit output flags override environment defaults, validate color and JSON-only transforms before command execution, report early usage errors on stderr, and reject contradictory schema plain output.
- Docs: prevent multi-paragraph Markdown range replacements from inheriting the matched paragraph's heading or list style. (#756) — thanks @sebsnyk.
- Docs: preserve nested Markdown list levels as native bullets inside imported and updated table cells. (#749) — thanks @sebsnyk.
- Gmail: add explicit gmail archive --thread semantics so IDs from thread search can archive every message in each thread. (#752) — thanks @sebsnyk.
- Drive/Docs: add persisted polling for Drive changes and Docs comments, with bounded runs, filters, retry-safe cursors, and sequential JSON hooks. (#690, #751)
- Drive: expose shortcut targets in JSON and human-readable folder reports without changing stable --plain columns, classify shortcuts distinctly, keep tree scans from following folder targets, and add drive shortcut create. (#763)
- Drive: add a secure push-notification receiver with persisted cursors, authenticated callbacks, sequential hooks, and optional channel auto-renewal. (#689, #764)
Fixed
- Docs: recognize valid one-column Markdown tables, while preserving separator-shaped rows after the delimiter as table data.
- Docs: scope default-tab named-range replace and delete requests correctly in multi-tab documents. |
| 0.24.0 | 11. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.24.0
Added
- Calendar: add repeatable --attachment to calendar update for replacing or clearing event attachments. (#738) — thanks @TreyLawrence.
- Sheets: add sheets validation get/set/clear commands for dropdown, checkbox, number, date, range, and custom-formula rules, and preserve table-managed dropdowns during validation-only copy/paste. (#710) — thanks @chrischall.
- Sheets: add table-aware sheets delete-dimension for deleting row or column spans while preserving intersecting table objects and remaining data. (#711) — thanks @chrischall.
- Docs: add direct docs table-row, docs table-column, docs table-merge, and docs table-unmerge commands with index, header-text, all-table, and tab-aware selection. (#686) — thanks @sebsnyk.
- Docs: add docs named-range create/list/delete/replace commands for durable, tab-aware document anchors. (#692) — thanks @sebsnyk.
- Gmail: report attached filenames and byte sizes in JSON results for send and draft create/update. (#716) — thanks @chrischall.
- Gmail: add gmail watch pull for Pub/Sub pull subscription consumers with hook retry support. (#700) — thanks @joshp123.
- Docs: add --tab and --all-tabs to docs raw for inspecting specific or complete multi-tab document content. (#697) — thanks @sebsnyk.
- Docs: add tab-aware table, image, heading, and paragraph enumerators with structured and plain output. (#719) — thanks @sebsnyk.
- Docs: style locally rendered fenced Markdown blocks with Roboto Mono, dark-green text, and existing paragraph shading. (#676, #724) — thanks @TurboTheTurtle.
- Docs: add docs insert-image --url for inserting public HTTPS images directly without Drive upload or temporary public sharing. (#675) — thanks @sebsnyk.
- Docs: expose paragraph emptiness and text-run ranges, styles, and links in docs paragraphs list --json. (#734) — thanks @sebsnyk.
- Docs: add opt-in --check-orphans to Markdown replacement writes so open comments whose quoted text would disappear block the mutation with orphaned exit code 11. (#691) — thanks @sebsnyk.
- Drive: add drive revisions list|get for paged revision metadata and provider export links. (#672) — thanks @aaroneden.
Fixed
- Auth: bind browser, manual, remote, and account-manager OAuth exchanges with S256 PKCE; unfinished pre-PKCE manual flows must restart at step 1. (#693, #725) — thanks @TurboTheTurtle.
- Docs: reset inherited text styles before applying Markdown find-replace formatting so leading bold spans and later inline styles stay paired correctly. (#735) — thanks @sebsnyk.
- Docs: accept leading-dash Markdown list values in docs cell-update --content and reject nonempty Markdown that produces no editable cell text. (#733) — thanks @sebsnyk.
- Docs: keep inline Markdown find-replace fragments inside their existing paragraph unless the replacement explicitly ends with a newline. (#736) — thanks @sebsnyk.
- Docs: render HTML <br> variants as line breaks inside Markdown table cells while preserving protected literals. (#730) — thanks @sebsnyk.
- Docs: avoid duplicate empty paragraphs adjacent to Markdown headings while preserving body paragraph spacing. (#717, #720) — thanks @TurboTheTurtle.
- Auth: repair duplicate macOS Keychain writes for legacy and subject token aliases without weakening primary token persistence. (#718, #721) — thanks @TurboTheTurtle. |
| 0.23.0 | 8. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.23.0
Added
- CI: enforce a pinned Go dead-code check and remove the unreachable helpers it identified. (#714) — thanks @vincentkoc.
- Chat: add repeatable --attach to chat messages send for sending local files with Google Chat messages. (#694) — thanks @omothm.
- Docs: add docs comments locate to resolve comment quotes to Docs API index ranges and report orphaned comments. (#687) — thanks @sebsnyk.
- Docs: add docs find-range to map matched text to Docs API UTF-16 index ranges. (#682) — thanks @sebsnyk.
- Docs: add --at, --occurrence, and --match-case anchors to docs insert, docs delete, docs update, docs insert-person, and docs insert-page-break. (#683) — thanks @sebsnyk.
- Docs: add --link and --no-link to docs format for setting or clearing hyperlinks on matched text. (#684) — thanks @sebsnyk.
- Sheets: add sheets links set to write single-cell, multi-link rich-text, and batch hyperlinks. (#713) — thanks @chrischall.
- Slides: add slides insert-image to place a positioned, sized local image on an existing slide. (#695) — thanks @Czaruno.
Fixed
- Docs: avoid duplicate empty paragraphs around Markdown tables written into a specific tab. (#715) — thanks @sebsnyk.
- Sheets: prevent accidental table data loss by requiring explicit --discard-data for sheets table delete, matching the Sheets API's destructive table-delete semantics. (#709) — thanks @chrischall. |
| 0.22.0 | 7. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.22.0
Added
- Docs: add --code to docs format and plain-text docs write for the existing monospace grey code style. (#685) — thanks @sebsnyk.
- Drive/Docs: add --since to drive comments list and docs comments list for server-side comment modified-time filtering. (#688) — thanks @sebsnyk.
- Gmail: add --thread-id to gmail drafts create and gmail drafts update so drafts can reply within a thread using the latest message headers. (#673, #674) — thanks @chrischall.
Fixed
- Docs: preserve nested list levels when writing markdown into a specific tab with docs write --replace --markdown --tab. (#696)
- Docs: fix docs export --tab tab resolution against the live Docs API field mask. (#696)
- Docs: strip Pandoc-style explicit heading anchors like {#slug} from rendered markdown headings and resolve matching same-document links. (#703)
- Docs: render GFM ~~strikethrough~~ spans in the local markdown writer used by docs write --tab --markdown. (#702)
- Docs: batch table-cell writes for docs write --tab --markdown to avoid per-cell Docs API quota bursts on table-heavy documents. (#699) — thanks @sebsnyk.
- Gmail: preserve existing gmail drafts update attachments when --attach is omitted, add --clear-attachments for intentional removal, and keep --attach as explicit replacement. (#680, #681) — thanks @chrischall. |
| 0.21.0 | 1. juni 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.21.0
Added
- MCP: add a typed, allowlisted gog mcp stdio server with read-only defaults and explicit write-tool opt-in. (#637) — thanks @auroracapital.
- Docs: add docs table-column-width to set fixed native table column widths or reset columns to evenly distributed sizing. (#631) — thanks @sebsnyk.
Fixed
- Agent/MCP: fix command-allowlist docs so examples include mcp, keep wildcard tool selectors shell-safe, and report public dry-run op paths for service-account, Calendar, Forms, Meet, Sheets named ranges, and Docs/Sheets/Slides copy commands.
- Auth/credentials: return usage errors for unknown --services values and invalid service-account key JSON, keep auth keep --dry-run file-free, and make zoom auth setup --dry-run emit a redacted no-write plan.
- Backup/config: make backup init/export/push validation fail before repository or OAuth side effects, keep backup init --dry-run and --no-push offline/local-only, preserve semantic manifest counts during verify/export, and return usage errors for invalid config keys or values.
- CLI: preserve command-local --fields API masks, keep open --type shortcuts from rewriting unsupported URLs into malformed Google editor links, and stop advertising ads as an API command service while retaining it as an auth-only scope.
- Validation: consistently return usage exit code 2 before auth, API-key lookup, dry-run success, or mutation for invalid list limits, empty IDs/queries, malformed dates/timezones/recurrence, invalid enum flags, invalid resource paths, malformed JSON, unsupported formats, immutable labels, and unsafe local-file Markdown image references across Admin, Calendar, Chat, Contacts, Docs, Drive, Drive Activity, Drive Labels, Forms, Gmail, Groups, Keep, Maps, People, Photos, Search Console, Sheets, Slides, Tasks, Time, and YouTube.
- Dry-run safety: validate Gmail/Contacts/Chat/Admin email inputs, Drive share targets, Drive changes watch URLs/expiration, Docs comment anchors, Sheets chart anchors/ranges, and Search Console sitemap URLs before reporting dry-run success.
- JSON output: return empty arrays instead of null for empty Calendar conflicts, Classroom lists, Forms responses/watches, Gmail settings/filter/thread-attachment results, People relations, blank Sheets ranges, blank Slides text/image lists, and empty YouTube list responses.
- Calendar: make calendar conflicts check all calendars by default, reject explicit one-calendar conflict checks, reject unsupported all-day/date-only Out of Office payloads locally, and return usage errors when response/propose-time actions cannot be applied.
- Contacts: warm the People API contact-search cache before contact, other-contact, and Gmail --from-contact searches; resolve contacts raw <email> and people raw <email> to contact resources; and use an other-contact-safe read mask for other-contact list/search.
- Classroom: reject unfiltered classroom invitations list locally, report the canonical hyphenated dry-run op for guardian-invitations create, and normalize empty list output.
- Docs: validate docs sed, docs cell-style, and docs table-column-width table targets locally; reject malformed sed expressions; and fail Markdown writes with local image references that must be public HTTPS URLs.
- Drive: validate download/export/upload combinations before API calls, validate comment/permission limits, validate reporting/audit/bulk scan bounds, and reject invalid Drive Label field values including fractional integers, malformed dates/users, malformed --fields-json, and trailing JSON tokens.
- Gmail: validate vacation, auto-forward, forwarding, send-as, delegation, filter forwarding, compose headers, message formats, batch-modify labels, history cursors, tracked-send setup options, and immutable label operations locally; keep gmail track setup --dry-run offline and make tracking setup/status/key rotation honor --json without leaking generated secrets.
- Maps: validate mode, units, and reverse-geocode coordinates before API-key lookup, and |
| 0.20.0 | 30. maj 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.20.0
Fixed
- Gmail: keep label IDs case-sensitive during label resolution and duplicate-name checks while still matching label names case-insensitively.
- Gmail: clarify that gmail drafts delete permanently deletes drafts and cannot be recovered. (#656, #659) — thanks @chrischall.
- Sheets: add --inherit-from-before to sheets insert so callers can choose whether inserted rows/columns inherit formatting from the preceding or following neighbor. (#655, #658) — thanks @chrischall.
- Sheets: add sheets copy-paste / fill for range-level CopyPasteRequest fills of values, formulas, formatting, and related paste types. (#661, #663) — thanks @chrischall.
- CLI: add --enable-commands-exact / GOG_ENABLE_COMMANDS_EXACT for strict command allowlists without prefix expansion. (#652) — thanks @jason-allen-oneal.
- Auth: update stored OAuth scope metadata from observed granted scopes during refresh so auth list reflects newly usable services. (#649)
- Docs: preserve paragraph-separating blank lines when replacing a single tab from Markdown. (#644)
- Docs: add docs cell-update for non-destructive table-cell content replacement by table, row, and column. (#646)
- Docs: add docs update --markdown and --replace-range for formatted insertion and range replacement. (#642) — thanks @rel.
- Gmail: pause watch push Gmail API fetches per account while a 429 Retry-After circuit is open. (#643)
- YouTube: let videos list and comments list use OAuth when --account is supplied, preserving the API-key fallback for unauthenticated public reads. (#664)
- YouTube: add youtube search list / yt search ls for YouTube Data API search across videos, channels, and playlists. (#650, #651) — thanks @BRO3886.
- Gmail: add gmail search --from-contact to resolve a contact's email addresses into a from:(...) OR query. (#657) — thanks @chrischall.
- Docs: add named --page-size presets for docs write and docs page-layout. (#640) — thanks @sebsnyk.
- Docs: add smart-chip insertion commands for person, Drive file, and date chips. (#638) — thanks @sebsnyk.
- Docs: add docs cell-style for table-cell background color and inline cell text styling. (#645) — thanks @sebsnyk.
- Docs: add docs insert-image to upload a local image, temporarily share it for Docs insertion, and revoke the public permission afterward. (#648) — thanks @sebsnyk.
- Docs: update the bundled gog agent skill to preserve broad user OAuth scopes during reauth and rely on command guards for scoped execution. |
| 0.19.0 | 22. maj 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.19.0
Added
- Auth: store Google OAuth client_secret values in the keyring by default while leaving only client metadata on disk; legacy plaintext credentials still read and auth credentials set --insecure preserves the old write shape. (#596)
- Auth: add auth credentials set --expand-env for strict environment placeholder expansion in OAuth client JSON. (#599)
- Auth: let auth import seed an initial access token and expiry, and round-trip cached access tokens through token export/import. (#598)
- CLI: add XDG kind-aware config/data/state/cache paths with GOG_HOME, per-kind GOG_*_DIR overrides, and --home while preserving legacy auth/keyring/service-account reads. (#621, #622) — thanks @alexminza.
- Docs: add explicit --page-width, --page-height, and page margin flags to docs write and docs page-layout, keeping --pageless width unchanged unless requested. (#629, #630) — thanks @sebsnyk.
Fixed
- People: fall back to token identity when gog me / gog whoami hit a disabled People API on the OAuth client project. (#460, #461)
- Docs: drop all-whitespace Markdown table header rows during Docs markdown writes, and rewrite same-document #heading-slug links to native Google Docs heading links after Drive markdown import. (#632, #633) — thanks @sebsnyk.
- Gmail: include attachment metadata in gmail messages search --include-body --json results. (#620)
- Auth: let auth service-account set read service account keys from stdin (--key=- or --key-stdin) or an environment variable (--key-env). (#600)
- Auth: serialize file-keyring reads and writes with a shared lock so concurrent gog processes cannot observe partial keyring entries or clobber multi-key token updates. (#597)
- Release: verify the OpenClaw Homebrew tap checkout when checking gogcli formula assets. |
| 0.18.0 | 22. maj 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.18.0
Added
- Docs: add VISION.md with project fit, discussion, and live-test merge guidance.
- Calendar: add --with-zoom / --regenerate-zoom / --remove-zoom that create, regenerate, and remove Zoom meetings and attach the join URL + meeting ID + passcode to the Calendar event description. Google's Calendar API rejects conferenceData writes asserting conferenceSolution.key.type="addOn" from non-Workspace-Marketplace OAuth clients, so the description-mode integration is the path that round-trips through Google's storage; trade-off is no native "Join with Zoom" conference card. (#589, #590) — thanks @alexisperumal and @mvanhorn.
- Auth: add gog zoom auth setup / doctor for Zoom S2S OAuth credential storage. (#590) — thanks @mvanhorn.
- Drive: add --action=resolve|reopen to drive comments reply and sibling drive comments resolve|reopen verbs (also docs comments reopen) to post a reply that atomically flips the parent comment's resolved state via the Drive API's Reply.action field. Avoids the previous workaround of drive comments delete (which destroys review-thread context) for batch-resolving inline doc-review feedback. (#623) — thanks @sebsnyk.
- Sheets: add gog sheets batch-update <spreadsheetId> --data-json ... for updating multiple value ranges in one Sheets API request. Alias: batch. (#601) — thanks @Tsopic.
- Docs: add gog docs insert-page-break <docId> [--index N | --at-end] [--tab=STRING] to insert a Google Docs page break directly via InsertPageBreakRequest — markdown has no native page-break construct, so this is the only path for multi-page deliverables. Aliases: page-break, pb. (#604)
- Docs: add gog docs page-layout <docId> [--layout=pageless|pages] to toggle the page layout of an existing Google Doc via updateDocumentStyle on documentFormat.documentMode. Sibling to the existing --pageless flag on docs create/write/update for the case where the doc was created upstream (e.g. by Drive markdown conversion) without the desired layout. Defaults to pageless. Aliases: set-page-layout, page-setup. (#593)
- Docs: add --heading-level N (1..6 shortcut) and --named-style NAME (full enum) to gog docs format so existing paragraphs can be promoted to HEADING_1..HEADING_6, TITLE, SUBTITLE, or NORMAL_TEXT. Both set paragraphStyle.namedStyleType on the existing UpdateParagraphStyle request and compose cleanly with --alignment / --line-spacing. (#605)
- Sheets: add gog sheets reorder-tab <spreadsheetId> --tab=<name|sheetId> --to=N to move a tab to a specific 0-based position via updateSheetProperties with field mask index. --tab accepts a title or a numeric sheet ID; --to=0 is force-sent so the leftmost target reaches the wire as "index":0. Aliases: move-tab, reorder-sheet, move-sheet. (#603)
- Docs: add gog docs insert-table <docId> --rows N --cols M [--index N | --at-end] [--values-json [[...]]] [--tab=STRING] to insert a native Google Docs table directly via InsertTableRequest, bypassing the markdown writer. --values-json takes a JSON 2D string array whose dimensions must match --rowsx--cols. Empty --values-json produces an empty table structure. (#602)
- Docs: gog docs write --replace --markdown --tab=<tab> now performs a whole-tab re-render — the targeted tab's existing body is wiped via DeleteContentRange and the markdown is re-rendered locally via the same Docs batchUpdate path used by --append --markdown, so other tabs are untouched. Previously this combination errored because Drive's markdown converter operates on entire documents only. (#595)
Fixed
- Docs: make generated command references ignore local keyring config so make ci stays clean across developer machines.
- CLI: harden backup writes, config/credentials atomic saves, keyring write verification, line input buffering, disabled-API hints, JSON transform number handling, and untrusted-content wrapping after ClawPatch review.
- CLI: bound retry request replay buffering, recover failed async backup pushes, ignore global git commit signing in backup snapshots, and pro |
| 0.17.0 | 15. maj 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.17.0
Added
- slides create-from-markdown: import slidey-flavored decks with per-slide YAML frontmatter (layout:, content:), ## Notes speaker notes, Font Awesome icon shortcodes, mermaid diagrams, ::cols::/::col2::/::col3::/::right:: columns, and ::boxes::/::arrows:: icon-row blocks. New flags: --fa-style, --mmdc, --strict, --keep-temp-images, --no-notes — thanks @njreid.
- Calendar: add calendar events --sort=start|end|summary|calendar and --order=asc|desc so --all output can be returned chronologically across calendars instead of per-calendar API iteration order. Also documents now in the --from/--to help strings (already accepted by timeparse) — the relative form agents need when planning "from now on" — thanks @gado-ships-it.
- Calendar: add calendar events --location to include event locations in table output. Embedded newlines in the location string are collapsed so multi-line addresses still render on one row — thanks @gado-ships-it.
- Auth: add gog auth import --client --email with --refresh-token-stdin, --refresh-token-file, or --refresh-token-env for non-interactive token import without exposing secrets in argv — thanks @jcarnegie.
- Drive: add drive share --notify for invite targets that require a Drive notification email.
- Calendar: keep calendar appointments as an explicit diagnostic because the Calendar API still rejects eventTypes=appointmentSchedule. (#329)
- CLI: add nested docs tabs ... and forms questions ... aliases for consistent sub-item command patterns while preserving existing flat commands. (#433)
- Drive: add drive audit sharing|user plus guarded drive bulk remove-public|update-role permission operations with dry-run and confirmation support. (#336)
- Drive: add drive labels file list|apply|remove alongside Drive Labels API v2 discovery. (#339)
- Maps: add directions, distance matrix, geocode, and reverse-geocode commands alongside Places search/details. (#571)
- Photos: add read-only photos list|search|get|download for app-created Google Photos media. (#381)
Fixed
- CLI: make mutating dry-runs for contacts, Docs, Drive, Meet, and Slides stop before auth/API calls while still validating local inputs; harden live smoke tests for self-sharing, disabled Meet, Gmail filter labels, and forced batch deletes.
- CLI: make drive upload, drive bulk remove-public/update-role, calendar subscribe, docs clear, slides create-from-markdown, slides insert-text, slides replace-text, auth tokens import, and Gmail tracking key rotation dry-runs use the standard parseable dry-run envelope without auth/API access.
- CLI: keep additional Docs write/update/delete/format/find-replace, Drive mkdir/changes, Gmail label create/modify, and Slides add/delete/replace/update-notes dry-runs offline before auth/API calls.
- CLI: give destructive Classroom, Gmail, Keep, and Tasks dry-runs stable JSON operation names and structured request payloads instead of prose op values with null requests.
- CLI: keep Docs tab edits, Sheets tab deletes, Drive deletes, comment deletes, auth removals, Gmail delegate/watch removals, Classroom guardian deletes, and other-contact deletes dry-run parseable without auth/API access.
- CLI: make dry-runs for Gmail label edits, Sheets table deletes, Sheets banding/conditional clears, and Forms deletes stop before auth/API calls, and make Forms dry-runs validate choice, scale, quiz, and empty update inputs locally.
- CLI: make dry-runs for Calendar secondary calendars, Forms create/publish/watch/move, Gmail label delete, Sheets table append/clear, Sheets named-range edits, Apps Script create, and Slides template creation stay offline before auth/API calls.
- Calendar: keep calendar create/update --dry-run with --location-search or --place-id offline before Places API lookup while still validating the requested lookup.
- CLI: make dry-runs for Admin group/user/org-unit edits, Contacts delete, Docs tab export, Drive tab download/share/unshare, and Gmail watch renew stay offline before auth/API calls; redac |
| 0.16.0 | 10. maj 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.16.0
Added
- Admin: expand admin users create with GAM-style aliases, generated passwords, suspended/archived creation, recovery contact fields, and password hash metadata; add admin users delete for cleanup.
- Admin: add admin orgunits commands to list, inspect, create, update, and delete Workspace organizational units.
- Sites: add Drive-backed sites commands to list, search, inspect, and open New Google Sites. (#574) — thanks @thewilloftheshadow.
- Analytics/Search Console: add GA4 analytics accounts|report plus Search Console site, search analytics, and sitemap commands. (#402) — thanks @haresh-seenivasagan.
- Gmail: add gmail send --body-html-file for sending HTML email bodies from files without shell command substitution. (#575) — thanks @toruvieI.
- YouTube: add youtube (alias yt) command group for YouTube Data API v3 — list activities, videos, playlists, comment threads, and channels; API key via config youtube_api_key or GOG_YOUTUBE_API_KEY; OAuth for --mine with gog auth add ... --services youtube. (#313) — thanks @satputekuldip.
- Forms: add quiz grading flags to forms add-question so choice and short-answer questions can set answer keys and point values when created. (#570) — thanks @dbernaltbn.
- Calendar: resolve event locations through Places API with --location-search / --place-id, storing the resolved Place ID in private extended properties. (#140 / #138) — thanks @salmonumbrella.
- Drive: add drive changes start-token/list/watch/stop commands for incremental sync and webhook automation. (#335)
- Drive: add drive activity query for Drive Activity API v2 audit trails with item, folder, time, and action filters. (#337)
- Meet: add meet create/get/update/end/history/participants commands for Google Meet meeting spaces and conference records. (#468) — thanks @regaw-leinad.
- Forms: add forms publish to publish/unpublish existing forms and return the responder URL for automated form creation flows. (#565 / #564) — thanks @bogdanovich.
Fixed
- Auth: make auth service-account status show stored, a clear missing-key message, and the exact setup hint when no service-account key is configured.
- Admin: retry the post-create state update so admin users create --suspended and --archived remain reliable while the Admin SDK finishes provisioning the new user.
- Calendar: make calendar update --with-meet idempotent when an event already has conference data, add explicit --regenerate-meet, and show recurringEventId in plain event output. (#576 / #573) — thanks @alexisperumal and @NodeJSmith.
- Release: fail closed when macOS signing secrets are missing and verify Darwin release assets are not ad-hoc signed, so Homebrew upgrades keep stable Keychain trust. (#569) — thanks @aaroneden.
- Auth: list one row per OAuth client when the same account is authorized under multiple clients, and let auth list --client filter that token bucket. (#563) — thanks @UnPractical91.
- Docs: clarify how to pass file-keyring environment into headless OpenClaw/systemd agent processes. (#566) — thanks @chsbusch-dot.
- Docs: avoid infinite loops when local Markdown parsing ends on Thai, CJK, emoji, or other multi-byte runes. (#560 / #559) — thanks @ninyawee.
- Agent skill: replace stale bundled gog skill paths with the current docs and auth package locations. (#558 / #557) — thanks @WadydX.
- CI: run the docs validation gate in GitHub Actions and the local make ci target. (#562 / #561) — thanks @WadydX. |
| 0.15.0 | 5. maj 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.15.0
Added
- Export exact Google API JSON when the normal CLI view is too lossy: docs raw, sheets raw, slides raw, drive raw, gmail raw, calendar raw, people raw, contacts raw, tasks raw, and forms raw, with --pretty, safer Drive defaults, Sheets grid-data warnings, and a raw-output security audit. (#495, #496) — thanks @karbassi.
- Audit Drive storage without changing files: drive tree, drive du, and drive inventory now report folder contents, sizes, and inventory data for cleanup/review workflows. (#116) — thanks @rohan-patnaik.
- Find duplicate contacts safely: contacts dedupe is preview-only, matches by email/phone by default, supports opt-in name matching, and emits JSON/table merge plans without applying changes. (#116) — thanks @rohan-patnaik.
- Read Gmail messages in agent-safe form: gmail get --sanitize-content / --safe and gmail thread get --sanitize-content return sanitized content without exposing raw Gmail payloads in JSON. (#238, #220) — thanks @urasmutlu.
- Ship official container images: release tags now publish a non-root GHCR Docker image, with file-keyring docs for container automation. (#539, #444) — thanks @HuckOps and @rdehuyss.
- Request custom Drive fields: drive ls --fields and drive get --fields pass Drive API field masks for data beyond the default JSON set. (#495) — thanks @karbassi.
- Format Google Docs from the CLI: docs format and plain-text docs write formatting flags cover fonts, colors, bold/italic/underline/strikethrough, alignment, and line spacing. (#479) — thanks @mmaghsoodnia.
- Manage Google Docs tabs: docs add-tab, docs rename-tab, docs delete-tab, plus tab-scoped Markdown append and find-replace flows. (#547, #541) — thanks @chopenhauer and @donbowman.
- Work with structured Google Sheets tables: sheets table list/get/create/delete, sheets table append, and header-safe sheets table clear. (#470) — thanks @Pedrohgv.
- Format Sheets visually: sheets conditional-format and sheets banding add rule-based formatting and alternating color banded ranges. (#378) — thanks @codBang.
- Add Meet links to existing calendar events with calendar update --with-meet. (#538) — thanks @alexisperumal.
- Move calendar events between calendars with calendar move / calendar transfer, including organizer changes. (#448) — thanks @markusbkoch.
- Export Gmail filters as Gmail WebUI-importable Atom XML, while keeping API JSON export via --format json. (#174) — thanks @gwpl.
- Build safer agent binaries with baked agent-safe, readonly, and full safety profiles, fail-closed command filtering, filtered help/schema output, docs, and build tooling. (#366, #239) — thanks @drewburchfield.
- Use gog from coding agents more safely with the bundled gog skill for JSON-first Google Workspace automation. (#353, #451) — thanks @TimPietrusky and @sluramod.
Fixed
- Make full-mailbox backups survive large Gmail exports by promoting completed checkpoint shards into the final manifest and byte-splitting fallback message shards before GitHub rejects oversized blobs.
- Make backup exports more resumable and fault-tolerant by streaming decrypted shards, preserving Gmail Markdown mirrors, handling very large JSONL rows, and writing Markdown fallbacks for malformed MIME messages instead of aborting.
- Keep agent safety profiles harder to patch by compiling baked policies into generated hash switches instead of embedding raw allow/deny YAML strings. (#540) — thanks @drewburchfield.
- Show correct versions for go install ...@tag binaries by inferring module versions from Go build info when linker metadata is absent. (#545, #544) — thanks @joshavant.
- Accept the documented calendar events list / ls selector forms, including positional calendar IDs, --cal, --calendars, and --all. (#546) — thanks @BCudeOpenClaw.
- Keep docs find-replace --dry-run read-only while still reporting match counts, and allow empty replacement strings to delete matches safely. (#542) — thanks @chrismdp. |
| 0.14.0 | 28. april 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.14.0
Added
- Backup: add gog backup with age-encrypted Git shards, Gmail labels/raw message export, Calendar/Contacts/Tasks/Drive metadata adapters, manifest status, full decrypt-and-verify, shard cat, local plaintext export, docs, and security-focused regression coverage.
- Backup: expand gog backup push --services all with Drive content export/download, Gmail settings, native Workspace Docs/Sheets/Slides/Form data, Apps Script projects, Chat, Classroom, best-effort optional service error shards, and plaintext Drive file export.
- Backup: extend --services all with Drive permissions/comments/revisions, Calendar ACL/settings/colors, contact groups, Cloud Identity groups, Workspace Admin Directory users/groups/members, Keep notes, and local Gmail message caching for resumable full-mailbox fetches.
- Backup: add gog backup export --gmail-format markdown for local readable Gmail mirrors with Markdown notes and extracted attachment files.
- Gmail: add gmail messages search --body-format html for returning HTML message bodies when --include-body is used. (#520) — thanks @alexknowshtml.
- Contacts: add contacts export for vCard 4.0 .vcf exports by resource, email/name search, or all contacts, including best-effort label categories. (#519, #500) — thanks @dinakars777.
- Docs: add experimental docs export --tab / drive download --tab to export a single Google Docs tab as PDF, DOCX, text, Markdown, or HTML. (#535) — thanks @johnbenjaminlewis.
- Slides: add slides insert-text and slides replace-text for editing existing slide text elements and replacing template tokens. (#521) — thanks @chrissanchez-iops.
- Drive: add drive search --drive and --parent for scoping search to a shared drive or folder. (#525) — thanks @LeanSheng.
- Calendar: add --start-timezone / --end-timezone to calendar create and calendar update for preserving named IANA event timezones when RFC3339 inputs only carry numeric offsets. (#422)
- Contacts: include birthdays in contacts list and contacts search text and JSON output. (#441)
- Auth: add gog auth doctor to diagnose keyring backend/password drift, unreadable file-keyring tokens, and refresh-token failures such as Workspace invalid_rapt. (#377, #338)
- Backup: bound individual Drive content exports with --drive-content-timeout so one stuck Google export records an encrypted error row instead of blocking the full backup.
- Backup: add Gmail message-list checkpoints, streaming shard construction, and stderr progress counters so full-mailbox backups can resume cleanly after interruption without keeping every raw message in RAM.
- Backup: push encrypted incomplete Gmail checkpoint commits during long cached fetches so day-scale mailbox backups have offsite progress before the final manifest is committed.
- Backup: push Gmail checkpoint commits through a single ordered background queue so cached fetches continue while GitHub uploads run.
- Slides docs: document the Markdown structure accepted by slides create-from-markdown. (#497)
- Google API: expose a reusable authenticated HTTP client for commands that need custom HTTP policies. (#534) — thanks @johnbenjaminlewis.
Fixed
- Auth: keep gog auth list and gog auth tokens list useful when one file-keyring token cannot be decrypted; unreadable entries are now reported instead of aborting the whole listing. (#377)
- Auth: time out Linux D-Bus keyring write operations and report when OAuth completed but saving the refresh token failed, so manual auth no longer looks like a stuck paste when token persistence is blocked. (#130)
- Auth: store Google OIDC sub claims with OAuth tokens and migrate matching subject-keyed accounts when a Google email rename is reauthorized. (#504)
- Gmail: build outbound Date headers with the configured timezone so replies do not inherit a wrong host-local offset. (#514, #472) — thanks @dinakars777.
- Gmail: auto-fill draft reply subjects from the original message when gmail drafts create --reply-to-message-id omits --subject. (#488) — thanks |
| 0.13.0 | 20. april 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.13.0
Highlights
- Gmail: safer sending and richer message workflows, with no-send guardrails, forwarding, autoreplies, full-body search output, label styling, and better MIME/body handling. (#454, #482, #447, #457, #476, #477, #511) — thanks @veteranbv, @spencer-c-reed, @GodsBoy, @iskw9973, @shashankkr9, @yeager, and @dinakars777.
- Drive/Docs/Slides: smoother content round-trips with Markdown-to-Docs upload conversion, restored Markdown replace writes, rendered slide thumbnails, commenter sharing, and better Docs sed formatting. (#487, #501, #498, #443, #483) — thanks @johnbenjaminlewis, @twilsher, @gianpaj, @pavelzak, and @bill492.
- Sheets: chart management lands, including list/inspect/create/update/delete and a chart-range fix for sheet ID 0. (#434) — thanks @andybergon.
- Calendar: create secondary calendars and get more predictable timezone/day-bound behavior. (#455, #492, #509, #510) — thanks @alexknowshtml, @RaphaelRUzan, and @dinakars777.
- Auth and agent safety: credential cleanup, Google Ads auth, keyring namespace overrides, command denylists, and safer send-operation controls. (#473, #264, #463, #218, #173, #454) — thanks @yamagucci, @ufkhan97, @mkurz, @EricYangTL, @spookyuser, and @veteranbv.
Added
- Gmail: add --gmail-no-send, GOG_GMAIL_NO_SEND, gmail_no_send, and per-account config no-send guards for blocking send operations. (#454) — thanks @veteranbv.
- Gmail: add gmail forward / gmail fwd to forward a message with optional note, verified send-as alias, and original attachments. (#482) — thanks @spencer-c-reed.
- Gmail: add gmail autoreply to reply once to matching messages, label the thread for dedupe, and optionally archive/mark read.
- Gmail: add gmail messages search --full to print complete message bodies instead of truncating text output. (#447) — thanks @GodsBoy.
- Gmail: add gmail labels style to update user label colors and list/message visibility. (#457) — thanks @iskw9973.
- Drive: convert Markdown uploads to Google Docs and strip leading YAML frontmatter by default, with --keep-frontmatter to opt out. (#487) — thanks @johnbenjaminlewis.
- Drive: allow drive share --role commenter for comment-only sharing. (#443) — thanks @pavelzak.
- Drive: show owner email in drive ls and drive search table output. (#458) — thanks @laihenyi.
- Slides: add slides thumbnail / slides thumb to fetch rendered slide thumbnail URLs or download PNG/JPEG images. (#498) — thanks @gianpaj.
- Sheets: add sheets chart to list, inspect, create, update, and delete embedded charts. (#434) — thanks @andybergon.
- Sheets: add add-sheet, rename-sheet, and delete-sheet tab aliases plus sheets add-tab --index. (#442) — thanks @alexknowshtml.
- Calendar: add calendar create-calendar / new-calendar to create secondary calendars with description, timezone, and location. (#455) — thanks @alexknowshtml.
- Auth: add auth credentials remove to delete stored OAuth client credentials and associated refresh tokens. (#473) — thanks @yamagucci.
- Auth: add ads as an auth service for Google Ads API tokens. (#264) — thanks @ufkhan97.
- Secrets: allow GOG_KEYRING_SERVICE_NAME to override the keyring namespace. (#463) — thanks @mkurz.
- Agent safety: allow dotted command paths in --enable-commands and add --disable-commands / GOG_DISABLE_COMMANDS denylist support. (#218, #173) — thanks @EricYangTL and @spookyuser.
- Contacts: add --gender to contacts create and contacts update, and include gender in contacts get text output. (#438) — thanks @klodr.
- Chat: make chat spaces find use case-insensitive substring matching by default, with --exact for legacy exact lookup. (#506) — thanks @mvanhorn.
Fixed
- Calendar: avoid ambiguous timezone guessing from offset-only event times, preserve timezones for focus-time events, and use exclusive next-midnight bounds for full-day ranges. (#492, #509, #510) — thanks @RaphaelRUzan and @dinakars777.
- Gmail: preserve sent and received body content by using quoted-printable plain text, non-7bit non-ASCII HTML, a |
| 0.12.0 | 9. marts 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.12.0
Highlights
- Admin: full Workspace Admin users/groups coverage for common directory operations. (#403) — thanks @dl-alexandre.
- Auth: new headless/cloud auth paths with ADC, direct access tokens, custom callbacks, proxy-safe loopback settings, and extra-scope controls. (#357, #419, #227, #398, #421) — thanks @tengis617, @mmkal, @cyberfox, @salmonumbrella, and @peteradams2026.
- Docs: much stronger document editing and export flow with tab targeting, richer find-replace, pageless mode, and native Markdown/HTML export. (#330, #305, #300, #282, #141) — thanks @ignacioreyna, @chparsons, @shohei-majima, @fprochazka, and @in-liberty420.
- Sheets: spreadsheet editing/formatting expands significantly with named ranges, tab management, notes, find-replace, formatting controls, inserts, links, and format inspection. (#278, #309, #430, #341, #320, #203, #374, #284) — thanks @TheCrazyLex, @JulienMalige, @andybergon, @Shehryar, @omothm, and @nilzzzzzz.
- Calendar: aliases, subscribe, and selector parity make multi-calendar workflows much easier. (#393, #327, #319) — thanks @salmonumbrella and @cdthompson.
- Forms/Slides/Keep: forms management + watches, slides from templates, and first write/delete coverage for Keep. (#274, #273, #413) — thanks @alexknowshtml, @penguinco, and @jgwesterlund.
Added
- Admin: add Workspace Admin Directory commands for users and groups, including user list/get/create/suspend and group membership list/add/remove. (#403) — thanks @dl-alexandre.
- Auth: add Application Default Credentials mode via GOG_AUTH_MODE=adc for Workload Identity, Cloud Run, and local gcloud ADC flows without stored OAuth refresh tokens. (#357) — thanks @tengis617.
- Auth: add --access-token / GOG_ACCESS_TOKEN for direct access-token auth in headless or CI flows, bypassing stored refresh tokens. (#419) — thanks @mmkal.
- Auth: add auth add|manage --listen-addr plus --redirect-host for browser OAuth behind proxies or remote loopback forwarding. (#227) — thanks @cyberfox.
- Auth: add auth add --redirect-uri for manual/remote OAuth flows, so custom callback hosts can be reused across the printed auth URL, state cache, and code exchange. (#398) — thanks @salmonumbrella.
- Auth: add --extra-scopes to auth add for appending custom OAuth scope URIs beyond the built-in service scopes. (#421) — thanks @peteradams2026.
- Docs: add --tab-id to editing commands so write/update/insert/delete/find-replace can target a specific Google Docs tab. (#330) — thanks @ignacioreyna.
- Docs: extend docs find-replace with --first, --content-file, Markdown replacement, inline image insertion, and image sizing syntax. (#305) — thanks @chparsons.
- Docs: add --pageless to docs create, docs write, and docs update to switch documents into pageless mode after writes. (#300) — thanks @shohei-majima.
- Docs: add native Google Docs Markdown export via docs export --format md. (#282) — thanks @fprochazka.
- Docs: add native Google Docs HTML export via docs export --format html. (#141) — thanks @in-liberty420.
- Sheets: add named range management (sheets named-ranges) and let range-based Sheets commands accept named range names where GridRange-backed operations are needed. (#278) — thanks @TheCrazyLex.
- Sheets: add add-tab, rename-tab, and delete-tab commands for managing spreadsheet tabs, with delete dry-run/confirmation guardrails. (#309) — thanks @JulienMalige.
- Sheets: add merge, unmerge, number-format, freeze, resize-columns, and resize-rows commands for spreadsheet layout/format control. (#320) — thanks @Shehryar.
- Sheets: add sheets update-note / set-note to write or clear cell notes across a range. (#430) — thanks @andybergon.
- Sheets: add sheets find-replace to replace text across a spreadsheet or a specific tab, with exact-match, regex, and formula search options. (#341) — thanks @Shehryar.
- Sheets: add sheets insert to insert rows/columns into a sheet. (#203) — thanks @andybergon.
- Sheets: add sheets create --parent to place new spreadsheets in a Driv |
| 0.11.0 | 15. februar 2026 | — | 64-bit ZIPARM64 ZIP Udgivelsesnoter0.11.0
Added
- Apps Script: add appscript command group (create/get projects, fetch content, run deployed functions).
- Forms: add forms command group (create/get forms, list/get responses).
- Docs: add docs comments for listing and managing Google Doc comments. (#263) — thanks @alextnetto.
- Sheets: add sheets notes to read cell notes. (#208) — thanks @andybergon.
- Gmail: add gmail send --quote to include quoted original message in replies. (#169) — thanks @terry-li-hm.
- Drive: add drive ls|search --no-all-drives to restrict queries to "My Drive" for faster/narrower results. (#258)
- Contacts: update contacts from JSON via contacts update --from-file (PR #200 — thanks @jrossi).
Fixed
- Drive: make drive delete move files to trash by default; add --permanent for irreversible deletion. (#262) — thanks @laihenyi.
- Drive/Gmail: pass through Drive API filter queries in drive search; RFC 2047-encode non-ASCII display names in mail headers (From/To/Cc/Bcc/Reply-To). (#260) — thanks @salmonumbrella.
- Calendar: allow opting into attendee notifications for updates and cancellations via calendar update|delete --send-updates all|externalOnly|none. (#163) — thanks @tonimelisma.
- Calendar: fall back to fixed-offset timezones (Etc/GMT±N) for recurring events when given RFC3339 offset datetimes; harden Gmail attachment output paths and cache validation; honor proxy defaults for Google API transports. (#228) — thanks @salmonumbrella.
- Auth: manual OAuth flow uses an ephemeral loopback redirect port (avoids unsafe/privileged ports in browsers). (#172) — thanks @spookyuser.
- Gmail: include primary display name in gmail send From header when using service account impersonation (domain-wide delegation). (#184) — thanks @salmonumbrella.
- Gmail: when gmail attachment --out points to a directory (or ends with a trailing slash), combine with --name and avoid false cache hits on directories. (#248) — thanks @zerone0x.
- Drive: include shared drives in drive ls and drive search; reject drive download --format for non-Google Workspace files. (#256) — thanks @salmonumbrella.
- Drive: validate drive download --format values and error early for unknown formats. (#259) |