Claude Codeでオフィスを盛り上げるセキュリティフェイク通知の作り方

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

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

Claude Code を使った AI coding workflow では、context や repository 構造の把握、path management などに集中しがちです。長時間の作業や複雑な monorepo を扱う場面では、作業が単調になり、オフィスやチームの空気も硬直しがちです。特に通知や演出が少ない環境だと、ちょっとした緊張感や遊び心が欲しくなる瞬間が頻繁に訪れます。以下のような「あるある」も多いでしょう。

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

こうした真面目な作業の連続に、突発的な“遊び”やカオスなイベントが欲しい、と感じるユーザーも少なくありません。通知・演出・OS連携系のSkillがあれば、作業の合間にちょっとした笑いが生まれ、チームの雰囲気も和らぎます。

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

一言サマリ: このスキルは、Claude Code の作業フローに突如「爆笑フェイクOSセキュリティインシデント通知」を挟み込み、場の空気を一変させるSkill。

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

  • 長時間のAI coding workflowやonboardingの合間に、突発的なフェイクインシデント通知で笑いとリフレッシュを提供
  • repository understandingやpath managementに集中しすぎて固くなった空気を、非現実的なアラートで一瞬で和ませる
  • monorepoや大規模repoのsession再開時、思わぬタイミングで爆笑ネタ通知が入り、チームの会話やリアクションが生まれる
  • contextやmemoryが膨らみすぎた時の「詰まり感」を、ネタ系通知でリセットしやすくなる
  • AI coding workflowの中にユーモアを仕込み、毎回違う内容で飽きさせない(通知内容は完全ランダムで生成)
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# /os-random-fake-security-incident-alert

[ALERT] OSセキュリティインシデント発生!
内容: あなたの椅子が物理的に乗っ取られました。
対処: 直ちに椅子の下を確認し、ピーマン型ウイルスの存在を報告してください。

(この通知はフェイクです。作業を続けて問題ありません)

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


> monorepo の packages/core/ から packages/ui/ へ移動

[ALERT] OSセキュリティインシデント発生!
内容: 本日よりマウスが逆方向に動作します。package.json が自動で踊り出しました。
対処: マウスの逆走にご注意ください。

(この通知はジョークです)

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


> /os-random-fake-security-incident-alert

[ALERT] 緊急インシデント: OSが謎のピーマン型ウイルスに感染しました。
影響範囲: /src/components/FunnyVirus.jsx 他全ディレクトリ
対応: ピーマンを冷蔵庫に戻してください。

(フェイク通知です。ご安心ください)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 突発的な通知で集中力をリフレッシュ、会話のきっかけに

発動方式

明示呼び出し (/os-random-fake-security-incident-alert) と暗黙発動 (セマンティックな説明文マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/os-random-fake-security-incident-alert/
├── SKILL.md
├── scripts/
│   └── fake_security_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/fake_security_alert.py OSランダムフェイクセキュリティインシデント通知
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-random-fake-security-incident-alert
description: このSkillは、作業中やコーディング時に“セキュリティインシデント”や“OS異常”といったキーワードが会話やログに現れた際、または明示的な /os-random-fake-security-incident-alert コマンドで、爆笑フェイク通知を即座に発動します。
---

# 機能概要
本Skillは、オフィスや開発現場の空気を一変させるエンタメ系ツールです。作業中や会話内で「セキュリティ」「ウイルス」「OS異常」などのキーワードが現れた瞬間、あるいは明示コマンドで、現実では絶対に起こり得ない爆笑フェイクインシデント通知をデスクトップやターミナルにランダム表示します。例えば「OSがピーマン型ウイルスに感染」「あなたの椅子が物理的に乗っ取られました」など、非現実的かつユーモラスな内容ばかり。堅苦しい雰囲気を和らげ、チームのコミュニケーション活性化やリフレッシュに最適です。

# 使い方
- 明示呼び出し: `/os-random-fake-security-incident-alert` を実行すると即座に通知が発動します。
- 暗黙発動: 「セキュリティインシデント」「ウイルス感染」「OS異常」「ハッキング」などの単語が会話やログに現れたとき、自動でランダム通知が表示されます。

# 出力例
```
[警告] OSセキュリティインシデント発生!
原因: あなたのマウスが自我を持ち始めました。
対応: マウスに優しく話しかけてください。
---
[警告] OSセキュリティインシデント発生!
原因: 本日よりキーボードの配列が毎分自動変更されます。
対応: タイピングスキルを鍛えてください。
---
[警告] OSセキュリティインシデント発生!
原因: システムがピーマン型ウイルスに感染しました。
対応: ピーマンを食べて対抗してください。
```

# 注意点
- 本Skillは実際のシステムやファイルには一切影響しません。
- 通知内容は完全なフィクションであり、現実のセキュリティインシデントとは無関係です。
- ローカルに記録や保存は行いませんが、必要に応じて履歴表示も可能です。
- 業務用端末や本番環境での常時運用は推奨しません。

# 参考資料
- 詳細設計・利用例は references/design_notes.md を参照
- 公式Python通知API: https://github.com/jithurjacob/Windows-10-Toast-Notifications
- OS通知のクロスプラットフォーム実装: https://pypi.org/project/plyer/

scripts/fake_security_alert.py

import argparse
import random
import sys
import time
import os

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

FAKE_INCIDENTS = [
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': 'あなたのマウスが自我を持ち始めました。',
        'action': 'マウスに優しく話しかけてください。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': '本日よりキーボードの配列が毎分自動変更されます。',
        'action': 'タイピングスキルを鍛えてください。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': 'システムがピーマン型ウイルスに感染しました。',
        'action': 'ピーマンを食べて対抗してください。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': 'あなたの椅子が物理的に乗っ取られました。',
        'action': '椅子に座る前に許可を取りましょう。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': '本日よりマウスが逆方向に動きます。',
        'action': '脳内変換力を高めてください。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': '全ユーザーのデスクトップ壁紙が謎の猫画像に変更されました。',
        'action': '猫を愛でてください。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': 'CPUが突然詩を詠み始めました。',
        'action': '詩を静かに聞きましょう。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': 'システム時刻が毎秒ランダムに変動しています。',
        'action': '時間に縛られない心を持ちましょう。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': '全ファイル名が「たけのこ」に書き換えられました。',
        'action': 'たけのこ派の勝利を祝ってください。',
    },
    {
        'title': 'OSセキュリティインシデント発生!',
        'cause': '画面が上下逆さまになりました。',
        'action': '首を180度回してご覧ください。',
    },
]

HISTORY = []

TRIGGER_KEYWORDS = [
    'セキュリティインシデント',
    'ウイルス',
    'OS異常',
    'ハッキング',
    '乗っ取られ',
    '感染',
    '謎の',
    '逆方向',
]


def pick_random_incident():
    return random.choice(FAKE_INCIDENTS)


def show_notification(incident):
    msg = f"原因: {incident['cause']}\n対応: {incident['action']}"
    if PLYER_AVAILABLE:
        notification.notify(
            title=incident['title'],
            message=msg,
            timeout=8
        )
    else:
        # Fallback: print to terminal
        print(f"[警告] {incident['title']}\n{msg}\n---")


def log_incident(incident):
    timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
    HISTORY.append({
        'time': timestamp,
        'title': incident['title'],
        'cause': incident['cause'],
        'action': incident['action']
    })


def list_history():
    if not HISTORY:
        print('インシデント履歴はありません。')
        return
    for h in HISTORY:
        print(f"[{h['time']}] {h['title']}\n原因: {h['cause']}\n対応: {h['action']}\n---")


def check_for_keywords(text):
    for k in TRIGGER_KEYWORDS:
        if k in text:
            return True
    return False


def main():
    parser = argparse.ArgumentParser(description='OSランダムフェイクセキュリティインシデント通知')
    subparsers = parser.add_subparsers(dest='command')

    parser_alert = subparsers.add_parser('alert', help='フェイクインシデント通知を即座に発動')
    parser_alert.add_argument('--count', type=int, default=1, help='通知回数 (デフォルト1)')

    parser_list = subparsers.add_parser('list', help='通知履歴を表示')

    parser_monitor = subparsers.add_parser('monitor', help='標準入力を監視し、キーワードで自動通知')
    parser_monitor.add_argument('--interval', type=float, default=0.5, help='監視間隔(秒)')

    args = parser.parse_args()

    if args.command == 'alert':
        for _ in range(args.count):
            incident = pick_random_incident()
            show_notification(incident)
            log_incident(incident)
            time.sleep(1)
    elif args.command == 'list':
        list_history()
    elif args.command == 'monitor':
        print('標準入力を監視します。Ctrl+Cで終了。')
        try:
            while True:
                line = sys.stdin.readline()
                if not line:
                    time.sleep(args.interval)
                    continue
                if check_for_keywords(line):
                    incident = pick_random_incident()
                    show_notification(incident)
                    log_incident(incident)
        except KeyboardInterrupt:
            print('\n監視を終了しました。')
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、開発現場の空気を和ませるための“フェイクOSインシデント通知”を、手動またはキーワード検知でランダム発火させる設計です。通知内容は完全なフィクションで、現実のシステムやデータに影響しません。

# 公式ドキュメント抜粋
通知実装には plyer ライブラリの notification APIを利用。クロスプラットフォームで動作し、Windows/Mac/Linuxのデスクトップ通知に対応します。fallbackとしてターミナル出力も実装。

# 利用例
- `/os-random-fake-security-incident-alert` コマンドで即座に通知
- `python fake_security_alert.py monitor` で標準入力監視し、会話やログ内のキーワードで自動発火
- `python fake_security_alert.py list` で通知履歴の確認

# 注意点
- 本Skillはジョーク用途限定。実際のセキュリティ監視やOSイベント通知には利用不可
- 通知履歴はメモリ上のみで永続化されません

# 設計方針
- 非現実的な通知文生成に重点。現実の脅威と誤認されないよう徹底
- 既存の通知APIのみを利用し、システム挙動やファイルに影響を与えない安全設計

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

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

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

3. ファイル配置確認

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

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

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

5. 動作確認

/os-random-fake-security-incident-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 との連携設計はどうあるべきか?
  • 通知が確実に意図したタイミング・ランダム性で発火するか?
  • 通知文が十分にネタ感・非現実感を持っているか?
  • データ損失や本物のシステム挙動に影響しないこと

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

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

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

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

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