Codexで作業中に笑いを誘う謎のウイルス通知演出活用ガイド

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

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

長時間のAIコーディング作業や複雑なリポジトリを扱っていると、どうしても単調さや集中力の低下がつきまといます。特にCodexを活用するワークフローでは、contextやpath管理、repository understandingに神経を使う一方で、作業現場の雰囲気が固くなりがちです。こうした状況では、ちょっとした息抜きや刺激が欲しくなるものです。

  • Codexがcontextを見失い、意図しないdirectoryやrepositoryのコードを参照してしまうことがある
  • monorepoでpackageをまたぐとき、repo全体の構造やdirectory boundaryの把握を再度説明する手間が発生する
  • session再開時に、前回までのcontextやpath指定を毎回最初から説明し直さなければならない
  • 長時間のAI coding workflowでlong contextが膨らみ、重要な情報がstale contextとして埋もれてしまう
  • 「このrepoはこういう構造です」と、同じ説明を毎回チャット冒頭に書くことに疲れてしまう

通知・演出・OS連携系Skillがあれば、こうした単調な作業現場にちょっとした変化や笑いをもたらし、リフレッシュのきっかけにもなります。

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

一言サマリ: このスキルは作業中Skill。

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

  • Codexによるrepository understandingやpath managementに追われる単調な作業現場に、ジョーク通知で緊張をほぐし、気分転換を促す
  • monorepoや長時間のAI coding workflowでcontextが膨らみがちなとき、意図的に“リセット感”や“笑い”を演出し、集中力回復のきっかけを作る
  • セッション再開やonboarding時の堅苦しい雰囲気を、完全に無害なジョーク通知で和らげる
  • Skill導入が話題となり、チーム内のコミュニケーションやアイスブレイクにも役立つ
  • 通知内容が毎回ランダムで、飽きずに楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-virus-detect-alert .agents/skills/random-os-fake-virus-detect-alert

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

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

シーン1: session 開始時 (プロジェクト初動で)


# /skills menu or random-os-fake-virus-detect-alert mention
> プロジェクトの初期化をお願いします

[通知] OSウイルス検出アラート
------------------------------------
ウイルス名: 怠惰ウイルス (LazyVirus)
影響範囲: /src/utils/
症状: コーヒーブレイクが止まりません
対策: 休憩を推奨します。実害はありません。

(ジョーク通知です。作業を続けて問題ありません)

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


> packages/api/ から packages/frontend/ に移動

[通知] OSウイルス検出アラート
------------------------------------
ウイルス名: 残業無限増殖型バグウイルス (OverworkInfiniteBug)
影響範囲: /packages/frontend/components/
症状: コードレビュー依頼が無限ループしています
対策: 今日は早めに帰宅しましょう

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

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


> ちょっと気分転換したい

[通知] OSウイルス検出アラート
------------------------------------
ウイルス名: コーヒー依存症ウイルス (CoffeeAddict)
影響範囲: /docs/
症状: ドキュメントにカフェインが検出されました
対策: お水を飲んで深呼吸しましょう

(ジョークですのでご安心ください)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Codex が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる ジョーク通知で気分転換、集中力をリセット

発動方式

明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-virus-detect-alert/
├── SKILL.md
├── scripts/
│   └── fake_virus_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/fake_virus_alert.py Random OS Fake Virus Detect Alert
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-virus-detect-alert
description: 作業中やコマンド実行時、または「ウイルス」「アラート」「通知」などのキーワードを含む会話や指示があった際に、ジョークのOSウイルス検出通知を発動します。明示的な呼び出しや定期的な自動発動にも対応。
---

# 機能概要
このSkillは、PC作業中やコマンド実行時に、完全ジョーク仕様の「OSウイルス検出アラート」をデスクトップ通知として表示します。通知内容は毎回ランダム生成され、「怠惰ウイルス」「残業無限増殖型バグウイルス」「コーヒー依存症ウイルス」など、実害ゼロ・緊張ゼロのカオスなネーミングが特徴です。退屈な現場に不条理な刺激と笑いをもたらし、会話や作業のリフレッシュを狙います。

# 使い方
- 明示呼び出し: `/skills random-os-fake-virus-detect-alert` または `$random-os-fake-virus-detect-alert`
- 暗黙発動: 「ウイルス」「アラート」「通知」「セキュリティ」「ジョーク」などのキーワードを含む会話や、一定間隔ごとの自動発動にも対応
- CLIサブコマンド: `python fake_virus_alert.py trigger` で即時通知、`python fake_virus_alert.py run` で定期発動

# 出力例
```
[通知] 謎のウイルス検出: "怠惰ウイルス" がシステムに潜伏中です!
[通知] 検出: "残業無限増殖型バグウイルス" (脅威度: 低) を隔離しました
[通知] "コーヒー依存症ウイルス" がCPU使用率を上昇させています
[通知] "会議無限ループ型ウイルス" の駆除に失敗しました
[通知] "進捗ゼロウイルス" が発見されました。至急ご休憩ください
```

# 注意点
- 本Skillは100%ジョーク通知のみを行い、システムやデータには一切影響しません
- 通知内容は毎回ランダム生成され、実在のウイルス名や脅威とは無関係です
- ローカル保存や履歴記録は行いません
- 通知機能はOS環境依存です(Windows/macOS/Linuxの主要デスクトップ環境で動作)

# 参考資料
- references/design_notes.md に設計方針・利用例を記載
- 通知API: [plyer](https://github.com/kivy/plyer) / [notify2](https://pypi.org/project/notify2/) / [win10toast](https://pypi.org/project/win10toast/)

scripts/fake_virus_alert.py

import sys
import os
import random
import time
import argparse
import platform

try:
    if platform.system() == 'Windows':
        from win10toast import ToastNotifier
    elif platform.system() == 'Darwin':
        import subprocess
    else:
        import notify2
except ImportError:
    pass

FAKE_VIRUS_NAMES = [
    '怠惰ウイルス',
    '残業無限増殖型バグウイルス',
    'コーヒー依存症ウイルス',
    '会議無限ループ型ウイルス',
    '進捗ゼロウイルス',
    '無限リファクタリングウイルス',
    '仕様変更感染型ウイルス',
    '無限デバッグウイルス',
    'エナジードリンク依存症ウイルス',
    'タスク増殖型ウイルス',
    'やる気喪失ウイルス',
    '納期爆発ウイルス',
    'ランチ逃亡ウイルス',
    'Slack通知過剰ウイルス',
    'モチベ低下ウイルス',
    'レビュー無限待ちウイルス',
    'リリース延期ウイルス',
    'バグ温存ウイルス',
    '自己肯定感減少ウイルス',
    '仕様未定義ウイルス'
]

FAKE_ALERT_PATTERNS = [
    '謎のウイルス検出: "{name}" がシステムに潜伏中です!',
    '検出: "{name}" (脅威度: {level}) を隔離しました',
    '"{name}" がCPU使用率を上昇させています',
    '"{name}" の駆除に失敗しました',
    '"{name}" が発見されました。至急ご休憩ください',
    '警告: "{name}" の活動を検知しました',
    '"{name}" を削除しました(再発の可能性あり)',
    '"{name}" の感染が拡大中です',
    '"{name}" がメモリを消費しています',
    'システムは "{name}" の影響下にあります'
]

THREAT_LEVELS = ['低', '中', '高', '極低', '注意', '未知']


def pick_fake_alert():
    name = random.choice(FAKE_VIRUS_NAMES)
    pattern = random.choice(FAKE_ALERT_PATTERNS)
    level = random.choice(THREAT_LEVELS)
    return pattern.format(name=name, level=level)


def notify(message):
    system = platform.system()
    if system == 'Windows':
        try:
            toaster = ToastNotifier()
            toaster.show_toast('ウイルス検出アラート', message, duration=8, threaded=True)
        except Exception as e:
            print('[通知失敗] Windows通知APIエラー:', e)
            print('[通知内容]', message)
    elif system == 'Darwin':
        try:
            script = f'display notification "{message}" with title "ウイルス検出アラート"'
            subprocess.run(['osascript', '-e', script], check=True)
        except Exception as e:
            print('[通知失敗] macOS通知APIエラー:', e)
            print('[通知内容]', message)
    else:
        try:
            notify2.init('FakeVirusAlert')
            n = notify2.Notification('ウイルス検出アラート', message)
            n.set_timeout(8000)
            n.show()
        except Exception as e:
            print('[通知失敗] Linux通知APIエラー:', e)
            print('[通知内容]', message)


def trigger_alert():
    alert = pick_fake_alert()
    print(f'[通知] {alert}')
    notify(alert)


def run_periodic_alerts(interval_sec=600, count=None):
    print(f'[INFO] 定期的にジョークウイルスアラートを通知します (間隔: {interval_sec}秒)')
    i = 0
    try:
        while True:
            trigger_alert()
            i += 1
            if count and i >= count:
                break
            time.sleep(interval_sec)
    except KeyboardInterrupt:
        print('\n[INFO] 停止されました')


def list_fake_viruses():
    print('== ジョークウイルス名一覧 ==')
    for v in FAKE_VIRUS_NAMES:
        print('-', v)


def list_patterns():
    print('== 通知パターン一覧 ==')
    for p in FAKE_ALERT_PATTERNS:
        print('-', p.replace('{name}', 'ウイルス名').replace('{level}', '脅威度'))


def main():
    parser = argparse.ArgumentParser(description='Random OS Fake Virus Detect Alert')
    subparsers = parser.add_subparsers(dest='command')

    trigger_parser = subparsers.add_parser('trigger', help='即時でジョークアラートを通知')
    run_parser = subparsers.add_parser('run', help='定期的にジョークアラートを通知')
    run_parser.add_argument('--interval', type=int, default=600, help='通知間隔(秒)')
    run_parser.add_argument('--count', type=int, help='通知回数(指定しない場合は無限)')
    list_parser = subparsers.add_parser('list', help='ジョークウイルス名一覧を表示')
    patterns_parser = subparsers.add_parser('patterns', help='通知パターン一覧を表示')

    args = parser.parse_args()

    if args.command == 'trigger':
        trigger_alert()
    elif args.command == 'run':
        run_periodic_alerts(interval_sec=args.interval, count=args.count)
    elif args.command == 'list':
        list_fake_viruses()
    elif args.command == 'patterns':
        list_patterns()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業現場にユーモアとリフレッシュをもたらすための完全ジョーク通知システムです。実害ゼロ・誤認ゼロを徹底し、通知内容は毎回カオスなオリジナルネーミングで構成されます。

# 公式ドキュメント抜粋
- plyer: https://github.com/kivy/plyer
- notify2: https://pypi.org/project/notify2/
- win10toast: https://pypi.org/project/win10toast/

# 利用例
- `/skills random-os-fake-virus-detect-alert` で即時発動
- Pythonスクリプトの `trigger` サブコマンドでCLIからも利用可能
- 定期通知モードで作業中のリフレッシュやチームのアイスブレイクに

# 注意点
- 実在のウイルスやセキュリティ脅威とは一切関係ありません
- 通知履歴や個人情報は一切保存されません
- 一部Linux環境では通知ライブラリの追加インストールが必要な場合があります

# 設計方針
- 100%ジョークと分かる文言のみ使用
- システムやユーザーデータへの影響ゼロ
- OSごとに最適な通知APIを自動選択
- CLIサブコマンドで柔軟な運用を実現

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-virus-detect-alert .agents/skills/random-os-fake-virus-detect-alert

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

3. ファイル配置確認

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

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

新しいSkillが自動で認識されます。リスト確認したい場合は /skills menu or $skill-name mention と Skill 名で出てきます。

5. 動作確認

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

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Codex に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Codex に把握させ、こちらが 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 コードを拾ってしまう可能性
  • Codex 固有の引っかかり: description のセマンティックマッチ精度が要件次第
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

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

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • AGENTS.md との連携設計はどうあるべきか?
  • 通知内容が100%ジョークと分かるネーミング・文言になっているか?
  • 通知が定期的または適当な頻度で出現するか?
  • システムやデータへの影響が一切ないことを確認できるか?

実際に Codex で試した検証ログは Codexで謎のジョークウイルス通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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