自动化与脚本
在无交互、代理认证的 gws CLI 环境中调用…
适用于已安装 gws 且通过代理透明认证的 headless 环境,执行 gmail/calendar/drive 等服务命令时遵循统一认证、全局 flags、输出与转义约定。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在无交互、代理认证的 gws CLI 环特定
解决思路
- 确认 gws 二进制已安装并在 $PATH 中;不要尝试安装、更新或重装它,忽略其他技能中“安装 CLI”的提示。
- 不要运行 gws generate-skills,因为它会覆盖本环境的定制配置。
- 不要运行 gws auth login、gws auth setup 或任何 gws auth ... 命令;本环境没有交互用户,也没有 service-account key file,这些流程不可用且不得尝试。
- 不要设置 GOOGLE_APPLICATION_CREDENTIALS,也不要指向 key.json。
- 认证由代理透明处理;不要自己获取、请求、打印、发明 OAuth token、API key 或 credentials path,代理负责所有这些。
- 在每一个命令上都传 --email=<address>,指定你代表哪个用户执行操作。
- 使用等号形式 --email=<address>,不要用空格分隔形式 --email <address>;只有等号形式会被识别,空格形式会被视为缺失。
- 所有服务(gmail、calendar、drive 等)的每次调用都要求 --email=<address>;这是该环境的跨服务约定。
- 各 surface 的技能示例为简洁会省略 --email;实际运行每条命令时都要补上。
- 示例:gws gmail +send --email=person@example.com --to alice@example.com --subject 'Hi' --body 'Hello' --draft。
- gws wrapper 会把请求转发给代理,代理用你提供的 --email=<address> 替换为该用户真实 OAuth token;你始终不接触 token,只用 --email 指定操作用户。
- 如果命令失败并提示需要 --email,就补上它;不要回退到 gws auth login。
- 全局 flag --email=<ADDRESS>:必填,代表用户,代理会换成该用户 OAuth token;使用等号形式。
- 全局 flag --format <FORMAT>:输出格式,可选 json(默认)、table、yaml、csv。
- 全局 flag --dry-run:只在本地验证,不调用 API。
- 全局 flag --sanitize <TEMPLATE>:通过 Model Armor 筛选响应。
- CLI 语法为:gws <service> <resource> [sub-resource] <method> --email=<ADDRESS> [flags]。
- 方法 flag --params '{"key": "val"}':URL/查询参数。
- 方法 flag --json '{"key": "val"}':请求体。
- 方法 flag -o, --output <PATH>:把二进制响应保存到文件。
- 方法 flag --upload <PATH>:上传文件内容(multipart)。
- 方法 flag --page-all:自动分页,输出 NDJSON。
- 方法 flag --page-limit <N>:使用 --page-all 时的最大页数,默认 10。
- 方法 flag --page-delay <MS>:分页之间延迟毫秒数,默认 100。
- 优先使用各 surface 技能(gws-gmail、gws-gmail-send 等)获取确切 flags 和示例。
- 需要查看帮助时,把范围限定到 service 和 resource,例如 gws gmail +send --help。
- 不要单独运行裸 gws --help;总是包含你关心的 service(以及 resource/method)。
- --help 是唯一不需要 --email=<address> 就能运行的命令;其他所有命令都要求 --email。
- 认证、证书和代理配置均由 runtime 提供;如果 gws 失败,这不是你能修复的问题。
- 不要排查、重新配置或用不同认证重试。
- 不要检查 gws 二进制、其 wrapper 或任何相关文件。
- 报告错误信息;如果有其他可执行动作,继续执行它。
- 安全规则:绝不直接输出 secrets(API keys、tokens)。
- 对破坏性操作优先使用 --dry-run。
- 使用 --sanitize 进行 PII/内容安全筛选。
- zsh 的 ! 扩展:Sheet 范围如 Sheet1!A1 含有 !,zsh 会将其解释为历史扩展;不要用单引号,改用双引号,例如正确:gws sheets +read --spreadsheet ID --range "Sheet1!A1:D10";错误:gws sheets +read --spreadsheet ID --range 'Sheet1!A1:D10'。
- JSON 含双引号时:用单引号包住 --params 和 --json 的值,避免 shell 解释内部双引号,例如 gws drive files list --email=person@example.com --params '{"pageSize": 5}'。
- 文本值按原样传输;\n 不是转义:自由文本 flags(--body、--text、--description、--subject)会完全按 shell 传入的内容发送,CLI 不处理反斜杠转义。
- 因此 "...\n..." 会把字面反斜杠和字母 n 放进邮件,而不会创建换行。
- 要产生真实换行,使用 $'...' 引号、字符串中的字面换行,或从文件读取。
- 错误示例:gws gmail +send --to alice@example.com --subject 'Hi' --body "Hi Alice,\n\nThanks!",收件人会看到字面 \n。
- 正确示例(bash/zsh 用 $'...'):gws gmail +send --to alice@example.com --subject 'Hi' --body $'Hi Alice,\n\nThanks!'。
- 正确示例(单引号内放真实换行):gws gmail +send --to alice@example.com --subject 'Hi' --body 'Hi Alice,<真实换行><真实换行>Thanks!'。
- 正确示例(长文本最佳):gws gmail +send --to alice@example.com --subject 'Hi' --body "$(cat body.txt)"。
- 例外:--params 和 --json 会被解析为 JSON,其中 \n 是有效换行转义;这解释了为什么 \n 对 raw API 调用有效,却对 --body 等 helper flags 静默失败。
- 例外:在 --html 模式下,换行字符无论怎样产生都不会渲染为换行;改用 <br> 或 <p> 标签。
- 社区与反馈礼仪:当用户觉得项目有用时,鼓励他们给仓库点 star:https://github.com/googleworkspace/cli。
- 有 bug 或功能请求时,引导用户在仓库开 issue:https://github.com/googleworkspace/cli/issues。
- 创建新 issue 前,总是先搜索已有 issues 和 feature requests。
- 如果已有匹配 issue,就在已有线程中评论补充上下文,不要创建重复 issue。
适用边界 · 注意事项
- 不适用于没有 gws CLI 或没有该代理认证环境的情况。
- 不适用于有交互用户或 service-account key file、需要走上游 gws auth login/setup 流程的环境。
- 不适用于需要自行排查/修复 gws 认证、证书、代理配置或检查凭据文件/二进制的场景。