Codex ユーザーが日常でぶつかる悩み
AI coding workflow を長時間回していると、まじめな開発空間に独特の“閉塞感”が漂いがちです。特に Codex で repository understanding を高めつつ、monorepo や複雑な directory 構造を相手にしていると、気づかぬうちに集中力が切れてしまうことも。こうした状況下で、ちょっとした息抜きや、意表をつく演出がほしいと感じる瞬間は少なくありません。
- Codex が context を見失って違う場所のコードを参照し、思考が中断される
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れてしまい、再度 directory や path management の説明が必要になる
- session を再開すると、前回までの context や repository の説明を毎回最初から書き直さなければならない
- 長時間の AI coding workflow で long context が肥大化し、important な情報が薄まって stale context になる
- まじめな作業空間が続くと、集中力が切れて軽い息抜きや遊び心が恋しくなる
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中の緊張感や単調さを一瞬で和らげる“デジタル・カフェイン事故”通知をランダムに発動し、まじめな開発空間にユーモアをもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 集中しすぎて硬直しがちな session や monorepo 作業の合間に、Codex が context を切り替えるタイミングで“コーヒーあふれ警告”が表示され、気分転換できる
- repository understanding や path management の説明に疲れたタイミングで、現実には絶対起こらないネタ通知が炸裂し、思わず笑ってリフレッシュできる
- long context で workflow がマンネリ化したとき、突然のユーモア演出で場の空気が変わり、チームや個人のモチベーション維持に役立つ
- onboarding や session 再開時にも、遊び心を交えた通知が出ることで、AI coding workflow の堅苦しさを和らげる
- 通知内容が毎回異なるため、飽きずに使い続けられる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-coffee-overflow-alert .agents/skills/random-os-fake-coffee-overflow-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-fake-coffee-overflow-alert
> プロジェクトのセットアップを始めたい
[通知] 重大:コーヒーカップが満杯です
OSのカフェイン値が安全基準を超過しました。
ご注意ください。作業を続けるには一時的なカフェイン断ちをおすすめします。
(この通知はランダム演出です。引き続き作業をお楽しみください)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に移動して作業を続ける
[警告] OSのカフェイン値が限界突破
ディレクトリ "packages/web/" でコーヒーのあふれ事故が発生中。
repository understanding の前に深呼吸と水分補給を推奨します。
(通知内容は毎回変わります)
シーン3: お遊び的な使い方
> ちょっと気分転換したい
[注意] コーヒーオーバーフロー警告
現在の context: src/utils/
AI coding workflow 継続にはカフェイン摂取量の見直しが必要です。
OSメモリがコーヒーで埋まっています。
(この通知はネタです。引き続きご安全に)
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-coffee-overflow-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-coffee-overflow-alert/
├── SKILL.md
├── scripts/
│ └── coffee_overflow_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/coffee_overflow_alert.py |
OSコーヒーあふれ警告 Skill |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-coffee-overflow-alert
description: 作業中や集中タイム、または/skillsメニューやrandom-os-fake-coffee-overflow-alertへの明示呼び出し時に、実用警告風の“コーヒーあふれ”通知をランダム発火。キーワード例: コーヒー、alert、集中、OS警告。
---
# 機能概要
このSkillは、作業中のデスクトップ環境に“OSコーヒーあふれ警告”をランダムで表示し、まじめな作業空間にユーモアをもたらします。通知内容は毎回異なり、「重大:コーヒーカップが満杯です」「警告:OSのカフェイン値が限界突破」など、現実には起こりえないデジタル・カフェイン事故を演出。作業効率や集中力を損なわず、ちょっとした息抜きやチーム内の話題作りに最適です。
# 使い方
- 明示呼び出し: `/skills menu` から本Skillを選択、または `$random-os-fake-coffee-overflow-alert` を直接メンション
- 暗黙発動: 「コーヒー」「alert」「集中」「OS警告」などのキーワードを含む会話や作業ログ中に自動発火
- CLI: `python coffee_overflow_alert.py trigger` で即時通知
# 出力例
```
[OS通知] 重大: コーヒーカップが満杯です。溢れる前に一時的なコーヒー断ちを推奨します。
[OS通知] 警告: システムのカフェイン値が限界を超えました。再起動を検討してください。
[OS通知] 注意: コーヒー残量が異常に多いです。作業効率低下の恐れあり。
[OS通知] エラー: 仮想マグカップがオーバーフローしました。
[OS通知] 情報: コーヒーインジェクションが検出されました。ご注意ください。
```
# 注意点
- 実際のシステム警告やエラーとは無関係です
- 通知はローカル環境でのみ表示されます(Linux/macOS: notify-send/osascript、Windows: win10toast利用)
- ネタ通知のため、重要な作業中の混乱を避ける用途での利用は非推奨
- ログや履歴はデフォルトで保存されません
# 参考資料
- [notify2](https://pypi.org/project/notify2/) / [win10toast](https://pypi.org/project/win10toast/) / [osascript](https://ss64.com/osx/osascript.html)
- references/design_notes.md 参照
scripts/coffee_overflow_alert.py
import sys
import random
import platform
import subprocess
import argparse
import threading
import time
COFFEE_ALERTS = [
"重大: コーヒーカップが満杯です。溢れる前に一時的なコーヒー断ちを推奨します。",
"警告: システムのカフェイン値が限界を超えました。再起動を検討してください。",
"注意: コーヒー残量が異常に多いです。作業効率低下の恐れあり。",
"エラー: 仮想マグカップがオーバーフローしました。",
"情報: コーヒーインジェクションが検出されました。ご注意ください。",
"警告: コーヒーフィルタのキャッシュが破損しています。",
"重大: デジタルカフェイン障害が発生しました。冷静な対応を。",
"注意: OSのカフェインレベルがしきい値を超えました。",
"情報: コーヒーAPIから過剰なリクエストを検出。",
"エラー: コーヒー・バッファが溢れました。"
]
OS_TYPE = platform.system()
def send_notification(message):
if OS_TYPE == "Linux":
try:
subprocess.run([
"notify-send", "[OS通知]", message
], check=True)
except Exception as e:
print(f"notify-send失敗: {e}")
elif OS_TYPE == "Darwin":
try:
script = f'display notification "{message}" with title "OS通知"'
subprocess.run([
"osascript", "-e", script
], check=True)
except Exception as e:
print(f"osascript失敗: {e}")
elif OS_TYPE == "Windows":
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("OS通知", message, duration=5)
except ImportError:
print("win10toastがインストールされていません。pip install win10toast で導入してください。")
except Exception as e:
print(f"Windows通知失敗: {e}")
else:
print(f"[OS通知] {message}")
def random_alert():
message = random.choice(COFFEE_ALERTS)
send_notification(message)
return message
def list_alerts():
for i, msg in enumerate(COFFEE_ALERTS):
print(f"{i+1}: {msg}")
def summary():
print("=== コーヒーあふれ警告 Skill 概要 ===")
print(f"対応OS: Linux, macOS, Windows")
print(f"登録メッセージ数: {len(COFFEE_ALERTS)}")
print("通知例:")
for msg in random.sample(COFFEE_ALERTS, min(3, len(COFFEE_ALERTS))):
print(f" - {msg}")
def periodic_alert(interval=1800, count=3):
print(f"{count}回、{interval}秒ごとにコーヒー警告を発火します。Ctrl+Cで中断可。")
for i in range(count):
msg = random_alert()
print(f"[{i+1}/{count}] {msg}")
if i < count - 1:
try:
time.sleep(interval)
except KeyboardInterrupt:
print("中断されました。")
break
def main():
parser = argparse.ArgumentParser(description="OSコーヒーあふれ警告 Skill")
subparsers = parser.add_subparsers(dest="command")
trigger_parser = subparsers.add_parser("trigger", help="ランダムなコーヒー警告を即時発火")
list_parser = subparsers.add_parser("list", help="登録済み警告メッセージ一覧表示")
summary_parser = subparsers.add_parser("summary", help="Skill概要とサンプルを表示")
periodic_parser = subparsers.add_parser("periodic", help="定期的に警告を発火")
periodic_parser.add_argument("--interval", type=int, default=1800, help="通知間隔(秒)")
periodic_parser.add_argument("--count", type=int, default=3, help="通知回数")
args = parser.parse_args()
if args.command == "trigger":
msg = random_alert()
print(f"[OS通知] {msg}")
elif args.command == "list":
list_alerts()
elif args.command == "summary":
summary()
elif args.command == "periodic":
periodic_alert(args.interval, args.count)
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
本Skillは、作業中に実用警告風の“コーヒーあふれ”通知をランダム発火し、集中空間にユーモアを提供することを目的としています。通知内容は完全に架空で、実際のシステム状態やコーヒー消費量とは無関係です。
# 公式ドキュメント抜粋
- notify2: https://pypi.org/project/notify2/
- win10toast: https://pypi.org/project/win10toast/
- osascript: https://ss64.com/osx/osascript.html
# 利用例
- チームの朝会や集中タイムに突如ネタ通知を発火し、和やかな雰囲気を演出
- 長時間作業時のリフレッシュや“コーヒーブレイク”のきっかけ作り
# 注意点
- 通知はローカル端末でのみ表示され、リモートやWeb経由では動作しません
- ネタ通知のため、混乱を招く重要作業中での利用は控えてください
# 設計方針
- OSごとに標準的な通知APIを使用し、追加依存ライブラリは最小限
- メッセージは毎回ランダム化し、実用警告っぽさとネタ性の両立を重視
- 履歴やログは保持せず、軽快な動作を優先
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-fake-coffee-overflow-alert .agents/skills/random-os-fake-coffee-overflow-alert
.agents/skills/random-os-fake-coffee-overflow-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-coffee-overflow-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で通知・演出・OS連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
