DEEP RESEARCH / 開発運用・自動化

長時間バックグラウンドタスク(画像生成 / 学習 / ビルド / デプロイ)の完了を、AIエージェント作業中でもユーザーへ確実に届ける実装パターン総覧

📅 発行 2026-06-14 🎯 目標 100点 🧭 重視軸 技術 💻 前提 Windows / PowerShell + Claude Code 🔁 既存DR重複 なし(新規)
技術 25/25 運用設計 24/25 網羅性 24/25 実装可能性 25/25 自己採点 98/100
このDRの結論を一言で: 完了通知は「3層で冗長化」せよ。①Claude Code hooksStop/SubagentStop/Notification)でエージェントの区切りを捕捉、②ポーリング型番人スクリプトでhooksが拾えない真の重い処理(学習・量産)の完了を捕捉、③通知チャネル(Toast / Webhook / モバイルpush)へ確実に着地。AIエージェント単体は「終わるまで黙って待ち放置」しがちなので、外部の番人とフックを必ず併設するのが2026年の正解。

1結論:3層冗長化アーキテクチャ

長時間タスクの完了通知が「届かない/放置される」根本原因は2つに集約される。

これを潰すのが3層冗長化。どれか1つではなく重ねるのが100点設計。

役割主な実装拾える完了
層1
hooks
CC
エージェントの「区切り」を捕捉し音/通知/外部送信を発火settings.json の Stop/SubagentStop/Notification [1]CCのターン終了・サブエージェント終了・入力待ち
層2
番人
PS
真の重い処理の完了をポーリングで検知→通知→次工程起動ファイル/ロック/プロセス監視スクリプト(本DR §4-3)学習完了・量産完了・ビルド成果物出現
層3
チャネル
NETMOB
「届け先」。デスク・スマホ・チャットへ着地BurntToast Toast / Discord・Slack webhook / ntfy push [4][5][8](上2層から呼ばれる出力先)
最小構成(今日すぐ): 層1で Stop フックに powershell New-BurntToastNotification を1行登録するだけで「CCが返答を終えたらToast」が動く。これに層2の番人を足せば「学習が裏で終わったらスマホにpush」まで到達。
🤑 マネタイザー通知が無い=放置=GPU時間とAPIトークンの垂れ流し。番人1本で「終わったのに4時間気づかず空回り」(実際にあった56s/it事案)が消える。これは直接コスト削減です。
💼 コーチまず層1のToast 1行から。完璧な3層を一気に組もうとして着手が遅れるのが一番もったいない。今日5分で Stop フックを入れましょう。
💕 メンター「終わったか何度も見に行く」あの細切れの不安、もう手放していい。番人とフックに任せて、トフィーさんは別の創作に集中してください。

2市場規模・背景(なぜ今この課題か)

「完了通知」は単機能だが、2025〜2026にかけて環境が3つ動いたため再設計が必要になっている。

変化1:AIエージェント常用化で「裏で長時間」が日常に

Claude Code が run_in_background / BashOutput / KillShell / /bashes を備え、デプロイ・学習・量産をエージェント任せで裏回しするのが普通になった [10]。一方で「完了をメインエージェントへ通知する」機能は2026年6月時点でも未実装の要望段階(Issue #6854 / #9905 等 [10])。=ギャップを各自が埋める必要がある=本DRの存在意義

変化2:LINE Notify が 2025-03-31 終了

個人開発者の定番だった LINE Notify はサービス終了済み[6][7]。移行先は LINE Messaging API(無料は月200通・送信先のuserId明示が必要)か、Discord / Slack / ntfy への乗り換えが主流に [6]古い記事のLINE Notifyコードをコピペすると今は動かないので注意。

変化3:Windows のToastが PowerShell で安定運用可能に

BurntToast モジュール(PSGallery)が枯れて、Win10/11/Server で New-BurntToastNotification 一発で音・アイコン・進捗バー・ボタン付きToastを出せる [4][12]。「ジョブ完了の合図」が最頻ユースケースと明言されている [4]

市場規模の正直な扱い: 「完了通知」は独立した売れる市場ではなくDevOps/個人開発の運用コスト削減レイヤ。金額換算は本人の運用実機(GPU時間・APIトークン)でのみ測れる。ここでは外部の市場金額を捏造しない。効果は §5 のコスト試算で「節約できる無駄時間」として定量化する。

3通知手段 TOP10 比較表

本テーマは「競合企業」ではなく通知手段が比較対象。Windows + Claude Code 前提で実用順に並べる。

#手段種別導入難度スマホ届く無料所感(推奨度)
1BurntToast(PSデスクトップToast)PS×★★★ Win在席時の本命。音+アイコン+ボタン
2Claude Code hooks(Stop等)CC△(連携先次第)★★★ エージェント区切り捕捉の基盤
3ntfy.sh(push)MOB★★★ curl一発でスマホ。APIキー不要 [8]
4Discord webhookNET◎(アプリ)★★★ 履歴/embed/複数端末。最も手軽な恒久ログ [5]
5Slack incoming webhookNET◎(アプリ)★★ チーム共有向き。Block Kitで装飾 [9]
6ターミナルベル\a / OSC 777)CC最低×★★ 0依存。端末がフォーカス外でも鳴る
7msg.exe(Windows標準)PS最低×★ モジュール不要だが古い見た目・消えやすい
8LINE Messaging APIMOB△(月200通)★★ Notify後継。userId取得が手間 [6]
9node-notifier(クロスPF)PS×★★ Node環境ありなら3OS共通コード [11]
10code-notify(CC/Codex/Gemini用OSS)CC×★★ hooks自動設定の既製品。雛形参照に [3]
トフィーさん向け推奨3点セット: ①在席Toast = BurntToast、②外出スマホ = ntfy または Discord、③エージェント区切り = hooks Stop。この3つで在席/外出/エージェント完了の全パターンを覆える。

4技術スタック詳細+実装コード

4-1. Claude Code hooks(settings.json)CC

登録先は ~/.claude/settings.json(全プロジェクト共通)か .claude/settings.json(プロジェクト固有)[1]。トフィーさん環境では C:\Users\todak\.claude\settings.json

イベント早見(本DRで使う3つ)[1][2]

イベント発火タイミングmatcherstdin主フィールド
StopCCがメインの返答を終えた時非対応(常時)session_id / cwd / transcript_path
SubagentStopサブエージェント(Task)終了時agent_type(Explore等)agent_id / agent_type
Notification権限要求・アイドル等permission_prompt / idle_prompt 他notification_type / message

① 最小:CCが返答終了したらToast+ベル(Windows)

C:\Users\todak\.claude\settings.json(抜粋)
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "powershell -NoProfile -Command \"New-BurntToastNotification -Text 'Claude Code', 'タスク完了・確認してください' -Sound 'Notification.Default'\"",
            "timeout": 15
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "permission_prompt|idle_prompt",
        "hooks": [
          {
            "type": "command",
            "command": "powershell -NoProfile -Command \"New-BurntToastNotification -Text 'Claude Code', '入力/許可待ちです'\"",
            "timeout": 10
          }
        ]
      }
    ]
  }
}

② 実用:stdin JSONを読み、内容入りToast+Discord送信(PSスクリプト分離)

commandを長くするとJSONエスケープ地獄になるので、スクリプトに切り出すのが正解。

C:\Users\todak\.claude\hooks\on_stop.ps1
# Claude Code Stop フック本体(stdinでhook JSONを受ける)
$ErrorActionPreference = 'SilentlyContinue'
$raw  = [Console]::In.ReadToEnd()
$hook = $raw | ConvertFrom-Json
$cwd  = $hook.cwd
$msg  = "CC完了: $([IO.Path]::GetFileName($cwd))  $(Get-Date -f 'HH:mm:ss')"

# --- 層3-a: デスクトップToast ---
Import-Module BurntToast -ErrorAction SilentlyContinue
New-BurntToastNotification -Text 'Claude Code', $msg -Sound 'Notification.Default'

# --- 層3-b: Discord webhook(外出時スマホへ) ---
$wh = $env:DISCORD_WEBHOOK   # 環境変数に置く(URLハードコード禁止)
if ($wh) {
  $payload = @{ content = ":white_check_mark: $msg" } | ConvertTo-Json -Compress
  Invoke-RestMethod -Uri $wh -Method Post -ContentType 'application/json' -Body $payload
}
exit 0
settings.json 側
"Stop": [
  { "hooks": [ {
      "type": "command",
      "command": "powershell -NoProfile -ExecutionPolicy Bypass -File C:\\Users\\todak\\.claude\\hooks\\on_stop.ps1",
      "timeout": 20
  } ] }
]

③ ターミナルベル(0依存・最速)

どうしてもモジュールを入れたくない時。Notification フックで端末通知シーケンスを返すと、対応端末がOSトーストを出す [1]

# PowerShellでベルを鳴らすだけのフック command
powershell -NoProfile -Command "[Console]::Beep(880,200)"

4-2. 通知チャネル別 実装コード NETMOB

BurntToast:音・アイコン・進捗バー・ボタン [4][12]

# 初回のみ
Install-Module BurntToast -Scope CurrentUser -Force

# 基本
New-BurntToastNotification -Text '学習完了', '1500 step / 2.2s-it' -Sound 'Notification.Default'

# アイコン付き(成果物サムネ等)
New-BurntToastNotification -Text 'R18量産完了', '96枚 / output' -AppLogo 'D:\thumb.png'

# 進捗バー(番人から繰り返し更新)
$pb = New-BTProgressBar -Status '生成中' -Value 0.6
New-BurntToastNotification -Text '画像量産' -ProgressBar $pb

msg.exe(標準・モジュール不要)

msg %USERNAME% "ビルド完了: 確認してください"

Discord webhook(curl / PowerShell)[5]

# bash
curl -s -H "Content-Type: application/json" -X POST \
  -d '{"content":":white_check_mark: deploy 完了 (exit 0)"}' \
  "$DISCORD_WEBHOOK"

# embed(タイトル/色/ホスト名フッタ)
curl -s -X POST -H "Content-Type: application/json" \
  --data "{\"embeds\":[{\"title\":\"学習完了\",\"description\":\"loss 0.04 / 3000 step\",\"color\":3066993,\"footer\":{\"text\":\"$(hostname)\"}}]}" \
  "$DISCORD_WEBHOOK"

Slack incoming webhook [9]

curl -X POST -H 'Content-type: application/json' \
  --data '{"text":":rocket: デプロイ完了 d632da4a"}' \
  "$SLACK_WEBHOOK_URL"

ntfy.sh(スマホpush・APIキー不要)[8]

スマホにntfyアプリを入れ、推測されにくいトピック名を購読するだけ。curlで即push。

# 最小
curl -d "学習完了 2.2s/it" ntfy.sh/todak-secret-7x9q2

# タイトル・優先度・タグ付き
curl -H "Title: R18量産完了" -H "Priority: high" -H "Tags: white_check_mark,art" \
  -d "96枚 / oudou_r18 / 確認を" \
  ntfy.sh/todak-secret-7x9q2

# PowerShellから
Invoke-RestMethod -Uri "https://ntfy.sh/todak-secret-7x9q2" -Method Post -Body "ビルド完了"
ntfy注意: トピック名は公開・推測可能なら誰でも購読できる[8]。乱数を混ぜた長い名前に。機密内容は本文に書かず「○○完了・確認を」程度に留める。確実性重視なら自前ホスト(Docker)か認証トークン(Authorization: Bearer tk_xxx)。

LINE Messaging API(Notify後継)[6]

# Notifyは終了済。後継はchannel access token + userId(or groupId)を明示
curl -X POST https://api.line.me/v2/bot/message/push \
  -H "Authorization: Bearer $LINE_CHANNEL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"to":"Uxxxxuserid","messages":[{"type":"text","text":"学習完了"}]}'
# 無料は月200通(送信人数×通数)

node-notifier(クロスPF・Node環境)[11]

const notifier = require('node-notifier');
notifier.notify({ title: 'Build', message: '完了 (exit 0)', sound: true });

4-3. ポーリング型 番人スクリプト PS(本DRの核心)

hooksは「CCの区切り」しか拾えない。裏で走る本物の重い処理(学習・量産・長ビルド)の完了は、独立した番人が監視する。設計は3要素:完了検知 → 通知発火 → 次工程自動起動

完了検知の4方式(信頼度順)

方式検知トリガ信頼度使い所
① 完了マーカーファイル処理側が最後に DONE.flag を書く◎最高自分で書けるスクリプト全般。最推奨
② 成果物の出現/枚数output に N 枚揃った画像量産・レンダ
③ プロセス消滅PIDが消えた外部exe。異常終了と区別不可
④ ログ末尾の合言葉ログに Training completeログ形式が安定している時のみ
落とし穴(実機教訓): ③プロセス消滅だけで「完了」と判定すると異常終了・ハング後kill・別プロセス誤検知を「成功」と誤報する。MEMORY記録の「orchestratorが完了を捏造」事案と同型。必ず①マーカーか②成果物で“成功”を裏取りし、終了コード/枚数を通知本文に含めて人間が一目で異常を見抜けるようにする。

番人テンプレ:マーカー検知→Toast+ntfy→次工程起動

D:\projects\fanza3_mass\scripts\_done_watcher_2026-06-14.ps1
param(
  [string]$Marker  = "D:\projects\fanza3_mass\out\DONE.flag",  # ①完了マーカー
  [string]$Label   = "R18量産",
  [int]   $Every   = 30,                                       # 秒
  [int]   $Timeout = 14400,                                    # 4h で諦め
  [string]$Next    = ""                                        # 次工程スクリプト(任意)
)
$ntfy = "https://ntfy.sh/todak-secret-7x9q2"
$start = Get-Date
Write-Host "[watcher] $Label 監視開始 marker=$Marker"

while ($true) {
  if (Test-Path $Marker) {
    $info = Get-Content $Marker -Raw    # 例: "exit=0 count=96"
    $msg  = "$Label 完了  $info  $(Get-Date -f 'HH:mm:ss')"

    Import-Module BurntToast -EA SilentlyContinue
    New-BurntToastNotification -Text "完了通知", $msg -Sound 'Notification.Default'
    try { Invoke-RestMethod -Uri $ntfy -Method Post -Headers @{Title=$Label} -Body $msg } catch {}

    # ③次工程の自動起動(チェーン)
    if ($Next -and (Test-Path $Next)) {
      Write-Host "[watcher] 次工程起動: $Next"
      Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$Next`""
    }
    break
  }
  if (((Get-Date) - $start).TotalSeconds -gt $Timeout) {
    $m = "$Label が $([int]($Timeout/60))分で未完了。ハング疑い・要確認"
    Import-Module BurntToast -EA SilentlyContinue
    New-BurntToastNotification -Text "⚠ タイムアウト", $m
    try { Invoke-RestMethod -Uri $ntfy -Method Post -Headers @{Title="TIMEOUT";Priority="urgent"} -Body $m } catch {}
    break
  }
  Start-Sleep -Seconds $Every
}

処理側(学習/量産スクリプト)は最後にこう書くだけ:

# Python なら
with open(r"D:\projects\fanza3_mass\out\DONE.flag","w",encoding="utf-8") as f:
    f.write(f"exit=0 count={len(imgs)}")
# bash なら
echo "exit=$? count=$(ls out/*.png | wc -l)" > /d/projects/fanza3_mass/out/DONE.flag
BG起動の鉄則(MEMORY準拠): 番人をバックグラウンド常駐させる時、run_in_background と末尾 & を二重に付けると実行されない。どちらか一方に。進捗は print(...,flush=True) かログファイルpollで(| tail はバッファして完了まで無音)。

4-4. AIエージェント自身の自己ウェイクアップ CC

「番人が次工程を起動」の発展形として、番人がCCを自己ウェイクアップさせ、完了を“報告”まで自走させるパターン。前述のとおりCCはBG完了を自動検知しない[10]ので、外部から起こす。

パターンA:番人がCCを非対話起動して完了報告させる

# 完了検知後、CCをheadlessで叩いて要約+次判断をさせる
claude -p "out/DONE.flag を読み、量産結果を3行で要約し、不良が無ければ次のVolをsmoke起動して。" `
  --output-format text >> D:\logs\cc_report.log 2>&1

パターンB:Stopフックの「ブロック」で自走継続させる

CCの Stop フックは終了コード2 or {"decision":"block","reason":...} を返すと停止を差し止めて会話を継続できる[1]。「未確認の成果物がある間は止めない」という自走ループに使える(暴走防止のため必ずカウンタ/上限を付ける)。

# on_stop.ps1 内(自走させたい時のみ・要ガード)
$pending = (Test-Path "D:\out\UNVERIFIED.flag")
$loops   = [int](Get-Content "D:\out\loopcount.txt" -EA SilentlyContinue)
if ($pending -and $loops -lt 3) {
  ($loops+1) | Set-Content "D:\out\loopcount.txt"
  '{"decision":"block","reason":"未検証の成果物あり。全コマ目視と4AIゲートを実行して。"}'
} else {
  Remove-Item "D:\out\loopcount.txt" -EA SilentlyContinue
}
自己ウェイクアップの最大リスク: ガード無しのStopブロックは無限自走→トークン枯渇(公式Issue #11716で背景BGプロセスが system-reminder無限ループ→token枯渇する既知バグ報告あり[10])。ループ上限・時間上限・「完了/合格」と書く前の自己目視ゲートを必ず併設(MEMORY「代表コマだけ見て納品するな」の徹底と同義)。

5コスト試算(節約効果の定量化)

導入コストはほぼゼロ(OSS/標準機能)。価値は「放置で溶ける時間」の回収で測る。

項目導入前導入後差分
学習完了の気づき遅延平均30〜240分放置(席外し)完了即push1回あたり最大4hのGPU空回り回避
量産完了→次Vol着手手動で見に行く・忘れる番人が次工程自動起動人手の確認往復ゼロ
異常終了の発見翌朝気づく等タイムアウトでurgent push無駄電力・再走遅延を即停止
導入の実コストBurntToast/ntfy/webhook 全無料¥0
本DRそのものの生成コスト: 技術コード中心のためGrok下書きを使わず、収集済み1次情報(15+ソース)+実機知見で直接執筆。Grok API課金 ¥0(grok_router呼び出しなし)。WebSearch/WebFetchのみ。

参考:MEMORY記録の「LoRA学習中にcomfy常駐で56s/it(正常の17倍)に4時間気づかず空回り」事案は、本DRの番人+タイムアウトpushがあれば早期に異常検知できた典型ケース。

6リスク・落とし穴

リスク内容対策
誤“完了”報告プロセス消滅だけで成功判定→異常終了を成功と誤報マーカー/成果物で裏取り・exit code/枚数を本文に
無限自走Stopブロックの自己ウェイクでトークン枯渇(Issue #11716)ループ上限・時間上限・自己目視ゲート必須
古いコピペLINE Notifyコードが今は動かない(2025/3終了)Messaging API / Discord / ntfy へ
秘密の露出webhook URL/トークンをコードや公開repoに直書き環境変数・keys.jsonへ。ntfyトピックは乱数長名
JSONエスケープ事故settings.jsonのcommandに長いPSを書いて壊れる.ps1へ分離・-Fileで呼ぶ
ExecutionPolicyスクリプトが実行拒否される-ExecutionPolicy Bypass をフックに付与
パイプ無音| tail で完了まで進捗が出ないflush print / ログpoll / 「[3/6]」逐次出力
BG二重化run_in_background+&で実行されないどちらか一方のみ

730日 導入プラン

Week1:層1(hooks)を最小で動かす

Week2:層3(スマホ到達)

Week3:層2(番人)

Week4:層4(自走・運用化)

8撤退ライン

9よくあるハマり所+運用チェックリスト&自動化テンプレ TOP10

運用チェックリスト(タスク投入前に流す)

  1. このタスクは何分想定か/タイムアウト値は妥当か
  2. 完了をマーカーor成果物で裏取りしているか(プロセス消滅単独はNG)
  3. 通知本文にexit code/枚数/時刻が入っているか(異常を一目で)
  4. 在席Toast・外出push の両方に届く設定か
  5. webhook URL/トークンは環境変数か(直書き禁止)
  6. BG起動で &run_in_background を二重化していないか
  7. 進捗がflush/逐次ログで見えるか(パイプ無音でないか)
  8. 自走ループに上限ガードがあるか
  9. 「完了/合格」と報告する前に自己目視するルールを通したか
  10. タイムアウト時にurgent push+処理停止まで設計されているか

自動化テンプレ TOP10(コピペ起点)

#テンプレ1行起点
1CC完了Toastsettings.json Stop に BurntToast 1行(§4-1①)
2権限待ちToastNotification matcher=permission_prompt
3stdin内容入り通知on_stop.ps1(§4-1②)
4Discord完了embedcurl embed(§4-2)
5ntfyスマホpushcurl -d "完了" ntfy.sh/乱数
6マーカー番人_done_watcher.ps1(§4-3)
7タイムアウト警報番人の Timeout 分岐(urgent push)
8次工程チェーン番人の -NextStart-Process
9自己ウェイク報告claude -p "DONE.flag要約して"
10DONE.flag書き出し処理末尾に exit/枚数を1行書く(§4-3)

10既存資産の活用(トフィーさん環境)

11関連DR一覧(D:\市場調査資料\)

DR関連性
DR_CC暴走防止_02_AIの確認前『完了』報告(ハルシネ)_2026-05-31.html直接関連。 本DR §4-3/§9 の「誤完了防止・自己目視ゲート」と表裏一体。併読推奨
DR_R18可の通知手段2026_メルマガLINE代替_2026-06-01.html通知チャネル(LINE代替)の知見が一部重なる。ただし用途はマーケ向けで本DR(開発者向け完了通知)とは別物
DR_プッシュ通知リエンゲージメント継続率完全戦略_2026.htmlpush技術の周辺。用途はユーザーリテンションで別領域
重複判定: 本テーマ「開発タスクの完了をエージェント/番人で届ける」を扱う既存DRは無し。よって新規作成が妥当(更新提案は不要)。

12脚注(全URL・実在確認済)

  1. Claude Code 公式 Hooks reference(Stop/SubagentStop/Notification の settings.json 形式・stdin JSON・decision制御):https://code.claude.com/docs/en/hooks
  2. Morph LLM|Claude Code & Agent SDK Hooks (2026) リファレンス(PreToolUse/PostToolUse/Stop/SubagentStop):https://www.morphllm.com/claude-code-hooks
  3. code-notify(CC/Codex/Gemini CLI 用クロスPF通知・hooks自動設定OSS):https://github.com/mylee04/code-notify
  4. 4sysops|Generate Windows toast notifications with PowerShell BurntToast(ジョブ完了通知が最頻ユースケース):https://4sysops.com/archives/generate-windows-toast-notifications-with-the-powershell-module-burnttoast/
  5. Discord webhook を curl/bash で送る(content・embed・色・フッタ):https://www.commandinline.com/shell-script-notifications-slack-discord/
  6. Zenn|LINE Notify API 終了に伴う Messaging API 移行(2025/3終了・push API・無料200通):https://zenn.dev/halt/articles/20241023_line_messaging
  7. LINE Developers|サポート終了ニュース(LINE Notify 終了告知):https://developers.line.biz/ja/news/tags/end-of-life/
  8. ntfy 公式 Publishing ドキュメント(PUT/POST・Title/Priority/Tags ヘッダ・トピック公開性):https://docs.ntfy.sh/publish/
  9. Slack 公式|Sending messages using incoming webhooks(curl・Block Kit):https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/
  10. anthropics/claude-code Issue #6854「BG bashセッション完了をメインエージェントへ通知してほしい」(+#9905 async Task / #11716 BGプロセスのtoken枯渇バグ):https://github.com/anthropics/claude-code/issues/6854
  11. node-notifier(Mac/Windows/Linux クロスPF通知ライブラリ):https://github.com/mikaelbr/node-notifier
  12. PDQ|Display toast notifications with PowerShell's BurntToast module(インストール・音・進捗・ボタン):https://www.pdq.com/blog/display-toast-notifications-with-powershell-burnt-toast-module/
  13. alexop.dev|Claude Code Notification Hooks(settings.json Notification matcher の実例):https://alexop.dev/posts/claude-code-notification-hooks/
  14. ClaudeWorld|Background Tasks チュートリアル(run_in_background / BashOutput 30秒ポーリング):https://claude-world.com/tutorials/s08-background-tasks/
  15. MindStudio|Claude Code Monitor Tool(ポーリング vs 割り込み駆動・token浪費の論点):https://www.mindstudio.ai/blog/claude-code-monitor-tool-stop-polling-background-processes
  16. ntfy 公式トップ(PUT/POSTでスマホ/デスクへpush・self-host可):https://ntfy.sh/
裏取りの正直な注記: コード/設定はWebFetchで取得した公式・一次寄りソースに準拠。LINE無料枠「月200通」やCC hooksの挙動は記事/公式記載ベースで、本番投入前に各自の最新公式ドキュメント・実機で再確認を推奨(規約・無料枠は変動しうる)。トフィーさんの運用実機が常に最優先。