Codex ユーザーが日常でぶつかる悩み
AI coding workflow を日々回す中で、Codex の通知や演出面が「もう少し遊び心があっても…」と感じる瞬間は意外と多い。特に長時間作業や monorepo の context 管理に神経を使う局面では、どうしても画面やターミナルが無機質になりがち。そんなとき、ふとした“脱力系”の演出があれば、気分転換やチームの雰囲気づくりにも役立つはず。
Codex 固有の context・repository understanding・path management の課題も絡めつつ、日常で感じる「通知・演出」まわりの困りごとは次の通り。
- Codex が context を見失って違う場所のコードを参照するのに、エラーや通知が事務的で“味気ない”
- monorepo で package を跨いだ瞬間、repo 構造の説明や path 指定が毎回「お堅い」出力になり、気が滅入る
- session を再開すると、前回までの context や directory 構成を再度説明する必要があり、毎回同じ流れに飽きてくる
- long context 問題で重要な情報が薄まり、集中力が切れがちなタイミングで「何か面白い演出」が欲しくなる
- 「ここはこういう repository」という説明を毎回冒頭で書くことに疲れ、たまには遊び心が欲しいと感じる
こうした「真面目すぎる通知」「単調な context 復元」に、ひとさじのカオスや笑いを加えたい——そんなニーズに応える Skill が求められている。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Codex の通知・context 切替の瞬間に“謎のOSアップデートパッチノート”を爆誕させるSkill。
具体的には、以下のような効果が期待できる。
- 長時間の AI coding workflow や repository understanding の合間に、完全無意味なアップデート通知で気分転換ができる
- monorepo や directory 跨ぎ時の path management の“お堅い流れ”に、ユーモアを注入できる
- session 再開や onboarding で context が切り替わるたび、毎回ユニークな“OSパッチノート”が表示され、チーム内コミュニケーションのきっかけになる
- Codex のメモリや long context 問題で集中力が落ちた場面でも、演出的な通知でリフレッシュできる
- AI coding workflow の“真面目さ”をほどよく崩し、作業を楽しく演出する
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-patch-note-generator .agents/skills/random-os-fake-patch-note-generator実行したらこうなる (3つの利用シーン)
Skill を有効化すると、ターミナルやエディタでコマンド・指示を出すたび、現実とは一切関係のない“謎のOSパッチノート”が爆誕。内容は完全ランダムなため、毎回違う通知が現れる。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu または $random-os-fake-patch-note-generator mention
> 新しいリポジトリで作業を始めたい
[OSアップデートのお知らせ]
バージョン: 12.4.7-fantasy
- バグ修正: デスク上の書類が自動で消失する問題を修正しました
- 機能追加: "やる気ボタン"を押すと一瞬だけ集中力が上昇します
- 既知の問題: おやつの消費速度が上がる場合があります
- セキュリティ: コーヒーカップの検知精度を向上
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に移動してビルド
[OSアップデートパッチノート]
バージョン: 3.0.1-chaos
- バグ修正: packages/api/で発生していた「眠気が襲う」現象を一部解消
- 機能追加: packages/web/に「無意味なコメント生成」機能を搭載
- 既知の問題: README.mdが時々踊りだすことがあります
- 注意: path management の混乱は引き続き監視中
シーン3: お遊び的な使い方
> コーヒーブレイクしたい
[OSアップデートのお知らせ]
バージョン: 7.2.0-beta
- バグ修正: カップの中身が無限に減る問題を修正
- 機能追加: "一時的にやる気が消える"モードを追加
- 既知の問題: 休憩後の集中力低下が再発する場合があります
- セキュリティ: お菓子の隠し場所が自動検出されるようになりました
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-patch-note-generator/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-patch-note-generator/
├── SKILL.md
├── scripts/
│ └── random_os_fake_patch_note_generator.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_patch_note_generator.py |
Random OS Fake Patch Note Generator |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-patch-note-generator
description: Codexは、ユーザーがコマンド実行・ファイル保存・ビルド・テスト・/skillsメニュー呼び出し等のタイミングで本Skillを発動し、毎回異なる“偽OSパッチノート”を通知またはターミナル出力してください。
---
# 機能概要
このSkillは、ターミナルやエディタ上でコマンド実行・ファイル保存・ビルド・テストなどの操作を行うたびに、現実とは全く関係のない“謎のOSアップデートパッチノート”を自動生成し、デスクトップ通知やターミナルに表示します。バグ修正・機能追加・既知の問題など、OSのリリースノート風の文体を完全再現しつつ、内容は「バグ:机の上の書類が片付かない問題を修正」などカオスなものばかり。シリアスな作業空間に笑いと混乱をもたらし、気分転換や会話のネタにも最適です。
# 使い方
- 明示呼び出し: `/skills menu` から「random-os-fake-patch-note-generator」を選択、または `$random-os-fake-patch-note-generator` メンションで即時出力
- 暗黙発動: 「ビルド」「run」「test」「save」「deploy」「commit」などのコマンドやファイル操作時に自動発動
# 出力例
```
[Patch Note v2.3.7]
- 機能追加: キーボードの打鍵音が心地よくなる新サウンドエンジンを搭載
- バグ修正: おやつの消費が止まらない問題を一時的に緩和
- 既知の問題: 机の上の書類が片付かない現象が継続中
- パフォーマンス: 集中力が一瞬だけ上昇するアルゴリズムを実装
```
# 注意点
- 出力内容は完全にランダムで、実際のOSや作業内容とは一切関係ありません。
- 頻度制御機能により、連続発動や過剰な通知は抑制されます。
- ローカルにパッチノート履歴を保存する場合は、`--log`オプションを利用してください。
- 本Skillは業務システムやCI/CDパイプライン等のクリティカルな環境では無効化推奨です。
# 参考資料
- 詳細設計・サンプル一覧: references/design_notes.md
- デスクトップ通知API: https://pypi.org/project/plyer/
- OSパッチノート文体参考: https://support.microsoft.com/ja-jp/windows/update-history-windows
scripts/random_os_fake_patch_note_generator.py
import argparse
import random
import sys
import time
from datetime import datetime
try:
from plyer import notification
PLYER_AVAILABLE = True
except ImportError:
PLYER_AVAILABLE = False
VERSION_PREFIXES = [
'v1.0.', 'v2.3.', 'v4.2.', 'v0.9.', 'v3.1.', 'v5.0.', 'v2.7.', 'v6.6.', 'v1.9.', 'v7.0.'
]
FEATURES = [
'集中力が一瞬だけ上昇する新アルゴリズムを搭載',
'キーボードの打鍵音が心地よくなる新サウンドエンジンを実装',
'コーヒーの香りが漂う仮想空間を追加',
'昼寝モードの自動切替機能を追加',
'モニターの明るさが気分で変化する機能を追加',
'椅子の高さが自動調整されるAPIを実装',
'おやつタイマーを強化',
'デバッグ時にBGMが流れる機能を追加',
'タスク管理AIの気まぐれモードを追加',
'デスクトップ背景が1時間ごとに変わる機能を実装'
]
BUGFIXES = [
'机の上の書類が片付かない問題を修正',
'おやつの消費が止まらない問題を一時的に緩和',
'椅子が勝手に回転するバグを修正',
'モニターがたまに眠くなる現象を修正',
'タスクが永遠に終わらない問題を修正',
'コーヒーが冷める速度が速すぎるバグを修正',
'昼寝モードが解除できないバグを修正',
'通知が深夜にも鳴り続ける問題を修正',
'集中力が突然消失する現象を部分的に修正',
'BGMが止まらない問題を修正'
]
KNOWN_ISSUES = [
'机の上の書類が片付かない現象が継続中',
'おやつの消費が止まらない',
'昼寝モードから目覚められないことがある',
'コーヒーがいつの間にか消える',
'タスク管理AIが気まぐれすぎる',
'椅子の高さが急に変わることがある',
'BGMが突然大音量になる',
'通知が止まらなくなる場合がある',
'デスクトップ背景が真っ黒になることがある',
'集中力が予告なく低下する'
]
PERFORMANCE = [
'集中力が一瞬だけ上昇するアルゴリズムを実装',
'おやつ消費速度を微妙に最適化',
'椅子の回転速度を向上',
'通知の表示速度を強化',
'BGMの再生品質が向上',
'タスク切替時の気分転換効率を改善',
'昼寝モードの切替時間を短縮',
'コーヒーの温度保持性能を向上',
'デスクトップ背景の切替速度を高速化',
'タスク管理AIの応答時間を短縮'
]
LOGFILE = 'os_fake_patch_note_history.log'
CATEGORY_LABELS = [
('機能追加', FEATURES),
('バグ修正', BUGFIXES),
('既知の問題', KNOWN_ISSUES),
('パフォーマンス', PERFORMANCE)
]
def random_patch_note():
version = random.choice(VERSION_PREFIXES) + str(random.randint(0, 99))
lines = [f'[Patch Note {version}]']
used_categories = random.sample(CATEGORY_LABELS, k=random.randint(2, 4))
for label, pool in used_categories:
n = random.randint(1, 2)
for _ in range(n):
lines.append(f'- {label}: {random.choice(pool)}')
return '\n'.join(lines)
def show_notification(title, message):
if not PLYER_AVAILABLE:
return False
try:
notification.notify(
title=title,
message=message,
timeout=6
)
return True
except Exception:
return False
def log_patch_note(note):
with open(LOGFILE, 'a', encoding='utf-8') as f:
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
f.write(f'[{now}]\n{note}\n\n')
def list_history(limit=5):
try:
with open(LOGFILE, 'r', encoding='utf-8') as f:
entries = f.read().strip().split('\n\n')
entries = [e for e in entries if e.strip()]
for entry in entries[-limit:]:
print(entry)
print()
except FileNotFoundError:
print('No patch note history found.')
def summary_history():
try:
with open(LOGFILE, 'r', encoding='utf-8') as f:
lines = f.readlines()
total = sum(1 for l in lines if l.startswith('[') and 'Patch Note' in l)
print(f'Total patch notes generated: {total}')
except FileNotFoundError:
print('No patch note history found.')
def main():
parser = argparse.ArgumentParser(description='Random OS Fake Patch Note Generator')
subparsers = parser.add_subparsers(dest='command')
parser_log = subparsers.add_parser('log', help='Generate and log a fake patch note')
parser_log.add_argument('--notify', action='store_true', help='Show desktop notification (if possible)')
parser_list = subparsers.add_parser('list', help='List recent fake patch notes')
parser_list.add_argument('--limit', type=int, default=5, help='Number of recent notes to show')
parser_summary = subparsers.add_parser('summary', help='Show summary of patch note history')
parser_once = subparsers.add_parser('once', help='Generate and show a patch note (no logging)')
parser_once.add_argument('--notify', action='store_true', help='Show desktop notification (if possible)')
args = parser.parse_args()
if args.command == 'log':
note = random_patch_note()
log_patch_note(note)
print(note)
if args.notify:
show_notification('OS Patch Note', note)
elif args.command == 'list':
list_history(limit=args.limit)
elif args.command == 'summary':
summary_history()
elif args.command == 'once':
note = random_patch_note()
print(note)
if args.notify:
show_notification('OS Patch Note', note)
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、開発作業の合間に“偽のOSパッチノート”を自動生成し、通知やターミナルに表示することで、作業空間にユーモアとリラックスをもたらすことを目的としています。
# 公式ドキュメント抜粋
- plyer通知API: https://plyer.readthedocs.io/en/latest/
- argparse: https://docs.python.org/ja/3/library/argparse.html
# 利用例
- `/skills menu`で明示呼び出し
- コマンド実行やファイル保存時に自動発動
- `python random_os_fake_patch_note_generator.py log --notify` で即時通知
# 注意点
- 通知はplyerがインストールされている場合のみ有効
- 履歴は同ディレクトリの`os_fake_patch_note_history.log`に保存
- 実際のOSや作業には一切影響しません
# 設計方針
- パッチノート文体を厳密に模倣しつつ、内容は完全に現実離れしたジョーク要素で構成
- 頻度制御や履歴管理機能を備え、過剰な出力を抑制
- CLIサブコマンドで用途に応じた柔軟な利用が可能
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-fake-patch-note-generator .agents/skills/random-os-fake-patch-note-generator
.agents/skills/random-os-fake-patch-note-generator の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-patch-note-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 との連携設計はどうあるべきか?
- 通知やターミナル出力が毎回ユニークかつ無意味なアップデート内容であるか?
- コマンド実行や作業の邪魔になりすぎない絶妙な頻度制御ができているか?
- OSっぽいパッチノート文体・ノリがしっかり再現されているか?
実際に Codex で試した検証ログは Codexで謎のOSアップデート通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
