基础工具与工作流 · daymade/claude-code-skills

notify-wecom

Send a single one-off message to a WeCom (Enterprise WeChat) group bot. Use this skill whenever the user says "/notify-wecom", "send a quick WeCom message", "企微通知一下", "临时发一条企业微信", or any one-shot notification that does not need a reusable template or setup workflow.

风险提醒:黄色 · 留意使用AI 侦查报告
作者 daymadeGitHub daymade/claude-code-skills ↗Stars 1392许可 MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)commit d5c4678cb5
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

这是一本纯指令型 skill:目录里只有 SKILL.md(82 行),没有任何脚本;真正的发送动作由 agent 在 shell 里完成——要么调用配套 skill 的发送器,要么用等价的 inline curl。

notify-wecom/SKILL.md
4. Sends via the WeCom webhook using the sender from `setup-notifications-via-wecom` (or an equivalent inline curl call).
注:这里在做什么:notify-wecom 把自己定位成「一次性发送」的轻入口,把 HTTP 实现外包给 setup-notifications-via-wecom 的 scripts/send_wecom.py;因此审计这条通道的代码行为必须去读配套 skill,本目录无代码可读。

凭证不走环境变量,而是从共享配置文件的固定路径读取:webhook_url(含机器人 key)、recipient_scope、recipient_label 三者都来自 ~/.config/setup-notifications-via-wecom/config.json。

notify-wecom/SKILL.md
1. Reads `~/.config/setup-notifications-via-wecom/config.json` for `webhook_url`, `recipient_scope`, and `recipient_label`.
注:配置落地在用户主目录(而非仓库/环境变量),配套 skill 的初始化会用 chmod 600 收紧权限;notify-wecom 自身只读不写该文件。

缺配置即停:配置不存在时只打印一行 setup 命令然后终止,不尝试猜测或临时创建。

notify-wecom/SKILL.md
If the config is missing, it prints the one-line setup command and stops.
注:属于该仓库一贯的 fail-fast 风格:配置类前置条件不满足时不进入半可用状态;搭建路径交给配套 skill 的 Quick Start。

收件人身份是显式配置而非推断:self(用户自己的通道)免授权直发,others(任何其他人或群)必须先过人工确认门禁,且门禁要求出示精确的 label 与消息全文。

notify-wecom/SKILL.md
3. If scope is `self`, sends without an authorization prompt. If scope is `others`, presents the exact label and message for human confirmation.
注:scope 缺失或非法被定义为配置错误(stop and classify the target; do not guess),而不是默认放行或默认拦截——这是本 skill 唯一的权限模型。

发送前必须清空本地代理环境变量,因为腾讯端点要求直连。

notify-wecom/SKILL.md
2. Unsets all local proxy env vars (Tencent endpoints must be reached directly).
注:与配套 skill 的 env -u http_proxy -u https_proxy … 前缀是同一纪律;SKILL.md 还提示:若代理变量名不在标准集合内,需要用户自行先 unset。

交付判定以发送器响应为准:授权不等于送达,预备好的 pending item 也不等于送达回执。

notify-wecom/SKILL.md
5. Reports success or the exact WeCom error; authorization alone is not delivery proof.
注:与 Limitations 末句同义:A prepared pending item is not a delivery receipt; only the sender response proves delivery.——把「发了」和「发成功了」严格区分,属该仓库的证据纪律。

身份与发送器防伪条款:不得从 webhook URL 反推 self/others,也不得仅因为脚本名为 send_wecom.py 就信任它。

notify-wecom/SKILL.md
Use `setup-notifications-via-wecom`'s `set_recipient.py` command; never infer self versus others from the webhook URL, and never trust a script merely because its basename is `send_wecom.py`.
注:针对两类失败模式:把群机器人 URL 误判成「自己」而绕过确认闸门;以及被同名/同路径的伪发送器偷换发信实现(配套 skill 用 set_recipient.py 记录发送器绝对路径与 sha256 摘要来对治)。

消息格式边界被明确收窄:仅纯文本、单条 4096 字节以内、不做模板(模板与结构化消息归配套 skill)。

notify-wecom/SKILL.md
Plain text only. No markdown cards, images, or @mentions.
注:description 也把触发面限定在 one-shot notification that does not need a reusable template or setup workflow;多行消息用三引号或文件承载。

2核心能力

01一条命令发企微群机器人消息(/notify-wecom <message>,frontmatter 带 argument-hint: "[message]")
02从共享配置读取收件人身份与凭证(webhook_url / recipient_scope / recipient_label)
03self/others 双轨授权:self 直发,others 走人工确认门禁(出示精确 label 与消息)
04缺配置时的快速失败与自助修复指引(打印一行 setup 命令后停止)
05发送前代理变量清理纪律(腾讯端点直连)
06失败可诊断:Webhook key 无效等错误以 WeCom errcode 原文回报
07多行消息支持(三引号或文件承载)
08与配套 skill 的分工声明:结构化/模板化消息明确转交 setup-notifications-via-wecom

3外部依赖

类型依赖
networkWeCom 群机器人 webhook(腾讯 qyapi.weixin.qq.com)
clicurl(notify-wecom 许可的等价发送路径)
cliuv run --no-project python(配套 sender 的推荐调用方式)
cliset_recipient.py(配套 skill 提供,用于绑定/校验收件人身份与 sender 摘要)
packagePython 标准库 urllib(配套 sender 的 HTTP 层,非第三方包)

4风险提醒 风险提醒:黄色 · 留意使用

风险提醒:黄色 · 留意使用
  • 外发通道不可撤回 — 任何进入会话的文本都可能被组装成消息发到群里;门禁只认收件人身份、不审消息内容,所以它天然是 prompt-exfiltration 的候选通道。缓解是 others 档的人工确认,以及使用者对 self 通道边界的自觉(配套 skill 要求 self 仅用于「只有用户自己可见」的 webhook)。
  • 凭证以明文落在主目录 — webhook_url(内含机器人 key)存在 ~/.config/setup-notifications-via-wecom/config.json;配套 skill 建议 chmod 600,但 notify-wecom 本身不校验文件权限,也不校验该文件是否被他人可读。
  • 实现跨 skill 委托,存在漂移风险 — 发送代码在 setup-notifications-via-wecom 里,两 skill 版本各自演进;SKILL.md 自己也提示「不要因为脚本 basename 是 send_wecom.py 就信任它」——即作者已知这条委托链可被滥用/替换。
  • 门禁、代理清理、长度限制都靠 agent 遵循文档 — 本 skill 无代码强制执行任何一条约束;self 档默认免确认,若 agent 误判 scope 或用户把他人可见的群配成 self,消息会在无二次确认下发出。
  • 直连要求可能影响可用性 — 要求清空代理变量以直连腾讯端点;在网络必须走代理的环境下反而会发送失败,失败信息需人工解读 errcode。
风险提醒:黄色,知晓即可。本 skill 自身零脚本、零本地写入、无混淆内容,风险不在代码而在通道:它把一段文本读取自会话、把凭证读取自 ~/.config 下的 webhook_url,然后单向 POST 到第三方端点 qyapi.weixin.qq.com,并主动清空代理变量以直连腾讯。之所以不到橙档:端点由用户自己配置、key 只用于向该端点认证而不是被回传到别处、没有本地执行面;之所以高于绿/蓝:它确实发起对外网络请求(不可撤回的副作用),且 self 档默认免人工确认,一旦被提示注入或误用,会话内敏感文本可能直接进群。唯一的人工闸门是 others 档的确认门禁,以及『不要从 URL 反推身份』的文案约束。

5第二遍独立确认

  • [ok] 本 skill 无脚本、无隐藏资产 — glob(hidden=true、gitignore=false)显示 notify-wecom/ 下仅 SKILL.md 一个文件;无 scripts/、references/、templates/,亦无 .security-scan-passed。
  • [discrepancy] WeCom 端点归属 — 第一遍若把 qyapi.weixin.qq.com 当作本 skill 自带端点即属越档:notify-wecom/SKILL.md 全文无该域名(只有配置路径与 Tencent endpoints must be reached directly 的泛指),URL 形态与示例出自 setup-notifications-via-wecom/SKILL.md。最终 JSON 已按来源分别标注(网络依赖引配套 skill 原文)。
  • [ok] 配置路径与字段 — notify-wecom 与配套 skill 双侧一致:都指向 ~/.config/setup-notifications-via-wecom/config.json,字段为 webhook_url / recipient_scope / recipient_label;send_wecom.py 的 CONFIG_PATH 为同值绝对路径。
  • [ok] self/others 门禁表述一致 — notify-wecom『self 免授权、others 需人工确认、scope 非法即停』与 setup-*『self may send automatically; others requires human confirmation; missing identity fails fast』同义,无矛盾。
  • [ok] 交付验证声明 — 『authorization alone is not delivery proof』与配套『only the sender response proves delivery』一致,且未夸大为「保证送达」——反而明确 pending item 不是回执。
  • [ok] 代理清理的执行方 — notify-wecom 只声明要清空代理变量;实际执行在配套实现里(send_wecom.py 文档串说明会清除 proxy 相关环境变量,inline curl 路径则用 env -u 前缀)。本 skill 是纪律声明方而非执行方,JSON 已如此表述。
  • [unlocatable] 4096 字节上限可验证性 — 该数字是企微 text 消息的服务端限制,仓内既无对应校验代码也无出处引用(配套 sender 的可见部分为配置加载与重试逻辑);按文档声明收录,无法在源码取证。
  • [ok] 无混淆/无隐藏执行面 — 82 行纯文本 markdown,检索 base64/eval/exec/os.system/HTTP 端点/密钥文件读取零命中;shell 代码块仅出现在使用示例的 /notify-wecom 调用行。

6结论

  • 权限模型小而清晰:把「发给谁」当成需要显式配置的事实(self/others),缺失或非法一律停下分类,不猜、不默认放行。
  • 交付语义严格:以发送器返回的 errcode/原文为唯一送达证明,拒绝把授权或 pending item 当作回执。
  • 防伪意识罕见:明确禁止从 webhook URL 反推收件人身份、禁止因为脚本同名就信任 sender——直指「发错人」与「被偷换发送器」两类真实事故。
  • 极简可移植:单文件 82 行、零脚本零依赖,只要配置文件存在(由配套 skill 或手工创建)即可用,适合放进 cron/脚本尾部做一次性提醒。
  • 与配套 skill 分工明确,不重复造模板:one-shot 归它,结构化/可复用模板归 setup-notifications-via-wecom。
  • 适合:适合已经用 setup-notifications-via-wecom 配好 webhook、需要临时发一条纯文本提醒的场景(备份完成、构建失败、状态同步);适合被脚本或 cron 在结尾调用做一次性通知;也适合想把「发给谁」显式化并保留人工确认闸门的团队用法。
    不适合:不适合需要结构化/可复用模板的常规通知(用 setup-notifications-via-wecom);不适合富媒体(明确不支持 markdown 卡片、图片、@人);不适合未配置 webhook 的环境(会直接停止并打印 setup 命令);不适合当作通用告警系统(无模板、无治理性重试与回执链路,单条 4096 字节上限)。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-15
    方式 A · 人下载镜像包下载 notify-wecom.tar.gz
    sha256: dfbd3822134d853e…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit d5c4678cb5;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库daymade / daymade/claude-code-skills
    Stars1392
    最近推送2026-09-09
    本 skill commitd5c4678cb5
    许可MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)
    本站信息
    收录日期2026-09-06
    分类基础工具与工作流
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近