关于 Google Workspace CLI
Google Workspace 的官方命令行工具,支持 Gmail、Calendar、Drive、Sheets、Docs、Chat 和 Admin 等服务。内置 MCP 支持和 Agent 技能,通过 Discovery API 自动生成命令,可与编码 Agent 集成。
主要功能
- 01管理 Gmail 邮件和日历事件
- 02访问 Drive、Sheets、Docs 等服务
- 03作为 MCP 服务运行,与 Agent 集成
- 04基于 Discovery API 自动生成命令
适用场景
- 01编码 Agent 自动化电子邮件和日程管理任务
- 02脚本化 Google Workspace 工作流
- 03在 AI 工具中集成 Google 服务
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行gws --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍
gws
面向 Google Workspace 全家桶的统一命令行工具,专为人类与 AI Agent 打造。
支持 Drive、Gmail、Calendar 以及所有 Workspace API。零样板代码,输出结构化 JSON,内置 40+ 个 Agent 技能。
说明
这不是Google 官方支持的产品。
gws 不附带静态的命令列表。它会在运行时读取 Google 自身的 Discovery Service,并动态构建整个命令面。当 Google Workspace 新增 API 端点或方法时,gws 会自动识别。
重要
本项目仍在积极开发中,在迈向 v1.0 的过程中可能会出现破坏性变更。
目录
前置条件
- Node.js 18+ — 用于
npm install(或从 GitHub Releases 下载预构建的二进制文件) - 一个 Google Cloud 项目 — OAuth 凭据所需。你可以通过 Google Cloud Console、
gcloud命令行工具,或使用gws auth setup命令来创建。 - 一个可访问 Google Workspace 的 Google 账号
安装
推荐的安装方式是从 GitHub Releases 页面下载适用于你操作系统和架构的预构建二进制文件。解压压缩包后,将 gws 二进制文件放入你的 $PATH 中。
为方便起见,你也可以使用 npm 自动从 GitHub Releases 下载对应的二进制文件:
npm install -g @googleworkspace/cli
或者从源码构建:
cargo install --git https://github.com/googleworkspace/cli --locked
也提供 Nix flake,位于 github:googleworkspace/cli
nix run github:googleworkspace/cli
在 macOS 和 Linux 上,你也可以通过 Homebrew 安装:
brew install googleworkspace-cli
快速开始
gws auth setup # walks you through Google Cloud project config
gws auth login # subsequent OAuth login
gws drive files list --params '{"pageSize": 5}'
为什么选择 gws?
面向人类用户 — 无需再对照 REST 文档手写 curl 调用。gws 为每个资源提供 --help,支持用 --dry-run 预览请求,并可自动分页。
面向 AI Agent — 每个响应都是结构化 JSON。配合内置的 Agent 技能使用,你的大模型无需自定义工具即可管理 Workspace。
# List the 10 most recent files
gws drive files list --params '{"pageSize": 10}'
# Create a spreadsheet
gws sheets spreadsheets create --json '{"properties": {"title": "Q1 Budget"}}'
# Send a Chat message
gws chat spaces messages create \
--params '{"parent": "spaces/xyz"}' \
--json '{"text": "Deploy complete."}' \
--dry-run
# Introspect any method's request/response schema
gws schema drive.files.list
# Stream paginated results as NDJSON
gws drive files list --params '{"pageSize": 100}' --page-all | jq -r '.files[].name'
认证
该命令行工具支持多种认证流程,因此可在笔记本电脑、CI 和服务器上使用。
应该使用哪种设置?
| 我拥有… | 使用方式 |
|---|---|
已安装并完成认证的 gcloud | gws auth setup(最快) |
有 GCP 项目但没有 gcloud | 手动 OAuth 设置 |
| 已有 OAuth 访问令牌 | GOOGLE_WORKSPACE_CLI_TOKEN |
| 已有凭据 | GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE |
交互式(本地桌面)
凭据以 AES-256-GCM 加密存储于磁盘,密钥保存在操作系统密钥环中(若设置了 GOOGLE_WORKSPACE_CLI_KEYRING_BACKEND=file,则保存在 ~/.config/gws/.encryption_key)。
gws auth setup # one-time: creates a Cloud project, enables APIs, logs you in
gws auth login # subsequent scope selection and login
gws auth setup需要gcloud命令行。如果你没有安装gcloud,请改用下方的手动设置。
警告
测试模式下的范围限制: 如果你的 OAuth 应用未经验证(测试模式), Google 会将授权范围限制在约 25 个。
recommended范围预设包含 85 个以上 范围,对于未经验证的应用将会失败(尤其是@gmail.com账户)。 请改为选择单独的服务来过滤范围选择器:gws auth login -s drive,gmail,sheets
手动 OAuth 设置(Google Cloud 控制台)
当 gws auth setup 无法自动创建项目或客户端,或者你希望完全手动控制时,请使用此方法。
- 在目标项目中打开 Google Cloud 控制台:
- OAuth 同意屏幕:
https://console.cloud.google.com/apis/credentials/consent?project=<PROJECT_ID> - 凭据:
https://console.cloud.google.com/apis/credentials?project=<PROJECT_ID>
- OAuth 同意屏幕:
- 如有提示,配置 OAuth 品牌信息与受众:
- 应用类型:外部(测试模式即可)
- 在 测试用户 下添加你的账户
- 创建 OAuth 客户端:
- 类型:桌面应用
- 下载客户端 JSON 文件,并保存到:
~/.config/gws/client_secret.json
重要
你必须将自己添加为测试用户。 在 OAuth 同意屏幕中,点击 测试用户 → 添加用户,然后输入你的 Google 账户邮箱。否则登录时会出现通用的“访问被阻止”错误。
然后运行:
gws auth login
浏览器辅助授权(人工或 Agent)
你可以手动完成 OAuth 授权,也可以使用浏览器自动化完成。
- 人工流程:运行
gws auth login,打开输出的 URL,批准授权范围。 - Agent 辅助流程:Agent 打开 URL,选择账户,处理同意提示,并在本地回调成功后将控制权交还给你。
如果同意页面显示 “Google 尚未验证此应用”(测试模式),请点击 继续。 如果出现范围复选框,请在继续前勾选所需范围(或点击 全选)。
无头 / CI(导出流程)
- 在有浏览器的机器上完成交互式授权。
- 导出凭据:
gws auth export --unmasked > credentials.json - 在无头机器上:
export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=/path/to/credentials.json gws drive files list # just works
服务账户(服务器到服务器)
指向你的密钥文件即可,无需登录。
export GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE=/path/to/service-account.json
gws drive files list
预先获取的访问令牌
当其他工具(例如 gcloud)已经为你的环境签发令牌时,此方式很有用。
export GOOGLE_WORKSPACE_CLI_TOKEN=$(gcloud auth print-access-token)
优先级
| 优先级 | 来源 | 设置方式 |
|---|---|---|
| 1 | 访问令牌 | GOOGLE_WORKSPACE_CLI_TOKEN |
| 2 | 凭据文件 | GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE |
| 3 | 加密凭据 | gws auth login |
| 4 | 明文凭据 | ~/.config/gws/credentials.json |
环境变量也可以写在 .env 文件中。
AI Agent 技能
该仓库提供 100 多个 Agent 技能(SKILL.md 文件),涵盖每个受支持的 API,外加用于常见工作流的更高层辅助工具,以及针对 Gmail、Drive、Docs、Calendar 和 Sheets 的 50 个精选示例。完整列表请参阅技能索引。
# Install all skills at once
npx skills add https://github.com/googleworkspace/cli
# Or pick only what you need
npx skills add https://github.com/googleworkspace/cli/tree/main/skills/gws-drive
npx skills add https://github.com/googleworkspace/cli/tree/main/skills/gws-gmail
OpenClaw 设置
# Symlink all skills (stays in sync with repo)
ln -s $(pwd)/skills/gws-* ~/.openclaw/skills/
# Or copy specific skills
cp -r skills/gws-drive skills/gws-gmail ~/.openclaw/skills/
gws-shared 技能包含一个 install 配置块,因此如果 PATH 中找不到 gws,OpenClaw 会通过 npm 自动安装命令行工具。
-
先对 CLI 进行身份验证:
gws auth setup -
将扩展安装到 Gemini CLI 中:
gemini extensions install https://github.com/googleworkspace/cli
安装此扩展后,你的 Gemini CLI Agent 即可直接访问所有 gws 命令和 Google Workspace Agent 技能。由于 gws 会安全地自行处理身份验证,你只需在使用 Agent 之前对终端进行一次身份验证,扩展便会自动继承你的凭据。
高级用法
分段上传
gws drive files create --json '{"name": "report.pdf"}' --upload ./report.pdf
分页
| 标志 | 描述 | 默认值 |
|---|---|---|
--page-all | 自动分页,每页输出一行 JSON(NDJSON) | 关闭 |
--page-limit <N> | 最多获取的页数 | 10 |
--page-delay <MS> | 页面之间的延迟 | 100 ms |
Google Sheets — Shell 转义
Sheets 范围中使用的 ! 会被 bash 解释为历史展开。请始终将值放在 单引号 中:
# Read cells A1:C10 from "Sheet1"
gws sheets spreadsheets values get \
--params '{"spreadsheetId": "SPREADSHEET_ID", "range": "Sheet1!A1:C10"}'
# Append rows
gws sheets spreadsheets values append \
--params '{"spreadsheetId": "ID", "range": "Sheet1!A1", "valueInputOption": "USER_ENTERED"}' \
--json '{"values": [["Name", "Score"], ["Alice", 95]]}'
辅助命令
部分服务在自动生成的 Discovery 接口之外,还提供手工编写的辅助命令。辅助命令以 + 为前缀,便于在视觉上与其他命令区分,且永远不会与 Discovery 生成的方法名冲突。
具备时间感知能力的辅助命令(+agenda、+standup-report、+weekly-digest、+meeting-prep)会自动使用你的 Google 账号时区(从 Calendar Settings API 获取,并缓存 24 小时)。可在 +agenda 上使用 --timezone/--tz 覆盖该设置,或设置 --timezone 标志以进行显式控制。
运行 gws <service> --help 可同时查看 Discovery 方法和辅助命令。
gws gmail --help # shows +send, +reply, +reply-all, +forward, +triage, +watch …
gws calendar --help # shows +insert, +agenda …
gws drive --help # shows +upload …
完整辅助命令参考:
| 服务 | 命令 | 描述 |
|---|---|---|
gmail | +send | 发送邮件 |
gmail | +reply | 回复邮件(自动处理线程) |
gmail | +reply-all | 回复全部收件人 |
gmail | +forward | 将邮件转发给新收件人 |
gmail | +triage | 显示未读收件箱摘要(发件人、主题、日期) |
gmail | +watch | 监听新邮件,并以 NDJSON 格式流式输出 |
sheets | +append | 在电子表格中追加一行 |
sheets | +read | 读取电子表格中的值 |
docs | +write | 在文档末尾追加文本 |
chat | +send | 向空间发送消息 |
drive | +upload | 上传文件并自动添加元数据 |
calendar | +insert | 创建新事件 |
calendar | +agenda | 显示即将到来的事件(使用 Google 账号时区;可通过 --timezone 覆盖) |
script | +push | 用本地文件替换 Apps Script 项目中的所有文件 |
workflow | +standup-report | 今日会议与未完成任务的站会摘要 |
workflow | +meeting-prep | 为下一场会议做准备:议程、参会人员及相关文档 |
workflow | +email-to-task | 将 Gmail 邮件转换为 Google Tasks 任务 |
workflow | +weekly-digest | 每周摘要:本周会议与未读邮件数 |
workflow | +file-announce | 在 Chat 空间中发布 Drive 文件通知 |
events | +subscribe | 订阅 Workspace 事件,并以 NDJSON 格式流式输出 |
events | +renew | 续订/重新激活 Workspace Events 订阅 |
modelarmor | +sanitize-prompt | 通过 Model Armor 模板对用户提示词进行净化 |
modelarmor | +sanitize-response | 通过 Model Armor 模板对模型响应进行净化 |
modelarmor | +create-template | 创建新的 Model Armor 模板 |
示例:
# Send an email
gws gmail +send --to [email protected] --subject "Hello" --body "Hi there"
# Reply to a message
gws gmail +reply --message-id MESSAGE_ID --body "Thanks!"
# Append a row to a spreadsheet
gws sheets +append --spreadsheet SPREADSHEET_ID --values "Alice,95"
# Show today's calendar agenda
gws calendar +agenda
# Upload a file to Drive
gws drive +upload ./report.pdf --name "Q1 Report"
# Morning standup summary
gws workflow +standup-report
# Show today's agenda in a specific timezone
gws calendar +agenda --today --timezone America/New_York
Model Armor(响应净化)
集成 Google Cloud Model Armor,在 API 响应到达你的 Agent 之前扫描其中的提示词注入。
gws gmail users messages get --params '...' \
--sanitize "projects/P/locations/L/templates/T"
| 变量 | 说明 |
|---|---|
GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE | 默认的 Model Armor 模板 |
GOOGLE_WORKSPACE_CLI_SANITIZE_MODE | warn(默认)或 block |
环境变量
所有变量均为可选项。可参阅 .env.example 获取可直接复制的模板。
| 变量 | 说明 |
|---|---|
GOOGLE_WORKSPACE_CLI_TOKEN | 预先获取的 OAuth2 访问令牌(优先级最高) |
GOOGLE_WORKSPACE_CLI_CREDENTIALS_FILE | OAuth 凭据 JSON 文件的路径(用户或服务账号) |
GOOGLE_WORKSPACE_CLI_CLIENT_ID | OAuth 客户端 ID(可替代 client_secret.json) |
GOOGLE_WORKSPACE_CLI_CLIENT_SECRET | OAuth 客户端密钥(与 CLIENT_ID 配对使用) |
GOOGLE_WORKSPACE_CLI_CONFIG_DIR | 覆盖配置目录(默认:~/.config/gws) |
GOOGLE_WORKSPACE_CLI_SANITIZE_TEMPLATE | 默认的 Model Armor 模板 |
GOOGLE_WORKSPACE_CLI_SANITIZE_MODE | warn(默认)或 block |
GOOGLE_WORKSPACE_CLI_LOG | 标准错误输出的日志级别(例如 gws=debug)。默认关闭。 |
GOOGLE_WORKSPACE_CLI_LOG_FILE | 按天轮转的 JSON 日志文件目录。默认关闭。 |
GOOGLE_WORKSPACE_PROJECT_ID | 用于配额/计费的 GCP 项目 ID 覆盖项,同时作为辅助命令的备用项目 ID |
也可以在 .env 文件中设置环境变量(通过 dotenvy 加载)。
退出码
gws 使用结构化退出码,脚本无需解析错误输出即可根据故障类型进行分支处理。
| 代码 | 含义 | 示例原因 |
|---|---|---|
0 | 成功 | 命令正常完成 |
1 | API 错误 | Google 返回了 4xx/5xx 响应 |
2 | 认证错误 | 凭据缺失、已过期或无效 |
3 | 校验错误 | 参数错误、未知服务或无效标志 |
4 | 发现错误 | 无法获取 API 架构文档 |
5 | 内部错误 | 意外故障 |
gws drive files list --params '{"fileId": "bad"}'
echo $? # 1 — API error
gws unknown-service files list
echo $? # 3 — validation error (unknown service)
架构
gws 采用两阶段解析策略:
- 读取
argv[1]以识别服务(例如drive) - 获取该服务的 Discovery Document(缓存 24 小时)
- 根据文档中的资源和方法构建
clap::Command树 - 重新解析剩余参数
- 进行身份验证、构建 HTTP 请求并执行
所有输出(包括成功结果、错误信息和下载元数据)均为结构化 JSON。
故障排查
登录时出现 “Access blocked” 或 403
你的 OAuth 应用处于测试模式,且你的账号未被列为测试用户。
解决方法: 在你的 GCP 项目中打开 OAuth 同意屏幕 → Test users → Add users → 输入你的 Google 账号邮箱。然后重新运行 gws auth login。
出现 “Google hasn't verified this app”
应用处于测试模式时属于正常现象。点击 Advanced → Go to <app name> (unsafe) 继续。个人使用是安全的;只有需要向其他用户发布应用时才需要进行验证。
权限范围过多 / 同意屏幕错误
未验证(测试模式)的应用最多只能使用约 25 个 OAuth 权限范围。recommended 权限范围预设包含大量权限范围,会超出此限制。
解决方法: 仅选择你需要的权限范围:
gws auth login --scopes drive,gmail,calendar
未找到 gcloud 命令行工具
gws auth setup 需要 gcloud 命令行工具来自动创建项目。你有以下三种选择:
- 安装 gcloud 后直接使用
gcloud。 - 重新运行
gws auth setup,它会封装gcloud调用。 - 完全跳过
gcloud,在 Cloud Console 中手动设置 OAuth 凭据。
redirect_uri_mismatch
OAuth 客户端的类型不是 桌面应用。请在 凭据 页面删除现有客户端,新建类型为 桌面应用 的客户端,然后下载新的 JSON 文件。
API 未启用 — accessNotConfigured
如果 GCP 项目未启用所需的 Google API,你会看到原因为 accessNotConfigured 的 403 错误:
{
"error": {
"code": 403,
"message": "Gmail API has not been used in project 549352339482 ...",
"reason": "accessNotConfigured",
"enable_url": "https://console.developers.google.com/apis/api/gmail.googleapis.com/overview?project=549352339482"
}
}
gws 还会在 标准错误输出(stderr)中打印可操作的提示:
💡 API not enabled for your GCP project.
Enable it at: https://console.developers.google.com/apis/api/gmail.googleapis.com/overview?project=549352339482
After enabling, wait a few seconds and retry your command.
修复步骤:
- 点击
enable_url链接(或从enable_urlJSON 字段中复制该链接)。 - 在 GCP 控制台中点击 启用。
- 等待约 10 秒,然后重试你的
gws命令。
提示
你也可以运行
gws auth setup,它会引导你为项目自动启用所有所需的 API。
开发
cargo build # dev build
cargo clippy -- -D warnings # lint
cargo test # unit tests
./scripts/coverage.sh # HTML coverage report → target/llvm-cov/html/
许可证
Apache-2.0
免责声明
注意
这不是 Google 官方支持的产品。