跳转到正文
报告库
用途分类 / 其他用途

Wecomcli Meeting Skill 安全审计

作者说它能做什么(原文)

企业微信会议管理。本技能负责『在线会议』——即含在线会议链接(含会议号/入会链接、可远程或视频参会)的会议的创建、查询、搜索、获取详情(含会议信息、纪要、待办)、查询会议转写原文(逐字发言记录)、更新、取消等全部操作;若用户要的是不含在线会议链接的『日程』(也涵盖纯线下面对面碰头),改用 wecomcli-calendar 技能。用户仅说'开会/约个会/某会/某会议'等、未明确要创建的是日程还是在线会议时,必须先读取本技能并按其中的消歧流程向用户追问确认后再处理,不可臆断直接创建。

第三方安全检查结论

先别安装或运行

已检查文件
7
发现的风险
4
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。发现 2 项风险
中风险

自定义总结会读取完整会议逐字转写

原文依据:3 处
发现了什么

只要总结请求带任何额外的结构、风格、范围或长度要求,技能就跳过现成纪要,拉取全部转写并翻页到底。完整转写可能包含未出现在纪要中的敏感发言和参与者信息。

为什么需要注意

在接口允许访问时,整场会议原文会进入代理处理上下文;请求原话时还会逐行完整输出。这会扩大会议内容在聊天记录、模型处理链和屏幕上的暴露范围。

自定义总结本身是合理目的,但规则把任何附加结构、风格或长度要求都升级为读取完整逐字转写并翻页到底,即使用户只关注很窄的部分。逐字稿可能暴露纪要未包含的发言,形成超出必要范围的数据访问风险。用户可要求仅拉取相关段落,并确认会议纪要与转写权限在调用前受到限制。

SKILL.md:168来自说明文档打开原文件
**只要用户在"总结"之外附带了任何自定义的要求、描述、角度、范围、结构或风格,一律走原文生成**;**只有纯粹地说"总结下 / 讲了啥 / 纪要发我 / 看待办"、不带任何额外描述时,才返回已有的现成内容**。- **只说"总结下"(无任何自定义描述)**:仅泛泛地要一份总结/概要/待办,没有附加任何要求。触发语如"总结下 xx 会""这个会讲了啥""纪要发我""看下这个会的待办""有哪些待办"。  1. 先调 `meeting get`,取目标字段:要纪要 → 看 `notes[].note_content`;要待办 → 看 `notes[].todo_content`。  2. **可用则直接返回官方现成内容**(判定:`has_note_permission == true` 且目标字段有实质内容),无需再调用转写原文接口。  3. **不可用**(目标字段空 / `has_note_permission == false`)→ 转下方原文兜底。- **带了任何自定义要求 / 描述**:只要用户附加了结构、角度、聚焦范围、风格或长度等任意描述,就归此类。触发语如"按决策点整理""用三段式""列出每人发言重点""重点讲预算那部分""写成正式会议纪要""一句话概括""结合上次的会说说进展"等。  - **跳过 `get`,直接 `meeting original get` 拉全部转写**,按用户的要求/描述加工总结。理由:官方 `notes` 是固定视角的成品,满足不了任何定制诉求,必须回到原文重新加工。
查看另外 2 个位置
references/meeting-original-get.md:47来自说明文档打开原文件
1. **定位会议**:从上下文或 `list` / `search` 取得 `meeting_id`(周期会议带 `sub_meeting_id`)。2. **确定段落**:用户明确指定"第 N 段" → `media_index = N-1`;**未指定 → 不传 `media_index`**(接口返回全部段),不主动追问。3. **拉取转写**:调用 `wecom-cli meeting original get --json '{...}'`。4. **翻页拼接**:`has_more == true` 时携带 `next_cursor` 续拉,直到 `false`,按返回顺序拼接 `original_data`。5. **输出**:   - **要原话/逐字记录**(默认)→ 保留时间戳 + 说话人的逐行格式,**不改写、不总结、不裁剪**。   - **作为「会议总结」兜底或带自定义要求**(见 [SKILL.md 核心场景 7](../SKILL.md))→ 以拼接后的 `original_data` 为素材,按默认或用户指定结构加工总结。
SKILL.md:174来自说明文档打开原文件
  3. **不可用**(目标字段空 / `has_note_permission == false`)→ 转下方原文兜底。- **带了任何自定义要求 / 描述**:只要用户附加了结构、角度、聚焦范围、风格或长度等任意描述,就归此类。触发语如"按决策点整理""用三段式""列出每人发言重点""重点讲预算那部分""写成正式会议纪要""一句话概括""结合上次的会说说进展"等。  - **跳过 `get`,直接 `meeting original get` 拉全部转写**,按用户的要求/描述加工总结。理由:官方 `notes` 是固定视角的成品,满足不了任何定制诉求,必须回到原文重新加工。
低风险

模糊的会议查询会自动扩大到日程数据

原文依据:3 处
发现了什么

当用户只说“最近有什么会”等模糊表述时,技能不询问范围,而是同时读取会议和日程,并要求即使会议已有结果也继续查询日程。

为什么需要注意

这可能把比用户预期更多的企业日历元数据带入代理处理过程,包括纯线下或私人日程的主题、时间和参与者。输出虽限制为摘要字段,但读取范围仍被扩大。

规则明确禁止对模糊查询追问,并自动同时读取会议和日程;即使会议侧已有结果,也必须继续查询日程。这样可改善查全率,但会把只想查在线会议的用户请求扩大到个人日程数据。用户可要求先说明搜索范围,或默认只查一种载体并在无结果后征求同意再扩大。

SKILL.md:81来自说明文档打开原文件
> **查询消歧(模糊查询时日程 + 会议都查)[REQUIRED]**:查询场景严格禁止用文字追问"是日程还是会议"——日程/会议消歧追问仅用于创建,查询时一律按以下规则直接处理、不追问。**判定分两个独立维度,不要混为一谈**:>> **维度一:查哪一边(日程 / 会议 / 两边都查)**> - **明确是在线会议** → 用户明确提到"在线会议 / 视频会议 / 入会链接 / 会议号 / 腾讯会议 / 远程参会"等在线会议专属特征时,留在本技能只查会议。> - **明确是日程 / 安排** → 用户说的明显是日程类内容(如"日程 / 安排 / 我的安排 / 日历",且不带在线会议特征)时,改用 `读取 wecomcli-calendar 技能` 只查日程。> - **模糊表述无法判定**("会 / xx会 / xx会议 / 开会 / 最近有什么会 / 有哪些会 / 找下 xx会议"等,既可能是日程也可能是会议)→ **日程和会议都要查**:既用本技能查会议,又 `读取 wecomcli-calendar 技能` 查日程。>> **维度二:每一边用 `search` 还是 `list`(与维度一独立,逐边各自判断)**> - **有主题/名称关键词**(如"找下 xx会议""搜一下项目评审会议")→ 该边用 `search`(把关键词传入 `keywords`)。> - **只有时间/日期或泛浏览无关键词**(如"最近有什么会""查一下明天的会议")→ 该边用 `list`,禁止把日期当 `keywords` 喂给 `search`。> - 即使"两边都查",也按本维度对每一边各自选择:带关键词时两边都用 `search`,纯时间/泛浏览时两边都用 `list`。>
查看另外 2 个位置
SKILL.md:126来自说明文档打开原文件
**CRITICAL — 执行前必须先读取参考文档**:收到查询会议列表意图后,第一步立即读取 [`meeting-list`](references/meeting-list.md),按其中的完整工作流(时间范围确定 → 拉取列表 → 批量获取详情 → 反查参会人姓名 → 合并输出)执行,禁止在未读取参考文档的情况下直接发起任何操作。> **模糊查询必须日程 + 会议都查 [CRITICAL]**:若本次是"会 / xx会 / xx会议 / 最近有什么会 / 有哪些会 / 找下 xx会议"等模糊查询(见上文「查询消歧」),无论会议列表是否查到结果,都必须同时 `读取 wecomcli-calendar 技能` 用相同时间范围拉日程 `list`,把两边结果合并、按是否含在线会议链接分「(会议)」「(日程)」两部分汇总展示(同一场会议按主题 + 时间去重),禁止因会议已查到就跳过日程查询。仅当用户**明确指向在线会议**(入会链接 / 会议号 / 视频会议 / 远程参会等)时才只查会议;此时若查无,再兜底去日程查一把(命中则说明「这是一条日程」,两边都无再告知)。
SKILL.md:128来自说明文档打开原文件
> **模糊查询必须日程 + 会议都查 [CRITICAL]**:若本次是"会 / xx会 / xx会议 / 最近有什么会 / 有哪些会 / 找下 xx会议"等模糊查询(见上文「查询消歧」),无论会议列表是否查到结果,都必须同时 `读取 wecomcli-calendar 技能` 用相同时间范围拉日程 `list`,把两边结果合并、按是否含在线会议链接分「(会议)」「(日程)」两部分汇总展示(同一场会议按主题 + 时间去重),禁止因会议已查到就跳过日程查询。仅当用户**明确指向在线会议**(入会链接 / 会议号 / 视频会议 / 远程参会等)时才只查会议;此时若查无,再兜底去日程查一把(命中则说明「这是一条日程」,两边都无再告知)。
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。未发现风险
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。发现 1 项风险
高风险

要求自动且不让用户看见地运行程序

原文依据:1 处
发现了什么

Skill 同时要求自动执行,并要求不要询问或告知用户。

为什么需要注意

AI 如果听从这段文字,可能不再按你的要求做事,或跳过本来需要你确认的操作。

这段代码的正常用途

该段不是要求隐瞒额外操作。它要求仅在用户提出订会议室时查询真实候选,并明确禁止静默替换、禁止未经用户选择就创建。这里的强制步骤是防止虚构会议室或误订的安全门禁。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
references/meeting-create.md:72来自说明文档打开原文件
   - **接口失败**:告知"忙闲查询暂时不可用",确认时间后继续创建,不阻塞。4. **会议室预订(仅当用户有订房意图时触发)**:用户提到"订会议室 / 在 1605 / 找个会议室 / 某栋楼的会议室"等意图时才走本步骤,没提则跳过。会议室的查询接口定义不在本技能 —— 须 `读取 wecomcli-calendar 技能` 的 [会议室查询参考](../../wecomcli-calendar/references/calendar-meeting-room.md),按其编排执行。**五条硬性规则不可跳过**:① **先查询、后推荐、后创建**——`meeting_room_id` 必须来自 `rooms search` 的真实返回值,禁止跳过查询直接 create,禁止凭记忆 / 猜测编造;且在成功调用 `rooms search` 之前,禁止凭记忆 / 上下文 / 想象向用户罗列或推荐任何具体会议室(含用文字给出的候选、正文里的房间名 / 号 / 楼层 / 容量),要让用户选会议室必须先查到真实候选再组装选项;② **存在多个会议室必须让用户选**——命中多个候选时必须用文字让用户选择或指定具体会议室,禁止自动替用户挑选;③ **会议室必须订房、且只传 `meeting_room_id`**——只要用户给的地点是会议室,就必须经 `rooms search` 查到真实会议室并通过 `meeting_room_id` 传入,严禁把会议室名 / 房间号仅塞进 `location` 字段就创建(那样不会真正占用会议室);预订成功后创建时**只传 `meeting_room_id`**(占用),**不需要再把会议室名重复填进 `location`**(会议室名由后端关联返回),仅当用户给的是非会议室的普通地点时才只写 `location`、不走订房;④ **优先先订房、后建会**——用户在创建时就提到会议室的,应先把会议室敲定(拿到用户确认的 `meeting_room_id`)再进入步骤 5 创建会议,本步骤是步骤 5 的前置阻塞项,避免创建后会议室被抢占。若会议室查询 / 选择尚未完成(如等待用户在候选中选择),必须停在本步骤等待,不得提前调用 create;⑤ **指定会议室查无/不可用必须先告知、禁止静默替换**——用户指定的会议室 `not_found`(查无此名)或 `unavailable`(被占)时,先告知用户"未查到 / 无法预订你指定的『xxx』会议室",再让用户决定改订其他会议室或换时间,禁止静默替代(候选仅 1 个也须用户确认)。若创建时漏订或事后要换会议室,可走 [meeting-update](meeting-update.md) 传入新 `meeting_room_id` 改订(须先经 `rooms search` 确认 `status=bookable`),不必取消重建。   - 用户提了楼名 → `buildings list` + LLM 匹配得到楼;没提楼则跳过(后端用当前所在楼兜底)
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。发现 1 项风险
中风险

创建、更新和取消在参数就绪后直接执行,缺少最终操作确认

原文依据:5 处
发现了什么

技能明确禁止在执行前再次展示摘要或询问确认,并假定“上层交互”已完成确认,但提供的材料没有证明每个运行环境都有这一上层保护。取消还会连带取消关联日程。

为什么需要注意

一次错误解析、陈旧上下文或误选的唯一匹配,可能直接发出邀请、占用会议室、改变时间或参会人,或者取消会议及其关联日程,影响其他参与者。

材料明确要求创建和取消在参数就绪后直接执行,不进行最终确认,并依赖未在本材料中保证存在的“上层交互”。若运行环境没有该保护,误解后的写操作可能立即创建或取消会议;取消会议还会连带取消关联日程。用户可要求作者证明上层确认机制,或限制所有写操作必须先展示目标并再次确认。

SKILL.md:201来自说明文档打开原文件
### 规则 2: 写操作直接执行- 创建会议、取消会议时,参数就绪后直接执行,无需向用户展示摘要或询问确认。- 结果返回时**禁止暴露 userid**,只展示人名。- **原因**:上层交互已完整展示操作内容并完成确认,此处再展示一遍会造成冗余;userid 是系统内部标识,对用户没有实际意义,展示反而容易造成困惑。
查看另外 4 个位置
references/meeting-update.md:115来自说明文档打开原文件
    |    +-- 执行 update(不论会议由谁创建,都直接执行,不提前拒绝)→ 依返回结果判断:          +-- 返回更新后的字段 → 修改成功,展示更新后的会议摘要          +-- 返回权限类错误 → 说明当前用户无权修改该会议,告知用户并建议联系会议发起人```
references/meeting-cancel.md:21来自说明文档打开原文件
- **不预先按"是否本人创建"拦截取消**,直接执行 `cancel`,能否取消由接口返回结果判断:返回空对象 `{}` 即成功;返回权限类错误则说明当前用户无权取消,告知用户并建议联系会议发起人- **周期会议不支持取消**:检测到目标会议 `repeat_rule` 非空时,直接告知用户目前暂不支持取消周期会议,引导其在企业微信客户端操作,禁止改为整系列直接 cancel 等变通方式- **取消会议后,其关联日程会被一并取消,禁止再对同一场调用 `schedule cancel`**;模糊取消时若同一场(主题+时间一致)在会议和日程两边都命中,只走 `meeting cancel` 一次即可
SKILL.md:203来自说明文档打开原文件
- 创建会议、取消会议时,参数就绪后直接执行,无需向用户展示摘要或询问确认。- 结果返回时**禁止暴露 userid**,只展示人名。- **原因**:上层交互已完整展示操作内容并完成确认,此处再展示一遍会造成冗余;userid 是系统内部标识,对用户没有实际意义,展示反而容易造成困惑。
references/meeting-cancel.md:31来自说明文档打开原文件
- **明确是日程 / 安排**(说的是"日程 / 安排 / 我的日历"且不带在线会议特征)→ 改用 `读取 wecomcli-calendar 技能` 在日程里定位并 `schedule cancel`。- **模糊无法判定** → 会议和日程**两边都查**:本技能 `meeting search`/`list` + `读取 wecomcli-calendar 技能` 用同样关键词 / 时间查日程,合并候选、按"主题 + 时间"去重(同一场两边都命中只保留一条),再用文字让用户**选定要取消的唯一一条**;选定后按其归属路由——是会议(或两边都命中的同一场)→ `meeting cancel`(会连带取消关联日程);是纯日程 → 改用 `读取 wecomcli-calendar 技能` 走 `schedule cancel`。> **与查询消歧的区别**:查询时可以两边都查、都展示;但取消是**写操作,绝不能两边都直接取消**,模糊时必须先让用户确认唯一目标,再执行对应的 cancel。

Skill 逻辑拆解

8 个说明模块

该技能通过 `wecom-cli` 管理企业微信在线会议,包括创建、查询、搜索、更新、取消和读取转写原文。

查看原文
SKILL.md:239来自说明文档打开原文件
## CLI 调用格式```bashwecom-cli meeting [action] --json '{"key": "value"}'```- `meeting action`:`create`、`list`、`get`、`search`、`cancel`、`update`、`original get`- `--json`:JSON 参数,用**单引号**包裹

创建意图不明确时,技能要求先让用户在“日程”和“会议”之间选择;模糊查询则会自动同时查询会议与日程。

查看原文
SKILL.md:65来自说明文档打开原文件
>> **问题与选项固定 [CRITICAL]**:消歧确认时,问题与可选项都必须原文照用、严格禁止修改任何内容——问题固定为 `"需要创建日程还是会议?"`,可选项固定为 `日程` / `会议`;不得改写问题措辞、增减或改写选项、翻译,或自行设计其他表述(如"在线会议 / 线上会议 / 视频会议 / 线下会议"等)。>> 用文字向用户提问:`需要创建日程还是会议?(请回复:日程 / 会议)`>> 用户答「会议」→ 留在本技能创建会议;答「日程」→ 改用 `读取 wecomcli-calendar 技能` 创建日程。>
SKILL.md:83来自说明文档打开原文件
>> **维度一:查哪一边(日程 / 会议 / 两边都查)**> - **明确是在线会议** → 用户明确提到"在线会议 / 视频会议 / 入会链接 / 会议号 / 腾讯会议 / 远程参会"等在线会议专属特征时,留在本技能只查会议。> - **明确是日程 / 安排** → 用户说的明显是日程类内容(如"日程 / 安排 / 我的安排 / 日历",且不带在线会议特征)时,改用 `读取 wecomcli-calendar 技能` 只查日程。> - **模糊表述无法判定**("会 / xx会 / xx会议 / 开会 / 最近有什么会 / 有哪些会 / 找下 xx会议"等,既可能是日程也可能是会议)→ **日程和会议都要查**:既用本技能查会议,又 `读取 wecomcli-calendar 技能` 查日程。>

人员姓名通过通讯录技能解析,创建及部分更新前还会调用日历技能检查忙闲;涉及会议室时会查询并预订真实会议室。

查看原文
references/meeting-create.md:62来自说明文档打开原文件
   - `attendees` 缺失时,用文字追问参会人,禁止默认创建无参会人的会议或自行猜测;地点、会议室等非必填参数用户未明确指定时不追问,也不传该字段。文字提问如:`需要邀请哪些人参会?`(可列出"仅自己"及根据对话语境补充的 1-3 个候选人名供参考)2. **参会人解析**:上下文中已有合法 userid(`wo` 前缀)则直接使用,跳过本步骤;用户提供的是人名时,通过 `读取 wecomcli-contact 技能` 将所有姓名批量搜索,逐个关键词独立处理结果:   - 某关键词唯一匹配 → 直接使用,无需确认   - 某关键词多个匹配 → 用文字让用户选择:`搜索到多个「{姓名}」,请确认要邀请哪一位?` 并列出候选(来自 wecomcli-contact 技能搜索结果,如"张三 - 产品部 - 产品经理 / 张三 - 技术部 - 前端工程师",最多 4 条,超出取前 4 并提示用户缩小范围)   - 某关键词无结果 → 用文字提示用户重新输入:`未找到「{姓名}」,请确认姓名是否正确`   - 所有姓名确认完毕后,汇总 userid 组装为对象数组一并传入 `attendees`3. **参会人忙闲检查(新建一律必做)[REQUIRED]**:新建会议的查询对象必含当前用户自己(`wo` 前缀),故创建前必须先查忙闲,避免约到冲突时间(**含只有自己的会议——避免约到自己已占用的时段**);**本步骤是步骤 5(调用创建接口)的前置阻塞项——未完成忙闲检查、或检测到冲突但未经用户拍板,一律禁止进入创建(仅接口失败的降级例外,见下)**;外部联系人(`wm` 前缀,忙闲不可查)不纳入查询对象、但**不因此跳过**整体检查。忙闲接口不在本技能 —— 须 `读取 wecomcli-calendar 技能` 的 [忙闲查询参考](../../wecomcli-calendar/references/calendar-freebusy.md),调 `free list`(窗口 ≤ 24h,跨天需分段;**查询对象 = 自己 + 其他内部参会人,新建会议时自己也要纳入,避免约到自己已占用的时段**):   - **推荐时段长度 ≠ 会议时长(精确 / 范围时间均适用)**:忙闲返回的推荐时段只用于确定会议**开始时间**,其长度不代表会议时长;用户选定时段后,会议时长仍以用户明确指定的为准,用户未明确时长时一律默认 1 小时(`begin_time + 1h`),禁止把推荐时段的长度直接当作会议时长。
references/meeting-create.md:72来自说明文档打开原文件
   - **接口失败**:告知"忙闲查询暂时不可用",确认时间后继续创建,不阻塞。4. **会议室预订(仅当用户有订房意图时触发)**:用户提到"订会议室 / 在 1605 / 找个会议室 / 某栋楼的会议室"等意图时才走本步骤,没提则跳过。会议室的查询接口定义不在本技能 —— 须 `读取 wecomcli-calendar 技能` 的 [会议室查询参考](../../wecomcli-calendar/references/calendar-meeting-room.md),按其编排执行。**五条硬性规则不可跳过**:① **先查询、后推荐、后创建**——`meeting_room_id` 必须来自 `rooms search` 的真实返回值,禁止跳过查询直接 create,禁止凭记忆 / 猜测编造;且在成功调用 `rooms search` 之前,禁止凭记忆 / 上下文 / 想象向用户罗列或推荐任何具体会议室(含用文字给出的候选、正文里的房间名 / 号 / 楼层 / 容量),要让用户选会议室必须先查到真实候选再组装选项;② **存在多个会议室必须让用户选**——命中多个候选时必须用文字让用户选择或指定具体会议室,禁止自动替用户挑选;③ **会议室必须订房、且只传 `meeting_room_id`**——只要用户给的地点是会议室,就必须经 `rooms search` 查到真实会议室并通过 `meeting_room_id` 传入,严禁把会议室名 / 房间号仅塞进 `location` 字段就创建(那样不会真正占用会议室);预订成功后创建时**只传 `meeting_room_id`**(占用),**不需要再把会议室名重复填进 `location`**(会议室名由后端关联返回),仅当用户给的是非会议室的普通地点时才只写 `location`、不走订房;④ **优先先订房、后建会**——用户在创建时就提到会议室的,应先把会议室敲定(拿到用户确认的 `meeting_room_id`)再进入步骤 5 创建会议,本步骤是步骤 5 的前置阻塞项,避免创建后会议室被抢占。若会议室查询 / 选择尚未完成(如等待用户在候选中选择),必须停在本步骤等待,不得提前调用 create;⑤ **指定会议室查无/不可用必须先告知、禁止静默替换**——用户指定的会议室 `not_found`(查无此名)或 `unavailable`(被占)时,先告知用户"未查到 / 无法预订你指定的『xxx』会议室",再让用户决定改订其他会议室或换时间,禁止静默替代(候选仅 1 个也须用户确认)。若创建时漏订或事后要换会议室,可走 [meeting-update](meeting-update.md) 传入新 `meeting_room_id` 改订(须先经 `rooms search` 确认 `status=bookable`),不必取消重建。   - 用户提了楼名 → `buildings list` + LLM 匹配得到楼;没提楼则跳过(后端用当前所在楼兜底)   - `rooms search`(带已定 `begin_time`/`end_time` + 可选楼 + 可选 `room_keyword` + `min_capacity = len(attendees) + 1`)   - 按结果决策:用户**指定了具体会议室**(传了 `room_keyword`)且 `target` 中有 `bookable` 项 → 取该项 `meeting_room_id`(仅 1 个直接用,多个则用文字让用户选);指定的会议室 `target=[]`(查无此名)或命中项均 `unavailable`(被占)时——先告知用户"未查到 / 无法预订你指定的『xxx』会议室",再用文字让用户决定改订其他会议室或换时间,禁止静默替代(候选仅 1 个也须用户确认);用户**未指定具体会议室**(`target` 为 `[]`)时——`recommendations` 有**多个**候选则必须用文字让用户选择,只有 **1 个**候选可直接使用,**为空**则问是否跨楼或换时间   - 选定后将用户确认的 `meeting_room_id` 带入下一步的 create5. **调用创建接口**:参数就绪后直接执行 `wecom-cli meeting create --json '{...}'`。

更新和取消不会先根据会议所有者进行本地拦截,而是直接请求接口,并依赖企业微信接口进行最终权限判定。

查看原文
SKILL.md:223来自说明文档打开原文件
### 规则 4: 权限判定交给接口- 取消 / 更新会议不预先按"是否本人创建"拦截,也不区分 `created_meetings` / `attended_meetings`——直接执行 `cancel` / `update`,能否操作由接口返回结果判断。- 返回成功即操作完成;返回权限类错误则说明当前用户无权操作该会议,告知用户并建议联系会议发起人。
从这里开始 · 工作说明SKILL.md
wecomcli-meeting
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。 另有 6 个章节,可在原文件中查看。

文件引用关系图

19 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录7 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • references/meeting-cancel.md已纳入全文
  • references/meeting-create.md已纳入全文
  • references/meeting-list.md已纳入全文
  • references/meeting-original-get.md已纳入全文
  • references/meeting-search.md已纳入全文
  • references/meeting-update.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • references/meeting-cancel.md配套文件
  • references/meeting-create.md配套文件
  • references/meeting-list.md配套文件
  • references/meeting-original-get.md配套文件
  • references/meeting-search.md配套文件
  • references/meeting-update.md配套文件

代码和说明中提到的操作

运行命令
SKILL.md:19来自说明文档打开原文件
3. 严格按照参考文档中的工作流和命令格式执行4. 禁止跳过步骤 2 直接执行命令,即使你认为已经知道如何操作   — 原因:每个操作的参数格式、可选字段和边界行为都在参考文档中精确定义,凭记忆操作极易因参数错误导致调用失败
SKILL.md:107来自说明文档打开原文件
- 需要企业微信账号且已登录- 取消/更新操作不预先按"是否本人创建"拦截,直接执行命令、由接口返回结果判断能否操作- 参会人 userid(前缀为 `wo`)组装为 `[{"userid": "woxxx"}]` 对象数组格式传入;用户提供的是姓名时通过 `读取 wecomcli-contact 技能` 解析为 userid
SKILL.md:241来自说明文档打开原文件
```bashwecom-cli meeting [action] --json '{"key": "value"}'
连接外部网站
references/meeting-list.md:114来自说明文档打开原文件
| `meetings[].notes[].todo_content`                               | 智能纪要待办内容                                                                                                 || `meetings[].note_url`                                           | 会议智能纪要 URL(如 `"https://xxx"`)。**仅当用户明确询问会议链接 / 纪要链接时才展示**,其余情况不主动输出;**只要展示链接,就必须用 markdown 跳转链接格式 `[会议主题](链接)`**,`[]` 内放该会议主题(`subject`,如 `[产品评审周会](https://xxx)`),禁止裸贴 URL、禁止用固定文案 || `meetings[].has_note_permission`                                | 是否有会议纪要权限                                                                                               |
references/meeting-list.md:116来自说明文档打开原文件
| `meetings[].has_note_permission`                                | 是否有会议纪要权限                                                                                               || `meetings[].record_url`                                         | 会议录制地址 URL(如 `"https://xxx"`)。**仅当用户明确询问录制链接 / 回放链接时才展示**,其余情况不主动输出;**只要展示链接,就必须用 markdown 跳转链接格式 `[会议主题](链接)`**,`[]` 内放该会议主题(`subject`,如 `[产品评审周会](https://xxx)`),禁止裸贴 URL、禁止用固定文案 || `meetings[].is_except_meet`                                     | 是否是例外(周期会议中被单独修改的子会议)                                                                       |
references/meeting-list.md:131来自说明文档打开原文件
  - **默认不展示**:`note_url` 仅当用户明确询问会议链接 / 纪要链接时才输出;`record_url` 仅当用户明确询问录制链接 / 回放链接时才输出;其余情况一律不主动输出。  - **展示格式强约束**:**只要要展示这两类链接,就必须用 markdown 跳转链接格式 `[会议主题](链接)`**——`[]` 内放该会议主题(`subject`),`()` 内放对应 URL,如 `[产品评审周会](https://xxx)`。  - **严禁**:直接裸贴 URL、用「点击查看」等固定文案代替会议主题、或以纯文本形式输出链接。
读取了多少行
1,374
文件校验值(用于核对版本)
67b3ffe5648f36c9b5e4b8bcdd59fcc320043a0df1c84162db01f0583758af70