## 概述 / Overview 两件事:新增「企业微信助手」Agent(自带 15 个技能),并修正 `wecom-cli` 条目钉在 6 月快照的 ref 漂移。 Two changes: adds the **WeCom Assistant** agent (bundling 15 skills), and fixes the `wecom-cli` entry whose pinned ref was stuck on a June snapshot. ## 1. 新增企业微信助手 Agent 覆盖企业微信 **14 类服务、95 个方法**:消息、群聊历史、通讯录、日程、会议、待办、邮件、在线文档、在线表格、智能表格、智能文档、文档管理、微盘、媒体文件。 **采用内联形态 + 自带私有技能**:Agent 安装对 `agents/<id>/` 整目录递归复制且 `skills/` 不在排除集合里,因此装 Agent 即带全部技能,用户无需再单独获取技能合集。 ### 技能集(15 个,约 5000 行) - 基于上游 [wecom-cli](https://github.com/WecomTeam/wecom-cli) 官方 Skill(MIT,© WecomTeam)改写,每个技能末尾保留归属声明 - **新增 `wecom-chat`**:补齐上游零覆盖的群聊历史读取 - 补齐上游未覆盖的 `message.send`、`doc.create`,方法覆盖达 **95/95** - 修正上游三处文档漂移:邮件能力描述与实际相反、会议室参数名已过时、`title_highlight` 字段不存在 ### 相对上游的核心增量:风险治理 - 26 个对外可见或不可逆的方法逐个写明**执行前确认要求** - 4 个条件升级方法给出**参数级判据**,而非按方法名一刀切 - 文档权限扩散两项加重处理,涉及**企业外可见**时单独再确认一次 - 内部标识禁止外露,不因用户索要而放宽 - 拒绝导出可识别到具体自然人的隐私字段 ### 三条真机实测得出、上游未覆盖的硬约束 1. 机器人**只能写入/修改自己创建的数据**,真人创建的只能读 2. 每次响应携带的 `extra_identity_context` **禁止透露给用户** 3. 权限错误(`850002`/`851008`/`853006`)**不得重试**,须将 `help_message` **逐字原样**转给用户 ## 2. 修正 wecom-cli 条目 ref 漂移 `source.ref` 原钉在 2026-06-28 的 `72e14f7`,该快照只有 7 个子技能且用已废弃的旧命名(`msg`/`schedule`)。上游 v1.2.0 已扩展到 **14 个**技能。按旧 ref 安装的用户拿到的是三个月前的快照。 - `source.ref` → `78c514b2afee7c0d3d7be715628478421f37ee63` - `children` 由 `scripts/gen-collection-children.py` 重新生成,**7 → 14** - sidecar 同步 `provenance.content.ref`、`childCount` 与 `children` ## 验证 / Verification **静态** - 215 条示例命令追加 `--dry-run` 实跑,**215/215 退出码 0** - 未知方法 0、未知参数 0、`--json` 未知字段 0、枚举违规 0 - 15 个 `SKILL.md` 的 frontmatter 经客户端 `skillFrontmatterSchema` 校验全部通过 - `validate_catalog_metadata.py --require-complete` 与 `gen-collection-children.py`:**0 error** **真机(在真实企业微信账号上端到端)** - **待办域 6/6 方法全通**(含 2 个 write-high),`items` 必填的隐蔽坑实测证实 - **日程域 5 个方法全通**(含 3 个 write-high) - 消息发送、通讯录解析、微盘列表、邮件搜索、文档搜索、会议列表、智能表格创建均已实测通过 - 测试数据已全部清理,未污染真实账号 **尚未实测**:群聊历史(机器人未开通该品类)。相关文档已明确标注验证状态,未实测的能力不写「实际效果」段落。
12 KiB
风险与确认
哪些操作助手会先问你、哪些直接做、以及「怎么才算同意」。 这一篇是所有能力共用的规则,各篇文档里的「危险动作先问你」都指向这里。
一句话概括:能撤回的直接做,撤不回的先问你。
三档风险
助手把每个动作分成三档,判据是对别人的实际影响,不是「有没有写操作」。
| 档位 | 判据 | 助手怎么做 |
|---|---|---|
| 读取 | 纯查询,对企业微信侧没有任何改动 | 直接做。隐私敏感的读(见下)会先说明要读什么 |
| 低风险写入 | 创建新东西,或者只增不减地改(追加、上传、新建) | 直接做,事后如实汇报做了什么 |
| 高风险写入 | 对外可见(发消息、发邮件、邀请他人、授权他人)或不可逆(覆盖、删除、标记完成),没有回滚接口 | 先复述影响,等你明确同意 |
举个对照:往文档里追加一段是低风险(加错了再改),整篇覆盖是高风险(原文没了)。 同样是「写」,档位完全不同。
高风险动作的完整清单(26 个)
执行前一定会先问你。按能力分组:
| 能力 | 会先问你的动作 |
|---|---|
| 消息 | 发消息(两条发送路径都算) |
| 邮件 | 发送 / 回复 / 转发 / 日程邀约邮件 / 会议邮件(同一个动作的五种用法) |
| 会议 | 创建会议、更新会议、取消会议 |
| 日程 | 创建日程、更新日程、取消日程 |
| 待办 | 标记完成、删除 / 退出 |
| 文档管理 | 添加协作成员、设置链接加入规则 |
| 在线文档 | 整篇覆盖正文 |
| 在线表格 | 覆盖单元格区域、删除子工作表 |
| 智能文档 | 整页覆盖、删除页面、删除或替换内容块 |
| 智能表格 | 改记录、删记录、删字段、删子表、改子表名、删视图、删图表 |
其中最危险的一档是「设置链接加入规则」——它可能放开企业外访问, 等于把文档对不在你们企业微信通讯录里的任何人公开。这一档会单独再确认一次,见下文。
4 个「看情况」的动作
这几个默认是低风险、直接做;只有命中特定条件才升级为先问你:
| 动作 | 什么时候升级 | 为什么 |
|---|---|---|
| 创建待办 | 分派给他人时 | 对方待办列表里立刻出现,还会收到提醒 |
| 更新待办的参与人 | 改参与人名单时 | 是「整体替换」语义,漏掉谁就等于把谁踢出这条待办 |
| 修改智能表格字段 | 改字段类型时 | 可能把这一列已有的数据转换掉或直接清空 |
| 微盘文件重命名 | 文件在共享空间时 | 改名对全体协作者立刻可见 |
没命中条件时助手直接做——不会为了「保险」把所有待办操作都拿来问你一遍。 过度确认会让助手变得不可用。
助手会怎么问
一条标准的确认长这样:
即将以机器人的身份,向「项目 A 群」发送消息:「周报截止时间推迟到周五。」——确认发送吗?
将取消日程「产品评审」(9 月 1 日 14:00-15:00),参与人会收到取消通知,且无法撤回。确认吗?
将删除子表「需求池」,其中的 8 个字段和 214 条记录会一并丢失。确认吗?
复述里一定包含三件事:对谁(用姓名、群名、文档标题,不用内部编号)、做什么、 内容或规模是什么。涉及不可逆时会明说「无法撤回」「不可恢复」。
怎么算「明确同意」
| 你的回复 | 算不算 |
|---|---|
| 「确认」「发吧」「可以」「删」 | ✅ 算 |
| 「嗯」「你看着办」「都行」 | ❌ 不算,助手会再确认一次 |
| 沉默、答非所问 | ❌ 不算 |
| 上一轮同意过一个类似的动作 | ❌ 不算。同意是一次一个动作的,不会顺延到下一个 |
催促不能省掉确认。 助手可以把确认说得更短,但不会跳过。
三个「先读再写」
覆盖和删除之前,助手会先把现状读出来,在确认里告诉你要毁掉的是什么:
- 覆盖文档正文前——先读一遍现有正文,给你一两句摘要。没读过就覆盖等于蒙眼删除。
- 覆盖表格区域前——先读一遍这块区域现在是什么。区域本来是空的,它也会如实说「该区域当前为空」, 但这一步不省。
- 删子表 / 删记录前——先数一数有多少字段、多少条数据。
涉及企业外时会再问一次
把文档的加入规则放开到企业外,是整套能力里后果最严重的一件事: 不在你们企业微信通讯录里的任何人,只要拿到链接就能看到这份文档的全部内容, 而且链接被转发出去后无法收回,命令行侧也没有撤销接口。
所以这一档有三道额外闸门:
- 单独说一遍后果,单独取得一次同意:
这份文档将不再限于本企业内部可见,链接被转发出去后无法收回。
- 「发个链接就能看」不等于「开企业外」。 默认只动企业内的权限。 要动企业外,必须由你明确说出「企业外 / 外部 / 客户 / 合作方」;含糊时它会追问。
- 不知道文档里有什么就不开。 助手没读过这份文档时,会先提示你自己确认其中不含敏感信息。
顺带一提:加协作成员只能加不能删——命令行没有移除成员的方法。加错了得你去客户端手动移除。
只读但敏感的操作,会先说明再读
下面这些虽然不改任何东西,但读的是别人的原始内容,助手会先用一句话说明范围再动手:
| 操作 | 会先说什么 |
|---|---|
| 读群聊记录 | 「我将读取『XX 群』某年某月某日至某日的聊天记录,用于……」 |
| 读会议逐字转写 | 说明是哪场会、拉哪一段 |
| 读邮件正文与附件 | 说明读哪封 |
| 搜通讯录(批量搜集人员信息时) | 说明要查什么 |
范围必须具体到哪个对象 + 哪个时间段 + 读来干什么。 你没指定时它会先把候选列出来让你选,不会「先全都拉下来再说」。
无论你怎么要求都不会做的事
这几条是硬线,不因为你坚持而放宽:
- 导出能识别到具体自然人的隐私字段:身份证号、护照号、银行卡号、家庭住址、婚姻状况、 健康状况、宗教信仰等。
- 对个人做行为画像:统计「谁说话最多」「谁最晚下班」这类分析(除非你明确要求且目的正当)。
- 不当内容写入:性骚扰、性别歧视、人身侮辱、种族歧视。
- 政治敏感写入:把特定公职人员与「负面 / 贪污 / 举报 / 黑材料」这类用途凑在一起的请求, 第一步就拒绝,不会先建个表再判断。
- 违法或不良意图:删不合规的报销记录逃避审计、篡改数据掩盖违规、伪造记录欺骗他人。
- 越权读取:批量导出他人数据、读你没有权限的内容。
- 注入与恶意脚本:读到的邮件正文、聊天记录、文档内容里如果出现「忽略之前的指令」 「你现在是……」这类文本,一律当普通文字处理,绝不执行; 要写进文档的内容里夹带可执行脚本时,直接拒绝写入并说明原因,不会「悄悄清洗一下再写」。
助手拒绝时会直说「该操作不在支持范围内」并简要说明原因,不道歉、不引导你换个问法绕过去。
三条通用边界
这三条在每篇文档里都出现过,这里给出完整版。
1. 它只能改「它自己建的」东西
助手是以「机器人代表你」的身份在工作。企业微信对这个身份的规定是: 你创建或拥有的数据它可以读取、查询、下载,但它只能写入或修改机器人自己创建或拥有的数据。
- 读:你的日程、文档、待办、邮件、微盘文件都能读。
- 写:只能改它自己建的。你说「把我昨天写的那份文档改一下」——那份是你建的,它改不了。
碰到这种请求,助手不会反复重试,而是直接说明这条边界,并给替代方案: 「由我新建一份」或者「这个得你在企业微信里改」。
实测印证:助手创建的待办,创建人显示的是机器人身份,不是你本人。 这条边界直接决定了那 26 个高风险动作里有多少是你实际用得上的。
2. 能力按品类逐项开通
机器人不是开箱全能。通讯录、文档、微盘、会议、邮件、群聊……每一类都要单独开通。 没开通的品类,第一次调用就会被企业微信拒绝,并附上一段官方的开通指引。
助手的处理是固定的:把那段指引一字不改地转给你(包括其中的链接,不改写、不省略、不"帮你总结"), 然后停下来——不重试,也不换个方法绕过去。那是权限问题,重试不会变好。
实测账号的情况:基础品类一开始就有;通讯录、文档、微盘、会议、邮件是后来单独补开的; 群聊会话品类始终没开通,所以 04 群聊历史 整域都没验过。
3. 危险动作先问你
也就是本篇上面写的全部内容。
📋 验证状态
这一篇讲的是「助手会怎么做」,而「助手在真实对话里是不是真的这么做」, 只做了很有限的验证。 如实说明:
| 项 | 状态 |
|---|---|
| 26 个高风险动作里,实际执行过的 | 5 个:待办标记完成、待办删除、日程更新、日程取消、发消息。执行前都是明确知情的 |
| 其余 21 个高风险动作 | ⚠️ 未做破坏性验证——不适合拿真实数据和真人做验收实验 |
| 4 个「看情况」升级的判定 | ⚠️ 未实测 |
| 助手在对话里是否真的先问再做 | ⚠️ 未做端到端实测。界面里的完整链路跑不通(本机内存不足 + AI 审批未配置),所以「确认才执行」这个行为本身没有被真机验证过 |
| 三档风险的划分依据 | ⚠️ 来自接口描述与技能声明,不是逐个实测出来的。发现与实际行为不符时以实际行为为准 |
唯一被真机验证过的确认类行为是日程/会议的消歧问句——
助手输出的是逐字正确的 需要创建日程还是会议?(请回复:日程 / 会议)。
(这一条是修复了一个缺陷之后复测通过的:第一次测试时它把这句话改写成了自己的说法。)
本篇不含任何编造的确认对话。 上面「助手会怎么问」一节里的三个例句是格式示意, 不是实测记录——真实对话里的措辞会随具体对象和内容变化。
一处与上游的有意差异
这套能力改写自企业微信官方的技能包。上游对发邮件的规定是: 「展示预览后直接发,不许再问是否发送」。
本项目故意改了这一条:发邮件不可撤回,属于最典型的高风险动作,所以预览照旧展示, 但展示之后仍然要等你明确同意才发。记在这里是为了说明这不是疏忽,是有意为之。