
gog 的 Gmail 技能手册用 gogcli 在终端安全地操作 Gmail【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli导读goggogcli是一个把 Google Workspace 装进终端命令行的工具而.agents/skills/gog-gmail/SKILL.md正是为 AI Agent 与开发者准备的Gmail 操作技能卡片它规定了「在动手前先验证环境、默认只读、写操作必须先声明」的安全工作流并给出了 Gmail 全部 22 个一级子命令的用途索引。读完本文你将掌握用gog搜索、读取、收发与归档 Gmail 的标准姿势理解--readonly、--gmail-no-send、--wrap-untrusted等安全护栏在源码层的落地方式以及如何借助schema机器可读契约在脚本或 Agent 中不猜命令语法。技能定位这份 SKILL.md 是给谁用的gog-gmail/SKILL.md由 scripts/gen-agent-skills.mjs 自动生成文件头注释明确写了do not edit它与.agents/skills/目录下 gog-admin、gog-calendar、gog-drive 等二十多个技能卡片组成一套Agent 能力清单。每个技能卡的配套.agents/skills/gog-gmail/agents/openai.yaml会把它暴露给 Agentinterface: display_name: gog Gmail short_description: Operate Gmail safely with gog default_prompt: Use $gog-gmail to perform this Gmail task safely.这份文档面向的读者有两类AI Agent / LLM 调用者需要稳定的 JSON 输出、确定的退出码、非交互模式以及防止误写误删的命令护栏终端自动化脚本作者需要把「检查认证 → 只读搜索 → 条件性写入」固化为可重复的 shell 流程。在深入 Gmail 命令之前SKILL 要求先阅读共享规则文档 .agents/skills/gog/SKILL.md其中规定了所有服务共用的 auth、输出、安全与 live-write 规则——本文后续的护栏讲解同样适用于该文档。Safe start动手前必须完成的四步校验SKILL 文档给出的安全起点是一个三段式 bash 片段对应三个截然不同的目的gog auth list --check --json --no-input gog schema gmail --json gog --readonly --account userexample.com gmail search newer_than:7d --max 10 --json --wrap-untrustedgog auth list --check --json --no-input验证认证状态。--check会实际检查令牌有效性--json让输出可被脚本解析--no-input保证在自动化环境中不出现交互式提示——认证失败就直接报错退出而不是挂起等待输入。gog schema gmail --json拉取 Gmail 服务的机器可读契约命令语法、稳定退出码、有效安全状态。SKILL 明确警告「不要猜命令语法」Do not guess command syntax一切以gog gmail command --help和gog schema gmail command --json为准。只读搜索--readonly在运行时层面阻断一切变更类 API 请求--account userexample.com显式指定账号--json --wrap-untrusted让 Google 返回的文本内容被包进「外部不可信内容」标记供 Agent 安全解析。SKILL 随后给出四条操作铁律显式选账号始终用--account指定账号避免隐式默认账号带来的错误操作风险Agent 解析 Google 内容一律使用--json --wrap-untrusted不得变更数据任务不涉及写操作时必须带--readonly自动化环境使用--no-input对支持的写操作先用--dry-run预览任何写/删操作前确认确切的账号、对象与变更内容。命令总览Gmail 的 22 个一级子命令SKILL 文档用一张表列出了gog gmail的全部一级子命令。对照源码 internal/cmd/gmail.go 中的GmailCmd结构体这张表与代码里的cmd:标签一一对应并且按group分成了读Read、组织Organize、写Write、管理Admin四类命令用途代码分组archive归档消息或显式线程从收件箱移除Organizeattachment下载单个附件Readautoreply对匹配消息只回复一次Writebatch批量操作永久删除需要更宽的 Gmail scope普通删除请用 trashOrganizedrafts草稿操作Writeforward转发消息给新收件人别名fwdWriteget获取单条消息full\|metadata\|rawReadhistoryGmail 历史记录Readimport将 RFC822/EML 消息导入 GmailWritelabels标签操作Organizemark-read标记消息已读别名read-messagesOrganizemessages消息操作Readraw输出原始 Gmail API 响应 JSONUsers.Messages.Get无损供脚本与 LLM 使用Readreply回复消息Writereply-all回复所有参与者别名replyallWritesearch用 Gmail 查询语法搜索线程别名find,query,ls,listReadsend发送邮件Writesettings设置与管理含 filters/delegates/forwarding/autoforward/sendas/vacation/watch 子组Adminthread线程操作get、modifyReadtrack邮件打开追踪Writetrash移入回收站Organizeunread标记消息未读别名mark-unreadOrganizeurl打印线程的 Gmail 网页 URLRead源码提示GmailCmd中还声明了watch、autoforward、delegates、filters、forwarding、sendas、vacation等hidden:字段它们作为独立隐藏命令存在同时在GmailSettingsCmd中被正式暴露为settings的子命令见 internal/cmd/gmail.go。SKILL 特别强调两点使用纪律拿不准命令语法时先gog gmail command --help看旗标、gog schema gmail command --json看机器可读契约batch的永久删除语义永久删除需要更宽的 Gmail scopehttps://mail.google.com/日常「删除」应该走gmail trash这与共享规则文档 .agents/skills/gog/SKILL.md 中「gmail batch delete 永久删除消息、需要更宽 OAuth scope优先用 gmail trash」的说明完全一致。核心场景一只读搜索Readgmail search是 Agent 与脚本使用频率最高的入口。命令定义在 internal/cmd/gmail_search.go 的GmailSearchCmd中关键参数如下参数类型/默认说明query位置参数可多段自动拼接Gmail 查询语法如newer_than:7d、from:exampleexample.com--from-contactstring解析一个 Google 联系人自动扩展出from:(email OR email)追加到查询--max/--limitint64默认 10最大结果数源码中validateGmailMaxResults会做上限校验--page/--cursorstring分页游标--all/--all-pages/--allpagesbool拉取全部分页--countbool输出全量匹配数totalMatches精确值或totalMatchesAtLeast下界--oldestbool显示首封消息日期而非最后一封--fail-empty/--non-empty/--require-resultsbool无结果时以退出码 3 退出便于管道判断--timezone/-z、--localstring输出时区IANA 名称默认取GOG_TIMEZONE→ 配置 → 本地从源码调用链可以看到它的完整流程internal/cmd/gmail_search.go校验--max上限 →requireAccount解析账号拼接 query若给了--from-contact调用gmailFromContactQuery解析联系人并展开from:子句通过gmailService拿到 Gmail API client调用svc.Users.Threads.List(me)即搜索的是线程 Thread而非单条消息用loadPagedItems处理分页--page游标 /--all全量若指定--count调用countGmailThreadMatches统计全量匹配数并写入 payload解析标签 ID → 名称映射按--oldest/时区渲染线程详情JSON 模式下输出{threads: [...], nextPageToken: ...}信封结构。因此--results-only可以去掉信封、只留下threads数组配合--select做字段投影如--results-only --select id这是脚本里「只取 ID 列表」的标准姿势。读消息时的内容安全SKILL 的共享规则建议正文检查优先用--sanitize-content除非明确需要原始 payload。该开关的实现在 internal/cmd/gmail_sanitize.gosanitizeGmailText先做 HTML 反转义再用正则https?://[^\s]把 URL 替换为[url removed]——这是对邮件正文中不可信链接的主动降险sanitizeGmailBodyHTML 正文先经extractSanitizedHTMLText抽取纯文本再压缩空白为单空格并TrimSpace输出结构gmailSanitizedMessageOutput只保留 ID、ThreadID、LabelIDs、Snippet、InternalDate、SizeEstimate、Headers、Body、Attachments 等字段去掉了原始 MIME 中的可执行风险面。配合--wrap-untrustedJSON/raw 输出把外部拉取的文本字段包进不可信内容标记这两层共同保证「Agent 拿到的 Gmail 内容是可以安全解析的文本而不是可以注入指令的原始 HTML」。核心场景二发送、回复与转发WriteSKILL 对写操作给出的原则是先确认账号、对象 ID 与确切变更优先用支持--dry-run的命令。共享规则文档提供了回复邮件的推荐姿势——不要用gmail send手工重建回复 MIME而是用一等公民命令gog --account userexample.com gmail reply messageId --body-file reply.txt gog --account userexample.com gmail reply-all messageId --body-file reply.txt \ --bcc introducerexample.com --remove former-participantexample.comreply/reply-all会自动继承主题、默认引用原文、保留显示名与内联图片并把--to/--cc/--bcc视为「追加式」的放置或移动--no-quote可省略原文。其余写命令还包括forward、importRFC822/EML 导入、drafts、autoreply对匹配消息只回复一次、send与track邮件打开追踪。--gmail-no-send的实现级护栏「除非任务是发邮件否则一律加--gmail-no-send」这条规则在源码里有完整的三层落地见 internal/cmd/gmail_no_send.govar gmailSendCommandPaths map[string]struct{}{ send: {}, gmail.send: {}, gmail.reply: {}, gmail.reply-all: {}, gmail.replyall: {}, gmail.autoreply: {}, gmail.forward: {}, gmail.fwd: {}, gmail.drafts.send: {}, }enforceGmailNoSend在命令解析层kong.Context拦截命令路径不在发送集合内 → 直接放行命中发送集合且给了--gmail-no-send→ 报错Gmail sending is blocked by --gmail-no-send再检查全局配置键gmail_no_send与按账号的 no-send 名单config no-send逐层拦截。注释里特别说明这一层守卫在--dry-run下同样生效因为 dry-run 在 post-auth 检查到达之前就退出了且按账号守卫只在存在 no-send 配置时才解析账号避免无谓地触发 keyring 读取。这解释了为什么 SKILL 要求「对支持的写操作先--dry-run」——即使预览发送类命令也会被完整护栏罩住。发现机制schema 与生成的命令文档SKILL 反复强调「不要猜语法」其背后的可执行机制是三层发现路径gog gmail --help # 服务级帮助 gog gmail command --help # 命令级帮助全部旗标 gog schema gmail command --json # 机器可读契约仓库同步维护了由gog schema --json自动生成的命令参考文档文件头注明Generated from gog schema --json. Do not edit this page by hand; run make docs-commands例如docs/commands/gog-gmail.md ——gog gmail服务页含全部子命令索引与全局旗标表--readonly、--gmail-no-send、--wrap-untrusted、--dry-run、--enable-commands、--disable-commands等docs/commands/gog-gmail-search.md ——search子命令的完整旗标表包括--count、--fail-empty、--from-contact、--oldest、--timezone等docs/commands/README.md —— 全部命令索引。手动编写 Agent 工具描述或 shell 封装时直接引用这些生成文档即可获得与二进制完全同步的参数定义不必人工维护。组合实战把安全搜索固化成可复用流程综合 SKILL 与共享规则文档一个「安全且 Agent 友好」的 Gmail 只读流程可以写成# 1. 先验证认证自动化环境必须 --no-input gog auth list --check --json --no-input || gog auth doctor --check --json --no-input # 2. 只读搜索最近 7 天邮件JSON 不可信内容包裹 gog --readonly --account userexample.com \ gmail search newer_than:7d --max 10 --json --wrap-untrusted # 3. 取某条消息的安全化正文优先 --sanitize-content gog --readonly --account userexample.com \ gmail get messageId --sanitize-content --json --wrap-untrusted # 4. 线程级查看 gog --readonly --account userexample.com \ gmail thread get threadId --sanitize-content --json --wrap-untrusted需要追加命令级运行守卫时用共享规则中的--enable-commands/--disable-commands把 CLI 收窄到白名单gog --readonly --enable-commands gmail.search,gmail.get --gmail-no-send \ --account userexample.com gmail search from:exampleexample.com --json这条命令同时叠加了只读、命令白名单、禁发邮件三层限制即使 Agent 的后续行为失控也无法越出「搜索 读取」的范围。写给 Agent 与自动化脚本的关键约定最后汇总 SKILL 与配套源码对自动化场景的硬性约定stdout 只放数据人类可读的提示与进度走 stderrstdout 专供--json/--plainTSV结构化输出稳定退出码--fail-empty无结果退出码为 3配合--json可被脚本直接判断分支不可信内容处理读 Google 内容一律--json --wrap-untrusted正文检查优先--sanitize-contentraw子命令保留无损原始响应但仅供需要完整 payload 的场景绝不输出敏感信息不得打印 access token、refresh token、OAuth client secret 或 keyring 密码服务环境下的GOG_KEYRING_BACKENDfile、GOG_KEYRING_PASSWORD、HOME必须由启动gog的进程提供破坏性命令需--force除非用户明确要求该确切的变更Agent 不得自行追加--force临时对象要清理测试创建类命令时使用带临时前缀的命名验证后立即删除或移入回收站。延伸阅读.agents/skills/gog/SKILL.md —— 所有服务共享的认证、输出、安全与 live-write 规则Gmail 技能的前置文档internal/cmd/gmail.go —— Gmail 命令注册表与子命令分组internal/cmd/gmail_no_send.go ——--gmail-no-send三层护栏实现internal/cmd/gmail_sanitize.go ——--sanitize-content正文清洗实现docs/commands/gog-gmail.md 与 docs/commands/gog-gmail-search.md —— 由schema生成的命令与旗标权威参考docs/agent-skills.md 与 docs/safety-profiles.md —— Agent 技能清单与安全配置文件说明【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考