Skip to content
Report library
Purpose / Other

Wecomcli Meeting Skill Security Audit

What the author says it does (original text)

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

Independent security check

Do not install or run it yet

Files checked
7
Risks found
4
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.No risks found
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 2
Medium risk

Customized summaries retrieve the complete verbatim meeting transcript

Source references: 3
What we found

Any added structure, style, scope, or length requirement causes the Skill to bypass existing notes, retrieve the full transcript, and paginate to the end. A full transcript may contain sensitive remarks and participant information absent from the official notes.

Why this matters

When the API permits access, the entire meeting transcript enters the agent's processing context; a verbatim request also outputs it line by line. This expands exposure across chat history, model processing, and anyone viewing the screen.

Customized summarization is legitimate, but any added structure, style, or length request triggers retrieval of the complete verbatim transcript through every page, even for a narrow focus. That can expose remarks absent from the official notes and creates a data-minimization risk. A user can require retrieval of only relevant segments and confirmation that transcript permissions are enforced before access.

SKILL.md:168In the instructionsOpen original file
**只要用户在"总结"之外附带了任何自定义的要求、描述、角度、范围、结构或风格,一律走原文生成**;**只有纯粹地说"总结下 / 讲了啥 / 纪要发我 / 看待办"、不带任何额外描述时,才返回已有的现成内容**。- **只说"总结下"(无任何自定义描述)**:仅泛泛地要一份总结/概要/待办,没有附加任何要求。触发语如"总结下 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` 是固定视角的成品,满足不了任何定制诉求,必须回到原文重新加工。
Show 2 other places
references/meeting-original-get.md:47In the instructionsOpen original file
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:174In the instructionsOpen original file
  3. **不可用**(目标字段空 / `has_note_permission == false`)→ 转下方原文兜底。- **带了任何自定义要求 / 描述**:只要用户附加了结构、角度、聚焦范围、风格或长度等任意描述,就归此类。触发语如"按决策点整理""用三段式""列出每人发言重点""重点讲预算那部分""写成正式会议纪要""一句话概括""结合上次的会说说进展"等。  - **跳过 `get`,直接 `meeting original get` 拉全部转写**,按用户的要求/描述加工总结。理由:官方 `notes` 是固定视角的成品,满足不了任何定制诉求,必须回到原文重新加工。
Low risk

Ambiguous meeting searches automatically expand into calendar data

Source references: 3
What we found

When a user makes an ambiguous request such as “what meetings are coming up,” the Skill does not ask about scope; it reads both meetings and calendar events and requires the calendar lookup even if meeting results already exist.

Why this matters

More corporate calendar metadata than expected may enter agent processing, including subjects, times, and participants of offline or potentially private events. Output is summarized, but the retrieval scope is still broader.

For ambiguous queries, the rule forbids clarification and automatically searches both meetings and calendar entries, even when meeting results already exist. This improves recall but can expand a request intended only for online meetings into personal schedule data. A user can require the scope to be disclosed first, or limit the default to one source and obtain consent before expanding.

SKILL.md:81In the instructionsOpen original file
> **查询消歧(模糊查询时日程 + 会议都查)[REQUIRED]**:查询场景严格禁止用文字追问"是日程还是会议"——日程/会议消歧追问仅用于创建,查询时一律按以下规则直接处理、不追问。**判定分两个独立维度,不要混为一谈**:>> **维度一:查哪一边(日程 / 会议 / 两边都查)**> - **明确是在线会议** → 用户明确提到"在线会议 / 视频会议 / 入会链接 / 会议号 / 腾讯会议 / 远程参会"等在线会议专属特征时,留在本技能只查会议。> - **明确是日程 / 安排** → 用户说的明显是日程类内容(如"日程 / 安排 / 我的安排 / 日历",且不带在线会议特征)时,改用 `读取 wecomcli-calendar 技能` 只查日程。> - **模糊表述无法判定**("会 / xx会 / xx会议 / 开会 / 最近有什么会 / 有哪些会 / 找下 xx会议"等,既可能是日程也可能是会议)→ **日程和会议都要查**:既用本技能查会议,又 `读取 wecomcli-calendar 技能` 查日程。>> **维度二:每一边用 `search` 还是 `list`(与维度一独立,逐边各自判断)**> - **有主题/名称关键词**(如"找下 xx会议""搜一下项目评审会议")→ 该边用 `search`(把关键词传入 `keywords`)。> - **只有时间/日期或泛浏览无关键词**(如"最近有什么会""查一下明天的会议")→ 该边用 `list`,禁止把日期当 `keywords` 喂给 `search`。> - 即使"两边都查",也按本维度对每一边各自选择:带关键词时两边都用 `search`,纯时间/泛浏览时两边都用 `list`。>
Show 2 other places
SKILL.md:126In the instructionsOpen original file
**CRITICAL — 执行前必须先读取参考文档**:收到查询会议列表意图后,第一步立即读取 [`meeting-list`](references/meeting-list.md),按其中的完整工作流(时间范围确定 → 拉取列表 → 批量获取详情 → 反查参会人姓名 → 合并输出)执行,禁止在未读取参考文档的情况下直接发起任何操作。> **模糊查询必须日程 + 会议都查 [CRITICAL]**:若本次是"会 / xx会 / xx会议 / 最近有什么会 / 有哪些会 / 找下 xx会议"等模糊查询(见上文「查询消歧」),无论会议列表是否查到结果,都必须同时 `读取 wecomcli-calendar 技能` 用相同时间范围拉日程 `list`,把两边结果合并、按是否含在线会议链接分「(会议)」「(日程)」两部分汇总展示(同一场会议按主题 + 时间去重),禁止因会议已查到就跳过日程查询。仅当用户**明确指向在线会议**(入会链接 / 会议号 / 视频会议 / 远程参会等)时才只查会议;此时若查无,再兜底去日程查一把(命中则说明「这是一条日程」,两边都无再告知)。
SKILL.md:128In the instructionsOpen original file
> **模糊查询必须日程 + 会议都查 [CRITICAL]**:若本次是"会 / xx会 / xx会议 / 最近有什么会 / 有哪些会 / 找下 xx会议"等模糊查询(见上文「查询消歧」),无论会议列表是否查到结果,都必须同时 `读取 wecomcli-calendar 技能` 用相同时间范围拉日程 `list`,把两边结果合并、按是否含在线会议链接分「(会议)」「(日程)」两部分汇总展示(同一场会议按主题 + 时间去重),禁止因会议已查到就跳过日程查询。仅当用户**明确指向在线会议**(入会链接 / 会议号 / 视频会议 / 远程参会等)时才只查会议;此时若查无,再兜底去日程查一把(命中则说明「这是一条日程」,两边都无再告知)。
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.No risks found
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.No risks found
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.Risks found: 1
High risk

Requires a helper to run automatically and out of sight

Source references: 1
What we found

The skill combines automatic execution with instructions not to ask or tell the user.

Why this matters

If the AI follows this text, it may stop following your instructions or skip actions that normally need your approval.

Legitimate use of this code

This does not require concealing an extra operation. It applies only when the user asks to book a room, requires real search results, and explicitly prohibits silent substitution or creation before the user's choice. These are safeguards against fabricated or incorrect room bookings.

This assessment concerns the code and conditions shown, not proof that harm has occurred.
references/meeting-create.md:72In the instructionsOpen original file
   - **接口失败**:告知"忙闲查询暂时不可用",确认时间后继续创建,不阻塞。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 匹配得到楼;没提楼则跳过(后端用当前所在楼兜底)
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.Risks found: 1
Medium risk

Creation, updates, and cancellation execute without a final action confirmation

Source references: 5
What we found

The Skill explicitly skips another summary or confirmation and assumes an upstream interaction already confirmed the action, but the supplied material does not establish that every runtime has this protection. Cancellation also removes the associated calendar event.

Why this matters

A parsing mistake, stale context, or incorrect unique match could send invitations, reserve a room, change timing or attendees, or cancel a meeting and its linked calendar event, affecting other participants.

The skill directs creation and cancellation to run immediately once parameters are ready, relying on an “upper-layer interaction” not established in the supplied material. Without that protection, a misunderstood request could immediately create or cancel a meeting; cancellation also removes its linked calendar entry. A user can require proof of the upper-layer confirmation or restrict all writes to a final target summary and confirmation.

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

Inside this skill

8 instruction sections

The Skill uses `wecom-cli` to manage WeCom online meetings, including creation, lookup, search, updates, cancellation, and transcript retrieval.

View source
SKILL.md:239In the instructionsOpen original file
## CLI 调用格式```bashwecom-cli meeting [action] --json '{"key": "value"}'```- `meeting action`:`create`、`list`、`get`、`search`、`cancel`、`update`、`original get`- `--json`:JSON 参数,用**单引号**包裹

For ambiguous creation requests, the Skill asks the user to choose between a calendar event and an online meeting; ambiguous read requests automatically search both sources.

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

Names are resolved through a contacts Skill, while meeting creation and some updates invoke a calendar Skill for availability checks; room requests also query and reserve a real meeting room.

View source
references/meeting-create.md:62In the instructionsOpen original file
   - `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:72In the instructionsOpen original file
   - **接口失败**:告知"忙闲查询暂时不可用",确认时间后继续创建,不阻塞。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 '{...}'`。

Updates and cancellations are not locally blocked based on meeting ownership; the Skill sends the request and relies on the WeCom API for the final authorization decision.

View source
SKILL.md:223In the instructionsOpen original file
### 规则 4: 权限判定交给接口- 取消 / 更新会议不预先按"是否本人创建"拦截,也不区分 `created_meetings` / `attended_meetings`——直接执行 `cancel` / `update`,能否操作由接口返回结果判断。- 返回成功即操作完成;返回权限类错误则说明当前用户无权操作该会议,告知用户并建议联系会议发起人。
Start here · InstructionsSKILL.md
wecomcli-meeting
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source. 6 more sections are available in the original file.

File reference map

References: 19
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records7 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/meeting-cancel.mdFull text included
  • references/meeting-create.mdFull text included
  • references/meeting-list.mdFull text included
  • references/meeting-original-get.mdFull text included
  • references/meeting-search.mdFull text included
  • references/meeting-update.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • references/meeting-cancel.mdSupporting file
  • references/meeting-create.mdSupporting file
  • references/meeting-list.mdSupporting file
  • references/meeting-original-get.mdSupporting file
  • references/meeting-search.mdSupporting file
  • references/meeting-update.mdSupporting file

Operations mentioned in code and instructions

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