@ agentcomms/ gmail (英语)
用于编码代理的Gmail:搜索、读取、分析和起草多个邮箱——与 发送门由 用户当时给予的批准。 。 。 .
这个包是 agent-gmail 命令和背后的 MCP 服务器。 这是其中的一部分
代理通讯。 。 。 .
本地事件守护进程, @agentcomms/events-daemon,可能称此包的内部
只读事件操作。 它没有添加 Gmail 命令
或 MCP 工具,它不能发送.
为什么发送规则存在
每个Gmail允许一个应用程序写一个草稿也允许它发送:没有将两者分开的范围. 因此"代理人可以起草但不能发送"不能由赠款执行,而在这里执行——一个代码路径 到达Gmail的发送端点,在没有与发送的准确信息匹配的批准的情况下拒绝.
谁的留言似乎来自
一个探员的草稿写道: "Jo Example (agent)" <[email protected]> 所以无论谁收到
可以知道是这个人的代理人寄来的,而不是这个人(设计, (中文(简体) ),
第5条.
- 名称 是 Gmail 在“ 发送邮件为” 下为该地址持有的地址; 当它没有, 或有一个标签
无法使用,核心中设置的标签名称(它的 CLI)
label name,或comms_label草案被否决,并说 如何设置一个. 词 实值agent,除非该人选择assistant, (中文(简体) ),twin, (中文(简体) ),minion, (中文(简体) ),bot, (中文(简体) ),fake或者说AI。 。 。 . --as me打开draft new, (中文(简体) ),draft reply, (中文(简体) ),draft update财务报告和审定财务报表send prepare(单位:千美元)as: "me"写着: 被打上标签的那个人 因为当他们为这个信息说到这一点时 他们的标签规则另作决定,通过邮箱, (地址或@domain,仅在每个接受者进行匹配时进行匹配)和按种类进行匹配(send用于新的 消息或前进,reply以示答复;没有规定,电文被贴上标签.send prepare又解决了. 一份草案,其来源没有说明它似乎来自谁——写作: Gmail,在发布之前写, 或一条规则或as现在位置不同了 重写它的标题 其它的都是Gmail的字节 预览中说From被改写了 草稿来自 邮箱不能按拒绝的方式发送地址,而不能重新贴上标签.- 预览的第一行 说它会是..
me, (中文(简体) ),Sent as you, with no label: it will look as if you wrote it yourselfa 预览空白后更改的 这个.
Gmail 不记录它通过它的 API 发送的 From 名称来做什么 。 报告说,它保留了书面名称; 设计中的活检(§10)是解决它的方法.
安装
npm install -g @agentcomms/gmail # or run it with npx @agentcomms/gmail <command>
节点22.12或更新. 没有别的了:指挥舰作为一捆.
连接邮箱
npm i -g @agentcomms/gmail
agent-gmail setup
setup 是进来的路 您需要符合资格的 OAuth 客户端: 您自己的客户端, 或者一个组织配置文件提供客户端 .
为您自己在 Google Cloud 中创建一次( 类型 ) 桌面应用程序并公布它,以免它的迹象在以后失效
一个星期.. setup 将这五个屏幕与每个屏幕连在一起,并说每个字段要打什么字。 以一个简介,
setup --profile <file> 通过自己的批准加入,并在邮箱名称选择时跳过"云"行走
活动客户端。 它随后连接了邮箱并主动提出注册MCP服务器. 它跳过任何已经做的,
因此,运行它再次增加了另一个邮箱—— 并停止了部分, 它提供继续 从最后一个屏幕确认.
在终端上,它绘制一个列表,您用光标键移动; --no-tui 问同样的问题 一行
在一个时候。 没有人能回答一个.. --json, (中文(简体) ), --no-input,CI,一个被改变方向的溪流——它作用于它的旗帜
并点出本可以继续使用的旗帜:
agent-gmail setup --client-json ~/Downloads/client_secret_*.json \
--inbox acme/gmail --email [email protected] --mcp-client claude-code --json
它无法完成的一步是赠与: 它返回登录链接和完成它的命令
继续将Gmail放入该应用程序的 MCP 连接,当 --mcp-client 带着邮箱来的--standalone
与0.35.0之前一样,登记Gmail自己的条目。 每一个邮箱都要Gmail 应用程序在哪里
连接已经把 Gmail 保存在一个邮箱里,或者只读它, 它离开它,当你选择它
所以说 agentcomms connection change 这会让它到达新的邮箱。 注册 OAuth 客户端
而连接 MCP 服务器是您批准的更改 。 由经纪人管理, setup 每个站点都有预览和一个
批准编号,并再次运行 --approval <id> 用于 OAuth 客户端或 --mcp-approval <id> mCP 服务器
一旦你答应了,在终点站它就会问你.
通过手
命令 setup 包装都还在那里:
agent-gmail client add ~/Downloads/client_secret_*.json --move
agent-gmail inbox add acme/gmail --email [email protected] --start # prints a link
# open the link, choose the account, leave every permission ticked
agent-gmail inbox add --finish fl_… --wait 60
agent-gmail whoami --inbox acme/gmail
添加配置文件不会移动已连接的邮箱 。 读取其活动客户端 agentcomms org show <organisation>,然后移动一个 agent-gmail inbox reauth <name> --client <organisation>-1 --start,使用
生成名称 org show 报告.
--start 财务报告和审定财务报表 --finish 是两个命令,因为同意需要几分钟 代理的外壳不会持续
长。 在终端上,平平 agent-gmail inbox add acme/gmail 等待浏览器本身.
图标
| 命令 | 它会做什么 |
|---|---|
setup | google Cloud 步骤,客户端,一个邮箱和代理连接,在一个命令中 |
client add|list|remove | google Cloud OAuth 客户端 每个邮箱的标志通过 |
inbox add|list|show|reauth|rename|policy|remove|import | 连接和管理邮箱 |
whoami --inbox <name> | 谷歌说的信箱 |
doctor [--inbox <name>] | 检查所有需要工作的东西, 并说如何修复什么没有 |
mcp | 在 stdio 上运行 MCP 服务器 |
mcp install --client claude-code|claude-desktop|codex|cursor|gemini|vscode|json | 注册服务器,并证明它开始(先得到批准) |
mcp prune [--dry-run] | 删除遗留的旧版本( 先批准) |
每个命令都用 --json 和指纹 {"ok":true,"schemaVersion":1,"data":…} 或者,如果失败,
{"ok":false,"schemaVersion":1,"error":{"code","message","hint"}} ——有文件记载的出站代码 (--help 列表
,他们。 数据到 stdout,消息到 stderr.
保存附件
agent-gmail attachments find --inbox acme/gmail --from [email protected] --filename pdf
agent-gmail attachments download 18f2c7a9e03b41d6 --inbox acme/gmail --part 1
你说他们去哪里. 在您有文件之前, 任何文件都不会被保存: 命令列出文件—— 每个名称、 大小和
发件人——并询问是否将其保存在 1 您的下载文件夹, 2 您运行的文件夹, 或 3 文件夹
名称(绝对,或从 ~;如果缺失,则制作)。 两个文件夹都按其精确路径显示. 下载是
defaults.downloadsDir 当设置一个时; 否则, 您的系统会保存的文件夹 — 在 Linux 上的 XDG 1
(单位:千美元)XDG_DOWNLOAD_DIR,或 ~/.config/user-dirs.dirs这样 ~/Téléchargements 在法国桌面上),在Windows上
下载已知文件夹, 否则移动到何处 ~/Downloads在自己的终端,你也可以说它与
--to downloads, (中文(简体) ), --to current 或者说 --to <folder> - 只有那里:没有终点站 --json通过管子,或
由代理操作,命令将不保存任何信息,用选择的 id 打印问题并退出 10,以及 --to 需求
问题 --choice 旁边 超过 MCP gmail_attachment_download 问同样的方式:它的第一个呼叫答案
destinationRequired: true 问题和a choiceId选择这些附件,用它的名字
显示,没有其他;使用一次,30分钟后失效。 与其他论点一起发出的呼吁被拒绝,而且
问题不放过.
你的回答遵循了邮箱的变更政策. 下 chat (默认),代理 传递你的回答回 -
saveTo 与 choiceId,或 --to <answer> --choice <id>下调 confirm 氮ê琌贝
无法:在您自己的终端上,如果结果给出了批准的命令,那么这个命令就是问题所在
再次问 1, (中文(简体) ), 2 或者说 3,或者在表格中您信任的客户端 confirm-clients add 给你看 经纪人
然后再次打电话与 choiceId 仅此而已,在争论中传递的答案被拒绝,问题就留了下来
为你打开.
有些文件夹从不保存到, 谁回答. 一个隐藏的文件夹, 任何深度和任何磁盘上..
~/.ssh, (中文(简体) ), ~/.config,一个项目 .git, (中文(简体) ), .github, (中文(简体) ), .husky, (中文(简体) ), .vscode 或者说 .claude - 除了在下面的取出
.claude/worktrees/<name>,这与其他项目一样(其中隐藏的文件夹仍然被拒绝);文件夹
程序加载软件包,无论它来自何处 -- node_modules, (中文(简体) ), site-packages, (中文(简体) ), dist-packages, (中文(简体) ), __pycache__,以及任意
python 虚拟环境中的文件夹, 一个 pyvenv.cfg 在其中或上方; Python 中的任何文件夹
安装,一个 conda-meta, (中文(简体) ), Lib/os.py 或者说 lib/python3.<minor>/os.py 在它或上面,例如
~/miniconda3 或者说 C:\Python312 (你的家和磁盘的根 从来没有被拿走过); ~/Library; 此软件包是自己的
配置、状态、数据和证书文件夹;系统的文件夹(/, (中文(简体) ), /etc, (中文(简体) ), /usr, (中文(简体) ), /bin, (中文(简体) ), /var, (中文(简体) ),
/System,虽然一个家庭内部,例如 /root,属于您的;在Windows上 AppData, (中文(简体) ), %PROGRAMDATA%,则
Windows 文件夹、 程序文件、 PowerShell 的配置文件夹(Documents\PowerShell 财务报告和审定财务报表 Documents\WindowsPowerShell, (中文(简体) ),
无论Windows说文档在哪里),驱动器的根,网络共享和没有驱动器的路径——在Linux上同样
通过 WSL 到达的 Windows 文件夹, 在一个 Windows 驱动器上, 无论它在哪里挂载, 也无论它在哪里挂载 (/mnt/<letter> 以
默认 : 驱动器本身, 及其上的一个文件夹命名 Windows, (中文(简体) ), Program Files, (中文(简体) ), ProgramData 或者说 AppData,或
PowerShell的简介文件夹,无论深度和大小. 通过链接导致一个文件夹被拒绝
作为文件夹: a hooks 链接到 .husky 实值 .husky在其中任何一个中,一个文件会是一个程序运行或装入的东西
——钩子,包子,剖面图,密钥,批准——而不是你读取的文件. 这些是每个文件夹
其类型的机器有,或者其中的某个文件可以简单化;一个文件夹被告诉一个程序可以装入整个程序——一个zsh
补全文件夹、 应用程序插件或启动文件夹 —— 从这里无法得知, 保存到它就是您的
选择。 您的家庭文件夹本身是好的。 当您运行的文件夹是其中之一时, 选项 2 显示为
没有,原因。 无法写入的文件夹也会被拒绝, 以免您的答案被使用 .
每个文件都以其发送者给它的名称保存,使之安全——没有路径,没有线索点(.npmrc 保存为
npmrc.download),没有控件或bodi字符,没有Windows设备名称——并且从来没有超过一个文件:新
一个被保存在旁边作为 -2。发送过两次相同的文件——同名和同字节——是写过一次;同名
两个名字下的字节是两个文件. 文件夹中没有其它内容;下载记录在审计日志中
并显示在本软件包的状态目录下。 一个停止部分记录其保存内容的下载,
删除它只写了一部分的文件, 并说保存了什么和没有。 发件人所说的文件来了
回到不可信内容信封内 保存在信封下面的名字及其路径也一样 除非是
完全是一个文件名。 从来没有打开或运行.
一个文件被保存在一个名称下 没有运行它. 它只在文件是查看器时才保留扩展名
打开后, 任何程序都不会用它的名称来运行或加载: 一个文档(pdf, (中文(简体) ), doc, (中文(简体) ), docx, (中文(简体) ), xls, (中文(简体) ), xlsx, (中文(简体) ), ppt, (中文(简体) ),
pptx, (中文(简体) ), odt, (中文(简体) ), ods, (中文(简体) ), odp, (中文(简体) ), rtf, (中文(简体) ), txt, (中文(简体) ), csv, (中文(简体) ), tsv),图像(png, (中文(简体) ), jpg, (中文(简体) ), jpeg, (中文(简体) ), gif, (中文(简体) ), webp, (中文(简体) ), heic, (中文(简体) ), heif, (中文(简体) ),
bmp, (中文(简体) ), tif, (中文(简体) ), tiff),声音或视频(mp3, (中文(简体) ), m4a, (中文(简体) ), wav, (中文(简体) ), aac, (中文(简体) ), flac, (中文(简体) ), ogg, (中文(简体) ), mp4, (中文(简体) ), mov, (中文(简体) ), m4v, (中文(简体) ), webm, (中文(简体) ), avi, (中文(简体) ),
mkv),一个归档(zip, (中文(简体) ), tar, (中文(简体) ), gz, (中文(简体) ), tgz, (中文(简体) ), bz2, (中文(简体) ), xz, (中文(简体) ), 7z, (中文(简体) ), rar、日历、联系人或邮件文件(ics, (中文(简体) ),
vcf, (中文(简体) ), eml),或苹果文档(pages, (中文(简体) ), numbers, (中文(简体) ), key) (中文(简体) ). 其它任何——可执行文件,脚本,配置
(单位:千美元)json, (中文(简体) ), yaml, (中文(简体) ), toml, (中文(简体) ), ini, (中文(简体) ), md,...),宏文档,HTML或SVG,a .pth, (中文(简体) ), .plist 或者说 .lnk,名称没有
扩展名——一个工具读取的几个名字,尽管其扩展名列在该列表上(CMakeLists.txt, (中文(简体) ),
requirements.txt 不管项目叫它什么.. dev-requirements.txt 还有.. conanfile.txt, (中文(简体) ), apt.txt, (中文(简体) ), runtime.txt, (中文(简体) ),
python312.zip以 .download 整个名称后: setup.exe 作为 setup.exe.download, (中文(简体) ), CLAUDE.md 作为
CLAUDE.md.download, (中文(简体) ), Makefile 作为 Makefile.download。以扩展名或名称加载文件的程序
知道吗? Python的音乐 .pth钩子 特工的钩子 CLAUDE.md ——通过这样的文件,直到你重新命名它;一个
将每个文件加载到文件夹中, 不管它叫什么 都不会被名字所停止, 这就是为什么文件夹是您的
选择。 此文件被标记 saved-as-download (和 auto-read 当工具读取它的名称。 各题名
在您回答之前的“ setup.exe( 可执行) ” 将被保存为 setup. exe.download —— 一个可以运行的类型; 重命名它
如果你相信它的话... ... ..... warnings。 。 。 .
doc, (中文(简体) ), xls, (中文(简体) ), ppt, (中文(简体) ), odt, (中文(简体) ), ods 财务报告和审定财务报表 odp 保持他们的名字,因为你打开他们 当你打开一个 docx,但不像一个
docx 每一个都可以持有宏。 每个都有标记 macro-capable,而问题和结果 以言语说:
"report.xls可以持有宏——只有信任发送者才能打开".
每个被保存的文件都标记为从互联网下载正如浏览器所标注的一样——一旦完成,
在它的字节被写入之前, 所以在文件夹中找不到标记 : 在 macOS 上使用
com.apple.quarantine 属性,所以门卫在它首次运行前询问,并在 Windows 上询问 Zone.Identifier
用于 Internet 区域的流,所以 SmartScreen 询问, Office 在保护视图中打开它。 Linux 没有这样的标记,和
文件 WSL 也不会保存到 Windows 驱动器上 。 每个文件 marked 说它携带的; 无法保存的文件
标记仍然保存,以及 warnings 这么说的.
需要你批准的改动
client add 财务报告和审定财务报表 client remove, (中文(简体) ), inbox import 财务报告和审定财务报表 inbox remove, (中文(简体) ), confirm-clients add一个松散的 inbox policy, (中文(简体) ),
a 一个 inbox reauth 这要求更多的访问 比邮箱, mcp install (它给一个客户端 一套新的工具)
财务报告和审定财务报表 mcp prune (一个被删除的运行时间不能收回) 每一个松动的东西或者无法被取消,所以每个都是
在事发前就通过了 在终端上,命令会显示确切的改变,并要求您输入 yes - 或者,
下划线 confirm 更改策略,由结果给出的批准命令显示的代码. 由特工或无代理操作
终端,它用批准代码打印同样的预览和退出 10; 一旦你答应了, 同样的命令与
--approval <id> 做改变。 收紧政策从来不问.
MCP服务器将每个都作为要求相同方式的工具,一个表面的审批可以是
另一种说法是:这是一个变化。 注册和运行是核心服务器的 comms_server_install 财务报告和审定财务报表
comms_server_prune 与 channel: "gmail",他们和 mcp install 财务报告和审定财务报表 mcp prune。 。 。 .
mcp install --print, (中文(简体) ), --client json 财务报告和审定财务报表 mcp prune --dry-run 改变不了什么, 问谁都不要.
获取信件
当多个代理会话读取同一个邮箱时,第一个接受消息的人有,其他的人则离开. A 类 本届会议在回答这个问题之前要发出一个信息,当它不是自己的信息时就把它交回来——说为什么,用闭门话—— 或标记已完成的:
agent-gmail take 18c2f0a1b2c3d4e5 --inbox acme/gmail # this session has it now
agent-gmail take 18c2f0a1b2c3d4e5 --inbox acme/gmail --hand-back --reason not-mine --note "about billing"
agent-gmail take 18c2f0a1b2c3d4e5 --inbox acme/gmail --done
agent-gmail taken 18c2f0a1b2c3d4e5 --inbox acme/gmail # who has it
通过MCP,这些 gmail_take (单位:千美元)step数字 : take, (中文(简体) ), hand-back 或者说 done和 gmail_taken。接下来的届会是
由服务器或命令从它所运行的进程中(从一个参数中从不)确定
在会话最后一幕之后的一小时,或者在它的代理窗口结束后,除非它准备了一个发送
还在等待你的同意 只有到达的邮件才能被取走:不是这个邮箱发送的信息,也不是草稿. A 类
理由是 not-mine, (中文(简体) ), wrong-account, (中文(简体) ), needs-the-person, (中文(简体) ), duplicate 或者说 other; 注释最多为200个字符和
单独向您展示。 只读服务器的报价 gmail_taken 没有 gmail_take。 。 。 .
其他学习的只是闭门话: you, (中文(简体) ), another session 或者说 the person、采取或采取、提议和
它被交回的原因——从来不是哪个会话、它的文件夹或它的客户端,也从来不是纸条. read, (中文(简体) ), thread, (中文(简体) ),
search 他们的工具在每条消息上都这么说 taken。 。 。 .
与 agentcomms taking acme/gmail --require on在会议起草答复之前,会议必须听取信息
在它准备或发出答复之前——一个寄给该邮箱的地址。 不拿这个动作
拒绝使用 TAKE_REQUIRED (离职) 10在任何草案、预览或批准之前,以及在发送之前:a
接受释放 之间发送什么, 批准是原样。 另一个会话被拒绝
TAKEN_ELSEWHERE (离职) 10是否需要抽取——组织和拆分它也是如此,它从来没有
需要一个拍摄。 一个新的信息 和前进的答案 没有人的信息, 无需承担。 追随你自己的邮件
因此它需要这个信箱收到的最新消息 被拒绝
其它会话有其中之一; 单凭您自己的邮件线条就不需要接受。 在你的终端
从来没有坚持服用: agentcomms takes keep 给你留个口信 takes list, (中文(简体) ), release 财务报告和审定财务报表 give 这是你的
在核心的读取.
拍摄本身就无从谈起:每一次发送都需要行为规则,发送政策和你的"是". 有两个 会话从回答同一消息开始;它不是针对您运行的进程的边界。 Gmail没有,所以.. 照对寄件人不说.
来自另一个 Gmail MCP 服务器
agent-gmail inbox import --dry-run # says what it would take from ~/.gmail-mcp
agent-gmail inbox import
它复制;它从不移动或删除任何东西. 其无法继承的两件事:每个邮箱是哪个Google账户
(这些信使是无 openid),并允许标签或存档。 一个 agent-gmail inbox reauth <name> --start 每个邮箱都修补.
它还告诉你另一个服务器是否仍然与一个代理连接. 虽然如此,服务器的发送工具是 里面也没有东西能挡住他们.
作为 MCP 服务器
agent-gmail mcp install --client claude-code
它显示它会注册什么,请您输入 yes; 由代理操作, 它退出 10 带有预览和一个
批准编号,再运行时登记 --approval <id> 在你答应之后.
或入其内:
import { createGmailMcpServer } from '@agentcomms/gmail';
const server = await createGmailMcpServer({ inbox: 'acme/gmail' });
await server.connectStdio();
工具仅通过进程标记注册,所以工具列表在连接之间从未变化;每个邮箱可能包含的内容 在每次通话时都会检查配置, 此时此刻的情况。 添加收件箱或收紧保险单 当服务器运行时,它适用于下一个呼叫.
每个账户命令都有其工具—— gmail_client_add, (中文(简体) ), gmail_inbox_reauth, (中文(简体) ), gmail_inbox_import, (中文(简体) ),
gmail_inbox_remove, (中文(简体) ), gmail_inbox_policy, (中文(简体) ), gmail_confirm_client_add 需要改变
核准结果 approvalRequired 预览和一个 approvalId 而不是演戏。 经纪人告诉你
预览并再次使用您同意后的 id 拨打 . gmail_client_add 从您的路径读取客户端 JSON
机器; 文件从不通过对话, 没有工具返回它的秘密 .
保存着的东西
| 什麽 | 何处 |
|---|---|
| 配置 | $XDG_CONFIG_HOME/agent-communications,则 ~/.config/agent-communications (单位:千美元)%APPDATA% 在窗口上) |
| 密码和客户机密 | 系统密钥链,或仅所有者的文件(--store file(中文(简体) ) |
| 核准、审计记录、状况 | <config>/state |
| 每个代理窗口读取、完成和发送的内容:活动日志 | <config>/state/activity,一天一个文件,保留了30天:id,对象,发件人,所搜索的字词,文件名和大小,发件人的收件人——从来不是身体或附件(agentcomms activity sessions(中文(简体) ) |
| 您保存的附件 | 下载、 运行命令的文件夹或您命名的文件夹 |
| 出口 | ~/Downloads/agent-communications,或 defaults.downloadsDir |
没有秘密会写给 config.json,由命令打印,或者将结果放入.
许可证
麻省理工学院