Codex ユーザーが日常でぶつかる悩み
AI coding workflow を日々回していると、作業が単調になったり、同じような通知や context 管理に飽きてしまう瞬間が多々あります。特に Codex で長時間作業していると、repository understanding や path management の負担がじわじわ蓄積しがちです。そんな時、ふとした遊びや現実逃避が欲しくなることも。「通知・演出・OS連携」系のSkillは、そんな日常の“マンネリ”を打破する小技として注目されています。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
さらに、作業に没頭しすぎて気分転換のタイミングを逃したり、真面目な通知ばかりで面白みがない、と感じることも多いはずです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中に“謎のOS公式・伝説のクエスト通知”をランダムに爆誕させ、日常の単調さや通知のマンネリを一掃するSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Codex の context や repository understanding とは無関係な“伝説クエスト通知”が突発的に現れ、作業の合間に笑いや現実逃避の余白が生まれる
- monorepo や directory 境界を跨いだ時にも、真面目な path management とは別軸で、ユーモアのある通知がAI coding workflowに差し込まれる
- OS通知やターミナル出力が毎回違う内容で飽きず、長時間の作業やonboardingの気分転換にも最適
- 完全なフェイク通知なので、実害やデータ損失リスクなしで安心して導入できる
- Skill の仕組みが context や session の流れを邪魔せず、自然なタイミングで発動する
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-legendary-quest-notification .agents/skills/random-os-fake-legendary-quest-notification実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-fake-legendary-quest-notification
> プロジェクトのセットアップを始めます
[OS通知] 伝説のクエスト発生!
緊急任務: Cドライブ深奥に眠る「古のバグ」を討伐せよ!
報酬: バグ退治の証・デバッグ力+20
ヒント: /src/legacy/buggy_code.py に怪しい気配…
クエストを受領しました。勇者よ、健闘を祈る!
シーン2: monorepo / package 跨ぎ作業時
> packages/core から packages/utils へ移動
[OS通知] 伝説のUSBメモリ捜索開始!
任務: packages/utils/usb_finder/ ディレクトリ内に眠る「伝説のUSBメモリ」を発見せよ
条件: 3分以内にusb_legend.pyを見つけ出すこと
注意: フェイククエストにつき、実際のファイル操作は不要です
クエスト進行中…進捗はまた通知します!
シーン3: お遊び的な使い方
> ちょっと休憩したい
[OS通知] 新たな伝説クエスト解禁!
内容: /docs/README.md の中に隠された「古のコメント」を発見し、後世に伝えること
報酬: 妄想力+100
ヒント: 休憩ついでに探してみよう!
ファンタジーな現実逃避、どうぞご堪能ください。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 伝説クエスト通知で気分転換。contextのリフレッシュにも一役 |
発動方式
明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.agents/skills/random-os-fake-legendary-quest-notification/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-legendary-quest-notification/
├── SKILL.md
├── scripts/
│ └── legendary_quest_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/legendary_quest_notifier.py |
伝説のOSクエスト通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-legendary-quest-notification
description: 作業集中時やコマンド入力時など、ユーザーが長時間PC作業をしている際に、Codexが“伝説のOSクエスト通知”で現実逃避やリフレッシュを促したい場合に発動。トリガー: 長時間無操作/集中作業/明示呼び出し。
---
# 機能概要
このSkillは、日々の単調なPC作業やコーディングに没頭しているときに、突如“伝説のOS公式クエスト”をランダム通知として生成します。内容は「Cドライブ深部の古代バグ討伐」「伝説のUSBメモリ探索」など、実在しない奇天烈なミッションばかり。現実の業務や通知に疲れた方へ、妄想力と笑いを刺激し、作業の合間にちょっとした非日常感を提供します。実害ゼロの完全フェイク通知なので、安心してご利用いただけます。
# 使い方
- 明示呼び出し: `/skills menu` でSkill一覧から選択、または `$random-os-fake-legendary-quest-notification` メンションで即時発動。
- 暗黙発動: 長時間の無操作やコマンド連続入力時など、集中作業中に自動でランダム発動。キーワード例: "疲れた", "現実逃避", "通知飽きた" など。
# 出力例
```
[OS公式伝説クエスト通知]
緊急任務: Cドライブ深奥に眠る古のバグを討伐せよ!
報酬: システムの安寧と謎の称号
[OS公式伝説クエスト通知]
新ミッション: 伝説のUSBメモリを社内のどこかで発見せよ
報酬: 未知のファイル群
```
# 注意点
- 通知は完全なフェイクで、実際のファイル操作やシステム変更は一切行いません。
- ローカルに履歴や個人情報は保存されません。
- 業務中の誤解や混乱を避けるため、実際のシステム通知と混同しないようご注意ください。
# 参考資料
詳細な設計方針や利用例は references/design_notes.md を参照。公式API: [notify2](https://pypi.org/project/notify2/) (Linux), [win10toast](https://pypi.org/project/win10toast/) (Windows), [osascript](https://ss64.com/osx/osascript.html) (macOS)。
scripts/legendary_quest_notifier.py
import sys
import os
import random
import time
import argparse
import platform
try:
import notify2 # Linux
except ImportError:
notify2 = None
try:
from win10toast import ToastNotifier # Windows
except ImportError:
ToastNotifier = None
QUEST_TEMPLATES = [
"緊急任務: Cドライブ深奥に眠る古のバグを討伐せよ!",
"新ミッション: 伝説のUSBメモリを社内のどこかで発見せよ",
"極秘指令: レジストリの迷宮から失われたキーを奪還せよ",
"挑戦状: システムフォントの中に隠された幻の文字を探し出せ",
"特別任務: タスクマネージャーの裏に潜む謎のプロセスを追跡せよ",
"伝説のクエスト: デスクトップの彼方に眠る未保存ファイルを復活させよ",
"至急: ゴミ箱の底から消えたはずのアイコンを取り戻せ",
"極秘: BIOSの奥深くに封印された古の設定を解読せよ",
"チャレンジ: 10年前のバックアップから現代に蘇るデータを救出せよ",
"特命: ネットワークの海を越えて幻のプリンタを発見せよ"
]
REWARDS = [
"報酬: システムの安寧と謎の称号",
"報酬: 未知のファイル群",
"報酬: OSからの感謝状",
"報酬: 伝説のバッジ",
"報酬: バーチャルコーヒー",
"報酬: 開発者の微笑み",
"報酬: メモリの加護",
"報酬: キーボードの祝福",
"報酬: 伝説のスクリーンセーバー",
"報酬: システムアップタイム+1"
]
HISTORY_FILE = os.path.expanduser('~/.legendary_quest_history')
def generate_quest():
quest = random.choice(QUEST_TEMPLATES)
reward = random.choice(REWARDS)
return f"[OS公式伝説クエスト通知]\n{quest}\n{reward}"
def show_notification(message):
system = platform.system()
if system == "Linux" and notify2:
notify2.init("Legendary Quest")
n = notify2.Notification("伝説のOSクエスト", message)
n.show()
elif system == "Windows" and ToastNotifier:
toaster = ToastNotifier()
toaster.show_toast("伝説のOSクエスト", message, duration=7)
elif system == "Darwin":
# macOS: use osascript
os.system(f"osascript -e 'display notification \"{message}\" with title \"伝説のOSクエスト\"'")
else:
print(message)
def save_history(message):
try:
with open(HISTORY_FILE, 'a', encoding='utf-8') as f:
f.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')}\n{message}\n\n")
except Exception as e:
pass # 履歴保存失敗は無視
def list_history():
if not os.path.exists(HISTORY_FILE):
print("履歴はまだありません。")
return
with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
print(f.read())
def summary_history():
if not os.path.exists(HISTORY_FILE):
print("履歴はまだありません。")
return
count = 0
with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
for line in f:
if line.startswith("[OS公式伝説クエスト通知]"):
count += 1
print(f"発行された伝説クエスト通知の合計: {count}")
def random_wait(min_sec=600, max_sec=3600):
wait_time = random.randint(min_sec, max_sec)
time.sleep(wait_time)
def main():
parser = argparse.ArgumentParser(description="伝説のOSクエスト通知スクリプト")
subparsers = parser.add_subparsers(dest='command')
parser_log = subparsers.add_parser('log', help='今すぐ伝説のクエスト通知を発行')
parser_list = subparsers.add_parser('list', help='過去の通知履歴を表示')
parser_summary = subparsers.add_parser('summary', help='通知履歴のサマリーを表示')
parser_daemon = subparsers.add_parser('daemon', help='ランダム間隔で自動通知 (バックグラウンド)')
parser_daemon.add_argument('--min', type=int, default=600, help='最小待機秒数(デフォルト600)')
parser_daemon.add_argument('--max', type=int, default=3600, help='最大待機秒数(デフォルト3600)')
args = parser.parse_args()
if args.command == 'log':
message = generate_quest()
show_notification(message)
save_history(message)
print(message)
elif args.command == 'list':
list_history()
elif args.command == 'summary':
summary_history()
elif args.command == 'daemon':
print("伝説のOSクエスト自動通知モード開始。Ctrl+Cで停止します。")
try:
while True:
message = generate_quest()
show_notification(message)
save_history(message)
print(message)
random_wait(args.min, args.max)
except KeyboardInterrupt:
print("\n自動通知を終了しました。")
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、日常の作業中に“伝説のOSクエスト通知”をランダムで生成し、ユーザーの現実逃避や気分転換を支援します。完全なフェイク通知で安全性を重視し、実際のシステムやデータには一切影響しません。
# 公式ドキュメント抜粋
- Linux: [notify2](https://pypi.org/project/notify2/)
- Windows: [win10toast](https://pypi.org/project/win10toast/)
- macOS: [osascript](https://ss64.com/osx/osascript.html)
# 利用例
- 長時間のコーディングや単調作業の合間に、突如“伝説のクエスト”が通知され、チーム内で笑いが生まれる。
- `/skills menu`やコマンドラインから即時発動し、現実逃避のきっかけを得られる。
# 注意点
- 通知内容は完全なフィクションであり、実際の業務やシステム運用に混乱を生じさせない設計です。
- 履歴ファイルはユーザーのホームディレクトリにのみ保存し、個人情報や業務データは一切扱いません。
# 設計方針
- 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-legendary-quest-notification .agents/skills/random-os-fake-legendary-quest-notification
.agents/skills/random-os-fake-legendary-quest-notification の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-legendary-quest-notification
# 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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
