Codex ユーザーが日常でぶつかる悩み
AI coding workflow を進める中で、Codex の context 管理や repository understanding にまつわる「ちょっとしたストレス」は誰もが経験するものです。とくに path management や monorepo の directory 構造を意識しながら作業していると、思わぬタイミングで集中が途切れたり、メンタルが微妙に揺さぶられる瞬間があります。通知や演出が欲しいと思いつつも、実用性だけが重視されてしまい、遊び心ある Skill がなかなか選ばれないのも現状です。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした悩みは、真面目な通知だけでなく、ちょっと肩の力を抜ける演出や、ユーザーの気持ちに寄り添う形で解消できる余地があります。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中やコマンド実行時にランダムな“OSエラーハイク通知”を届け、心の余白を生み出すSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、五・七・五の俳句形式エラーメッセージが context のリセットや気分転換を促す
- repository understanding の切り替えや path management のタイミングで、思わず笑ってしまう通知が届く
- monorepo の directory 跨ぎや session 再開時など、Codex の「お約束」なストレスを和らげる新体験が得られる
- 通知・演出・OS連携のカテゴリで、あえて“役に立たないけど心に残る”遊び心をプラスできる
- 長時間の作業や stale context による疲れを、摩訶不思議な俳句通知でリフレッシュできる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-error-haiku-notifier .agents/skills/random-os-fake-error-haiku-notifier実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-fake-error-haiku-notifier
> プロジェクトを開いたよ
[Fake OS Error Haiku Notification]
404
道に迷いて
春霞
[ヒント] repository understanding をリフレッシュしました。
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ に移動
[Fake OS Error Haiku Notification]
メモリ消ゆ
春まだ遠き
バグの夜
[ヒント] directory: packages/api/ で context 切替を検知。
シーン3: お遊び的な使い方
> なんとなく疲れたので何か面白いことして
[Fake OS Error Haiku Notification]
ファイル消え
静寂の中
夢を見る
[ヒント] 気分転換にどうぞ。
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-error-haiku-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-error-haiku-notifier/
├── SKILL.md
├── scripts/
│ └── random_os_fake_error_haiku_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_error_haiku_notifier.py |
Random OS Fake Error Haiku Notifier |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-error-haiku-notifier
description: このSkillは、コマンド実行や作業中に「エラー」「失敗」「バグ」などのキーワードを検知した際や、/skills menu など明示的な呼び出し時に、五・七・五の俳句形式でランダムな“OS風エラーハイク通知”を生成・表示します。
---
# 機能概要
random-os-fake-error-haiku-notifierは、あなたの作業中やCLIコマンドの実行時に、あたかもOSが発するかのようなエラー通知を、五・七・五の俳句形式でランダム生成し、デスクトップ通知やターミナルに表示します。内容は「ファイル消失」「プロセス停止」「404」などの技術ワードと、季語や詩的表現を組み合わせ、思わずクスッとする摩訶不思議な体験を提供します。実用性は皆無ですが、開発者の心に小さな余白と遊び心をもたらします。
# 使い方
- 明示呼び出し例: `/skills menu` から本Skillを選択、または `random-os-fake-error-haiku-notifier` を直接呼び出し
- 暗黙発動: コマンドラインやログに「error」「fail」「not found」「bug」などのキーワードが出現した際に自動発動
- 通知頻度や表示方法は環境変数やCLIオプションで調整可能
# 出力例
```
メモリ消ゆ 春まだ遠き バグの夜
404 道に迷いて 春霞
プロセス落つ 静けさ満ちて 冬の朝
ファイル消え 風の行方に 秋の雲
アクセス拒否 月のしじまに 眠れず
```
# 注意点
- 本Skillはジョーク用途です。実際のエラーや障害通知には使えません。
- 通知が多すぎる場合は設定で頻度を調整してください。
- ローカル保存やログファイル出力は行いません。
- Linux/macOSの通知API(notify-send, osascript)を利用します。Windowsではターミナル出力のみ対応。
# 参考資料
- [参考: Bash notify-send](https://specifications.freedesktop.org/notification-spec/latest/)
- references/design_notes.md も参照
scripts/random_os_fake_error_haiku_notifier.py
import random
import sys
import argparse
import os
import platform
import subprocess
import time
from typing import List
# 五・七・五の俳句生成用パーツ
FIVE_SYLLABLES = [
"メモリ消ゆ",
"404",
"プロセス落つ",
"ファイル消え",
"アクセス拒否",
"バグ踊る",
"権限なし",
"カーネル割れ",
"応答なし",
"書き込み不可",
"デバイス消ゆ",
"未知の闇",
"シグナル舞う",
"接続切れ",
"タイムアウト"
]
SEVEN_SYLLABLES = [
"春まだ遠き",
"道に迷いて",
"静けさ満ちて",
"風の行方に",
"月のしじまに",
"秋の雲行く",
"夜明けを待つ",
"夏の幻に",
"冬の朝焼け",
"波の音消え",
"霧のむこうに",
"星の瞬き",
"夢のさきまで",
"砂嵐の中",
"雪の帳に"
]
# 通知API
def notify_desktop(message: str):
system = platform.system()
if system == 'Linux':
try:
subprocess.run(['notify-send', message], check=False)
except Exception:
pass
elif system == 'Darwin':
osa_script = f'display notification "{message}" with title "OS Fake Error Haiku"'
try:
subprocess.run(['osascript', '-e', osa_script], check=False)
except Exception:
pass
else:
# Windowsや未対応OSは標準出力のみ
print(message)
# 俳句生成
def generate_haiku() -> str:
line1 = random.choice(FIVE_SYLLABLES)
line2 = random.choice(SEVEN_SYLLABLES)
line3 = random.choice(FIVE_SYLLABLES)
return f"{line1} {line2} {line3}"
def print_haiku_terminal(haiku: str):
print(haiku)
def notify_haiku(haiku: str, mode: str):
if mode == 'desktop':
notify_desktop(haiku)
elif mode == 'both':
notify_desktop(haiku)
print_haiku_terminal(haiku)
else:
print_haiku_terminal(haiku)
# ログ監視(簡易)
def monitor_stdin(keywords: List[str], interval: float, mode: str, freq: int):
count = 0
try:
while True:
line = sys.stdin.readline()
if not line:
break
if any(kw in line.lower() for kw in keywords):
haiku = generate_haiku()
notify_haiku(haiku, mode)
count += 1
if freq > 0 and count >= freq:
break
time.sleep(interval)
except KeyboardInterrupt:
pass
def main():
parser = argparse.ArgumentParser(description='Random OS Fake Error Haiku Notifier')
subparsers = parser.add_subparsers(dest='command')
parser_run = subparsers.add_parser('run', help='1回だけ俳句を表示')
parser_run.add_argument('--mode', choices=['terminal', 'desktop', 'both'], default='terminal', help='通知方法')
parser_monitor = subparsers.add_parser('monitor', help='標準入力を監視し、エラーワード出現時に俳句通知')
parser_monitor.add_argument('--mode', choices=['terminal', 'desktop', 'both'], default='terminal', help='通知方法')
parser_monitor.add_argument('--interval', type=float, default=0.1, help='監視間隔(秒)')
parser_monitor.add_argument('--freq', type=int, default=5, help='最大通知回数 (0で無制限)')
parser_monitor.add_argument('--keywords', nargs='+', default=['error','fail','not found','bug','exception','crash'], help='監視キーワード')
args = parser.parse_args()
if args.command == 'run':
haiku = generate_haiku()
notify_haiku(haiku, args.mode)
elif args.command == 'monitor':
monitor_stdin(args.keywords, args.interval, args.mode, args.freq)
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
random-os-fake-error-haiku-notifierは、CLIや作業ログに現れるエラー/バグ関連ワードをトリガーとして、俳句形式のジョーク通知を行うSkillです。技術用語と季語を組み合わせることで、開発現場にユーモアと癒しをもたらします。
# 公式ドキュメント抜粋
- [notify-send (Linux)](https://specifications.freedesktop.org/notification-spec/latest/)
- [osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
# 利用例
- `cat error.log | python random_os_fake_error_haiku_notifier.py monitor --mode both`
- `python random_os_fake_error_haiku_notifier.py run --mode desktop`
# 注意点
- 実際の障害監視や運用通知には使用しないこと。
- Windowsではデスクトップ通知非対応(ターミナル出力のみ)。
- 通知が多すぎる場合は--freqや--intervalで調整可能。
# 設計方針
- 五・七・五の構造を厳守しつつ、毎回異なる俳句を生成。
- OSごとに最適な通知APIを選択。
- Skill本体は100行超のPythonスクリプトでCLI/監視モード両対応。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-fake-error-haiku-notifier .agents/skills/random-os-fake-error-haiku-notifier
.agents/skills/random-os-fake-error-haiku-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-error-haiku-notifier
# 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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
