Codex ユーザーが日常でぶつかる悩み
Codex を使っていると、リポジトリや context の管理、path 指定などで思わず「またか」と感じる瞬間が多々あります。特に monorepo や大規模な repository では、AI coding workflow の途中で集中力が途切れたり、同じような説明を繰り返す羽目になったり、ちょっとした気分転換が欲しくなることも。通知や演出系の Skill で、作業空間にちょっとした変化や遊び心を入れたいと思うことはありませんか。
- Codex が context を見失って違う場所のコードを参照してしまい、再度ディレクトリやファイル構造を説明し直すことが多い
- monorepo で package を跨いだ瞬間、Codex が repository 構造を忘れてしまい、意図しない directory のコードを拾ってしまう
- session を再開するたびに、前回までの context や path 指定をまるごと再説明しなければならず、手間がかかる
- 長時間の AI coding workflow で long context が膨らみすぎて、重要な repository understanding が薄まってしまう
- 「このリポジトリはこういう directory 構造です」と毎回チャットの冒頭で書き出す作業がルーティン化している
こうした単調な作業や context 管理の合間に、ちょっとした演出や OS 風の通知が入ることで、気分転換やリフレッシュが図れると感じる方も多いはずです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Codex の作業フローに“謎のOS公式・本日の作業用BGM推奨通知”というユーモラスな演出を自動で挟み、単調な context 管理や長時間作業に遊び心とリフレッシュ感をもたらす Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、毎回“ジャンル不明・独自タイトル”の謎BGM通知がランダム表示され、作業空間にちょっとした非日常感が生まれる
- repository understanding や path management の説明に疲れた時でも、唐突な通知で気分転換できる
- 長時間 session や monorepo 作業の途中で、思わず笑ってしまうような演出が入り、onboarding や memory のリフレッシュにも効果的
- 実際に音は鳴らないので、周囲に迷惑をかけずに「ネタ感」だけを安全に楽しめる
- Codex の context を圧迫することなく、通知・演出・OS連携のカテゴリで“軽い遊び”を追加できる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-mysterious-soundtrack-alert .agents/skills/random-os-fake-mysterious-soundtrack-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-fake-mysterious-soundtrack-alert mention
> プロジェクト開始。Codex に context をセットアップしてほしい
[OS公式通知] 本日の作業用BGM推奨:
「第3会議室の静寂」 (ジャンル: 不明)
本日の productivity を高めるため、こちらのBGMを推奨します。
※実際には音は流れません。気分だけお楽しみください。
(リポジトリ構造: src/, tests/, README.md)
Codex context: initialized.
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に移動して作業開始
[OS公式通知] 本日の作業用BGM推奨:
「Cドライブ幻想曲」 (ジャンル: 不明)
新しいパッケージへようこそ。気分転換にどうぞ。
(monorepo context: packages/api/, packages/web/, shared/)
Codex context updated.
シーン3: お遊び的な使い方
> ちょっと疲れたので何か面白いことして
[OS公式通知] 本日の作業用BGM推奨:
「未定義変数のバラード」 (ジャンル: 不明)
謎のBGMタイトルが脳内再生されました。引き続き作業をお楽しみください。
(Codex memory: refreshed)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 唐突なBGM通知でリフレッシュ、重要な repository understanding を維持しやすい |
発動方式
明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.agents/skills/random-os-fake-mysterious-soundtrack-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-mysterious-soundtrack-alert/
├── SKILL.md
├── scripts/
│ └── mysterious_soundtrack_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/mysterious_soundtrack_alert.py |
謎のOS公式BGM推奨通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-mysterious-soundtrack-alert
description: 作業中やコマンド実行時、もしくは/skillsメニュー呼び出し時に、Codexが“謎のOS公式BGM推奨通知”をランダムに発動します。通知はジャンル不明の独自BGMタイトルを生成し、音は鳴らず演出のみ。気分転換や小ネタ投入に最適です。
---
# 機能概要
このSkillは、作業中やコマンド実行の合間に“謎のOS公式・本日の作業用BGM推奨通知”をランダムで表示します。通知内容は毎回異なり、ジャンル不明・独自のBGMタイトル(例:「Cドライブ幻想曲」「第3会議室の静寂」など)が生成されます。実際に音楽は流れませんが、作業空間に一瞬だけ“謎の演出感”を与え、気分転換や会話のネタとして活用できます。
# 使い方
- 明示的な呼び出し: `/skills random-os-fake-mysterious-soundtrack-alert` または `@codex random-os-fake-mysterious-soundtrack-alert`
- 暗黙トリガー: 「BGM」「作業用」「静寂」「集中」「OS通知」などのキーワードを含む発話や、コマンド実行の合間に自動発動
# 出力例
```
[OS公式通知] 本日の作業用BGM: 『未定義変数のバラード』
[OS公式通知] 本日の作業用BGM: 『第3会議室の静寂』
[OS公式通知] 本日の作業用BGM: 『Cドライブ幻想曲』
[OS公式通知] 本日の作業用BGM: 『再起動前夜のワルツ』
[OS公式通知] 本日の作業用BGM: 『メモリ不足の夜想曲』
```
# 注意点
- 実際に音楽は再生されません。通知・演出のみです。
- ローカルファイルや履歴には保存されません。
- 本Skillはジョーク・演出用途であり、業務システム通知とは無関係です。
- 通知タイミングや頻度は設定可能ですが、初期はコマンド実行の合間や明示呼び出し時のみ発動します。
# 参考資料
- references/design_notes.md に設計方針・利用例を記載
- 公式Python通知API: https://pypi.org/project/plyer/ など
- OS通知参考: https://docs.python.org/ja/3/library/subprocess.html
scripts/mysterious_soundtrack_alert.py
import random
import argparse
import sys
import platform
import subprocess
from typing import List
# BGMタイトル生成用データ
BGM_PREFIXES = [
'第3会議室の', 'Cドライブ', '未定義変数の', '再起動前夜の', 'メモリ不足の',
'仮想環境の', 'システム管理者の', '深夜残業の', 'バグ修正中の', 'ログイン画面の',
'ファイル転送中の', 'ネットワーク不調の', 'アップデート待ちの', 'パーミッション拒否の',
'プロセス監視の', '無限ループの', 'セッション切断の', 'デバッグ中の', 'サーバーダウンの',
'バックアップ直前の', 'コマンド失敗の', 'パスワード忘却の', 'CPU暴走の', '空き容量ゼロの'
]
BGM_SUFFIXES = [
'静寂', '幻想曲', 'バラード', 'ワルツ', '夜想曲', 'エチュード', 'ソナタ', '協奏曲',
'セレナーデ', 'カプリッチョ', 'マーチ', 'インテルメッツォ', 'カンタータ', 'レクイエム',
'メヌエット', 'パストラーレ', 'カノン', 'トッカータ', 'フーガ', 'リチェルカーレ'
]
# OS通知送信
def send_os_notification(title: str, message: str):
current_os = platform.system()
try:
if current_os == 'Darwin': # macOS
subprocess.run([
'osascript', '-e', f'display notification "{message}" with title "{title}"'
], check=True)
elif current_os == 'Linux':
subprocess.run([
'notify-send', title, message
], check=True)
elif current_os == 'Windows':
import ctypes
ctypes.windll.user32.MessageBoxW(0, message, title, 0x40)
else:
print(f"[{title}] {message}")
except Exception as e:
print(f"[通知失敗] {title}: {message} ({e})")
# BGMタイトル生成
def generate_bgm_title() -> str:
prefix = random.choice(BGM_PREFIXES)
suffix = random.choice(BGM_SUFFIXES)
return f'{prefix}{suffix}'
# 通知メッセージ生成
def format_notification(title: str) -> str:
return f"[OS公式通知] 本日の作業用BGM: 『{title}』"
# CLIサブコマンド: log, list, summary (ダミーで履歴管理)
class AlertHistory:
def __init__(self):
self.history: List[str] = []
def add(self, title: str):
self.history.append(title)
def list(self):
for i, t in enumerate(self.history):
print(f"{i+1}. {t}")
def summary(self):
print(f"合計 {len(self.history)} 件のBGMタイトルが生成されました。")
# メイン関数
def main():
parser = argparse.ArgumentParser(description='謎のOS公式BGM推奨通知スクリプト')
subparsers = parser.add_subparsers(dest='command')
parser_alert = subparsers.add_parser('alert', help='BGM通知を1回表示')
parser_alert.add_argument('--os-notify', action='store_true', help='OS通知も送信')
parser_alert.add_argument('--count', type=int, default=1, help='通知回数')
subparsers.add_parser('list', help='生成済みBGMタイトル一覧')
subparsers.add_parser('summary', help='生成履歴のサマリー')
args = parser.parse_args()
history = AlertHistory()
if args.command == 'alert':
for _ in range(args.count):
title = generate_bgm_title()
msg = format_notification(title)
print(msg)
if args.os_notify:
send_os_notification('OS公式通知', f'本日の作業用BGM: 『{title}』')
history.add(title)
elif args.command == 'list':
history.list()
elif args.command == 'summary':
history.summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、作業中の気分転換や会話のネタとして“謎のOS公式BGM推奨通知”を演出するために設計されています。実際の音楽再生は行わず、独自生成のBGMタイトルを通知・ターミナル出力します。
# 公式ドキュメント抜粋
- OS通知API: macOS (osascript), Linux (notify-send), Windows (ctypes.windll.user32.MessageBoxW)
- Python subprocess: https://docs.python.org/ja/3/library/subprocess.html
# 利用例
- `/skills random-os-fake-mysterious-soundtrack-alert` で即時発動
- コマンド実行の合間や「BGM」「作業用」等の発話時に自動発動
# 注意点
- 音は一切鳴りません。通知・演出のみです。
- 履歴はセッション内のみ保持、永続保存はしません。
- 本Skillはジョーク用途であり、業務通知や実際のBGM推奨とは無関係です。
# 設計方針
- OS種別ごとに最適な通知手段を自動選択
- BGMタイトルはプレフィックス・サフィックスをランダム合成
- テスト・デモ用途としても活用可能
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-fake-mysterious-soundtrack-alert .agents/skills/random-os-fake-mysterious-soundtrack-alert
.agents/skills/random-os-fake-mysterious-soundtrack-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-mysterious-soundtrack-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 との連携設計はどうあるべきか?
- ランダムな“それっぽいBGMタイトル”がちゃんと表示されるか?
- 通知やターミナル出力のタイミングが絶妙か?
- 一切音が鳴らず安全にネタ感だけ伝わるか?
実際に Codex で試した検証ログは Codexで謎の作業用BGM通知を炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
