ワークフロー&基本ツール · daymade/claude-code-skills

notify-wecom

WeCom(企業WeChat)のグループボットに単発のメッセージを1通送信します。ユーザーが「/notify-wecom」、「send a quick WeCom message」、「企微通知一下」、「临时发一条企业微信」と発言した際や、再利用可能なテンプレートや初期設定ワークフローを必要としない単発の通知を行いたい場合にこのスキルを使用します。

L4 高権限 · 段階的認可と監査V1 コミット固定コマンド実行依存関係インストールネットワーク通信ファイル書き込みDual-pass Audit
Author daymadeGitHub daymade/claude-code-skills ↗Stars 1392License MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)Commit d5c4678cb5
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

これは完全な指示型スキルです。ディレクトリ内には SKILL.md(82行)のみが存在し、スクリプトは一切含まれていません。実際の送信処理はエージェントがシェル上で実行します(付随スキルの送信スクリプトを呼び出すか、同等のインライン 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 に委譲しています。そのため、この通信経路のコード挙動を監査するには付随スキルを確認する必要があり、本ディレクトリには監査対象となるコードは存在しません。

認証情報は環境変数経由ではなく、共有設定ファイルの固定パスから読み込まれます。webhook_url(ボットの key を含む)、recipient_scope、recipient_label の3つはすべて ~/.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`.
設定はユーザーのホームディレクトリ配下に配置され(リポジトリ内や環境変数ではありません)、付随スキルの初期化時に chmod 600 で権限が絞り込まれます。notify-wecom 自体はこのファイルを読み込むのみで、書き込みは行いません。

設定未存在時の即時停止(Fail-fast): 設定が存在しない場合は setup コマンドを1行出力して直ちに終了し、推測や一時的な自動生成は試みません。

notify-wecom/SKILL.md
If the config is missing, it prints the one-line setup command and stops.
本リポジトリが一貫して採用している fail-fast スタイルを踏襲しています。設定などの前提条件が満たされていない場合に中途半端な稼働状態に陥るのを防ぎ、セットアップ手順は付随スキルの 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)として扱われ、デフォルトで許可・拒否されることはありません。これが本スキルの唯一の権限モデルです。

Tencent のエンドポイントは直接接続を要求するため、送信前にローカルのプロキシ環境変数を消去する必要があります。

notify-wecom/SKILL.md
2. Unsets all local proxy env vars (Tencent endpoints must be reached directly).
付随スキルの 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`.
2つの失敗パターンに対処しています。グループボットの URL を「self」と誤認して確認ゲートを迂回してしまうこと、および同名・同パスの偽の送信スクリプトによって送信処理がすり替えられることです(付随スキルでは set_recipient.py を用いて送信スクリプトの絶対パスと sha256 ダイジェストを記録することで対抗しています)。

メッセージ形式の境界が明確に限定されています。プレーンテキストのみ、1通あたり4096バイト以内、テンプレート機能なし(テンプレートや構造化メッセージは付随スキルの担当)となっています。

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コマンド1行で企業WeChatグループボットへメッセージ送信(/notify-wecom <message>、frontmatter に argument-hint: "[message]" を含む)
02共有設定から受信者情報および認証情報を取得(webhook_url / recipient_scope / recipient_label)
03self/others の二系統認可モデル: self は直接送信、others は人間による確認ゲートを必須化(正確な label とメッセージ全文を提示)
04設定欠落時のフェイルファストとセルフ修復ガイダンス(setup コマンドを1行出力して停止)
05送信前のプロキシ環境変数クリア規律(Tencent エンドポイントへの直接接続)
06障害診断性: 無効な Webhook キーなどのエラーを WeCom の生 errcode で返却
07複数行メッセージのサポート(三重引用符またはファイル受け渡しによる)
08付随スキルとの役割分担の明示: 構造化メッセージやテンプレート化された通知は setup-notifications-via-wecom へ明確に移譲

3外部依存関係

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 层,非第三方包)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
段階的・都度認可、サンドボックス推奨
管理者向け
承認フロー、ロールバック可能、全履歴監査
判定根拠(ファイルパスと抜粋)
  • scripts/: ローカルスクリプトまたはコマンドの実行: 本スキル自体にはスクリプトが一切含まれません(notify-wecom/ ディレクトリ内を隠しファイル含め glob で再確認した結果、SKILL.md のみ)。エージェントに対して付随スキルの呼び出しを指示します
  • scripts/ 或 SKILL.md: 外部言語ランタイム依存関係の動的インストールの宣言
  • 网络端点: 外部ネットワークアクセスの宣言: POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=<bot key> (msgtype
  • 本地工作目录: ファイルの読み書きおよび成果物の出力: 本スキル自体には書き込み指示は一切ありません
監査ノート: 。本スキル自体にはスクリプト、ローカル書き込み、難読化された内容は一切なく、リスクはコードではなく通信経路に起因します。会話からテキストを、~/.config 配下の webhook_url から認証情報を読み取り、サードパーティのエンドポイントである qyapi.weixin.qq.com に対して一方的な POST リクエストを行い、Tencent と直接通信するために意図的にプロキシ変数をクリアします。オレンジ判定に至らない理由: エンドポイントはユーザー自身が設定したものであり、キーはそのエンドポイントへの認証にのみ使用され他所へ持ち出されることがなく、ローカルの実行面も持たないためです。グリーン/ブルー判定を上回る理由: 外部ネットワークリクエスト(取り消し不能な副作用)を実際に発行し、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行、スクリプトおよび依存関係ゼロ。設定ファイル(付随スキルまたは手動で作成)さえあれば即座に利用でき、cron やスクリプト末尾の単発通知に適しています。
  • 付随スキルとの明確な分業体制: テンプレートの再実装を避け、単発通知は本スキル、構造化・再利用可能なテンプレートは setup-notifications-via-wecom が担当します。
  • 最適な用途: setup-notifications-via-wecom で既に webhook の設定が完了しており、一時的なプレーンテキスト通知を送りたいユースケース(バックアップ完了、ビルド失敗、ステータス同期など)に最適です。また、スクリプトや cron の末尾で単発通知を呼び出したい場合や、「誰に送るか」を明示化して人間の確認ゲートを残したいチーム運用に適しています。
    不向きな用途: 構造化された通知や再利用可能なテンプレートが必要な定常通知(setup-notifications-via-wecom を推奨)、リッチメディア(Markdown カード、画像、@メンションには非対応)、webhook 未設定の環境(即時停止して setup コマンドを出力)、汎用アラートシステムとしての利用(テンプレート機能、体系的なリトライ機構、受領確認チェーンがなく、1通あたり4096バイトの上限あり)には適していません。
    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
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d5c4678cb5.