[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-googleworkspace--cli":3,"tool-googleworkspace--cli":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":76,"owner_avatar_url":77,"owner_bio":78,"owner_company":79,"owner_location":79,"owner_email":79,"owner_twitter":80,"owner_website":81,"owner_url":82,"languages":83,"stars":100,"forks":101,"last_commit_at":102,"license":103,"difficulty_score":23,"env_os":104,"env_gpu":105,"env_ram":106,"env_deps":107,"category_tags":113,"github_topics":114,"view_count":130,"oss_zip_url":79,"oss_zip_packed_at":79,"status":16,"created_at":131,"updated_at":132,"faqs":133,"releases":163},1400,"googleworkspace\u002Fcli","cli","Google Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills.","gws 是一款专为 Google Workspace 打造的命令行工具，旨在通过单一接口统一管理 Drive、Gmail、日历、表格、文档及聊天等全套服务。它解决了开发者以往需要查阅繁琐的 REST API 文档、手动编写 curl 请求或处理复杂分页逻辑的痛点，让操作谷歌云服务变得像执行本地命令一样简单直观。\n\n这款工具特别适合后端开发者、DevOps 工程师以及正在构建 AI 智能体的技术人员使用。其核心亮点在于“动态构建”机制：gws 不依赖静态命令列表，而是运行时直接读取谷歌的 Discovery Service，这意味着任何新增的 API 端点都能被自动支持，无需等待工具更新。此外，gws 原生输出结构化 JSON 数据，并内置了 40 多项专为 AI 代理设计的技能（Skills），使得大语言模型能够直接调用它来执行复杂的办公自动化任务，而无需定制额外的中间件。无论是想快速脚本化日常管理工作流的人类用户，还是希望赋予 AI 操作谷歌全家桶能力的开发者，gws 都提供了一个零样板代码的高效解决方案。","\u003Ch1 align=\"center\">gws\u003C\u002Fh1>\n\n**One CLI for all of Google Workspace — built for humans and AI agents.**\u003Cbr>\nDrive, Gmail, Calendar, and every Workspace API. Zero boilerplate. Structured JSON output. 40+ agent skills included.\n\n> [!NOTE]\n> This is **not** an officially supported Google product.\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@googleworkspace\u002Fcli\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@googleworkspace\u002Fcli\" alt=\"npm version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fgoogleworkspace\u002Fcli\" alt=\"license\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fgoogleworkspace\u002Fcli\u002Fci.yml?branch=main&label=CI\" alt=\"CI status\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@googleworkspace\u002Fcli\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Funpacked-size\u002F@googleworkspace\u002Fcli\" alt=\"install size\">\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cbr>\n\n```bash\nnpm install -g @googleworkspace\u002Fcli\n```\n\n`gws` doesn't ship a static list of commands. It reads Google's own [Discovery Service](https:\u002F\u002Fdevelopers.google.com\u002Fdiscovery) at runtime and builds its entire command surface dynamically. When Google Workspace adds an API endpoint or method, `gws` picks it up automatically.\n\n> [!IMPORTANT]\n> This project is under active development. Expect breaking changes as we march toward v1.0.\n\n## Contents\n\n- [Prerequisites](#prerequisites)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Why gws?](#why-gws)\n- [Authentication](#authentication)\n- [AI Agent Skills](#ai-agent-skills)\n- [Advanced Usage](#advanced-usage)\n- [Environment Variables](#environment-variables)\n- [Exit Codes](#exit-codes)\n- [Architecture](#architecture)\n- [Troubleshooting](#troubleshooting)\n- [Development](#development)\n\n## Prerequisites\n\n- **Node.js 18+** — for `npm install` (or download a pre-built binary from [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases))\n- **A Google Cloud project** — required for OAuth credentials. You can create one via the [Google Cloud Console](https:\u002F\u002Fconsole.cloud.google.com\u002F) or with the [`gcloud` CLI](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall) or with the `gws auth setup` command.\n- **A Google account** with access to Google Workspace\n\n## Installation\n\n```bash\nnpm install -g @googleworkspace\u002Fcli\n```\n\n> The npm package bundles pre-built native binaries for your OS and architecture.\n> No Rust toolchain required.\n\nPre-built binaries are also available on the [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases) page.\n\nOr build from source:\n\n```bash\ncargo install --git https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli --locked\n```\n\nA Nix flake is also available at `github:googleworkspace\u002Fcli`\n\n```bash\nnix run github:googleworkspace\u002Fcli\n```\n\nOn macOS and Linux, you can also install via [Homebrew](https:\u002F\u002Fbrew.sh\u002F):\n\n```bash\nbrew install googleworkspace-cli\n```\n\n## Quick Start\n\n```bash\ngws auth setup     # walks you through Google Cloud project config\ngws auth login     # subsequent OAuth login\ngws drive files list --params '{\"pageSize\": 5}'\n```\n\n## Why gws?\n\n**For humans** — stop writing `curl` calls against REST docs. `gws` gives you `--help` on every resource, `--dry-run` to preview requests, and auto‑pagination.\n\n**For AI agents** — every response is structured JSON. Pair it with the included agent skills and your LLM can manage Workspace without custom tooling.\n\n```bash\n# List the 10 most recent files\ngws drive files list --params '{\"pageSize\": 10}'\n\n# Create a spreadsheet\ngws sheets spreadsheets create --json '{\"properties\": {\"title\": \"Q1 Budget\"}}'\n\n# Send a Chat message\ngws chat spaces messages create \\\n  --params '{\"parent\": \"spaces\u002Fxyz\"}' \\\n  --json '{\"text\": \"Deploy complete.\"}' \\\n  --dry-run\n\n# Introspect any method's request\u002Fresponse schema\ngws schema drive.files.list\n\n# Stream paginated results as NDJSON\ngws drive files list --params '{\"pageSize\": 100}' --page-all | jq -r '.files[].name'\n```\n\n## Authentication\n\nThe CLI supports multiple auth workflows so it works on your laptop, in CI, and on a server.\n\n### Which setup should I use?\n\n| I have… | Use |\n|---|---|\n| `gcloud` installed and authenticated | [`gws auth setup`](#interactive-local-desktop) (fastest) |\n| A GCP project but no `gcloud` | [Manual OAuth setup](#manual-oauth-setup-google-cloud-console) |\n| An existing OAuth access token | [`GOOGLE_WORKSPACE_CLI_TOKEN`](#pre-obtained-access-token) |\n| Existing Credentials | [`GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE`](#service-account-server-to-server) |\n\n### Interactive (local desktop)\n\nCredentials are encrypted at rest (AES-256-GCM) with the key stored in your OS keyring (or `~\u002F.config\u002Fgws\u002F.encryption_key` when `GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND=file`).\n\n```bash\ngws auth setup       # one-time: creates a Cloud project, enables APIs, logs you in\ngws auth login       # subsequent scope selection and login\n```\n\n> `gws auth setup` requires the [`gcloud` CLI](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall). If you don't have `gcloud`, use the [manual setup](#manual-oauth-setup-google-cloud-console) below instead.\n\n> [!WARNING]\n> **Scope limits in testing mode:** If your OAuth app is unverified (testing mode),\n> Google limits consent to ~25 scopes. The `recommended` scope preset includes 85+\n> scopes and **will fail** for unverified apps (especially for `@gmail.com` accounts).\n> Choose individual services instead to filter the scope picker:\n> ```bash\n> gws auth login -s drive,gmail,sheets\n> ```\n\n\n### Manual OAuth setup (Google Cloud Console)\n\nUse this when `gws auth setup` cannot automate project\u002Fclient creation, or when you want explicit control.\n\n1. Open Google Cloud Console in the target project:\n   - OAuth consent screen: `https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials\u002Fconsent?project=\u003CPROJECT_ID>`\n   - Credentials: `https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials?project=\u003CPROJECT_ID>`\n2. Configure OAuth branding\u002Faudience if prompted:\n   - App type: **External** (testing mode is fine)\n3. Add your account under **Test users**\n4. Create an OAuth client:\n   - Type: **Desktop app**\n5. Download the client JSON and save it to:\n   - `~\u002F.config\u002Fgws\u002Fclient_secret.json`\n\n> [!IMPORTANT]\n> **You must add yourself as a test user.** In the OAuth consent screen, click\n> **Test users → Add users** and enter your Google account email. Without this,\n> login will fail with a generic \"Access blocked\" error.\n\nThen run:\n\n```bash\ngws auth login\n```\n\n### Browser-assisted auth (human or agent)\n\nYou can complete OAuth either manually or with browser automation.\n\n- **Human flow**: run `gws auth login`, open the printed URL, approve scopes.\n- **Agent-assisted flow**: the agent opens the URL, selects account, handles consent prompts, and returns control once the localhost callback succeeds.\n\nIf consent shows **\"Google hasn't verified this app\"** (testing mode), click **Continue**.\nIf scope checkboxes appear, select required scopes (or **Select all**) before continuing.\n\n### Headless \u002F CI (export flow)\n\n1. Complete interactive auth on a machine with a browser.\n2. Export credentials:\n   ```bash\n   gws auth export --unmasked > credentials.json\n   ```\n3. On the headless machine:\n   ```bash\n   export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=\u002Fpath\u002Fto\u002Fcredentials.json\n   gws drive files list   # just works\n   ```\n\n### Service Account (server-to-server)\n\nPoint to your key file; no login needed.\n\n```bash\nexport GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=\u002Fpath\u002Fto\u002Fservice-account.json\ngws drive files list\n```\n\n### Pre-obtained Access Token\n\nUseful when another tool (e.g. `gcloud`) already mints tokens for your environment.\n\n```bash\nexport GOOGLE_WORKSPACE_CLI_TOKEN=$(gcloud auth print-access-token)\n```\n\n### Precedence\n\n| Priority | Source                 | Set via                                 |\n| -------- | ---------------------- | --------------------------------------- |\n| 1        | Access token           | `GOOGLE_WORKSPACE_CLI_TOKEN`            |\n| 2        | Credentials file       | `GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE` |\n| 3        | Encrypted credentials  | `gws auth login`                        |\n| 4        | Plaintext credentials  | `~\u002F.config\u002Fgws\u002Fcredentials.json`        |\n\nEnvironment variables can also live in a `.env` file.\n\n## AI Agent Skills\n\nThe repo ships 100+ Agent Skills (`SKILL.md` files) — one for every supported API, plus higher-level helpers for common workflows and 50 curated recipes for Gmail, Drive, Docs, Calendar, and Sheets. See the full [Skills Index](docs\u002Fskills.md) for the complete list.\n\n```bash\n# Install all skills at once\nnpx skills add https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\n\n# Or pick only what you need\nnpx skills add https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Ftree\u002Fmain\u002Fskills\u002Fgws-drive\nnpx skills add https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Ftree\u002Fmain\u002Fskills\u002Fgws-gmail\n```\n\n\u003Cdetails>\n\u003Csummary>OpenClaw setup\u003C\u002Fsummary>\n\n```bash\n# Symlink all skills (stays in sync with repo)\nln -s $(pwd)\u002Fskills\u002Fgws-* ~\u002F.openclaw\u002Fskills\u002F\n\n# Or copy specific skills\ncp -r skills\u002Fgws-drive skills\u002Fgws-gmail ~\u002F.openclaw\u002Fskills\u002F\n```\n\nThe `gws-shared` skill includes an `install` block so OpenClaw auto-installs the CLI via `npm` if `gws` isn't on PATH.\n\n\u003C\u002Fdetails>\n\n## Gemini CLI Extension\n\n1. Authenticate the CLI first:\n\n   ```bash\n   gws auth setup\n   ```\n\n2. Install the extension into the Gemini CLI:\n   ```bash\n   gemini extensions install https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\n   ```\n\nInstalling this extension gives your Gemini CLI agent direct access to all `gws` commands and Google Workspace agent skills. Because `gws` handles its own authentication securely, you simply need to authenticate your terminal once prior to using the agent, and the extension will automatically inherit your credentials.\n\n## Advanced Usage\n\n### Multipart Uploads\n\n```bash\ngws drive files create --json '{\"name\": \"report.pdf\"}' --upload .\u002Freport.pdf\n```\n\n### Pagination\n\n| Flag                | Description                                    | Default |\n| ------------------- | ---------------------------------------------- | ------- |\n| `--page-all`        | Auto-paginate, one JSON line per page (NDJSON) | off     |\n| `--page-limit \u003CN>`  | Max pages to fetch                             | 10      |\n| `--page-delay \u003CMS>` | Delay between pages                            | 100 ms  |\n\n### Google Sheets — Shell Escaping\n\nSheets ranges use `!` which bash interprets as history expansion. Always wrap values in **single quotes**:\n\n```bash\n# Read cells A1:C10 from \"Sheet1\"\ngws sheets spreadsheets values get \\\n  --params '{\"spreadsheetId\": \"SPREADSHEET_ID\", \"range\": \"Sheet1!A1:C10\"}'\n\n# Append rows\ngws sheets spreadsheets values append \\\n  --params '{\"spreadsheetId\": \"ID\", \"range\": \"Sheet1!A1\", \"valueInputOption\": \"USER_ENTERED\"}' \\\n  --json '{\"values\": [[\"Name\", \"Score\"], [\"Alice\", 95]]}'\n```\n\n### Helper Commands\n\nSome services ship hand-crafted helper commands alongside the auto-generated Discovery surface. Helper commands are prefixed with `+` so they are visually distinct and never collide with Discovery-generated method names.\n\nTime-aware helpers (`+agenda`, `+standup-report`, `+weekly-digest`, `+meeting-prep`) automatically use your **Google account timezone** (fetched from Calendar Settings API and cached for 24 hours). Override with `--timezone`\u002F`--tz` on `+agenda`, or set the `--timezone` flag for explicit control.\n\nRun `gws \u003Cservice> --help` to see both Discovery methods and helper commands together.\n\n```bash\ngws gmail --help      # shows +send, +reply, +reply-all, +forward, +triage, +watch …\ngws calendar --help   # shows +insert, +agenda …\ngws drive --help      # shows +upload …\n```\n\n**Full helper reference:**\n\n| Service | Command | Description |\n|---------|---------|-------------|\n| `gmail` | `+send` | Send an email |\n| `gmail` | `+reply` | Reply to a message (handles threading automatically) |\n| `gmail` | `+reply-all` | Reply-all to a message |\n| `gmail` | `+forward` | Forward a message to new recipients |\n| `gmail` | `+triage` | Show unread inbox summary (sender, subject, date) |\n| `gmail` | `+watch` | Watch for new emails and stream them as NDJSON |\n| `sheets` | `+append` | Append a row to a spreadsheet |\n| `sheets` | `+read` | Read values from a spreadsheet |\n| `docs` | `+write` | Append text to a document |\n| `chat` | `+send` | Send a message to a space |\n| `drive` | `+upload` | Upload a file with automatic metadata |\n| `calendar` | `+insert` | Create a new event |\n| `calendar` | `+agenda` | Show upcoming events (uses Google account timezone; override with `--timezone`) |\n| `script` | `+push` | Replace all files in an Apps Script project with local files |\n| `workflow` | `+standup-report` | Today's meetings + open tasks as a standup summary |\n| `workflow` | `+meeting-prep` | Prepare for your next meeting: agenda, attendees, and linked docs |\n| `workflow` | `+email-to-task` | Convert a Gmail message into a Google Tasks entry |\n| `workflow` | `+weekly-digest` | Weekly summary: this week's meetings + unread email count |\n| `workflow` | `+file-announce` | Announce a Drive file in a Chat space |\n| `events` | `+subscribe` | Subscribe to Workspace events and stream them as NDJSON |\n| `events` | `+renew` | Renew\u002Freactivate Workspace Events subscriptions |\n| `modelarmor` | `+sanitize-prompt` | Sanitize a user prompt through a Model Armor template |\n| `modelarmor` | `+sanitize-response` | Sanitize a model response through a Model Armor template |\n| `modelarmor` | `+create-template` | Create a new Model Armor template |\n\n**Examples:**\n\n```bash\n# Send an email\ngws gmail +send --to alice@example.com --subject \"Hello\" --body \"Hi there\"\n\n# Reply to a message\ngws gmail +reply --message-id MESSAGE_ID --body \"Thanks!\"\n\n# Append a row to a spreadsheet\ngws sheets +append --spreadsheet SPREADSHEET_ID --values \"Alice,95\"\n\n# Show today's calendar agenda\ngws calendar +agenda\n\n# Upload a file to Drive\ngws drive +upload .\u002Freport.pdf --name \"Q1 Report\"\n\n# Morning standup summary\ngws workflow +standup-report\n\n# Show today's agenda in a specific timezone\ngws calendar +agenda --today --timezone America\u002FNew_York\n```\n\n### Model Armor (Response Sanitization)\n\nIntegrate [Google Cloud Model Armor](https:\u002F\u002Fcloud.google.com\u002Fsecurity\u002Fproducts\u002Fmodel-armor) to scan API responses for prompt injection before they reach your agent.\n\n```bash\ngws gmail users messages get --params '...' \\\n  --sanitize \"projects\u002FP\u002Flocations\u002FL\u002Ftemplates\u002FT\"\n```\n\n| Variable                                 | Description                  |\n| ---------------------------------------- | ---------------------------- |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE` | Default Model Armor template |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_MODE`     | `warn` (default) or `block`  |\n\n## Environment Variables\n\nAll variables are optional. See [`.env.example`](.env.example) for a copy-paste template.\n\n| Variable | Description |\n|---|---|\n| `GOOGLE_WORKSPACE_CLI_TOKEN` | Pre-obtained OAuth2 access token (highest priority) |\n| `GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE` | Path to OAuth credentials JSON (user or service account) |\n| `GOOGLE_WORKSPACE_CLI_CLIENT_ID` | OAuth client ID (alternative to `client_secret.json`) |\n| `GOOGLE_WORKSPACE_CLI_CLIENT_SECRET` | OAuth client secret (paired with `CLIENT_ID`) |\n| `GOOGLE_WORKSPACE_CLI_CONFIG_DIR` | Override config directory (default: `~\u002F.config\u002Fgws`) |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE` | Default Model Armor template |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_MODE` | `warn` (default) or `block` |\n| `GOOGLE_WORKSPACE_CLI_LOG` | Log level for stderr (e.g., `gws=debug`). Off by default. |\n| `GOOGLE_WORKSPACE_CLI_LOG_FILE` | Directory for JSON log files with daily rotation. Off by default. |\n| `GOOGLE_WORKSPACE_PROJECT_ID` | GCP project ID override for quota\u002Fbilling and fallback for helper commands |\n\nEnvironment variables can also be set in a `.env` file (loaded via [dotenvy](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fdotenvy)).\n\n## Exit Codes\n\n`gws` uses structured exit codes so scripts can branch on the failure type without parsing error output.\n\n| Code | Meaning | Example cause |\n|------|---------|---------------|\n| `0` | Success | Command completed normally |\n| `1` | API error | Google returned a 4xx\u002F5xx response |\n| `2` | Auth error | Credentials missing, expired, or invalid |\n| `3` | Validation error | Bad arguments, unknown service, invalid flag |\n| `4` | Discovery error | Could not fetch the API schema document |\n| `5` | Internal error | Unexpected failure |\n\n```bash\ngws drive files list --params '{\"fileId\": \"bad\"}'\necho $?   # 1 — API error\n\ngws unknown-service files list\necho $?   # 3 — validation error (unknown service)\n```\n\n## Architecture\n\n`gws` uses a **two-phase parsing** strategy:\n\n1. Read `argv[1]` to identify the service (e.g. `drive`)\n2. Fetch the service's Discovery Document (cached 24 h)\n3. Build a `clap::Command` tree from the document's resources and methods\n4. Re-parse the remaining arguments\n5. Authenticate, build the HTTP request, execute\n\nAll output — success, errors, download metadata — is structured JSON.\n\n## Troubleshooting\n\n### \"Access blocked\" or 403 during login\n\nYour OAuth app is in **testing mode** and your account is not listed as a test user.\n\n**Fix:** Open the [OAuth consent screen](https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials\u002Fconsent) in your GCP project → **Test users** → **Add users** → enter your Google account email. Then retry `gws auth login`.\n\n### \"Google hasn't verified this app\"\n\nExpected when your app is in testing mode. Click **Advanced** → **Go to \\\u003Capp name\\> (unsafe)** to proceed. This is safe for personal use; verification is only required to publish the app to other users.\n\n### Too many scopes \u002F consent screen error\n\nUnverified (testing mode) apps are limited to ~25 OAuth scopes. The `recommended` scope preset includes many scopes and will exceed this limit.\n\n**Fix:** Select only the scopes you need:\n\n```bash\ngws auth login --scopes drive,gmail,calendar\n```\n\n### `gcloud` CLI not found\n\n`gws auth setup` requires the `gcloud` CLI to automate project creation. You have three options:\n\n1. [Install gcloud](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall) and use `gcloud` directly.\n2. Re-run `gws auth setup` which wraps `gcloud` calls.\n3. Skip `gcloud` entirely — set up OAuth credentials manually in the [Cloud Console](#manual-oauth-setup-google-cloud-console)\n\n### `redirect_uri_mismatch`\n\nThe OAuth client was not created as a **Desktop app** type. In the [Credentials](https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials) page, delete the existing client, create a new one with type **Desktop app**, and download the new JSON.\n\n### API not enabled — `accessNotConfigured`\n\nIf a required Google API is not enabled for your GCP project, you will see a\n403 error with reason `accessNotConfigured`:\n\n```json\n{\n  \"error\": {\n    \"code\": 403,\n    \"message\": \"Gmail API has not been used in project 549352339482 ...\",\n    \"reason\": \"accessNotConfigured\",\n    \"enable_url\": \"https:\u002F\u002Fconsole.developers.google.com\u002Fapis\u002Fapi\u002Fgmail.googleapis.com\u002Foverview?project=549352339482\"\n  }\n}\n```\n\n`gws` also prints an actionable hint to **stderr**:\n\n```\n💡 API not enabled for your GCP project.\n   Enable it at: https:\u002F\u002Fconsole.developers.google.com\u002Fapis\u002Fapi\u002Fgmail.googleapis.com\u002Foverview?project=549352339482\n   After enabling, wait a few seconds and retry your command.\n```\n\n**Steps to fix:**\n\n1. Click the `enable_url` link (or copy it from the `enable_url` JSON field).\n2. In the GCP Console, click **Enable**.\n3. Wait ~10 seconds, then retry your `gws` command.\n\n> [!TIP]\n> You can also run `gws auth setup` which walks you through enabling all required\n> APIs for your project automatically.\n\n## Development\n\n```bash\ncargo build                       # dev build\ncargo clippy -- -D warnings       # lint\ncargo test                        # unit tests\n.\u002Fscripts\u002Fcoverage.sh             # HTML coverage report → target\u002Fllvm-cov\u002Fhtml\u002F\n```\n\n## License\n\nApache-2.0\n\n## Disclaimer\n\n> [!CAUTION]\n> This is **not** an officially supported Google product.\n","\u003Ch1 align=\"center\">gws\u003C\u002Fh1>\n\n**一套 CLI，适用于所有 Google Workspace——专为人类与 AI 代理打造。**\u003Cbr>\nDrive、Gmail、日历，以及所有 Workspace API 都可轻松使用。零样板代码，结构化 JSON 输出，内置 40 多项代理技能。\n\n> [！注意]\n> 这并非官方支持的 Google 产品。\n\n\u003Cp>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@googleworkspace\u002Fcli\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@googleworkspace\u002Fcli\" alt=\"npm 版本\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fgoogleworkspace\u002Fcli\" alt=\"许可证\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fgoogleworkspace\u002Fcli\u002Fci.yml?branch=main&label=CI\" alt=\"CI 状态\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@googleworkspace\u002Fcli\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Funpacked-size\u002F@googleworkspace\u002Fcli\" alt=\"安装大小\">\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cbr>\n\n```bash\nnpm install -g @googleworkspace\u002Fcli\n```\n\n`gws` 并不提供预装的命令列表。它在运行时会读取 Google 自己的 [Discovery Service](https:\u002F\u002Fdevelopers.google.com\u002Fdiscovery)，并动态构建其完整的命令集。当 Google Workspace 添加了新的 API 端点或方法时，`gws` 会自动将其纳入支持范围。\n\n> [！重要]\n> 本项目正处于积极开发阶段。随着我们迈向 v1.0，预计会频繁出现破坏性变更。\n\n## 目录\n\n- [前提条件](#前提条件)\n- [安装](#安装)\n- [快速入门](#快速入门)\n- [为什么选择 gws？](#为什么选择 gws)\n- [身份验证](#身份验证)\n- [AI 代理技能](#AI 代理技能)\n- [高级用法](#高级用法)\n- [环境变量](#环境变量)\n- [退出码](#退出码)\n- [架构](#架构)\n- [故障排除](#故障排除)\n- [开发](#开发)\n\n## 前提条件\n\n- **Node.js 18+** — 用于执行 `npm install`（或从 [GitHub 发布版](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases) 下载预编译二进制文件）\n- **Google Cloud 项目** — 需要 OAuth 凭据。您可以通过 [Google Cloud 控制台](https:\u002F\u002Fconsole.cloud.google.com\u002F) 创建一个，或使用 `gcloud` CLI，亦或通过 `gws auth setup` 命令完成配置。\n- **Google 账号**，且拥有 Google Workspace 的访问权限\n\n## 安装\n\n```bash\nnpm install -g @googleworkspace\u002Fcli\n```\n\n> npm 包会为您根据操作系统和架构预编译好原生二进制文件。\n> 无需使用 Rust 工具链。\n\n预编译二进制文件也可在 [GitHub 发布版](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases) 页面中获取。\n\n或者，您也可以从源代码构建：\n\n```bash\ncargo install --git https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli --locked\n```\n\n此外，还提供了 Nix Flake 文件，可在 [github:googleworkspace\u002Fcli](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli) 中找到：\n\n```bash\nnix run github:googleworkspace\u002Fcli\n```\n\n在 macOS 和 Linux 上，您还可以通过 [Homebrew](https:\u002F\u002Fbrew.sh\u002F) 安装：\n\n```bash\nbrew install googleworkspace-cli\n```\n\n## 快速入门\n\n```bash\ngws auth setup     # 介绍 Google Cloud 项目配置流程\ngws auth login     # 后续进行 OAuth 登录\ngws drive files list --params '{\"pageSize\": 5}'\n```\n\n## 为什么选择 gws？\n\n**面向人类** — 停止手动编写针对 REST 文档的 `curl` 请求。`gws` 会在每个资源上显示 `--help` 选项，提供 `--dry-run` 以预览请求，并支持自动分页。\n\n**面向 AI 代理** — 每个响应均采用结构化 JSON 格式。将此功能与附带的代理技能结合使用，您的大语言模型便能无缝管理 Google Workspace，而无需自定义工具。\n\n```bash\n# 列出最近的 10 个文件\ngws drive files list --params '{\"pageSize\": 10}'\n\n# 创建电子表格\ngws sheets spreadsheets create --json '{\"properties\": {\"title\": \"Q1 Budget\"}}'\n\n# 发送聊天消息\ngws chat spaces messages create \\\n  --params '{\"parent\": \"spaces\u002Fxyz\"}' \\\n  --json '{\"text\": \"部署完成.\"}' \\\n  --dry-run\n\n# 了解任意方法的请求\u002F响应模式\ngws schema drive.files.list\n\n# 以 NDJSON 格式流式输出分页结果\ngws drive files list --params '{\"pageSize\": 100}' --page-all | jq -r '.files[].name'\n```\n\n## 身份验证\n\nCLI 支持多种身份验证流程，因此无论是在笔记本电脑上、在 CI 环境中，还是在服务器上，都能轻松使用。\n\n### 我该选择哪种设置？\n\n| 我有… | 使用 |\n|---|---|\n| 已安装并完成 OAuth 身份验证的 `gcloud` | [`gws auth setup`](#交互式本地桌面)（最快） |\n| 有一个 GCP 项目，但未安装 `gcloud` | [手动 OAuth 配置](#手动 OAuth 配置 Google Cloud 控制台) |\n| 已经拥有 OAuth 访问令牌 | [`GOOGLE_WORKSPACE_CLI_TOKEN`](#预先获取的访问令牌) |\n| 已有的凭据 | [`GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE`](#服务账号到服务账号） |\n\n### 交互式（本地桌面）\n\n凭据在静止状态下经过加密处理（AES-256-GCM），密钥存储于您的操作系统密钥环中（或在 `~\u002F.config\u002Fgws\u002F.encryption_key` 中，当 `GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND=file` 时）。\n\n```bash\ngws auth setup       # 一次性操作：创建 Cloud 项目、启用 API、登录用户\ngws auth login       # 后续进行权限范围选择与登录\n```\n\n> `gws auth setup` 需要 `gcloud` CLI（[Cloud SDK 安装指南](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall)）。如果您尚未安装 `gcloud`，请改用下方的 [手动 OAuth 配置](#手动 OAuth 配置 Google Cloud 控制台)。\n\n> [！警告]\n> **测试模式下的权限范围限制：** 如果您的 OAuth 应用未经过验证（处于测试模式），Google 对同意范围的限制约为 25 个。推荐的默认权限范围包含 85 多个权限，但对于未经过验证的应用（尤其是 `@gmail.com` 账户），这些权限可能会导致失败。\n> 请优先选择单独的服务，以进一步筛选权限选择器：\n> ```bash\n> gws auth login -s drive,gmail,sheets\n> ```\n\n### 手动 OAuth 配置（Google Cloud 控制台）\n\n当 `gws auth setup` 无法自动完成项目或客户端的创建，或您希望获得更精细的控制时，请使用此方式。\n\n1. 在目标项目中打开 Google Cloud 控制台：\n   - OAuth 同意页面：`https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials\u002Fconsent?project=\u003CPROJECT_ID>`\n   - 凭据页面：`https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials?project=\u003CPROJECT_ID>`\n2. 如系统提示，请配置 OAuth 品牌化与受众信息：\n   - 应用类型：**外部应用**（测试模式完全适用）\n3. 将您的账户添加至 **测试用户** 一栏\n4. 创建 OAuth 客户端：\n   - 类型：**桌面应用**\n5. 下载客户端 JSON 文件，并保存至：\n   - `~\u002F.config\u002Fgws\u002Fclient_secret.json`\n\n> [！重要]\n> **您必须将自己添加为测试用户。** 在 OAuth 同意页面中，点击 **测试用户 → 添加用户**，并输入您的 Google 账号邮箱。若未完成此操作，登录时将收到通用的“访问被阻止”错误提示。\n\n随后运行：\n\n```bash\ngws auth login\n```\n\n### 浏览器辅助身份验证（人工或代理）\n\n您可以手动完成 OAuth 身份验证，也可以通过浏览器自动化完成。\n\n- **人工流程**：运行 `gws auth login`，打开打印出的 URL，并对权限范围进行授权。\n- **代理辅助流程**：代理用户打开 URL，选择账户，处理同意提示，并在本地主机回调成功后将控制权返回。\n\n如果在同意页面显示“Google 未验证此应用”（测试模式），请点击“继续”。\n如果出现权限范围复选框，请在继续前选择所需的权限范围（或选择全部）。\n\n### 无头\u002FCI 流程（导出流程）\n\n1. 在配备浏览器的机器上完成交互式身份验证。\n2. 导出凭据：\n   ```bash\n   gws auth export --unmasked > credentials.json\n   ```\n3. 在无头机器上：\n   ```bash\n   export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=\u002Fpath\u002Fto\u002Fcredentials.json\n   gws drive files list   # 一切正常\n   ```\n\n### 服务账号（服务器到服务器）\n\n指向您的密钥文件即可，无需登录。\n\n```bash\nexport GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=\u002Fpath\u002Fto\u002Fservice-account.json\ngws drive files list\n```\n\n### 预先获取的访问令牌\n\n当其他工具（如 `gcloud`）已为您环境生成令牌时，此方法非常实用。\n\n```bash\nexport GOOGLE_WORKSPACE_CLI_TOKEN=$(gcloud auth print-access-token)\n```\n\n### 优先级\n\n| 优先级 | 源         | 设置方式                                 |\n| -------- | ---------- | --------------------------------------- |\n| 1        | 访问令牌   | `GOOGLE_WORKSPACE_CLI_TOKEN`            |\n| 2        | 凭据文件   | `GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE` |\n| 3        | 加密凭据   | `gws auth login`                        |\n| 4        | 明文凭据   | `~\u002F.config\u002Fgws\u002Fcredentials.json`        |\n\n环境变量也可以存储在 `.env` 文件中。\n\n## AI 代理技能\n\n该仓库提供了 100 多种代理技能（`SKILL.md` 文件）——每种 API 都对应一种技能，此外还提供面向常见工作流的高级助手，以及针对 Gmail、Drive、Docs、Calendar 和 Sheets 的 50 个精选配方。完整列表请参阅 [技能索引](docs\u002Fskills.md)。\n\n```bash\n# 一次性安装所有技能\nnpx skills add https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\n\n# 或者仅选择您需要的技能\nnpx skills add https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Ftree\u002Fmain\u002Fskills\u002Fgws-drive\nnpx skills add https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Ftree\u002Fmain\u002Fskills\u002Fgws-gmail\n```\n\n\u003Cdetails>\n\u003Csummary>OpenClaw 设置\u003C\u002Fsummary>\n\n```bash\n# 链接所有技能（与仓库保持同步）\nln -s $(pwd)\u002Fskills\u002Fgws-* ~\u002F.openclaw\u002Fskills\u002F\n\n# 或者复制特定技能\ncp -r skills\u002Fgws-drive skills\u002Fgws-gmail ~\u002F.openclaw\u002Fskills\u002F\n```\n\n`gws-shared` 技能包含一个 `install` 块，因此如果 `gws` 未添加到 PATH 中，OpenClaw 将自动通过 `npm` 安装 CLI。\n\n\u003C\u002Fdetails>\n\n## Gemini CLI 扩展\n\n1. 首先对 CLI 进行身份验证：\n\n   ```bash\n   gws auth setup\n   ```\n\n2. 将扩展安装至 Gemini CLI：\n\n   ```bash\n   gemini extensions install https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\n   ```\n\n安装此扩展可让您的 Gemini CLI 代理直接访问所有 `gws` 命令和 Google Workspace 代理技能。由于 `gws` 会安全地处理自身身份验证，您只需在使用代理之前在终端进行一次身份验证，扩展便会自动继承您的凭据。\n\n## 高级用法\n\n### 多部分上传\n\n```bash\ngws drive files create --json '{\"name\": \"report.pdf\"}' --upload .\u002Freport.pdf\n```\n\n### 分页\n\n| 标志                | 描述                                    | 默认值 |\n| ------------------- | -------------------------------------- | ------- |\n| `--page-all`        | 自动分页，每页显示一行 JSON 数据（NDJSON） | 关闭     |\n| `--page-limit \u003CN>`  | 最大可获取的页数                             | 10      |\n| `--page-delay \u003CMS>` | 页面之间的延迟时间                            | 100 ms  |\n\n### Google 表格 — Shell 转义\n\n表格中的单元格范围使用 `!`，而 Bash 会将其解释为历史扩展。务必始终将值用 **单引号** 包裹：\n\n```bash\n# 从“Sheet1”中读取 A1:C10 单元格\ngws sheets spreadsheets values get \\\n  --params '{\"spreadsheetId\": \"SPREADSHEET_ID\", \"range\": \"Sheet1!A1:C10\"}'\n\n# 追加行\ngws sheets spreadsheets values append \\\n  --params '{\"spreadsheetId\": \"ID\", \"range\": \"Sheet1!A1\", \"valueInputOption\": \"USER_ENTERED\"}' \\\n  --json '{\"values\": [[\"Name\", \"Score\"], [\"Alice\", 95]]}'\n```\n\n### 辅助命令\n\n部分服务会随自动生成的 Discovery 界面一同提供手工编写的辅助命令。这些辅助命令以 `+` 为前缀，以便在视觉上与 Discovery 生成的方法名称区分开来，并且绝不会与 Discovery 生成的方法名发生冲突。\n\n时间感知型辅助命令（如 `+agenda`、`+standup-report`、`+weekly-digest`、`+meeting-prep`）会自动使用您的 **Google 账户时区**（从 Calendar 设置 API 中获取并缓存 24 小时）。您可以通过在 `+agenda` 中添加 `--timezone` 或 `--tz` 参数来覆盖此设置，或者通过指定 `--timezone` 标志来实现显式控制。\n\n运行 `gws \u003Cservice> --help` 命令，即可同时查看 Discovery 方法和辅助命令。\n\n```bash\ngws gmail --help      # 显示 +send、+reply、+reply-all、+forward、+triage、+watch 等方法\ngws calendar --help   # 显示 +insert、+agenda 等方法\ngws drive --help      # 显示 +upload 等方法\n```\n\n**完整辅助命令参考：**\n\n| 服务 | 命令 | 描述 |\n|-------|------|-------------|\n| `gmail` | `+send` | 发送电子邮件 |\n| `gmail` | `+reply` | 回复消息（自动处理消息线程） |\n| `gmail` | `+reply-all` | 向所有收件人回复消息 |\n| `gmail` | `+forward` | 将消息转发给新收件人 |\n| `gmail` | `+triage` | 显示未读收件箱摘要（发件人、主题、日期） |\n| `gmail` | `+watch` | 监听新邮件，并以 NDJSON 格式实时流式传输 |\n| `sheets` | `+append` | 向电子表格中追加一行数据 |\n| `sheets` | `+read` | 从电子表格中读取数据 |\n| `docs` | `+write` | 向文档中追加文本 |\n| `chat` | `+send` | 向聊天空间发送消息 |\n| `drive` | `+upload` | 上传文件并自动附加元数据 |\n| `calendar` | `+insert` | 创建新的事件 |\n| `calendar` | `+agenda` | 显示即将发生的活动（使用 Google 账户时区；可通过 `--timezone` 参数进行覆盖） |\n| `script` | `+push` | 使用本地文件替换 Apps Script 项目中的所有文件 |\n| `workflow` | `+standup-report` | 将今天的会议及待办事项汇总为 Standup 汇报 |\n| `workflow` | `+meeting-prep` | 为下一次会议做准备：制定议程、确定与会人员，并关联相关文档 |\n| `workflow` | `+email-to-task` | 将 Gmail 消息转换为 Google Tasks 条目 |\n| `workflow` | `+weekly-digest` | 每周总结：本周的会议情况以及未读邮件数量 |\n| `workflow` | `+file-announce` | 在聊天空间中宣布 Drive 文件 |\n| `events` | `+subscribe` | 订阅 Workspace 事件，并以 NDJSON 格式实时流式传输 |\n| `events` | `+renew` | 续订或重新激活 Workspace 事件订阅 |\n| `modelarmor` | `+sanitize-prompt` | 通过 Model Armor 模板对用户提示进行安全清理 |\n| `modelarmor` | `+sanitize-response` | 通过 Model Armor 模板对模型响应进行安全清理 |\n| `modelarmor` | `+create-template` | 创建新的 Model Armor 模板 |\n\n**示例：**\n\n```bash\n# 发送电子邮件\ngws gmail +send --to alice@example.com --subject \"Hello\" --body \"Hi there\"\n\n# 回复消息\ngws gmail +reply --message-id MESSAGE_ID --body \"Thanks!\"\n\n# 向电子表格中追加一行数据\ngws sheets +append --spreadsheet SPREADSHEET_ID --values \"Alice,95\"\n\n# 显示今天的日历议程\ngws calendar +agenda\n\n# 上传文件到 Drive\ngws drive +upload .\u002Freport.pdf --name \"Q1 Report\"\n\n# 今日的 Standup 汇报\ngws workflow +standup-report\n\n# 在特定时区显示今天的议程\ngws calendar +agenda --today --timezone America\u002FNew_York\n```\n\n### Model Armor（响应安全化）\n\n集成 [Google Cloud Model Armor](https:\u002F\u002Fcloud.google.com\u002Fsecurity\u002Fproducts\u002Fmodel-armor) 以在 API 响应到达您的代理之前，对其内容进行检测，防止提示注入攻击。\n\n```bash\ngws gmail users messages get --params '...' \\\n  --sanitize \"projects\u002FP\u002Flocations\u002FL\u002Ftemplates\u002FT\"\n```\n\n| 变量                                 | 描述                  |\n| ---------------------------------------- | --------------------- |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE` | 默认的 Model Armor 模板 |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_MODE`     | `warn`（默认）或 `block`  |\n\n## 环境变量\n\n所有变量均为可选。请参阅 [.env.example](.env.example) 以获取一个复制粘贴模板。\n\n| 变量 | 描述 |\n|---|---|\n| `GOOGLE_WORKSPACE_CLI_TOKEN` | 预先获取的 OAuth2 访问令牌（优先级最高） |\n| `GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE` | OAuth 凭据 JSON 文件的路径（用户或服务账号） |\n| `GOOGLE_WORKSPACE_CLI_CLIENT_ID` | OAuth 客户端 ID（可替代 `client_secret.json`） |\n| `GOOGLE_WORKSPACE_CLI_CLIENT_SECRET` | OAuth 客户端密钥（与 `CLIENT_ID` 配对） |\n| `GOOGLE_WORKSPACE_CLI_CONFIG_DIR` | 覆盖配置目录（默认为 `~\u002F.config\u002Fgws`） |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE` | 默认的 Model Armor 模板 |\n| `GOOGLE_WORKSPACE_CLI_SANITIZE_MODE` | `warn`（默认）或 `block` |\n| `GOOGLE_WORKSPACE_CLI_LOG` | 用于 stderr 的日志级别（例如：`gws=debug`）。默认关闭。 |\n| `GOOGLE_WORKSPACE_CLI_LOG_FILE` | 用于每日轮换的 JSON 日志文件的目录。默认关闭。 |\n| `GOOGLE_WORKSPACE_PROJECT_ID` | GCP 项目 ID，用于配额\u002F计费的覆盖，以及辅助命令的备用选项 |\n\n环境变量也可以在 `.env` 文件中设置（通过 [dotenvy](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fdotenvy) 加载）。\n\n## 退出码\n\n`gws` 采用结构化的退出码，因此脚本可以根据失败类型进行分支处理，而无需解析错误输出。\n\n| 代码 | 含义 | 示例原因 |\n|------|---------|---------------|\n| `0` | 成功 | 命令正常完成 |\n| `1` | API 错误 | Google 返回了 4xx\u002F5xx 响应 |\n| `2` | 身份验证错误 | 凭据缺失、已过期或无效 |\n| `3` | 验证错误 | 参数错误、服务未知、标志无效 |\n| `4` | Discovery 错误 | 无法获取 API 架构文档 |\n| `5` | 内部错误 | 意外失败 |\n\n```bash\ngws drive files list --params '{\"fileId\": \"bad\"}'\necho $?   # 1 — API 错误\n\ngws unknown-service files list\necho $?   # 3 — 验证错误（服务未知）\n```\n\n## 架构\n\n`gws` 采用 **两阶段解析** 策略：\n\n1. 读取 `argv[1]` 以识别服务类型（例如：`drive`）\n2. 获取服务的 Discovery 文档（缓存 24 小时）\n3. 从文档的资源和方法构建 `clap::Command` 树\n4. 重新解析剩余的参数\n5. 进行身份验证、构建 HTTP 请求并执行\n\n所有输出——成功信息、错误信息、下载元数据——均采用结构化 JSON 格式。\n\n## 排查故障\n\n### 登录时出现“访问被阻止”或 403 错误\n\n您的 OAuth 应用处于 **测试模式**，且您的账户并未被列入测试用户名单。\n\n**解决方法：** 打开 GCP 项目中的 [OAuth 同意页面](https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials\u002Fconsent) → **测试用户** → **添加用户** → 输入您的 Google 账户邮箱。然后重试 `gws auth login`。\n\n### “Google 未验证此应用”\n\n通常在您的应用处于测试模式时会出现此提示。点击 **高级** → **前往 \\\u003C应用名称\\>（不安全）** 以继续操作。此操作适用于个人使用；只有在将应用发布给其他用户时才需要进行验证。\n\n### 范围过多 \u002F 同意屏幕错误\n\n未经验证（测试模式）的应用程序仅能使用约 25 个 OAuth 范围。预设的“推荐”范围包含众多范围，将超出此限制。\n\n**解决方法：** 仅选择您所需的范围：\n\n```bash\ngws auth login --scopes drive,gmail,calendar\n```\n\n### 未找到 `gcloud` CLI\n\n`gws auth setup` 需要 `gcloud` CLI 来自动创建项目。您有以下三种选择：\n\n1. [安装 gcloud](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall)，并直接使用 `gcloud`。\n2. 重新运行 `gws auth setup`，该命令会自动包裹 `gcloud` 的调用。\n3. 完全跳过 `gcloud`——在 [Cloud Console](#manual-oauth-setup-google-cloud-console) 中手动设置 OAuth 凭证。\n\n### 重定向 URI 不匹配\n\nOAuth 客户端并非以 **桌面应用** 类型创建。在 [凭据](https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Fcredentials) 页面中，删除现有客户端，创建一个新的客户端，并将其类型设置为 **桌面应用**，然后下载新的 JSON 文件。\n\n### API 未启用 — `accessNotConfigured`\n\n如果您的 GCP 项目未启用所需 Google API，您将看到一个 403 错误，错误原因显示为 `accessNotConfigured`：\n\n```json\n{\n  \"error\": {\n    \"code\": 403,\n    \"message\": \"Gmail API 已未在项目 549352339482 中使用...\",\n    \"reason\": \"accessNotConfigured\",\n    \"enable_url\": \"https:\u002F\u002Fconsole.developers.google.com\u002Fapis\u002Fapi\u002Fgmail.googleapis.com\u002Foverview?project=549352339482\"\n  }\n}\n```\n\n`gws` 也会在 `stderr` 中打印一条可操作的提示信息：\n\n```\n💡 未为您的 GCP 项目启用 API。\n   请前往：https:\u002F\u002Fconsole.developers.google.com\u002Fapis\u002Fapi\u002Fgmail.googleapis.com\u002Foverview?project=549352339482\n   启用后，请等待几秒钟，然后重试您的命令。\n```\n\n**解决步骤：**\n\n1. 点击 `enable_url` 链接（或从 `enable_url` JSON 字段中复制该链接）。\n2. 在 GCP 控制台中，点击 **启用**。\n3. 等待约 10 秒，然后重试您的 `gws` 命令。\n\n> [!提示]\n> 您也可以运行 `gws auth setup`，该命令会自动为您完成项目中所有必需 API 的启用流程。\n\n## 开发\n\n```bash\ncargo build                       # 开发构建\ncargo clippy -- -D warnings       # 代码检查\ncargo test                        # 单元测试\n.\u002Fscripts\u002Fcoverage.sh             # HTML 盖度报告 → target\u002Fllvm-cov\u002Fhtml\u002F\n```\n\n## 许可证\n\nApache-2.0\n\n## 免责声明\n\n> [！注意]\n> 这并非官方支持的 Google 产品。","# gws (Google Workspace CLI) 快速上手指南\n\n`gws` 是一个专为人类开发者和 AI 智能体设计的 Google Workspace 统一命令行工具。它支持 Drive、Gmail、Calendar 等所有 Workspace API，无需样板代码，直接输出结构化 JSON，并内置了 40+ 个 AI 智能体技能。\n\n> **注意**：这不是 Google 官方支持的产品。\n\n## 环境准备\n\n在开始之前，请确保满足以下条件：\n\n*   **操作系统**：macOS、Linux 或 Windows。\n*   **Node.js**：版本 18 或更高（用于通过 npm 安装）。\n*   **Google Cloud 项目**：需要用于 OAuth 凭证配置（可通过 `gws auth setup` 自动创建，或在 Google Cloud Console 手动创建）。\n*   **Google 账号**：拥有访问 Google Workspace 的权限。\n*   **可选依赖**：若使用 `gws auth setup` 自动配置项目，需预先安装 [`gcloud` CLI](https:\u002F\u002Fcloud.google.com\u002Fsdk\u002Fdocs\u002Finstall)。\n\n## 安装步骤\n\n你可以选择以下任意一种方式进行安装：\n\n### 方式一：通过 npm 安装（推荐）\n这是最通用的方式，包内已包含针对你操作系统的预构建二进制文件，无需 Rust 环境。\n\n```bash\nnpm install -g @googleworkspace\u002Fcli\n```\n\n### 方式二：通过 Homebrew 安装 (macOS\u002FLinux)\n\n```bash\nbrew install googleworkspace-cli\n```\n\n### 方式三：通过 Nix 安装\n\n```bash\nnix run github:googleworkspace\u002Fcli\n```\n\n### 方式四：从源码构建 (需要 Rust\u002FCargo)\n\n```bash\ncargo install --git https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli --locked\n```\n\n## 基本使用\n\n### 1. 认证配置\n\n首次使用前需要进行身份验证。如果你已安装 `gcloud`，可以使用交互式设置自动完成项目创建和登录：\n\n```bash\n# 一次性设置：创建云项目、启用 API 并登录\ngws auth setup\n\n# 后续登录或选择特定范围\ngws auth login\n```\n\n> **提示**：如果你的 OAuth 应用处于“测试模式”且未验证，Google 会限制授权范围数量。建议在登录时指定具体服务以避免失败：\n> `gws auth login -s drive,gmail,sheets`\n\n若无 `gcloud`，请参考完整文档在 Google Cloud Console 手动配置 OAuth 客户端。\n\n### 2. 常用命令示例\n\n`gws` 动态读取 Google Discovery Service，因此所有 API 方法均可直接使用。\n\n**列出 Drive 中最新的 5 个文件：**\n```bash\ngws drive files list --params '{\"pageSize\": 5}'\n```\n\n**创建一个新的 Google 表格：**\n```bash\ngws sheets spreadsheets create --json '{\"properties\": {\"title\": \"Q1 Budget\"}}'\n```\n\n**查看某个方法的请求\u002F响应架构（用于调试或 AI 提示）：**\n```bash\ngws schema drive.files.list\n```\n\n**流式分页输出（配合 jq 处理）：**\n```bash\ngws drive files list --params '{\"pageSize\": 100}' --page-all | jq -r '.files[].name'\n```\n\n### 3. AI 智能体集成\n\n该工具专为 AI 设计，所有响应均为结构化 JSON。你可以为 Cursor、OpenClaw 或 Gemini CLI 添加技能：\n\n**为 Gemini CLI 安装扩展：**\n```bash\n# 先确保终端已认证\ngws auth setup\n\n# 安装扩展\ngemini extensions install https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\n```\n\n**为其他 Agent 添加技能：**\n```bash\nnpx skills add https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\n```","某初创公司的运维工程师需要每日自动汇总团队在 Google Drive 的项目文档、检查 Gmail 中的紧急告警，并将摘要同步至 Google Chat 群组。\n\n### 没有 cli 时\n- **接口对接繁琐**：必须手动查阅 Google REST API 文档，编写大量 `curl` 命令或 Python 脚本来处理复杂的 OAuth 认证和 HTTP 请求头。\n- **数据格式混乱**：不同 API 返回的数据结构各异，需编写额外的解析代码才能统一格式，供后续脚本或 AI 模型使用。\n- **维护成本高昂**：一旦 Google 更新 API 端点或参数，原有脚本立即失效，工程师需频繁跟进变更并重新适配代码。\n- **AI 集成困难**：若想接入 AI Agent 自动执行任务，需专门开发自定义工具函数（Tool Functions）来桥接大模型与 Workspace 服务。\n\n### 使用 cli 后\n- **零样板代码**：直接通过 `gws drive files list` 或 `gws chat spaces messages create` 等直观命令操作，无需关心底层 HTTP 细节。\n- **标准化输出**：所有命令默认输出结构化 JSON，配合 `jq` 即可轻松提取数据，天然适合作为 AI Agent 的输入源。\n- **动态自适应**：cli 运行时动态读取 Google Discovery Service，新 API 功能发布后无需安装更新即可直接使用，彻底消除维护焦虑。\n- **原生 AI 支持**：内置 40+ 种 Agent 技能，大模型可直接调用 cli 完成“查找未读邮件”或“创建日程”等复杂任务，无需额外开发中间件。\n\ncli 将原本需要数小时开发的集成工作简化为单行命令，让人类和 AI 代理都能以最低成本高效驾驭整个 Google Workspace 生态。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgoogleworkspace_cli_2d78f310.png","googleworkspace","Google Workspace","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fgoogleworkspace_d5fb49b1.png","Developer samples for Google Workspace APIs ",null,"workspacedevs","https:\u002F\u002Fdevelopers.google.com\u002Fworkspace","https:\u002F\u002Fgithub.com\u002Fgoogleworkspace",[84,88,92,96],{"name":85,"color":86,"percentage":87},"Rust","#dea584",98.8,{"name":89,"color":90,"percentage":91},"JavaScript","#f1e05a",0.6,{"name":93,"color":94,"percentage":95},"Shell","#89e051",0.3,{"name":97,"color":98,"percentage":99},"Nix","#7e7eff",0.2,23824,1190,"2026-04-05T11:29:08","Apache-2.0","Linux, macOS, Windows","不需要 GPU","未说明",{"notes":108,"python":109,"dependencies":110},"该工具主要基于 Node.js 运行，也可通过 Rust (cargo) 从源码编译。支持通过 npm、Homebrew、Nix 或直接下载预编译二进制文件安装。需要配置 Google Cloud 项目以获取 OAuth 凭证。若使用交互式设置需安装 gcloud CLI。AI Agent 技能可通过 npx 安装。","不需要 Python",[111,112],"Node.js 18+","npm 或 cargo (可选用于源码编译)",[26,53,15],[115,116,117,118,67,119,120,121,122,123,124,125,126,127,128,129],"google-workspace","agent-skills","ai-agent","automation","discovery-api","google-admin","google-api","google-calendar","google-chat","google-docs","google-drive","google-sheets","oauth2","rust","gemini-cli-extension",9,"2026-03-27T02:49:30.150509","2026-04-06T06:54:01.869692",[134,139,144,149,154,158],{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},6423,"macOS 上 `gws auth login` 成功但后续命令报“解密失败”或找不到密钥怎么办？","该问题已在版本 0.11.1 中修复（通过 PR #373）。如果您遇到此错误，请将工具升级到最新版本：\n```\ngws --version # 确认版本 >= 0.11.1\n```\n升级后重新运行 `gws auth login` 即可解决 macOS Keychain 集成失效的问题。","https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fissues\u002F360",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},6424,"登录成功后执行命令返回 401 错误，且 `gws auth status` 显示账户为 \"(unknown)\" 或账户列表为空，如何解决？","这通常是因为 OAuth 授权 URL 中缺少必要的用户信息范围（scopes），导致无法识别账户身份。\n\n**解决方法：**\n在运行 `gws auth login` 生成的授权 URL 中，手动添加以下两个 scope 参数：\n1. `openid`\n2. `https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fuserinfo.email`\n\n**操作步骤：**\n1. 运行 `gws auth login` 获取长 URL。\n2. 在 URL 的 `scope` 参数末尾追加 `%20openid%20https:\u002F\u002Fwww.googleapis.com\u002Fauth\u002Fuserinfo.email`。\n3. 使用修改后的 URL 在浏览器中完成登录。\n\n或者，升级到最新版本（已包含 PR #175 和 #223 的修复），新版已自动处理此逻辑并支持旧凭据迁移。","https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fissues\u002F198",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},6425,"提示 \"Legacy credentials found... Please run 'gws auth login' to upgrade\" 但重新登录仍陷入循环或失败怎么办？","这是旧版凭据格式与新版本多账户功能不兼容导致的。如果自动升级失败，请尝试以下方法：\n1. **手动指定邮箱登录**：在某些版本中，确保在登录流程中明确选择或输入您的 Google 账户邮箱。\n2. **清理旧凭据**：删除 `~\u002F.config\u002Fgws\u002Fcredentials.enc` 文件（注意备份），然后重新运行 `gws auth login` 生成全新的凭据文件。\n3. **检查 GCP 项目**：部分用户反馈使用较旧的 GCP 项目可能导致此问题，尝试创建一个新的 GCP 项目并重新配置 `gws auth setup`。","https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fissues\u002F187",{"id":150,"question_zh":151,"answer_zh":152,"source_url":153},6426,"如何在 `gws` 中管理和切换多个 Google 账户？","目前社区强烈需求此功能，以便像 `gog` 一样通过 `--account` 标志切换账户。虽然早期版本仅支持单账户（后登录会覆盖前一个），但新版本正在逐步完善多账户支持。\n\n**当前建议方案：**\n- 检查是否已更新到支持多账户的最新版本。\n- 如果尚未完全支持命令行切换，可能需要通过手动管理不同的配置文件目录或使用环境变量 `GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE` 指向不同账户的凭据文件来实现临时切换。\n- 关注官方更新，未来将支持如下命令：\n  ```bash\n  gws auth login --account work@corp.com\n  gws drive files list --account work@corp.com\n  gws auth list\n  ```","https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fissues\u002F78",{"id":155,"question_zh":156,"answer_zh":157,"source_url":143},6427,"Windows 用户遇到登录成功但所有 API 调用均返回 401 错误，该如何排查？","如果在 Windows 上遇到 `gws auth login` 显示成功但命令报 401，这通常与 macOS 上的原因相同（缺少 userinfo 范围）。\n\n**解决方案：**\n1. **升级版本**：确保使用的是包含修复补丁（PR #175 + #223）的最新版本。\n2. **手动修补 URL**：如果无法立即升级，请在登录时手动修改授权 URL，添加 `openid` 和 `userinfo.email` 范围（参考 Issue #198 中的详细步骤）。\n3. **验证状态**：运行 `gws auth status` 确认 `token_valid` 为 true 且 `account` 字段不再是 \"(unknown)\"。",{"id":159,"question_zh":160,"answer_zh":161,"source_url":162},6428,"为什么 `.encryption_key` 文件会一直存在于磁盘上，即使系统密钥环（Keyring）已经可用？","这是一个已知的设计行为\u002F问题。程序在首次运行时，会先生成密钥并写入 `~\u002F.config\u002Fgws\u002F.encryption_key` 文件，然后再尝试存入系统密钥环（如 macOS Keychain）。即使密钥环存储成功，该文件也不会被自动删除。\n\n**影响与注意：**\n- 这使得凭据文件具有可移植性（复制整个配置目录即可在其他机器解密），但也降低了安全性（文件仅受权限保护，而非生物识别\u002F密码）。\n- 如果您希望提高安全性，可以在确认 `gws` 能正常从系统密钥环读取密钥后，手动删除 `~\u002F.config\u002Fgws\u002F.encryption_key` 文件。","https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fissues\u002F344",[164,169,174,179,184,189,194,199,204,209,214,219,224,229,234,239,244,249,254,259],{"id":165,"version":166,"summary_zh":167,"released_at":168},105973,"v0.22.5","## Installation\n\nDownload the archive for your OS and architecture from the assets below.\n\n### Linux \u002F macOS\n\nReplace `\u003Ctarget>` with your platform (e.g., `aarch64-apple-darwin` or `x86_64-unknown-linux-gnu`).\n\n```bash\n# 1. Download the archive and its checksum\ncurl -sLO https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.5\u002Fgoogle-workspace-cli-\u003Ctarget>.tar.gz\ncurl -sLO https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.5\u002Fgoogle-workspace-cli-\u003Ctarget>.tar.gz.sha256\n\n# 2. Verify the checksum\nshasum -a 256 -c google-workspace-cli-\u003Ctarget>.tar.gz.sha256\n\n# 3. Extract and install\ntar -xzf google-workspace-cli-\u003Ctarget>.tar.gz\nchmod +x gws\nsudo mv gws \u002Fusr\u002Flocal\u002Fbin\u002F\n```\n\n### Windows\n\n1. Download `google-workspace-cli-x86_64-pc-windows-msvc.zip` and its `.sha256` file\n2. Verify the checksum (e.g., using PowerShell `Get-FileHash`)\n3. Extract the archive and move `gws.exe` to a directory included in your system `PATH`.\n\n---\n\n\n## What's Changed\n* ci: pin cross-rs to v0.2.5 in release workflow by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F651\n* fix: verify SHA256 checksum in npm postinstall script by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F650\n* ci: add cargo-audit workflow for dependency vulnerability scanning by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F649\n* fix: auto-install binary on run if missing by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F654\n* ci: add cargo-deny for license, advisory, and source auditing by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F653\n* docs: update installation instructions to prioritize github releases by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F656\n* refactor: drop serde_yaml by migrating to toml by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F657\n* chore: release versions by @googleworkspace-bot in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F655\n\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fcompare\u002Fv0.22.4...v0.22.5","2026-03-31T18:53:24",{"id":170,"version":171,"summary_zh":172,"released_at":173},105974,"v0.22.4","## What's Changed\n* chore: remove cargo-dist, use native fetch for npm installer by @jpoehnelt in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F646\n* chore: release versions by @googleworkspace-bot in https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fpull\u002F647\n\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fcompare\u002Fv0.22.3...v0.22.4","2026-03-31T17:27:51",{"id":175,"version":176,"summary_zh":177,"released_at":178},105975,"v0.22.3","## Release Notes\n\n### Patch Changes\n\n- 674d53a: Fix `Lint Skills` CI job by installing `uv` via `astral-sh\u002Fsetup-uv` before running `uvx`\n- c7c42f6: fix: register script service and resolve test path validation errors\n- 80bd150: feat(auth): use strict OS keychain integration on macOS and Windows\n\n  Closes #623. The CLI no longer writes a fallback `.encryption_key` text file on macOS and Windows when securely storing credentials. Instead, it strictly uses the native OS keychain (Keychain Access on macOS, Credential Manager on Windows). If an old `.encryption_key` file is found during a successful keychain login, it will be automatically deleted for security.\n  Linux deployments continue to use a seamless file-based fallback by default to ensure maximum compatibility with headless continuous integration (CI) runners, Docker containers, and SSH environments without desktop DBUS services.\n\n- ec7f56b: Sync generated skills with latest Google Discovery API specs\n\n## Install google-workspace-cli 0.22.3\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.22.3\n```\n\n## Download google-workspace-cli 0.22.3\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [google-workspace-cli-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.3\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-26T18:55:37",{"id":180,"version":181,"summary_zh":182,"released_at":183},105976,"v0.22.1","## Release Notes\n\n### Patch Changes\n\n- 6a45832: Sync generated skills with latest Google Discovery API specs\n\n## Install google-workspace-cli 0.22.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.22.1\n```\n\n## Download google-workspace-cli 0.22.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [google-workspace-cli-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-25T17:37:35",{"id":185,"version":186,"summary_zh":187,"released_at":188},105977,"v0.22.0","## Release Notes\n\n### Minor Changes\n\n- 0850c48: Add `--draft` flag to Gmail `+send`, `+reply`, `+reply-all`, and `+forward` helpers to save messages as drafts instead of sending them immediately\n\n## Install google-workspace-cli 0.22.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.22.0\n```\n\n## Download google-workspace-cli 0.22.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [google-workspace-cli-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.22.0\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-24T22:25:03",{"id":190,"version":191,"summary_zh":192,"released_at":193},105978,"v0.21.1","## Release Notes\n\n### Patch Changes\n\n- ea0849a: Fix version-sync script and bump CLI crate version to 0.21.0\n\n  The `version-sync.sh` script was updating the root `Cargo.toml` which no longer has a `[package]` section after the workspace refactor. Updated to target `crates\u002Fgoogle-workspace-cli\u002FCargo.toml`. Also syncs the CLI crate version to 0.21.0 to match `package.json`.\n\n## Install google-workspace-cli 0.21.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.21.1\n```\n\n## Download google-workspace-cli 0.21.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [google-workspace-cli-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-aarch64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-apple-darwin.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-pc-windows-msvc.zip.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [google-workspace-cli-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [google-workspace-cli-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.21.1\u002Fgoogle-workspace-cli-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-24T21:02:57",{"id":195,"version":196,"summary_zh":197,"released_at":198},105979,"v0.20.0","## Release Notes\n\n### Minor Changes\n\n- e782dd7: Forward original attachments by default and preserve inline images in HTML mode.\n\n  `+forward` now includes the original message's attachments and inline images by default,\n  matching Gmail web behavior. Use `--no-original-attachments` to opt out.\n  `+reply`\u002F`+reply-all` with `--html` preserve inline images in the quoted body via\n  `multipart\u002Frelated`. In plain-text mode, inline images are not included (matching Gmail web).\n\n## Install gws 0.20.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.20.0\n```\n\n## Download gws 0.20.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.20.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-24T18:08:53",{"id":200,"version":201,"summary_zh":202,"released_at":203},105980,"v0.19.0","## Release Notes\n\n### Minor Changes\n\n- a078945: Refactor all `gws auth` subcommands to use clap for argument parsing\n\n  Replace manual argument parsing in `handle_auth_command`, `handle_login`, `resolve_scopes`, and `handle_export` with structured `clap::Command` definitions. Introduces `ScopeMode` enum for type-safe scope selection and adds proper `--help` support for all auth subcommands.\n\n### Patch Changes\n\n- 8a749c2: feat(helpers): add --dry-run support to events helper commands\n\n  Add dry-run mode to `gws events +renew` and `gws events +subscribe` commands.\n  When --dry-run is specified, the commands will print what actions would be\n  taken without making any API calls. This allows agents to simulate requests\n  and learn without reaching the server.\n\n- d679401: Fix `mask_secret` panic on multi-byte UTF-8 secrets by using char-based indexing instead of byte-offset slicing\n- d341de2: Handle --help\u002F-h in `gws auth setup` before launching the setup wizard, preventing accidental project creation when users just want usage info\n- f157208: fix: use block-style YAML sequences in generated SKILL.md frontmatter\n\n  Replace flow sequences (`bins: [\"gws\"]`, `skills: [...]`) with block-style\n  sequences (`bins:\\n  - gws`) in all generated SKILL.md frontmatter templates.\n\n  Flow sequences are valid YAML but rejected by `strictyaml`, which the\n  Agent Skills reference implementation (`agentskills validate`) uses to parse\n  frontmatter. This caused all 93 generated skills to fail validation.\n\n  Fixes #521\n\n- b4d5e26: Fix auth error propagation: properly propagate errors when token directory creation or permission setting fails, instead of silently ignoring them\n\n## Install gws 0.19.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.19.0\n```\n\n## Download gws 0.19.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.19.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-23T21:34:40",{"id":205,"version":206,"summary_zh":207,"released_at":208},105981,"v0.18.1","## Release Notes\n\n### Patch Changes\n\n- a87037b: Handle SIGTERM in `gws gmail +watch` and `gws events +subscribe` for clean container shutdown.\n\n  Long-running pull loops now exit gracefully on SIGTERM (in addition to Ctrl+C),\n  enabling clean shutdown under Kubernetes, Docker, and systemd.\n\n## Install gws 0.18.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.18.1\n```\n\n## Download gws 0.18.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.1\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-18T21:02:44",{"id":210,"version":211,"summary_zh":212,"released_at":213},105982,"v0.18.0","## Release Notes\n\n### Minor Changes\n\n- 908cf73: feat(gmail): auto-populate From header with display name from send-as settings\n\n  Fetch the user's send-as identities to set the From header with a display name in all mail helpers (+send, +reply, +reply-all, +forward), matching Gmail web client behavior. Also enriches bare `--from` emails with their configured display name.\n\n- 6e4daaf: Gmail helpers rollup: mail-builder migration, --attach flag (upload endpoint), +read helper\n\n  - Migrate `+send`, `+reply`, `+reply-all`, and `+forward` to the `mail-builder` crate for RFC-compliant MIME construction\n  - Add `--from` flag to `+send` for send-as alias support\n  - Add `-a`\u002F`--attach` flag to all mail helpers (`+send`, `+reply`, `+reply-all`, `+forward`) with `mime_guess2` auto-detection, 25MB size validation, and upload endpoint support (35MB API limit vs 5MB metadata-only)\n  - Add `+read` helper to extract message body and headers (text, HTML, or JSON output)\n  - Make `OriginalMessage.thread_id` optional (`Option\u003CString>`) for draft compatibility\n  - RFC 2822 display name quoting is handled natively by `mail-builder`\n  - Introduce `UploadSource` enum in executor for type-safe upload strategies\n\n### Patch Changes\n\n- 1e90380: fix(gmail): remove dead `--attachment` arg from `+send`\n\n  The `+send` subcommand defined a duplicate `\"attachment\"` arg alongside the\n  `\"attach\"` arg already provided by `common_mail_args`. Since `parse_attachments`\n  reads `\"attach\"`, the `--attachment` flag was silently ignored. Removed the\n  dead duplicate.\n\n- 908cf73: fix(gmail): handle reply-all to own message correctly\n\n  Reply-all to a message you sent no longer errors with \"No To recipient remains.\" The original To recipients are now used as reply targets, matching Gmail web client behavior.\n\n- 2e909ae: Consolidate terminal sanitization, coloring, and output helpers into a new `output.rs` module. Fixes raw ANSI escape codes in `watch.rs` that bypassed `NO_COLOR` and TTY detection, upgrades `sanitize_for_terminal` to also strip dangerous Unicode characters (bidi overrides, zero-width spaces, directional isolates), and sanitizes previously raw API error body and user query outputs.\n\n## Install gws 0.18.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.18.0\n```\n\n## Download gws 0.18.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.18.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation veri","2026-03-18T15:55:13",{"id":215,"version":216,"summary_zh":217,"released_at":218},105983,"v0.17.0","## Release Notes\n\n### Minor Changes\n\n- 1b0a21f: feat: support google meet video conferencing in calendar +insert\n\n### Patch Changes\n\n- 811fe7b: Fix critical security vulnerability (TOCTOU\u002FSymlink race) in atomic file writes.\n\n  The atomic_write and atomic_write_async utilities now use:\n\n  - Randomized temporary filenames to prevent predictability.\n  - O_EXCL creation flags to prevent following pre-existing symlinks.\n  - Strict 0600 permissions from the moment of file creation on Unix systems.\n  - Redundant post-write permission calls have been removed to close race windows.\n\n- b241a5b: fix(security): cap Retry-After sleep, sanitize upload mimeType, and validate --upload\u002F--output paths\n- 6f92e5b: Stderr\u002Foutput hygiene rollup: route diagnostics to stderr, add colored error labels, propagate auth errors.\n\n  - **triage.rs**: \"No messages found\" sent to stderr so stdout stays valid JSON for pipes\n  - **modelarmor.rs**: response body printed only on success; error message now includes body for diagnostics\n  - **error.rs**: colored `error[variant]:` labels on stderr (respects `NO_COLOR` env var), `hint:` prefix for accessNotConfigured guidance\n  - **calendar, chat, docs, drive, script, sheets**: auth failures now propagate as `GwsError::Auth` instead of silently proceeding unauthenticated (dry-run still works without auth)\n\n- 398e80c: Sync generated skills with latest Google Discovery API specs\n- 8458104: Extend input validation to reject dangerous Unicode characters (zero-width chars, bidi overrides, Unicode line\u002Fparagraph separators) that were not caught by the previous ASCII-range check\n\n## Install gws 0.17.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.17.0\n```\n\n## Download gws 0.17.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.17.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-17T20:33:43",{"id":220,"version":221,"summary_zh":222,"released_at":223},105984,"v0.16.0","## Release Notes\n\n### Minor Changes\n\n- 47afe5f: Use Google account timezone instead of machine-local time for day-boundary calculations in calendar and workflow helpers. Adds `--timezone` flag to `+agenda` for explicit override. Timezone is fetched from Calendar Settings API and cached for 24 hours.\n\n### Patch Changes\n\n- c61b9cb: fix(gmail): RFC 2047 encode non-ASCII display names in To\u002FFrom\u002FCc\u002FBcc headers\n\n  Fixes mojibake when sending emails to recipients with non-ASCII display names (e.g. Japanese, Spanish accented characters). The new `encode_address_header()` function parses mailbox lists, encodes only the display-name portion via RFC 2047 Base64, and leaves email addresses untouched.\n\n## Install gws 0.16.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.16.0\n```\n\n## Download gws 0.16.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.16.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-13T23:34:27",{"id":225,"version":226,"summary_zh":227,"released_at":228},105985,"v0.15.0","## Release Notes\n\n### Minor Changes\n\n- 6f3e090: Add opt-in structured HTTP request logging via `tracing`\n\n  New environment variables:\n\n  - `GOOGLE_WORKSPACE_CLI_LOG`: stderr log filter (e.g., `gws=debug`)\n  - `GOOGLE_WORKSPACE_CLI_LOG_FILE`: directory for JSON log files with daily rotation\n\n  Logging is completely silent by default (zero overhead). Only PII-free metadata is logged: API method ID, HTTP method, status code, latency, and content-type.\n\n## Install gws 0.15.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.15.0\n```\n\n## Download gws 0.15.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.15.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-13T21:35:21",{"id":230,"version":231,"summary_zh":232,"released_at":233},105986,"v0.14.0","## Release Notes\n\n### Minor Changes\n\n- dc561e0: Add `--upload-content-type` flag and smart MIME inference for multipart uploads\n\n  Previously, multipart uploads used the metadata `mimeType` field for both the Drive\n  metadata and the media part's `Content-Type` header. This made it impossible to upload\n  a file in one format (e.g. Markdown) and have Drive convert it to another (e.g. Google Docs),\n  because the media `Content-Type` and the target `mimeType` must differ for import conversions.\n\n  The new `--upload-content-type` flag allows setting the media `Content-Type` explicitly.\n  When omitted, the media type is now inferred from the file extension before falling back\n  to the metadata `mimeType`. This matches Google Drive's model where metadata `mimeType`\n  is the _target_ type (what the file should become) while the media `Content-Type` is the\n  _source_ type (what the bytes are).\n\n  This means import conversions now work automatically:\n\n  ```bash\n  # Extension inference detects text\u002Fmarkdown → conversion just works\n  gws drive files create \\\n    --json '{\"name\":\"My Doc\",\"mimeType\":\"application\u002Fvnd.google-apps.document\"}' \\\n    --upload notes.md\n\n  # Explicit flag still available as an override\n  gws drive files create \\\n    --json '{\"name\":\"My Doc\",\"mimeType\":\"application\u002Fvnd.google-apps.document\"}' \\\n    --upload notes.md \\\n    --upload-content-type text\u002Fmarkdown\n  ```\n\n### Patch Changes\n\n- 945ac91: Stream multipart uploads to avoid OOM on large files. File content is now streamed in chunks via `ReaderStream` instead of being read entirely into memory, reducing memory usage from O(file_size) to O(64 KB).\n\n## Install gws 0.14.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.14.0\n```\n\n## Download gws 0.14.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.14.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-13T21:08:24",{"id":235,"version":236,"summary_zh":237,"released_at":238},105987,"v0.13.3","## Release Notes\n\n### Patch Changes\n\n- 8ef27a2: fix(calendar): use local timezone for agenda day boundaries instead of UTC\n- 4d7b420: Fix `+append --json-values` flattening multi-row arrays into a single row by preserving the `Vec\u003CVec\u003CString>>` row structure through to the API request body\n- bb94016: fix(security): validate space name in chat +send to prevent path traversal\n- 4b827cd: chore: fix maintainer email typo in flake.nix and harden coverage.sh\n- 44767ed: Map People service to `contacts` and `directory` scope prefixes so `gws auth login -s people` includes the required OAuth scopes\n- 8fce003: fix(docs): correct flag names in recipes (--spreadsheet-id, --attendees, --duration)\n- 21b1840: Expose `repeated: true` in `gws schema` output and expand JSON arrays into repeated query parameters for `repeated` fields\n- 1346d47: Sync generated skills with latest Google Discovery API specs\n- 957b999: test(gmail): add unit tests for +triage argument parsing and format selection\n\n## Install gws 0.13.3\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.13.3\n```\n\n## Download gws 0.13.3\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.3\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-13T20:09:45",{"id":240,"version":241,"summary_zh":242,"released_at":243},105988,"v0.13.2","## Release Notes\n\n### Patch Changes\n\n- 3dcf818: Refresh OAuth access tokens for long-running Gmail watch and Workspace Events subscribe helpers before each Pub\u002FSub and Gmail request.\n- 86ea6de: Validate `--subscription` resource name in `gmail +watch` and deduplicate `PUBSUB_API_BASE` constant.\n\n## Install gws 0.13.2\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.13.2\n```\n\n## Download gws 0.13.2\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.2\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-12T20:39:46",{"id":245,"version":246,"summary_zh":247,"released_at":248},105989,"v0.13.1","## Release Notes\n\n### Patch Changes\n\n- 510024f: Centralize token cache filenames as constants and support ServiceAccount credentials at the default plaintext path\n- 510024f: Auto-recover from stale encrypted credentials after upgrade: remove undecryptable `credentials.enc` and fall through to other credential sources (plaintext, ADC) instead of hard-erroring. Also sync encryption key file backup when keyring has key but file is missing.\n- e104106: Add shell tips section to gws-shared skill warning about zsh `!` history expansion, and replace single quotes with double quotes around sheet ranges containing `!` in recipes and skill examples\n\n## Install gws 0.13.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.13.1\n```\n\n## Download gws 0.13.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.13.1\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-12T18:10:25",{"id":250,"version":251,"summary_zh":252,"released_at":253},105990,"v0.12.0","## Release Notes\n\n### Minor Changes\n\n- 247e27a: Add structured exit codes for scriptable error handling\n\n  `gws` now exits with a type-specific code instead of always using `1`:\n\n  | Code | Meaning                                                         |\n  | ---- | --------------------------------------------------------------- |\n  | `0`  | Success                                                         |\n  | `1`  | API error — Google returned a 4xx\u002F5xx response                  |\n  | `2`  | Auth error — credentials missing, expired, or invalid           |\n  | `3`  | Validation error — bad arguments, unknown service, invalid flag |\n  | `4`  | Discovery error — could not fetch the API schema document       |\n  | `5`  | Internal error — unexpected failure                             |\n\n  Exit codes are documented in `gws --help` and in the README.\n\n### Patch Changes\n\n- 087066f: Fix `gws auth login` encrypted credential persistence by enabling native keyring backends for the `keyring` crate on supported desktop platforms instead of silently falling back to the in-memory mock store.\n\n## Install gws 0.12.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.12.0\n```\n\n## Download gws 0.12.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.12.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-12T16:11:34",{"id":255,"version":256,"summary_zh":257,"released_at":258},105991,"v0.11.1","## Release Notes\n\n### Patch Changes\n\n- adbca87: Fix `--format csv` for array-of-arrays responses (e.g. Sheets values API)\n\n## Install gws 0.11.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.11.1\n```\n\n## Download gws 0.11.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.1\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-10T22:02:56",{"id":260,"version":261,"summary_zh":262,"released_at":263},105992,"v0.11.0","## Release Notes\n\n### Minor Changes\n\n- 4d4b09f: Add `--cc` and `--bcc` flags to `+send`, `--to` and `--bcc` to `+reply` and `+reply-all`, and `--bcc` to `+forward`.\n\n## Install gws 0.11.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-installer.ps1 | iex\"\n```\n\n### Install prebuilt binaries into your npm project\n\n```sh\nnpm install @googleworkspace\u002Fcli@0.11.0\n```\n\n## Download gws 0.11.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [gws-aarch64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-aarch64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-apple-darwin.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-apple-darwin.tar.gz.sha256) |\n| [gws-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-pc-windows-msvc.zip.sha256) |\n| [gws-aarch64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-gnu.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [gws-aarch64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [gws-x86_64-unknown-linux-musl.tar.gz](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Freleases\u002Fdownload\u002Fv0.11.0\u002Fgws-x86_64-unknown-linux-musl.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https:\u002F\u002Fcli.github.com\u002Fmanual\u002Fgh_attestation_verify):\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --repo googleworkspace\u002Fcli\n```\n\nYou can also download the attestation from [GitHub](https:\u002F\u002Fgithub.com\u002Fgoogleworkspace\u002Fcli\u002Fattestations) and verify against that directly:\n```sh\ngh attestation verify \u003Cfile-path of downloaded artifact> --bundle \u003Cfile-path of downloaded attestation>\n```\n\n\n","2026-03-10T20:32:44"]