Codexで遊び心を加える謎の通知演出活用ガイド

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

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

Codex を日常的に使っていると、便利さの裏で「ちょっとしたストレス」や「集中力の途切れ」を感じる瞬間が意外と多いものです。特に、通知・演出・OS連携まわりの体験は、真面目な開発フローの中で無味乾燥になりがちです。具体的には、次のような「あるある」が挙げられます。

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

また、黙々と作業していると「ちょっとした遊び心」や「意表を突く演出」が欲しくなる瞬間も。通知や演出の機能が単調だと、どうしても集中力が途切れがちです。そんな時、何か「意味不明だけど笑える」体験があれば…という思いを抱く人も多いのではないでしょうか。

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

一言サマリ: このスキルは作業中に突如『謎のOS伝説アイテムドロップ通知』をデスクトップやターミナルに爆誕させますSkill。

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

  • 作業中に突然、「伝説のスペースキー+5」や「謎のUSBメモリ(未鑑定)」など、意味不明なレジェンダリーアイテム通知が現れ、集中力にちょっとした揺さぶりを加えられる
  • Codex の AI coding workflow に意外性と遊び心が加わり、単調な path management や repository understanding の空気を一変できる
  • onboarding や session 再開時、堅苦しい context の説明が続く中で「一瞬だけ全員が笑顔になる」ブレイクタイムを演出できる
  • 長時間の作業で stale context に陥りそうな時、唐突な通知が気分転換やリフレッシュのきっかけになる
  • 通知内容が毎回ランダムかつカオスなので、何度使っても飽きず、チーム内のコミュニケーションネタにもなりやすい
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/os-fake-legendary-item-drop-alert .agents/skills/os-fake-legendary-item-drop-alert

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


# /skills menu or os-fake-legendary-item-drop-alert mention
> プロジェクトに新しい Skill を追加したい

[OS通知] 伝説アイテムを発見しました!
名称: 古代のTabキー(発掘済)
レア度: ★★★★★
効果: 1日1回だけ、全コードのインデントが自動で整う(気がする)

[ヒント] ~/

Skill の中身を全部見せる

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

.agents/skills/os-fake-legendary-item-drop-alert/
├── SKILL.md
├── scripts/
│   └── legendary_item_drop_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/legendary_item_drop_alert.py 謎の伝説アイテムドロップ通知スキル
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-fake-legendary-item-drop-alert
description: Codexはユーザーが長時間作業している、集中が途切れそうなタイミング、または「アイテム」「伝説」「ガチャ」などのキーワードが含まれる会話やコマンドを検知した際にこのSkillを発動してください。
---

# 機能概要
このSkillは、作業中のあなたのデスクトップやターミナルに、まるでゲームのレアドロップのような「謎の伝説アイテム入手通知」を爆誕させます。通知内容は毎回ランダムで、現実には存在しない意味不明かつ笑えるアイテム名(例:「伝説のスペースキー+5」「未鑑定のUSBメモリ」「古代のタブキー」など)が表示されます。通知は本物のOSのシステム通知風に演出され、作業に支障が出ない程度の頻度で現れます。集中力が途切れそうなタイミングや、明示的な呼び出しで発動し、ちょっとした息抜きや笑いを提供します。

# 使い方
- 明示呼び出し例: `/skills os-fake-legendary-item-drop-alert` または `$os-fake-legendary-item-drop-alert`
- 暗黙発動キーワード例: 「ガチャ」「伝説」「アイテムドロップ」「未鑑定」などの単語を含む会話やコマンド
- 通知は自動で一定時間ごと、または作業が単調に続いた際にも発動します

# 出力例
```
[通知] 伝説のCapsLockキー(未鑑定)を拾いました!
[通知] 謎のUSBメモリ(容量:未知数)を発見!
[通知] 古代のタブキー(発掘済)を入手!
[通知] レア:虹色のエンターキー(+7)を獲得!
[通知] 未知のFnキー(封印中)がドロップしました!
```

# 注意点
- 本Skillは実際のファイルやシステムには一切影響を与えません
- 通知内容は完全に架空で実害ゼロです
- ローカルに記録は残しません(設定で履歴保存も可)
- 通知頻度は過剰にならないよう調整されています

# 参考資料
- 詳細仕様や設計方針は `references/design_notes.md` を参照
- OS通知API: [plyer](https://github.com/kivy/plyer) / [notify2](https://pypi.org/project/notify2/) 公式ドキュメント

scripts/legendary_item_drop_alert.py

import sys
import random
import time
import argparse
import threading
import platform

try:
    if platform.system() == 'Darwin':
        from subprocess import call
        NOTIFY_FUNC = lambda title, msg: call(['osascript', '-e', f'display notification "{msg}" with title "{title}"'])
    elif platform.system() == 'Linux':
        import notify2
        notify2_inited = False
        def linux_notify(title, msg):
            global notify2_inited
            if not notify2_inited:
                notify2.init('LegendaryDrop')
                notify2_inited = True
            n = notify2.Notification(title, msg)
            n.show()
        NOTIFY_FUNC = linux_notify
    elif platform.system() == 'Windows':
        from win10toast import ToastNotifier
        toaster = ToastNotifier()
        NOTIFY_FUNC = lambda title, msg: toaster.show_toast(title, msg, duration=5, threaded=True)
    else:
        NOTIFY_FUNC = lambda title, msg: print(f"[通知] {title}: {msg}")
except Exception as e:
    NOTIFY_FUNC = lambda title, msg: print(f"[通知] {title}: {msg}")

ITEM_PREFIXES = [
    "伝説の", "謎の", "未鑑定の", "古代の", "虹色の", "レア:", "封印された", "未知の", "呪われた", "祝福された"
]
ITEM_NAMES = [
    "スペースキー", "エンターキー", "タブキー", "CapsLockキー", "Fnキー", "USBメモリ", "マウスホイール", "テンキー", "F5キー", "NumLockキー"
]
ITEM_SUFFIXES = [
    "(未鑑定)", "(発掘済)", "(+5)", "(+7)", "(容量:未知数)", "(封印中)", "(虹色)", "(呪われている)", "(祝福済)", ""
]

DROP_MESSAGES = [
    "{item}を拾いました!",
    "{item}を発見!",
    "{item}を入手!",
    "{item}がドロップしました!",
    "{item}を獲得!"
]

HISTORY = []
HISTORY_LIMIT = 50


def generate_item():
    prefix = random.choice(ITEM_PREFIXES)
    name = random.choice(ITEM_NAMES)
    suffix = random.choice(ITEM_SUFFIXES)
    item = f"{prefix}{name}{suffix}"
    return item

def generate_message():
    item = generate_item()
    msg_template = random.choice(DROP_MESSAGES)
    return msg_template.format(item=item)

def notify_drop():
    msg = generate_message()
    HISTORY.append(msg)
    if len(HISTORY) > HISTORY_LIMIT:
        HISTORY.pop(0)
    NOTIFY_FUNC("アイテムドロップ通知", msg)
    print(f"[通知] {msg}")

def drop_loop(interval, stop_event):
    while not stop_event.is_set():
        notify_drop()
        for _ in range(int(interval * 10)):
            if stop_event.is_set():
                break
            time.sleep(0.1)

def list_history():
    if not HISTORY:
        print("まだアイテムドロップ履歴はありません。")
        return
    print("== アイテムドロップ履歴 ==")
    for i, msg in enumerate(HISTORY[-HISTORY_LIMIT:], 1):
        print(f"{i:02d}: {msg}")

def summary():
    print(f"== ドロップ数: {len(HISTORY)} ==")
    counts = {}
    for msg in HISTORY:
        for name in ITEM_NAMES:
            if name in msg:
                counts[name] = counts.get(name, 0) + 1
    for name, cnt in sorted(counts.items(), key=lambda x: -x[1]):
        print(f"{name}: {cnt}回")

def main():
    parser = argparse.ArgumentParser(description='謎の伝説アイテムドロップ通知スキル')
    subparsers = parser.add_subparsers(dest='command')

    parser_log = subparsers.add_parser('log', help='一定間隔でアイテムドロップ通知を発生させる')
    parser_log.add_argument('--interval', type=float, default=900, help='通知間隔(秒)。デフォルト15分')
    parser_log.add_argument('--count', type=int, default=0, help='通知回数。0なら無限')

    parser_once = subparsers.add_parser('once', help='1回だけアイテムドロップ通知を発生')

    parser_list = subparsers.add_parser('list', help='ドロップ履歴を表示')
    parser_summary = subparsers.add_parser('summary', help='アイテム別ドロップ数サマリ')

    args = parser.parse_args()

    if args.command == 'log':
        stop_event = threading.Event()
        def stop_after_count():
            if args.count > 0:
                for _ in range(args.count):
                    if stop_event.is_set():
                        break
                    notify_drop()
                    for _ in range(int(args.interval * 10)):
                        if stop_event.is_set():
                            break
                        time.sleep(0.1)
                stop_event.set()
        t = threading.Thread(target=stop_after_count)
        t.start()
        try:
            while t.is_alive():
                t.join(1)
        except KeyboardInterrupt:
            stop_event.set()
            print("\n[終了] ドロップ通知を停止しました。")
    elif args.command == 'once':
        notify_drop()
    elif args.command == 'list':
        list_history()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業中のユーザーに対して突発的に「伝説のアイテムドロップ通知」を発生させることで、ちょっとした笑いや息抜きを提供することを目的としています。現実世界のガチャ演出をOS通知で再現し、作業の単調さを和らげます。

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

# 利用例
- 長時間のコーディングや単調な作業中に、定期的にアイテムドロップ通知を表示
- 明示的なコマンド呼び出しで即座に通知を発生
- 履歴やサマリ表示で過去のドロップを振り返り、ちょっとした話題作りにも

# 注意点
- 通知内容は完全に架空であり、実際のファイルやシステムには影響を与えません
- 過剰な通知で作業妨害にならないよう、デフォルトの通知間隔や回数は控えめに設計されています

# 設計方針
- OSごとに適切な通知APIを自動選択し、本物のシステム通知風に演出
- アイテム名や通知文は毎回ランダム生成し、カオスかつ笑える内容を重視
- 履歴やサマリ機能を備え、ユーザーがドロップ結果を楽しめるようにしています

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/os-fake-legendary-item-drop-alert .agents/skills/os-fake-legendary-item-drop-alert

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

3. ファイル配置確認

ls .agents/skills/os-fake-legendary-item-drop-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 との連携設計はどうあるべきか?
  • 通知が本物っぽく演出されているか?
  • アイテム名が毎回カオスかつ笑える内容になっているか?
  • 通知頻度やタイミングが作業妨害になりすぎていないか?

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

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

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

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

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