Claude Codeで謎のOS通知演出を活用する仕組みと効果解説

  • URLをコピーしました!
目次

Claude Code ユーザーが日常でぶつかる悩み

Claude Code を日常的に使っていると、リポジトリやディレクトリの context 管理、path 指定の煩雑さ、長時間作業による workflow のマンネリ化など、さまざまな「あるある」に直面します。とくに通知や演出、OS連携の観点では、作業の緊張感が途切れたり、単調な流れに飽きてしまう瞬間も多いものです。集中しているときほど、突発的な出来事や遊び心のある演出が欲しくなることも。

  • Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
  • monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

さらに、同じ作業の繰り返しや、静的なやりとりが続くことで、AI coding workflow 全体が単調になりがちです。そんな時「何か突拍子もない変化が欲しい」と思ったことはないでしょうか。

この Skill が一言でいうと何を解決するか

一言サマリ: このスキルは、突然“謎のOS偽スクリーンショット通知”を爆発的に発生させて、マンネリ化したClaude Codeの作業現場にカオスと笑いをもたらすSkill。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • AI coding workflow の単調さを打破し、現場に突発的な演出や緊張感を加える
  • 作業中に「何が起きた!?」と一瞬戸惑うことで、長時間作業の集中切れやマンネリをリセットできる
  • 通知内容が毎回ランダムなので、繰り返し使っても飽きずに楽しめる
  • 実際には何も保存されないので、セキュリティやプライバシー面でも安心
  • onboarding や新規メンバーへのジョーク演出としても活用できる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/claude-code/random-os-fake-screenshot-alert .claude/skills/random-os-fake-screenshot-alert

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

シーン1: session 開始時 (CLAUDE.md と組み合わせて)


# /random-os-fake-screenshot-alert

[OS通知] スクリーンショット保存済み:バグ発生の瞬間
保存先: /Users/you/Desktop/bug_screenshot_20240612.png

(実際には何も保存されていません)

Claude Code: セッション初動で謎の通知が炸裂。緊張感が一気に走る。

シーン2: monorepo / package 跨ぎ作業時


> パッケージAからパッケージBに移動

[OS通知] 証拠画像を保存しました
保存先: /workspace/packages/B/screenshots/evidence_20240612.png

(実際には何も保存されていません)

Claude Code: monorepo 構造をまたぐ瞬間に、意味不明な証拠画像通知が現れる。

シーン3: お遊び的な使い方


> 今日は集中して作業するぞ!

[OS通知] あなたの集中顔を記録しました
保存先: /tmp/focus_face_20240612.png

(実際には何も保存されていません)

Claude Code: 何の脈絡もなく謎演出。場が和む or 混沌。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し 突然の偽スクショ通知で空気がリセット。集中力もリフレッシュ。
monorepo 移動 違う package のコードを参照しがち package 跨ぎで謎通知が発動、場の雰囲気が一変
長時間 workflow long context で重要箇所が薄まる 唐突な通知で workflow にアクセント。作業のリズムが変わる

発動方式

明示呼び出し (/random-os-fake-screenshot-alert) と暗黙発動 (「スクリーンショット」「証拠画像」「保存通知」などのワードにマッチ) の両方に対応。

Skill の中身を全部見せる

.claude/skills/random-os-fake-screenshot-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.claude/skills/random-os-fake-screenshot-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_screenshot_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_screenshot_alert.py 謎のOS偽スクリーンショット保存通知を表示するジョークSkill
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-screenshot-alert
description: このSkillは、Claude Codeでコマンド実行時や作業の節目(例: ビルド、テスト、デバッグ開始/終了)などのキーワード検出時、または明示的な /random-os-fake-screenshot-alert 呼び出し時に発動します。通知内容は毎回ランダムで、実際には何も保存されません。
---

# 機能概要
このSkillは、作業中やコマンド実行時に「謎のOS偽スクリーンショット保存通知」をデスクトップに表示します。通知内容は毎回ランダムで「スクリーンショット保存済み:バグ発生の瞬間」「証拠画像を保存しました」「あなたの集中顔を記録しました」など、意味不明かつ混沌としたメッセージが飛び出します。実際には何も保存されず、現場の緊張感やマンネリを一撃粉砕するジョーク枠Skillです。

# 使い方
- 明示呼び出し: `/random-os-fake-screenshot-alert`
- 暗黙発動: `ビルド開始`, `デバッグ`, `run`, `test`, `compile`, `実行`, `エラー`, `バグ`, `証拠`, `保存`, `スクリーンショット` などのキーワードを含むコマンドや会話時に自動発動します。

# 出力例
```terminal
[通知] スクリーンショット保存済み:バグ発生の瞬間
[通知] 証拠画像を保存しました
[通知] あなたの集中顔を記録しました
[通知] 画面全体の謎画像を保存しました
[通知] 何もしていませんが保存しました
```

# 注意点
- 実際には何も保存されません(ファイル出力・画像生成なし)
- 通知内容は毎回ランダムです
- 頻度やタイミングは迷惑にならないよう調整されています
- ローカルの通知API(notify-send, win10toast等)を利用しますが、環境によっては表示されない場合があります

# 参考資料
- [references/design_notes.md](references/design_notes.md)
- [Python公式: notifications](https://docs.python.org/ja/3/library/subprocess.html)
- [notify-send (Linux)](https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html)
- [win10toast (Windows)](https://pypi.org/project/win10toast/)

scripts/random_os_fake_screenshot_alert.py

import sys
import argparse
import random
import platform
import subprocess
import threading
import time
from typing import List

# 通知メッセージ候補
MESSAGES = [
    "スクリーンショット保存済み:バグ発生の瞬間",
    "証拠画像を保存しました",
    "あなたの集中顔を記録しました",
    "画面全体の謎画像を保存しました",
    "何もしていませんが保存しました",
    "OSが勝手に保存しました",
    "保存フォルダが謎の画像でいっぱいです",
    "保存済み:誰も見ていない瞬間",
    "保存済み:この会話の証拠",
    "保存済み:集中力のピーク"
]

# 発動トリガーワード
TRIGGER_KEYWORDS = [
    "build", "compile", "run", "test", "debug", "error", "save", "screenshot",
    "証拠", "保存", "スクリーンショット", "バグ", "実行", "ビルド", "デバッグ"
]

# OSごとの通知関数
def send_notification(message: str):
    system = platform.system()
    try:
        if system == "Linux":
            subprocess.run(["notify-send", message], check=True)
        elif system == "Darwin":
            script = f'display notification "{message}" with title "通知"'
            subprocess.run(["osascript", "-e", script], check=True)
        elif system == "Windows":
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast("通知", message, duration=4, threaded=True)
            except ImportError:
                print("[警告] win10toastがインストールされていません。pip install win10toast で導入してください。")
                print(f"[通知] {message}")
        else:
            print(f"[通知] {message}")
    except Exception as e:
        print(f"[通知] {message} (通知API失敗: {e})")

# メッセージをランダム選択して通知
def random_alert():
    message = random.choice(MESSAGES)
    send_notification(message)

# コマンドライン引数解析
def parse_args():
    parser = argparse.ArgumentParser(description="謎のOS偽スクリーンショット保存通知を表示するジョークSkill")
    subparsers = parser.add_subparsers(dest="command", required=True)

    parser_alert = subparsers.add_parser("alert", help="ランダムな偽通知を即座に表示")
    parser_alert.add_argument("-n", "--num", type=int, default=1, help="通知回数 (デフォルト: 1)")
    parser_alert.add_argument("-i", "--interval", type=float, default=2.0, help="通知間隔(秒)")

    parser_monitor = subparsers.add_parser("monitor", help="標準入力を監視し、キーワード検出時に通知")
    parser_monitor.add_argument("-f", "--frequency", type=float, default=1.0, help="監視間隔(秒)")

    return parser.parse_args()

# 標準入力監視モード
def monitor_stdin(frequency: float):
    print("[INFO] 標準入力を監視します。Ctrl+Cで終了")
    try:
        while True:
            line = sys.stdin.readline()
            if not line:
                time.sleep(frequency)
                continue
            for kw in TRIGGER_KEYWORDS:
                if kw.lower() in line.lower():
                    random_alert()
                    break
    except KeyboardInterrupt:
        print("[INFO] 監視を終了します。")

# メイン関数
def main():
    args = parse_args()
    if args.command == "alert":
        for i in range(args.num):
            random_alert()
            if i < args.num - 1:
                time.sleep(args.interval)
    elif args.command == "monitor":
        monitor_stdin(args.frequency)
    else:
        print("[ERROR] 不明なコマンドです。")

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、現場の緊張感やマンネリを打破するためのジョーク通知を目的に設計されています。OSのネイティブ通知APIを利用し、実際には何も保存しない点が特徴です。

# 公式ドキュメント抜粋
- Linux: notify-send (freedesktop.org)
- macOS: osascript (AppleScript)
- Windows: win10toast (PyPI)

# 利用例
- ビルドやテストの自動化スクリプトに組み込む
- チームの朝会やペアプロ時のアイスブレイク
- コマンドライン作業の合間に

# 注意点
- 通知APIはOSごとに挙動が異なります。Linux/macOSでは標準搭載ですが、Windowsはwin10toastのインストールが必要です。
- 実際のファイル保存や画像生成は一切行いません。

# 設計方針
- シンプルな構成で、導入・削除が容易
- ユーモアと混沌を重視しつつ、迷惑にならない頻度設計
- コマンドライン/標準入力監視の両対応

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Claude Code がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/claude-code/random-os-fake-screenshot-alert .claude/skills/random-os-fake-screenshot-alert

.claude/skills/random-os-fake-screenshot-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/random-os-fake-screenshot-alert
# SKILL.md, scripts/, references/, README.md があればOK

4. Claude Code を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-screenshot-alert と Skill 名で出てきます。

5. 動作確認

/random-os-fake-screenshot-alert で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Claude Code に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Claude Code に把握させ、こちらが path を全部指定する手間を省きたい
  • session 再開時: long context が切れた後でも、必要な path と directory 構造だけ素早く戻したい
  • package 跨ぎ作業時: directory boundary を Skill 側で管理して、irrelevant な path 混入を防ぎたい
  • long-running workflow 前: long context で重要箇所が薄まる前に snapshot を取りたい

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • stale context 問題: 長時間 workflow で Skill 出力が古くなり、現状と乖離する可能性
  • directory 増えすぎ問題: 大規模 repo で全 directory を網羅すると出力が肥大化して context window を圧迫
  • monorepo 肥大化: packages が多い構成では出力が雑になり、結局 path 指定し直しになる懸念
  • irrelevant path 混入: node_modules / build 成果物 / generated コードを拾ってしまう可能性
  • Claude Code 固有の引っかかり: paths フロントマターでの絞り込みを使わないと意図しないタイミングで発動する
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 実際に何も保存されないこと、および通知内容が毎回変わることを確認できるか?
  • 通知の頻度やタイミングが workflow を妨げない範囲か?

実際に Claude Code で試した検証ログは Claude Codeで謎の偽スクショ通知を炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次