@agentcomms/whatsapp

中文文档
0.37.0发布于 2026/10/29MITTypeScriptES Module构建来源已验证近 30 天下载 4710

编码代理的WhatsApp,只读:列表,读取并搜索Mac在此Mac上保存的聊天内容,并起草答复作为链接对象发送. 没有网络客户端; 它从不发送.

中文使用文档
文档目录9 节
  1. 它做什么,它从来没有做什么, 用简单的语言
  2. 开始
  3. macOS 权限
  4. 命令和工具
  5. 账户,聊天代理商可能看到
  6. 从悬崖上移动
  7. 书店怎么读的
  8. 计划来自哪里
  9. 许可证

@ agentcomms/ whatsapp (英语)

什么App的编码代理, 只读。代理可以列出、读取和搜索聊天内容 继续使用您的 Mac , 并起草一个回复 —— 它作为链接回来, 打开 WhatsApp 与填入的文本 . 你按发送. 该软件包没有网络客户端,没有WhatsApp会话,也没有任何发送方式.

npm install -g @agentcomms/whatsapp    # or run it with npx -y @agentcomms/whatsapp <command>

这需要 macOS 带有 Mac 的 WhatsApp 安装并签名于 节点22.16或更新 (读取节点) 拥有自22.16起完成的SQLite;一个较老的节点被拒绝安装什么).

本地事件守护进程, @agentcomms/events-daemon,可能称此包的内部 在选中的本地副本上只读事件操作 . 它没有添加WhatsApp命令或MCP工具,因此无法发送.

它做什么,它从来没有做什么, 用简单的语言

  • 它只读本地文件. 阅读、搜索、起草或保持其清单与WhatsApp的连接,或 没有插座 没有HTTP 没有DNS 它的表态是:没有宿主的"hosts": []) (中文(简体) ). 一个测试构建已发布 捆绑和检查其中没有网络模块;另一个运行这些命令和每个工具 网络被切断,以及 mcp install 仅使用 --print安装是例外,它到达npm,永远不会 何为App: npm install,以及 mcp install,默认从 npm 安装到代理comms 自己的软件包 运行时间( 与 --launcher npx,客户端每次启动服务器时都会从npm中获取.
  • 它从不发送,标记为已读,反应,或显示为在线或打字. 没有代码可以。 草案 是一个 whatsapp://send 或者说 https://wa.me/ 链接; WhatsApp 填写信件并等待您.
  • 它从来不给WhatsApp的档案写信. 它复制了信息商店及其写头日志,读取了副本 删除它。 测试检查WhatsApp的文件夹为字节和mtime在同步后不变.
  • 它读了一个文件. 仅 ChatStorage.sqlite 它的日志被打开 确切的名字。 同样的文件夹持有 使Mac成为链接设备的加密密钥(Axolotl.sqlite、联系人和媒体;从未读过.
  • 媒体被描述,从未打开:类型、大小和文件名.

何等为阿普说. 何为App禁止非官方客户和自动化,并禁止其捕获的号码——包括: 低容量,只使用回复。 通常的构建方式,一个记录为链接设备的库,就是 一种客户(和一份恶意副本), lotusbail,在2025年12月盗取了56,000个安装的会话). 这么说吧 这不起作用:它读了一个文件 官方应用程序已经写给你的Mac了,它没有达到 WhatsApp的服务器. 这是一个设计选择,而不是法律建议. 不要把它和任何寄来的东西配对 - 另一个 WhatsApp MCP服务器,一个输入WhatsApp的脚本——或者保护已消失; mcp install 警告任何 其他它发现注册的WhatsApp服务器.

你放弃什么,说清楚了.

  • 您的消息被复制到本地索引,在纯文本中,所以一个代理可以搜索它们. 仅限所有者 (0600在一个0700文件夹中,如果有任何松动它的话放回),只保留您的列表让代理看到,以及 remove 删除它。 没错 未加密,它没有保护 WhatsApp自己的文件夹有: macOS在应用程序读取WhatsApp的文件夹之前询问,在读取这个索引之前不会询问. 任何东西 尽你所能去读它。 (为什么不加密:节点的 SQLite 无法打开加密数据库或从中加载一个) 内存,所以索引必须被解密为每个读取的磁盘——反正是平正文本副本——和密钥 将坐在一个商店里 每一个程序运行,你可以读。 )
  • macOS 将请求权限阅读 WhatsApp 的数据,对于这个应用在下面。 如果你同意的话 满 磁盘访问 相反,你把它授予你的整个终端或MCP客户端, 它比WhatsApp要宽得多.
  • 一个特工读别人的留言给你听. 隐藏聊天 deny,或者只允许其中的一些 allow。 。 。 . 团体是可见的,除非你把它们藏起来,而你所否认的人,在你们所没有的团体中仍然可见: 让一个团体远离特工, 否认该团体.
  • 消息不可信. 任何有你号码的人都可以给探员发短信 每条消息,名称和 文件名在不可信内容信封内到达,删除了无形和双向字符 并且计算在内;剩余风险是遵循指示的模型——这就是为什么发送留在你身边的原因.

开始

在终点站,这些是你们的,每个都拒绝代理:

agent-whatsapp add personal/whatsapp             # names WhatsApp for Mac's store; macOS may ask: choose Allow
agent-whatsapp sync --account personal/whatsapp  # copy, check, index, delete the copy
agent-whatsapp status
agent-whatsapp deny +15555550102 --account personal/whatsapp   # optional: a chat agents never see
agent-whatsapp mcp install --client claude-code --account personal/whatsapp

mcp install 在您的客户端注册服务器, 并刻入该账户, 作为您批准的更改: 在终端 键 yes 显示内容; 由代理操作它退出 10 带有预览和批准标识,以及同一命令 与 --approval <id> 在你同意之后登记 在 confirm 更改您赞同的政策 批准命令结果,代之以代码。 事后重新启动客户端. 从聊天,核心服务器的 comms_server_install 与 channel: "whatsapp" 财务报告和审定财务报表 account 是相同的变化.

对于WhatsApp Business,加入它的商店与 --source ~/Library/Group\ Containers/group.net.whatsapp.WhatsAppSMB.shared/ChatStorage.sqlite。 。 。 .

macOS 权限

macOS保护了其他应用程序的数据. 关于最近版本(从macOS 15.2中为组装容器报告),第一次a 进程读取WhatsApp的文件夹 macOS 询问 "希望从其他应用程序获取数据" - 在哪个地方 <app> 这是 一个负责进程:您运行命令的终端,或者启动服务器的MCP客户端—— 从来没有节点本身。 直到有人回答, 阅读等待。 旧版本可能根本不会问,或者允许读取,或者 拒绝.

  • 允许 修复它用于应用的会话。 背景 MCP 服务器不能点击, 答案并不总是 持续开展背景进程——如此运行 add 和第一个 sync 在终端.
  • 完整磁盘访问 使其粘接:系统设置 → 隐私和安全 → 完整磁盘访问,添加终端(或 MCP客户端),然后退出并重新打开. 它比WhatsApp要广泛得多;当你不再需要的时候就取消它.

包裹上写着:拒绝作为退出回来 77 编号 : AUTH_REQUIRED 与步骤,以及当环境 说它是什么应用程序,它的名字; 12秒后没有人回答失败的对话框作为退出 75 与“ 寻找对话框 ” 而不是挂起; 一个缺失的商店说, "WhatsApp for Mac"可能不会被安装.

仅 add 财务报告和审定财务报表 sync (和 status,除非 --no-check)触取WhatsApp的文件夹. chats, (中文(简体) ), read 财务报告和审定财务报表 search 打开 只有索引——所以他们不能提出一个对话框, 他们继续工作, 上一个同步,如果WhatsApp关闭, 更新或消失.

命令和工具

命令MCP 工具它会做什么
add <org/whatsapp> [--source]—— 说一个给商店取名的人; 第一个读取, 当macOS 询问时
remove <org/whatsapp>—— 说忘记它,它的聊天列表和索引; WhatsApp的自有商店没有被触动
allow <chat> --account—— 说让代理员看到此聊天; 一旦允许进行, 只有允许的聊天才可见
deny <chat> --account—— 说完全隐藏此聊天内容
clear [chat] --account—— 说从两个列表中取出一个聊天, 或者没有空聊天
status [--account] [--no-check]whatsapp_status设置什么,是否可以读取,指数持有什么
sync --accountwhatsapp_sync复制、检查、索引、删除复制件
chats --account [--kind] [--limit]whatsapp_chats聊天, 最新第一; 状态更新仅与 --kind status
read <chat> --account [--before] [--limit]whatsapp_read一聊一聊,最新鲜的第一
search <words> --account [--chat] [--sender] [--kind] [--limit]whatsapp_search全文:文本、标题、文件名、发送者和聊天名称
draft <to> <text> [--account] [--open]whatsapp_draft(单位:千美元) whatsapp://send (单位:千美元) https://wa.me/ 链接; 个人发送
approve <id>—— 说批准在终端上更改——注册或运行此服务器
mcp [--account]—— 说在 stdio 上的 MCP 服务器,在 --account 给出
mcp install, (中文(简体) ), mcp prunecomms_server_install, (中文(简体) ), comms_server_prune (核心数)用客户端注册服务器; 删除旧运行时间

每个命令及其工具运行相同的操作,以及 capabilities.json 抓住他们 没有命令 工具是人物的本意: 代理机读取的Mac上的文件, 以及其中的聊天, 不是代理机的 决定,无论朝哪个方向 -- add, (中文(简体) ), remove, (中文(简体) ), allow, (中文(简体) ), deny 财务报告和审定财务报表 clear 也拒绝命令行的代理. draft --open 被拒绝给代理商:一个装入的信息盒在屏幕上登陆,有人在别处打字 即为离所派遣的《古兰经》.

draft 需要电话号码或任何身份证明 chats 财务报告和审定财务报表 read 打印。 一个团体没有号码,所以它的草案作为文本回来 与隐藏号码的人聊天(@lid),广播列表和频道. 状态更新不是任何人写信聊天,而是被拒绝.

无法使用草稿来发现您隐藏的聊天内容 。 虽然你的名单中隐藏了什么, 草稿只用于聊天 一个代理人可以读取——在索引中,可以看得见——一个隐蔽的代理人被拒绝读取,而一个隐蔽的代理人被拒绝读取同样的内容 NOT_FOUND 作为聊天 他们不在那里;他们不隐瞒任何事物,而任何数字都是用来报答的。 没有账户名称,每个账户的清单都适用. 每一个账户 拒绝 列表适用于每个草案,是否指定账户:草案是与数字的链接,而不是与 一个帐号,所以你所否认的号码,不是用来记名的。 一个被绑定的服务器会自己咨询 账户单.

一个被绑定的服务器 (单位:千美元)agent-whatsapp mcp --account personal/whatsapp,哪个 mcp install --account (写作) 不论一个叫它名字的人是否拒绝任何其他名字,也不论任何其他帐户的名称——不是在它的问候中, 没有在 whatsapp_status。该指针通过重命名跟踪账户.

有点闲聊. 从其编号: direct (单位:千美元)…@s.whatsapp.net, (中文(简体) ), hidden-number (单位:千美元)…@lid, (中文(简体) ), group (单位:千美元)…@g.us, (中文(简体) ), channel (单位:千美元)…@newsletter, (中文(简体) ), broadcast (单位:千美元)…@broadcast和 status (WhatsApp的状态反馈,每届1次) 联系人的职位). 状态更新已索引, 但是 chats 财务报告和审定财务报表 search 除非有要求,否则不要带 --kind status; 以其代号命名的被读取与其他聊天一样. 这些比赛都没有 unknown。 。 。 .

账户,聊天代理商可能看到

账户是Agentcomms自己的记录 config.json除了Gmail的邮箱 和Slack的工作空间 organisation/whatsapp。它只通过建筑读取(mode: "read",此频道的唯一模式),命名 由稳定编号存储( )group.net.whatsapp.WhatsApp.shared 以什么盟誓,而毫无秘密 引用为 whatsapp:none:<id>,没有名字,以及 agentcomms secrets migrate 动也无所取取. 因为 这是核心的记录, 一个更名的账户的旧名 用它的新名来回答 comms_server_install 检查a 针指向它.

每个账户可以携带两个列表,通过聊天id或电话号码. 名单上的号码需要其国家代码,用 + 或者说 00 (单位:千美元)+1 555 555 0102, (中文(简体) ), 00 1 555 555 0102没有一个人, (555) 555-0102 在任何国家都可以是数字, 并且一个没有聊天的条目 也不会在说的时候隐藏任何东西 所以被拒绝了 每个条目在 索引和它所显示的聊天名称; 一个没有保存的聊天名称—— 您可以在它之前隐藏一个数字 写, (凡取出数字之处, 00 表示 +,然后从单数开始 0 作为国民被拒绝。 )

  • 拒绝 ——聊天 经纪人绝不能看见. 未列出、搜索、阅读、起草或计数;请按编号填写 得到同样的 NOT_FOUND,逐个字,作为不存在的聊天.
  • 允许 一旦上面有东西, 唯一的聊天 代理看到。 被拒绝者胜出.

电话号码上一个人的名字而不是一个聊天:他们的一对一聊天,他们自己的状态帖子,在状态下 feed,他们写的文章。 状态帖与作者对照检查,所以它需要一个:一个WhatsApp记录没有 作者可能是任何人的, 包括你否认的人, 所以,无论列表 有任何内容 隐藏,和 status 说多少人(unattributedStatus) (中文(简体) ). 您的岗位总是显示。 一个作者WhatsApp录制 隐藏编号下(…@lid)与该id相匹配,而不是与其号码相匹配:也否认该id.

一个团体是聊天,允许或拒绝整个团体:拒绝某人不带走他们从一个团体中写出的东西 代理商可能 看看他们是否被WhatsApp记录为作者. 这是决定,不是疏忽。 隐藏一个人 字行会留下他人的答复并引用描述这些答复的出处; 成员可以在隐藏编号代号下出现 数字不匹配;允许名单上的一组将失去所有不在名单上的人。 让一个团体远离 特工们 拒绝组织.

清单立即适用于两地的每一个阅读,以及 sync 也应用它们,留下它们隐藏的东西 索引——如其完成时那样: 列表更改,同步运行在新索引之前再次被读取 替换旧的,如果更改,索引将再次构建. status 报告每个列表中有多少聊天,从没有.

名单保存在 whatsapp-chats.json 旁边 config.json,以账号编号表示——不在 config.json。所有内容 文件被保存在每封信中,但只有少数设置 判断 当写作放松的时候 拒绝列表可能被任何程序空出 。 在自己的文件中,只写 读取一个无法读取的文件 而不是每次聊天, 他们留下来的人.

从悬崖上移动

如果你运行未公布的悬赏,它的账户在 whatsapp-spike.json。此命令或服务器的第一个启动 释放它们 config.json,一次:同一个账户 id,所以所构建的指针被读取为没有 新的同步(每个聊天的种类都取自它的id,所以钉子的 unknown 状态会话读作状态更新 聊天列表在账户出现前已移动; 名称已取出, 且未移动, 并随其地址 索引——它现在没有读取的信件的简洁文本副本——留给您删除 旧文件保存为 whatsapp-spike.json.migrated-<time>; 审计日志中的一行(agentcomms audit tail和一个在 师曰. 它既不读WhatsApp的商店 也不读Spoke的索引 旧平面名称上的配置 等待到 agentcomms names migrate 已经运行.

书店怎么读的

麦克的什么店 ~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared/ChatStorage.sqlite, (中文(简体) ), 磁盘上未加密, 运行时以 SQLite 的 WAL 模式打开: 最近的消息坐入 ChatStorage.sqlite-wal 直到应用程序将其折叠入主文件.

  1. 收到,不要打开. 商店及其日志被复制, 字节为字节, 复制到代理comms 下的私人文件夹中 状态目录,仅限所有者。 没有任何东西用 SQLite 打开, 扣上锁, 或者触摸应用程序 -shm 文档。 SQLite 的游戏 mode=ro 被拒绝,因为只读连接仍然取出锁并写入已读标记 应用程序 -shm 文档; immutable=1 因为它忽略了日志, 缺少了最新的消息, 并且可以读取已撕取 页面时, 应用程序会写 .
  2. 打开一次,从不通过链接. 每个文件打开一次,只读一次,拒绝符号链接,每个字节 是从打开的文件复制的 —— 它的名字从此不再打开, 因此一个名称交换到密钥存储的链接 在支票和副本之间没有任何变化。 有第二个名字的文件( 硬链接, 可能是关键) socket's)或此为非正则文件被拒绝. 成本:节点的复制品,在APFS上复制,取名并取出 将再次打开, 因此字节被复制到磁盘上 —— 商店的大小, 直到同步删除它 .
  3. 一致的,或完全没有. 每个打开的文件都有指纹(device,inode,链接,大小,纳秒 mtime) 复制前和复制后,每个名字都会被再次查看,以便找到一个来、去或被替换的文件 中间写着什么,副本被丢弃再取出,最多取出5次,然后被拒绝. 打开 核对副本(quick_check) (中文(简体) ).
  4. 阅读前检查布局 . 缺少所需的表格或列拒绝按名称进行整个同步( 退出) 65, (中文(简体) ), 并且上一个指数保持不变。 缺失的可选部分会关闭一个命名的功能并被报告.
  5. 索引,然后删除副本. 该索引在新文件中被重建并被重新命名为位置,仅所有者. 副本是 删除任何发生的情况; 下一次同步将删除一个遗留的崩溃 . remove 锁定与 sync:它等待正在运行的同步(最多一分钟),然后删除与其它同步的索引, 和在后面等待的同步 发现账户不见了,写什么.

WhatsApp可以不经通知而改变这种布局. 读者拒绝,而不是猜测所需部分何时消失; 无法捕捉的风险是 保留它的名字并改变它的意义的一栏 所以用眼睛检查一下几下聊天 在WhatsApp更新后,如果有什么问题.

计划来自哪里

没有人开个真正的商店来写这个——不是主人的,甚至连它的布局也没有. 每个表格和栏 读者使用的是公开、开源的读者 ChatStorage.sqlite 按名称查询(承诺被钉入) src/source/schema.ts:

来源它的建立
kenn-io/ msgvault (英语) internal/whatsapp/apple.go页:1 马科斯 应用 : ZWACHATSESSION (单位:千美元)ZCONTACTJID, (中文(简体) ), ZPARTNERNAME, (中文(简体) ), ZSESSIONTYPE, (中文(简体) ), ZLASTMESSAGEDATE, (中文(简体) ), ZWAGROUPMEMBER (单位:千美元)ZMEMBERJID, (中文(简体) ), ZCONTACTNAME, (中文(简体) ), ZFIRSTNAME, (中文(简体) ), @lid 聊天,2001-01-01起核心数据秒
广播/推广 extensions/whatsapp/src/services/readLocalDatabase.ts页:1 马科斯 路径; ZSESSIONTYPE = 0 一对一聊天
KnugiHK/什么App-Chat-出口商 ios_handler.pyZWAMESSAGE (单位:千美元)ZISFROMME, (中文(简体) ), ZMESSAGEDATE, (中文(简体) ), ZTEXT, (中文(简体) ), ZMESSAGETYPE, (中文(简体) ), ZSTANZAID, (中文(简体) ), ZGROUPMEMBER, (中文(简体) ), ZWAMEDIAITEM, (中文(简体) ), ZWAPROFILEPUSHNAME; 时代 978307200
布里尼诺尼/iLEAPP scripts/artifacts/whatsApp.pyZFROMJID, (中文(简体) ), ZTOJID, (中文(简体) ), ZMEDIAITEM, (中文(简体) ), ZGROUPEVENTTYPE; 第 5 类是一个位置
sepinf-inc/ IPED 数据 ExtractorIOS.javaZWAMEDIAITEM.ZFILESIZE· ; ZTITLE 旧店里不见了
法医网 globalConstants.py, (中文(简体) ), 勘探者 docs/IOS_STORAGE.md页:1 ZMESSAGETYPE 数值; ZVCARDSTRING 持有媒体项目的 MIME 类型

MacOS应用是为Mac所构建的iOS应用,这也是iOS阅读器应用的原因;前两个阅读了Mac文件 自己来 事实取自这些项目,而不是代码。 消息来源什么也没有说——大多数 ZMESSAGETYPE 数字 - 读者报告 unknown:<n> 而不是猜测.

媒体才是重要的. 什么App保持一个 ZWAMEDIAITEM 排行远不止媒体:一个被引用的信息生命 (KnugiHK从中读取答复) ZMETADATAiLEAPP数为1,350行),第1跑对正行 商店在大多数短信和每通电话中都找到一个,没有类型、大小和文件。 所以一个人排队不是 媒体。 讯息是媒体 没有文件, 仍然是相片 —— 或当其行名为已存储文件时(ZMEDIALOCALPATH,测试 KnugiHK 和 iLEAPP的使用). 其他一切——文字,一通电话,一通地点——没有显示媒体行,也不算作媒体. 一个电话是 显示为调用, 不持续时间 : KnugiHK 和 iLEAPP 都读取调用时间从 CallHistory.sqlite,单独的 文件此阅读器从不打开.

许可证

麻省理工学院。捆绑的依赖性通知包含在 THIRD_PARTY_LICENSES。 。 。 .

版本与发布记录

@agentcomms/whatsapp 共发布 45 个版本,首次发布于 2026/09/27;过去 12 个月发布了 45 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.37.0latest2026/10/299 天前
0.36.02026/10/2810 天前
0.35.02026/10/2811 天前
0.34.02026/10/2711 天前
0.33.02026/10/2712 天前
0.32.02026/10/2612 天前

关于 @agentcomms/whatsapp 的常见问题

@agentcomms/whatsapp 是什么?

编码代理的WhatsApp,只读:列表,读取并搜索Mac在此Mac上保存的聊天内容,并起草答复作为链接对象发送. 没有网络客户端; 它从不发送.

如何安装 @agentcomms/whatsapp?

在项目目录运行 npm install @agentcomms/whatsapp,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 agent-whatsapp,可以用 npx agent-whatsapp 直接运行。

@agentcomms/whatsapp 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@agentcomms/whatsapp 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@agentcomms/whatsapp 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.16.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@agentcomms/whatsapp 可以商用吗?

@agentcomms/whatsapp 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@agentcomms/whatsapp 的下载量有多少?

根据 npm 官方下载统计,@agentcomms/whatsapp 在 2026/10/05 – 2026/11/03 这 30 天内被下载 4,710 次,日均约 157 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@agentcomms/whatsapp 还在维护吗?

最新版本 0.37.0 发布于 2026/10/29(9 天前);至今共发布 45 个版本,其中过去 12 个月发布了 45 个;首次发布于 2026/09/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。