Codex ユーザーが日常でぶつかる悩み
AI coding workflow を Codex で回していると、通知や演出面で「地味に困る」「ちょっとしたストレスが溜まる」瞬間が多々あります。特に repository understanding や path management の文脈で作業していると、エラー発生時の気付きが遅れて context を見失ったり、気まずい雰囲気になることも。以下のような「あるある」を感じたことはないでしょうか。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
通知・演出・OS連携が弱いと、エラー発生時の気付きが遅れ、周囲にも伝わりづらい。特に集中しているときほど「何かやらかした?」と自覚するタイミングが遅れがちで、作業場の空気も微妙に重くなることがあります。
この Skill が一言でいうと何を解決するか
一言サマリ: コマンド実行時にエラーが発生した瞬間Skill。
このSkillを導入することで、Codex のエラー発生時に「謎のOSエラージングル」が強制的に再生されるようになります。しかも、ジングル音源は自作WAVやノスタルジックなファミコン風サウンドをランダムで選択。以下のような具体的なメリットがあります。
- エラー発生時に即座に音で気付けるため、context や repo の状態把握がスムーズになる
- 作業場に「また変な音が鳴ってる」とユーモラスな空気が生まれ、エラーを前向きに受け止めやすい
- 音源は簡単に追加・差し替えできるので、自分好みの演出でAI coding workflowをカスタマイズ可能
- 長時間の session で stale context が発生しても、ジングルで「今ここでエラーが出た」と明確に区切れる
- onboarding やペア作業時にも、エラー発生を即座に共有できるため、repository understanding が加速する
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-error-jingle .agents/skills/random-os-error-jingle実行したらこうなる (3つの利用シーン)
このSkillを有効化すると、エラー発生時に「ジングル音」が鳴ることで、作業の流れや context 切り替えに気付きを与えます。以下のような利用シーンが想定されます。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-error-jingle mention
> このプロジェクトでエラー時にジングル鳴らして
[Skill: random-os-error-jingle 有効化済み]
- エラー発生時にランダムなジングル (wav/mp3) を再生します
- 音源は Skill の中身を全部見せる
.agents/skills/random-os-error-jingle/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-error-jingle/
├── SKILL.md
├── scripts/
│ └── random_os_error_jingle.py
└── references/
└── design_notes.md
各ファイルの役割
ファイル
役割
SKILL.md
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_error_jingle.py
コマンド失敗時にランダムなOSエラージングルを再生するスキル
references/design_notes.md
概要 をまとめた参考資料
SKILL.md
---
name: random-os-error-jingle
description: コマンド実行時にエラー(例外・非ゼロ終了コード)が発生した場合、必ずランダムな“OSエラージングル”サウンドを再生する。エラー検知・通知・演出用途で発動。
---
# 機能概要
`random-os-error-jingle`は、コマンドやスクリプト実行時にエラー(例外発生や非ゼロ終了コード)を検知すると、即座にランダムな“OSエラージングル”サウンド(WAV/MP3/OGG対応)を再生するSkillです。音源は自作の短いWAVやレトロなファミコン風ファイルなど自由に追加・差し替え可能。エラー発生時の通知・演出を強化し、開発現場や作業空間にユーモラスかつ怪しげな雰囲気を演出します。
# 使い方
- 明示呼び出し例: `/skills random-os-error-jingle run --cmd "python myscript.py" --jingles ./jingles/ --volume 0.8`
- 暗黙発動キーワード例: "エラー発生時にジングル再生", "失敗時に音で通知", "コマンド失敗時のサウンド演出"
- 音源ディレクトリに好きなファイルを追加・交換可能
- `--mute`で一時的にサウンド無効化、`--volume`で音量調整
# 出力例
```
$ python random_os_error_jingle.py run --cmd "ls not_exist_dir" --jingles ./jingles/
[INFO] 実行: ls not_exist_dir
[ERROR] コマンドが失敗しました (終了コード: 2)
[INFO] ジングル再生: ./jingles/famicom_fail.wav
```
# 注意点
- サウンド再生にはOSの標準機能またはPythonの`playsound`/`pygame`を利用
- 音源ファイルはローカルに保存・管理、著作権に注意
- サーバーや無音環境では効果が発揮されません
- コマンド実行はサンドボックス外で行われるため、セキュリティリスクに注意
# 参考資料
- [Python subprocess documentation](https://docs.python.org/ja/3/library/subprocess.html)
- [playsound PyPI](https://pypi.org/project/playsound/)
- references/design_notes.md も参照
scripts/random_os_error_jingle.py
import argparse
import os
import sys
import random
import glob
import subprocess
import threading
import time
try:
from playsound import playsound
except ImportError:
playsound = None
def list_jingles(jingle_dir):
exts = ('*.wav', '*.mp3', '*.ogg')
files = []
for ext in exts:
files.extend(glob.glob(os.path.join(jingle_dir, ext)))
return files
def play_jingle(jingle_file, volume=1.0, mute=False):
if mute or not jingle_file:
return
if playsound:
try:
playsound(jingle_file)
except Exception as e:
print(f'[WARN] サウンド再生失敗: {e}', file=sys.stderr)
else:
# OS標準の再生コマンド
if sys.platform.startswith('darwin'):
os.system(f'afplay "{jingle_file}"')
elif sys.platform.startswith('linux'):
os.system(f'paplay "{jingle_file}" || aplay "{jingle_file}"')
elif sys.platform.startswith('win'):
import winsound
try:
winsound.PlaySound(jingle_file, winsound.SND_FILENAME)
except Exception as e:
print(f'[WARN] サウンド再生失敗: {e}', file=sys.stderr)
else:
print('[WARN] サウンド再生方法が不明なOSです', file=sys.stderr)
def run_command(cmd, jingle_dir, volume=1.0, mute=False):
print(f'[INFO] 実行: {cmd}')
try:
proc = subprocess.run(cmd, shell=True)
if proc.returncode != 0:
print(f'[ERROR] コマンドが失敗しました (終了コード: {proc.returncode})')
jingles = list_jingles(jingle_dir)
if not jingles:
print('[WARN] ジングルファイルが見つかりません', file=sys.stderr)
return
jingle_file = random.choice(jingles)
print(f'[INFO] ジングル再生: {jingle_file}')
t = threading.Thread(target=play_jingle, args=(jingle_file, volume, mute))
t.start()
t.join()
else:
print('[INFO] コマンドは正常終了しました')
except Exception as e:
print(f'[ERROR] 例外発生: {e}', file=sys.stderr)
jingles = list_jingles(jingle_dir)
if not jingles:
print('[WARN] ジングルファイルが見つかりません', file=sys.stderr)
return
jingle_file = random.choice(jingles)
print(f'[INFO] ジングル再生: {jingle_file}')
t = threading.Thread(target=play_jingle, args=(jingle_file, volume, mute))
t.start()
t.join()
def list_jingle_files(jingle_dir):
jingles = list_jingles(jingle_dir)
if not jingles:
print('[INFO] ジングルファイルが見つかりません')
return
print('[INFO] 利用可能なジングル一覧:')
for j in jingles:
print(' -', j)
def main():
parser = argparse.ArgumentParser(description='コマンド失敗時にランダムなOSエラージングルを再生するスキル')
subparsers = parser.add_subparsers(dest='subcmd')
parser_run = subparsers.add_parser('run', help='コマンドを実行し、失敗時にジングル再生')
parser_run.add_argument('--cmd', required=True, help='実行するコマンド')
parser_run.add_argument('--jingles', required=True, help='ジングル音源ディレクトリ')
parser_run.add_argument('--volume', type=float, default=1.0, help='音量(0.0-1.0)')
parser_run.add_argument('--mute', action='store_true', help='サウンドをミュート')
parser_list = subparsers.add_parser('list', help='利用可能なジングルファイル一覧表示')
parser_list.add_argument('--jingles', required=True, help='ジングル音源ディレクトリ')
args = parser.parse_args()
if args.subcmd == 'run':
run_command(args.cmd, args.jingles, args.volume, args.mute)
elif args.subcmd == 'list':
list_jingle_files(args.jingles)
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、コマンド実行時のエラーを検知し、即座にローカルのジングル音源からランダム選択して再生することで、エラー発生を視覚以外でも直感的に把握できるよう設計されています。音源はユーザーが自由に追加・差し替えでき、通知演出のカスタマイズ性が高い点が特徴です。
# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/ja/3/library/subprocess.html
- playsound: https://pypi.org/project/playsound/
# 利用例
- 開発現場でビルドやテスト失敗時に音で即座に把握
- ジョーク用途で作業場の雰囲気作り
- 音源をレトロゲーム風や自作ジングルに差し替えて楽しむ
# 注意点
- サウンド再生はOS依存部分あり。Linux/Mac/Windowsで挙動がやや異なる場合がある
- サーバーや無音環境では効果が限定的
- 音源ファイル管理・著作権に留意
# 設計方針
- サブコマンド(run/list)でCLI操作性を確保
- 音源ディレクトリの柔軟な指定・拡張性
- ミュート・音量調整オプションで実用性も考慮
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit 実行に必要)
- Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-error-jingle .agents/skills/random-os-error-jingle
.agents/skills/random-os-error-jingle の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-error-jingle
# 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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
