Codex ユーザーが日常でぶつかる悩み
AI コーディングエージェントの Codex を使っていると、開発現場ならではの「あるある」な困りごとに直面しがちです。特に、複雑な repository や monorepo を扱う際、context や path 管理の煩雑さ、長時間の AI coding workflow でのストレスが積み重なります。そんな中で、作業に煮詰まったり、思わぬエラーや context ロストが起きると、つい気分が沈みがちです。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
さらに、エラーやトラブル発生時に現場の緊張感が高まることも少なくありません。そんなとき、ちょっとした「和み」や「笑い」があれば、場の空気が和らぐのに…と感じることもあるでしょう。
この Skill が一言でいうと何を解決するか
一言サマリ: 開発現場のピリピリ感を一瞬で和らげる“謎の言い訳”通知Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になります:
- 長時間の AI coding workflow や repository understanding で煮詰まった気分を、ユーモラスな「OS言い訳通知」でリフレッシュできる
- エラーや context ロスト時に、深刻な空気を和ませてチームの心理的安全性を向上
- monorepo や複雑な directory 構造を扱う際のストレスを、クリエイティブな通知演出で軽減
- onboarding や session 再開時の「また説明か…」という気持ちを、ちょっとした笑いでリセット
- Skill の導入が簡単で、path management や memory を壊さず安全に遊べる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-excuse-generator .agents/skills/random-os-excuse-generator実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or $random-os-excuse-generator mention
> session start
[OS Notification]
「本日、/src/utils/context_manager.py の挙動が不安定なのは、地球の自転速度が微妙に変化したためです。気にせず進みましょう。」
[Codex]
repository understanding を開始します。もし挙動が怪しかったら、宇宙のせいにしてOKです。
シーン2: monorepo / package 跨ぎ作業時
> move to packages/auth
[OS Notification]
「'auth' パッケージの tests ディレクトリでエラーが出るのは、今日は太陽フレアが強すぎるからです。コード自体は悪くありません。」
[Codex]
monorepo の directory 境界を認識しました。context を切り替えます。
シーン3: お遊び的な使い方
> /random-os-excuse-generator
[OS Notification]
「この repository は、コードが恥ずかしがっているため一時的に動作を拒否しています。コーヒーブレイク推奨。」
[Codex]
長時間 workflow のリフレッシュにどうぞ。AI coding workflow が楽しくなります。
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-excuse-generator/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-excuse-generator/
├── SKILL.md
├── scripts/
│ └── random_os_excuse_generator.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_excuse_generator.py |
Random OS Excuse Generator – ユーモラスな言い訳をランダムで表示 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-excuse-generator
description: エラーや作業中断、バグ報告、進捗遅延などの場面で『謎のOS言い訳通知』が必要なとき、または/skills menuやrandom-os-excuse-generatorの明示呼び出し時に発動します。
---
# 機能概要
random-os-excuse-generatorは、開発現場の緊張感や深刻なエラー発生時に、全く根拠のないユーモラスな『OS言い訳』をデスクトップ通知またはターミナルにランダム表示するジョーク系Skillです。作業が止まった理由やバグの原因を、天体現象や不可解な現象のせいにすることで、場の空気を和ませます。深刻なバグや進捗遅延時にも、笑いでリフレッシュできる演出を提供します。
# 使い方
- 明示呼び出し例: `/skills menu` から random-os-excuse-generator を選択、または `$random-os-excuse-generator` とメンション
- 暗黙発動キーワード例: 「バグ」「エラー」「進捗遅延」「止まった」「動かない」「なぜ」などの文脈を検知し自動発動
# 出力例
```
[OS Excuse] 今バグが出たのは水星逆行のせいです。
[OS Excuse] コードが今日は恥ずかしがっているようです。
[OS Excuse] 太陽フレアが強すぎて動作が不安定です。
[OS Excuse] 量子もつれの影響で一時的に停止しました。
[OS Excuse] 今日はOSの気分が乗らないみたいです。
[OS Excuse] 近所のWi-Fiが共鳴してエラーが発生しました。
[OS Excuse] サーバーが月齢を気にしています。
[OS Excuse] バグは宇宙線のせいかもしれません。
```
# 注意点
- 本Skillは通知・表示のみで、ファイルやシステムに一切変更を加えません。
- 本番データや業務フローへの影響はありません。
- OSの通知APIを利用しますが、通知が非対応の環境ではターミナル出力のみとなります。
- ジョーク用途のため、実際の障害対応やバグ修正には使えません。
# 参考資料
詳細設計や通知APIの利用例は references/design_notes.md を参照してください。OS通知にはPythonの標準/外部ライブラリ(plyer等)を使用しています。
scripts/random_os_excuse_generator.py
import sys
import argparse
import random
import os
import platform
import time
from typing import List
try:
from plyer import notification
PLYER_AVAILABLE = True
except ImportError:
PLYER_AVAILABLE = False
EXCUSES = [
"今バグが出たのは水星逆行のせいです。",
"コードが今日は恥ずかしがっているようです。",
"太陽フレアが強すぎて動作が不安定です。",
"量子もつれの影響で一時的に停止しました。",
"今日はOSの気分が乗らないみたいです。",
"近所のWi-Fiが共鳴してエラーが発生しました。",
"サーバーが月齢を気にしています。",
"バグは宇宙線のせいかもしれません。",
"システムが週末モードに入っています。",
"AIが今日は休暇を取っています。",
"OSがコーヒーブレイク中です。",
"コードが自己主張を始めました。",
"CPUが星占いに夢中です。",
"今日はキーボードが反抗期です。",
"電磁波が強すぎます。",
"メモリが懐古主義に走っています。",
"ネットワークが人見知りしています。",
"天気が良すぎて動きたくないようです。",
"OSが哲学的な悩みに陥っています。",
"今日のバグはブラックホールのせいです。"
]
LOG_FILE = os.path.expanduser("~/.random_os_excuse_generator.log")
def notify_excuse(excuse: str):
if PLYER_AVAILABLE:
notification.notify(
title="OS Excuse",
message=excuse,
app_name="random-os-excuse-generator",
timeout=5
)
else:
print(f"[OS Excuse] {excuse}")
def log_excuse(excuse: str):
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
with open(LOG_FILE, 'a', encoding='utf-8') as f:
f.write(f"{timestamp}\t{excuse}\n")
def list_excuses(count: int = 10):
if not os.path.exists(LOG_FILE):
print("No excuse log found.")
return
with open(LOG_FILE, 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines[-count:]:
print(line.strip())
def summary():
if not os.path.exists(LOG_FILE):
print("No excuse log found.")
return
count = 0
freq = {}
with open(LOG_FILE, 'r', encoding='utf-8') as f:
for line in f:
count += 1
excuse = line.strip().split('\t')[-1]
freq[excuse] = freq.get(excuse, 0) + 1
print(f"Total excuses generated: {count}")
print("Top excuses:")
for excuse, n in sorted(freq.items(), key=lambda x: -x[1])[:5]:
print(f" {excuse} ({n} times)")
def generate_excuse() -> str:
return random.choice(EXCUSES)
def main():
parser = argparse.ArgumentParser(description="Random OS Excuse Generator - ユーモラスな言い訳をランダムで表示")
subparsers = parser.add_subparsers(dest='command', required=True)
parser_log = subparsers.add_parser('log', help='新しい言い訳を生成し通知&ログ')
parser_log.add_argument('--count', type=int, default=1, help='生成する言い訳の数')
parser_list = subparsers.add_parser('list', help='過去の言い訳ログを表示')
parser_list.add_argument('--count', type=int, default=10, help='表示する最新ログ数')
parser_summary = subparsers.add_parser('summary', help='言い訳生成の集計')
args = parser.parse_args()
if args.command == 'log':
for _ in range(args.count):
excuse = generate_excuse()
notify_excuse(excuse)
log_excuse(excuse)
elif args.command == 'list':
list_excuses(args.count)
elif args.command == 'summary':
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
random-os-excuse-generatorは、開発現場のストレス緩和やチームの雰囲気改善を目的としたジョーク系Skillです。エラーやバグ発生時に、科学的根拠のないユーモラスな言い訳を自動生成し、通知またはターミナルに出力します。
# 公式ドキュメント抜粋
デスクトップ通知はPythonのplyerライブラリ(https://github.com/kivy/plyer)を利用。plyerが未インストールの場合は標準出力にフォールバックします。ログはユーザーディレクトリ配下にテキストで記録されます。
# 利用例
- バグ報告時の緊張緩和
- チームの朝会や進捗報告でのアイスブレイク
- 開発現場の雑談ネタ
# 注意点
Skillは通知・表示のみで、ファイルやシステム設定への変更は一切行いません。本番データや業務フローへの影響はありません。
# 設計方針
- OS/環境依存を最小化し、通知非対応時は必ず標準出力に切り替え
- 言い訳パターンは今後も拡張可能
- ログや集計機能で利用状況を可視化
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-excuse-generator .agents/skills/random-os-excuse-generator
.agents/skills/random-os-excuse-generator の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-excuse-generator
# 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言い訳通知を出してみた!作業中に笑えるジョーク演出を体験 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
