Home / All Skills / Workflow & Core Tools / notify-wecom
Workflow & Core Tools · 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.

L4 High-Privilege · Graded auth & full auditV1 Commit-PinnedExecute CommandInstall DepsNetwork AccessWrite FileDual-pass Audit
Author daymadeGitHub daymade/claude-code-skills ↗Stars 1392License MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)Commit d5c4678cb5
Control levels describe skill capabilities and suggested control measures; they do not represent quality or safety certifications, nor do they dictate usability. Usage decisions rest entirely with users and administrators. Different agent hosts apply varying constraints; do not assume hosts provide automatic protection. Third-party skill copyrights belong to their original authors. Use at your own risk.

1How It Works & Mechanism

This is a purely instruction-based skill: the directory contains only SKILL.md (82 lines) with zero scripts; the actual sending action is carried out by the agent in the shell—either by invoking the companion skill's sender or via an equivalent 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).
What is happening here: notify-wecom positions itself as a lightweight entry point for "one-off sending", outsourcing the HTTP implementation to scripts/send_wecom.py from setup-notifications-via-wecom; auditing the code behavior of this channel therefore requires inspecting the companion skill, as this directory contains no executable code to read.

Credentials are not passed via environment variables, but read from fixed paths in a shared configuration file: webhook_url (including the bot key), recipient_scope, and recipient_label are all sourced from ~/.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`.
Configuration resides in the user's home directory (rather than the repository or environment variables), and the companion skill's initialization restricts permissions using chmod 600; notify-wecom itself only reads from this file and never writes to it.

Fails fast when configuration is missing: if the config does not exist, it prints a single-line setup command and aborts immediately without attempting to guess or dynamically generate one.

notify-wecom/SKILL.md
If the config is missing, it prints the one-line setup command and stops.
Follows the repository's consistent fail-fast philosophy: it never enters a semi-usable state when configuration prerequisites are missing; onboarding is delegated to the companion skill's Quick Start.

Recipient identity is explicitly configured rather than inferred: self (the user's own channel) sends directly without authorization, whereas others (any other person or group) strictly requires manual confirmation showing the exact label and full message text.

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.
A missing or invalid scope is defined as a configuration error ("stop and classify the target; do not guess"), rather than falling back to default allow or default block—this represents the sole authorization model of this skill.

Local proxy environment variables must be cleared prior to transmission because Tencent endpoints require direct connections.

notify-wecom/SKILL.md
2. Unsets all local proxy env vars (Tencent endpoints must be reached directly).
Adheres to the same discipline as the companion skill's env -u http_proxy -u https_proxy … prefix; SKILL.md also notes that if proxy variable names fall outside the standard set, users must unset them manually beforehand.

Delivery status is determined strictly by the sender's response: authorization does not equal delivery, and a prepared pending item is not a delivery receipt.

notify-wecom/SKILL.md
5. Reports success or the exact WeCom error; authorization alone is not delivery proof.
Synonymous with the final sentence in Limitations: "A prepared pending item is not a delivery receipt; only the sender response proves delivery."—strictly distinguishing "sent" from "successfully delivered" is an evidentiary discipline of this repository.

Identity and sender anti-spoofing provisions: recipient identity (self/others) must not be inferred from the webhook URL, nor should a script be trusted solely because its name is 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`.
Addresses two failure modes: misclassifying a group bot URL as "self" to bypass the confirmation gate, and having the delivery implementation hijacked by a spoofed sender sharing the same name or path (mitigated by the companion skill's set_recipient.py recording the sender's absolute path and sha256 digest).

Message format boundaries are explicitly constrained: plain text only, under 4096 bytes per message, and no templating (templates and structured messages belong to the companion skill).

notify-wecom/SKILL.md
Plain text only. No markdown cards, images, or @mentions.
The description also limits the trigger scope to "one-shot notification that does not need a reusable template or setup workflow"; multi-line messages are handled via triple quotes or file payloads.

2Core Capabilities

01Send a WeCom group bot message via a single command (/notify-wecom <message>, frontmatter includes argument-hint: "[message]")
02Read recipient identity and credentials from shared configuration (webhook_url / recipient_scope / recipient_label)
03Dual-track authorization for self/others: direct sending for self, mandatory manual confirmation gate for others (displaying exact label and message content)
04Fail-fast behavior and self-service remediation guidance when configuration is missing (prints a one-line setup command and stops)
05Proxy environment variable cleanup discipline prior to transmission (direct connection to Tencent endpoints)
06Diagnosable failures: errors like invalid webhook keys are reported with raw WeCom errcode
07Multi-line message support (via triple quotes or file payloads)
08Clear division of responsibility: structured/templated messages are explicitly delegated to setup-notifications-via-wecom

3External Dependencies

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

4Recommended Governance & Evidence

Suggested Controls for Safe Operation
For Agent Runtime
Graded/per-use authorization, sandbox recommended
For Administrators
Approval workflow, rollback support, full audit
Evidence & Triggers (File Paths & Excerpts)
  • scripts/: Execute local scripts or commands: This skill contains zero scripts itself (verified via glob including hidden files in notify-wecom/, containing only SKILL.md); it instructs the agent to invoke the companion skill
  • scripts/ 或 SKILL.md: Declare dynamic installation of external language runtime dependencies
  • 网络端点: Declare external network access: POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=<bot key> (msgtype
  • 本地工作目录: File read/write and artifact output: This skill contains zero write instructions itself
Audit Notes: . This skill itself contains zero scripts, zero local writes, and no obfuscated content. The risk does not lie in the code but in the channel: it takes text from the session, reads credentials from webhook_url under ~/.config, and executes a one-way POST to the third-party endpoint qyapi.weixin.qq.com, proactively unsetting proxy variables to connect directly to Tencent. Why it is not ranked Orange: the endpoint is configured by the user, the key is only used for authentication against that endpoint without being exfiltrated elsewhere, and there is no local execution surface. Why it is ranked above Green/Blue: it initiates external network requests (irreversible side effects), and the self tier bypasses manual confirmation by default; prompt injection or misuse could directly leak sensitive session text into a group chat. The only human gate is the confirmation requirement for the others tier, alongside the textual guardrail of "never infer identity from the URL".

5Second-Pass Verification

  • [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 调用行。

6Verdict & Scenarios

  • Compact and unambiguous permission model: treats "who to send to" as an explicitly configured fact (self/others); missing or invalid values stop execution for reclassification without guessing or defaulting to allow.
  • Strict delivery semantics: treats the sender's returned errcode/raw response as the sole proof of delivery, refusing to treat authorization or a pending item as a delivery receipt.
  • Rare anti-spoofing awareness: explicitly forbids inferring recipient identity from the webhook URL and forbids trusting a sender merely by its script name—directly guarding against real-world incidents like misdirected messages and hijacked sender binaries.
  • Ultra-minimalist and portable: single file of 82 lines, zero scripts, zero dependencies; usable as long as the config file exists (created by the companion skill or manually), making it ideal for one-off alerts at the end of scripts or cron jobs.
  • Well-defined division of labor without reinventing templates: one-shot notifications stay here, while structured/reusable templates are handled by setup-notifications-via-wecom.
  • Best for: Ideal for scenarios where webhooks are already configured via setup-notifications-via-wecom and a quick, one-off plain text notification is needed (backup completion, build failure, status update); suitable for invocation at the end of scripts or cron jobs; also well-suited for team environments requiring explicit recipient definitions backed by manual confirmation gates.
    Not for: Not suitable for routine notifications requiring structured or reusable templates (use setup-notifications-via-wecom); not suitable for rich media (explicitly does not support markdown cards, images, or @mentions); not suitable for environments lacking webhook configuration (will halt immediately and output a setup command); not suitable as a general-purpose alerting system (lacks templating, managed retries, delivery receipt chains, and has a 4096-byte limit per message).
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload notify-wecom.tar.gz
    sha256: dfbd3822134d853e…
    Option B · Copy Guide for Agent
    install.json
    Agents automatically download and verify mirrors from this JSON guide.
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d5c4678cb5.