Codexで謎のOSアップデート通知を演出して集中力と笑いを同時に引き出す方法

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

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

AI coding workflow を日常的に使うエンジニアにとって、Codex の context や repository understanding にまつわる「あるある」な困りごとは尽きません。特に monorepo 環境や複数の directory を跨ぐ大規模なプロジェクトでは、path management や memory の扱いが煩雑になりがちです。

  • Codex が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

さらに、集中して作業を始めた瞬間に謎の通知や割り込みが入ることで workflow が乱れる体験も。特に「通知・演出・OS連携」系の Skill を使った際、意図しないタイミングで唐突なイベントが起きると、思わずツッコミたくなる瞬間が生まれます。これらの悩みは日々の AI coding workflow の中で繰り返し現れるものです。

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

一言サマリ: 作業に集中し始めたその瞬間Skill。

このSkillを入れることで以下のような状態になります:

  • 集中し始めたタイミングで、完全ランダムな“謎OSアップデート通知”が現れ、AI coding workflow に遊び心とリフレッシュをもたらす
  • repository understanding や path management に追われる単調な作業の合間に、思わず笑ってしまう体験を挟める
  • monorepo や長時間 session で stale context に陥りがちな気分を、ユーモラスな通知でリセットできる
  • onboarding やペア作業時に“謎通知”で場の雰囲気を和ませ、コミュニケーションのきっかけを作れる
  • AI coding workflow の単調さを打破し、チームのモチベーション維持に一役買う
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-update-notifier .agents/skills/random-os-fake-update-notifier

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

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

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


# /skills menu or random-os-fake-update-notifier mention
> 開発を始めます

[OS Update Notification]
────────────────────────────
新しいアップデートが利用可能です:
- 「コピペ時にランダムで全角スペースが混入する」機能の追加
- バグ修正: ごく稀にCtrl+CがCtrl+Zになる現象を修正
- セキュリティ向上: "README.md"を開くたびにAIが褒めてくれる
────────────────────────────
今すぐ適用しますか? [はい/いいえ]

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


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

[OS Update Notification]
────────────────────────────
新しいアップデートが利用可能です:
- 「package.jsonに謎の"foo":trueが追加される」機能の追加
- バグ修正: "node_modules"が定期的に自己増殖する問題を修正
- パフォーマンス改善: "src/utils"の関数名が時々韻を踏むようになりました
────────────────────────────
今すぐ適用しますか? [はい/いいえ]

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


> 今日は集中して作業したい

[OS Update Notification]
────────────────────────────
新しいアップデートが利用可能です:
- 「全てのディレクトリ名がランダムでシャッフルされる」機能の追加
- バグ修正: "build/"がたまに"destroy/"になる現象を修正
- 新機能: "AIがたまに作業を褒める"モードが追加されました
────────────────────────────
今すぐ適用しますか? [はい/いいえ]

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-update-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agents/skills/random-os-fake-update-notifier/
├── SKILL.md
├── scripts/
│   └── notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-update-notifier
description: 作業やコーディングに集中し始めたタイミングや「アップデート」「通知」「OS」などのキーワード出現時に、CodexがこのSkillを発動し、架空のOSアップデート通知をデスクトップに表示します。
---

# 機能概要
random-os-fake-update-notifierは、作業に没頭し始めた瞬間や「アップデート」「通知」などの関連ワードが出現した際に、まるで本物のOSアップデート通知のような“くだらない”内容をデスクトップに表示するスキルです。通知内容は完全ランダムで、「カレンダーに猫の日を自動登録」「未確認のバグをさらに未確認化」など、明らかに嘘くさい更新情報が並びます。リモートワークや会議中、集中したい時にあえて発動させることで、場を和ませたり、ツッコミどころ満載の空気を作り出します。

# 使い方
- 明示呼び出し: `/skills random-os-fake-update-notifier` または `$random-os-fake-update-notifier` をチャットやターミナルで入力
- 暗黙発動: 「アップデート」「OS通知」「バグ修正」「新機能」などのキーワードが会話や作業ログに現れた際に自動発動
- CLIサブコマンド: `python notifier.py notify` で即座にランダム通知を表示

# 出力例
```
[OSアップデート通知]
バージョン: 13.4.9-fake
- 新機能: スタートメニューに“謎のボタン”を追加
- バグ修正: たまに現れる幽霊プロセスをさらに不可視化
- 既知の問題: アップデート後も何も変わらない場合があります
```

# 注意点
- 本Skillはジョーク用途です。実際のOSや業務システムとは一切連携しません。
- 通知内容は完全に架空であり、誤認防止のために「fake」や「ジョーク」等の文言を含みます。
- 通知履歴はローカル保存されません。

# 参考資料
- 参考: references/design_notes.md
- 公式: https://docs.python.org/3/library/subprocess.html, https://docs.python.org/3/library/random.html

scripts/notifier.py

import argparse
import random
import sys
import time
import platform
import subprocess
from datetime import datetime

FAKE_FEATURES = [
    'スタートメニューに“謎のボタン”を追加',
    'カレンダーに猫の日を自動登録',
    'バッテリー残量が減るとBGMが流れる機能',
    '壁紙が1分ごとにランダムで90年代風に変化',
    'コマンドプロンプトに「こんにちは」と返す隠し機能',
    'ウィンドウを閉じるときに「本当に閉じますか?」を10回表示',
    'デスクトップアイコンが時々踊る',
    '未使用のUSBポートに「ご苦労さま」と通知',
    'ランダムでマウスポインタが逆さまに',
    'エラー音が「ピコーン」から「ポヨーン」に変更'
]

FAKE_BUGFIXES = [
    'たまに現れる幽霊プロセスをさらに不可視化',
    '未確認のバグをさらに未確認化',
    'メモ帳が勝手に閉じる問題を再現できませんでした',
    'スクリーンセーバーが起動しない時、代わりに何もしないように修正',
    '右クリックが左クリックになることがある問題を未解決のまま放置',
    'アップデート通知が重複表示される問題を3倍に増加',
    'ログイン画面のヒントを謎の暗号に変更',
    '「ファイルが見つかりません」エラーをもっと丁寧に表示',
    '再起動時に時々「お疲れさま」と表示',
    'タスクバーが消える問題を見なかったことに'
]

FAKE_KNOWN_ISSUES = [
    'アップデート後も何も変わらない場合があります',
    '通知がたまに英語になります',
    'ごく稀に通知が2回表示されることがあります',
    'このアップデートは実際には存在しません',
    '一部の機能は想像上のものです',
    '通知内容が理解不能な場合があります',
    'バージョン番号に意味はありません',
    'アップデート後に再起動してもしなくても変わりません',
    '通知が消えない場合はそっとしておいてください',
    'この通知を信じないでください'
]

FAKE_VERSIONS = [
    '13.4.9-fake', '2024.06.01-beta', 'XP-NextGen', '11.0.0-joke', '0.9.99-mock', '3.1415-pi', '42.0.0', '1.2.3.4.5', '22H2-prank', 'v0.0.0-fun']


def generate_fake_update():
    version = random.choice(FAKE_VERSIONS)
    features = random.sample(FAKE_FEATURES, k=2)
    bugfixes = random.sample(FAKE_BUGFIXES, k=2)
    known_issues = random.sample(FAKE_KNOWN_ISSUES, k=1)
    timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    lines = [
        '[OSアップデート通知]',
        f'バージョン: {version}',
        f'日時: {timestamp}',
        f'- 新機能: {features[0]}',
        f'- 新機能: {features[1]}',
        f'- バグ修正: {bugfixes[0]}',
        f'- バグ修正: {bugfixes[1]}',
        f'- 既知の問題: {known_issues[0]}',
        '(この通知はジョークです)'
    ]
    return '\n'.join(lines)


def show_notification(message):
    system = platform.system()
    try:
        if system == 'Darwin':
            subprocess.run([
                'osascript', '-e', f'display notification "{message}" with title "Fake OS Update"'
            ], check=True)
        elif system == 'Linux':
            subprocess.run([
                'notify-send', 'Fake OS Update', message
            ], check=True)
        elif system == 'Windows':
            # Use Toast notification via powershell
            ps_script = f"""
            [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null
            $template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02)
            $textNodes = $template.GetElementsByTagName('text')
            $textNodes.Item(0).AppendChild($template.CreateTextNode('Fake OS Update')) > $null
            $textNodes.Item(1).AppendChild($template.CreateTextNode('{message}')) > $null
            $toast = [Windows.UI.Notifications.ToastNotification]::new($template)
            $notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('FakeOSUpdate')
            $notifier.Show($toast)
            """
            subprocess.run([
                'powershell', '-Command', ps_script
            ], check=True)
        else:
            print(message)
    except Exception as e:
        print(f"通知の表示に失敗しました: {e}\n内容:\n{message}")


def notify():
    msg = generate_fake_update()
    show_notification(msg)
    print(msg)


def list_samples():
    print('--- サンプル通知 ---')
    for _ in range(3):
        print(generate_fake_update())
        print('----------------------')


def summary():
    print('このSkillは、架空のOSアップデート通知をランダムに生成し、デスクトップ通知として表示します。通知内容は完全なジョークで、実際のシステムには影響しません。')


def main():
    parser = argparse.ArgumentParser(description='random-os-fake-update-notifier')
    subparsers = parser.add_subparsers(dest='command')

    notify_parser = subparsers.add_parser('notify', help='ランダムなOSアップデート通知を表示')
    list_parser = subparsers.add_parser('list', help='サンプル通知を3件表示')
    summary_parser = subparsers.add_parser('summary', help='Skillの概要を表示')

    args = parser.parse_args()
    if args.command == 'notify':
        notify()
    elif args.command == 'list':
        list_samples()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業中や会議中に架空のOSアップデート通知を表示し、場を和ませたり、集中力をリセットするためのジョーク系演出ツールです。通知内容は完全にランダムで、実際のシステムや業務には一切影響しません。

# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/3/library/subprocess.html
- notify-send (Linux): https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html
- osascript (macOS): https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html

# 利用例
- オンライン会議中に突然通知を表示して場を和ませる
- コーディング中に集中しすぎた時のリフレッシュ
- 仲間内でのジョークやアイスブレイク

# 注意点
- 本Skillは業務用途や真面目な通知には絶対に使わないでください
- 通知内容が現実のOS通知と誤認されないよう「fake」や「ジョーク」等の文言を明示
- 通知履歴や個人情報は一切保存されません

# 設計方針
- OSごとに標準APIで通知を表示(Linux: notify-send, macOS: osascript, Windows: powershell)
- 通知内容は毎回ランダム生成
- 誤認防止のため必ず「fake」表示
- CLIサブコマンドで明示的な呼び出し・サンプル表示・概要確認が可能

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-update-notifier .agents/skills/random-os-fake-update-notifier

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

3. ファイル配置確認

ls .agents/skills/random-os-fake-update-notifier
# 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 との連携設計はどうあるべきか?
  • 通知内容が十分に“くだらない”か、実際のOS通知と誤認しすぎない工夫があるか
  • トリガーや頻度調整が適切か

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

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

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

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

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