Codex ユーザーが日常でぶつかる悩み
Codex を日常的に使っていると、真面目な開発現場にも独特の「緊張感」や「マンネリ感」が漂う瞬間が訪れます。特に通知や演出系の機能は、単調になりがちな AI coding workflow をリフレッシュするきっかけになりえますが、現状の Codex にはそうした遊び心がなかなか組み込まれていません。集中している時ほど、ふとしたタイミングで「何か一発ネタがほしい」と感じることも多いはずです。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした context 管理や path management の悩みは開発者なら誰もが経験しますが、たまには「突拍子もない」「意味不明な」演出で場の空気を変えたいと感じることも。通知・演出・OS連携 Skill の需要は、単なる workflow 効率化だけでなく、オンボーディングやチームの雰囲気作りにも広がっています。
この Skill が一言でいうと何を解決するか
一言サマリ: 突然Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 開発 workflow の合間に、RPG風の「OSソフトウェアアップデート vs バグ魔王バトル」演出が突如発動し、真面目な session や repo 操作が一瞬だけカオスな世界観に変わる
- 進捗バーや通知が「勇者」「魔王」など context に即した実況に変わり、長時間の作業や onboarding の空気をリフレッシュできる
- 毎回バトル展開やセリフがランダム生成されるため、同じ repository でも飽きずに楽しめる
- 通知・演出が directory や path management のタイミングで発動するため、repo 理解や context 切り替え時にもアクセントになる
- 「Skill を入れるだけ」で、面倒な設定や追加コマンド不要。Codex の AI coding workflow に自然に組み込める
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-software-update-boss-fight .agents/skills/random-os-fake-software-update-boss-fight実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-fake-software-update-boss-fight mention
> プロジェクトを新規で開始します
[OS通知] 『謎のソフトウェアアップデート』が始まります…
[バトル実況] 勇者アップデート、伝説のバグ魔王に挑む!
[進捗バー] 進行中: 0%... 17%... 42%...
[バトル実況] バグ魔王の逆襲!勇者、パッチの剣を抜く!
[進捗バー] 68%... 89%...
[バトル実況] 勇者、最終パッチを適用!バグ魔王、バグ爆発!
[結果] 勇者アップデートの勝利!システムが正常に保たれました。
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/frontend/ に移動
[OS通知] 『OSアップデートバトル』が発生!
[バトル実況] 勇者アップデート、フロントエンドのバグ魔王と遭遇!
[進捗バー] 10%... 33%... 66%...
[バトル実況] バグ魔王「エラーの嵐を食らえ!」 勇者「Lintの盾で防御!」
[進捗バー] 95%...
[バトル実況] 勇者、バグ魔王をデバッグの炎で撃破!
[結果] 勝利!packages/frontend/ の context がクリアになりました。
シーン3: お遊び的な使い方
> なんか面白いことして
[OS通知] 『伝説のアップデートバトル』が突発発生!
[バトル実況] 勇者アップデート、未知のバグ魔王とバトル開始!
[進捗バー] 5%... 50%... 75%...
[バトル実況] バグ魔王「stack overflow の呪い!」 勇者「パッチの剣で一刀両断!」
[進捗バー] 100%...
[バトル実況] 勇者…全滅。バグ魔王の勝利!次回のアップデートをお待ちください。
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-software-update-boss-fight/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-software-update-boss-fight/
├── SKILL.md
├── scripts/
│ └── os_update_boss_fight.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/os_update_boss_fight.py |
OSソフトウェアアップデート vs バグ魔王 RPGバトル実況スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-software-update-boss-fight
description: このSkillは「アップデート」「バグ」「ソフトウェア更新」などの通知・進捗バー・OS演出に関する文脈や、/skills コマンドや random-os-fake-software-update-boss-fight の明示呼び出し時に発動します。開発現場での息抜きや、会話にRPG風の茶番を挟みたい場合に最適です。
---
# 機能概要
このSkillは、OSのソフトウェアアップデート風の通知や進捗バーをRPGバトル実況に変換します。突然画面端やメニューバーで「アップデート勇者」と「伝説のバグ魔王」の熱い戦いが始まり、進捗バーや通知でバトル実況が展開されます。バトルの展開やセリフは毎回ランダムに変化し、最後は「勝利」か「全滅」で締めるカオスな演出を提供。開発現場の緊張感を一瞬だけRPGの世界に変え、業務中のリフレッシュやチームの雰囲気作りに役立ちます。
# 使い方
- 明示呼び出し: `/skills random-os-fake-software-update-boss-fight` または `/skills menu` から選択
- 暗黙発動: 「アップデート」「バグ」「ソフトウェア更新」「パッチ」などのキーワードが会話や通知に含まれる場合、自動で発動
# 出力例
```
[ソフトウェアアップデート開始]
勇者アップデートが伝説のバグ魔王に挑む!
進捗: 12% - バグ魔王の逆襲!勇者、パッチの剣を抜く!
進捗: 47% - 勇者、デバッグの呪文を唱えた!バグ魔王が混乱した!
進捗: 89% - 勇者、最終パッチを投入!バグ魔王が動揺している!
進捗: 100% - 勇者の勝利!伝説のバグ魔王を討伐!
[アップデート完了]
```
# 注意点
- 本Skillは演出目的で実際のOSアップデートは行いません。
- 出力は一時的で、ローカル保存や履歴管理は行いません。
- 一部環境では通知が表示されない場合があります。
- 業務の進行を妨げない範囲でご利用ください。
# 参考資料
- references/design_notes.md 参照
- 公式: https://docs.python.org/ja/3/library/random.html, https://docs.python.org/ja/3/library/time.html
scripts/os_update_boss_fight.py
import argparse
import random
import sys
import time
from typing import List
# バトル実況のテンプレート
BATTLE_EVENTS = [
"バグ魔王の逆襲!勇者、パッチの剣を抜く!",
"勇者、デバッグの呪文を唱えた!バグ魔王が混乱した!",
"バグ魔王、クラッシュの闇を放つ!勇者が耐えた!",
"勇者、リファクタリングの光でバグ魔王を照らす!",
"バグ魔王が無限ループ攻撃!勇者、冷静にbreak!",
"勇者、最終パッチを投入!バグ魔王が動揺している!",
"バグ魔王、レガシーコードの罠を仕掛ける!",
"勇者、テストケースの嵐!バグ魔王がひるんだ!",
"バグ魔王、未定義動作で反撃!勇者が回避!",
"勇者、CI/CDの力で連続攻撃!"
]
VICTORY_MESSAGES = [
"勇者の勝利!伝説のバグ魔王を討伐!",
"アップデート勇者がバグ魔王を完全修正!",
"バグ魔王、ついにバグトラッカーに封印される!"
]
DEFEAT_MESSAGES = [
"バグ魔王の勝利!アップデート勇者は全滅した…",
"勇者、バグの嵐に飲まれ力尽きた…",
"伝説のバグ魔王、システムを支配!全滅…"
]
INTRO_MESSAGES = [
"[ソフトウェアアップデート開始]",
"勇者アップデートが伝説のバグ魔王に挑む!"
]
END_MESSAGES = [
"[アップデート完了]",
"[アップデート失敗]"
]
PROGRESS_STEPS = [12, 23, 35, 47, 58, 66, 78, 89, 100]
def print_battle_sequence(verbose: bool = False):
print(random.choice(INTRO_MESSAGES))
print(random.choice(INTRO_MESSAGES[1:]))
last_event = None
for idx, progress in enumerate(PROGRESS_STEPS):
# ランダムな実況イベント
if progress < 100:
event = random.choice(BATTLE_EVENTS)
# 直前と同じ実況を避ける
while event == last_event:
event = random.choice(BATTLE_EVENTS)
last_event = event
print(f"進捗: {progress}% - {event}")
if verbose:
time.sleep(0.5 + random.uniform(0, 0.7))
else:
# 勝敗を決定
win = random.choice([True, False])
if win:
print(f"進捗: 100% - {random.choice(VICTORY_MESSAGES)}")
print(END_MESSAGES[0])
else:
print(f"進捗: 100% - {random.choice(DEFEAT_MESSAGES)}")
print(END_MESSAGES[1])
if verbose:
time.sleep(0.8)
def list_events():
print("--- バトル実況イベント一覧 ---")
for e in BATTLE_EVENTS:
print(f"- {e}")
print("\n--- 勝利メッセージ ---")
for v in VICTORY_MESSAGES:
print(f"- {v}")
print("\n--- 敗北メッセージ ---")
for d in DEFEAT_MESSAGES:
print(f"- {d}")
def summary():
print("random-os-fake-software-update-boss-fight Skill 概要:")
print("- OSアップデート風の進捗バーをRPGバトル実況に変換")
print("- バトル展開やセリフは毎回ランダム")
print("- 勝敗もランダムで決定")
print("- 明示/暗黙トリガー両対応")
print("- 実際のアップデートは行われません")
def main():
parser = argparse.ArgumentParser(
description="OSソフトウェアアップデート vs バグ魔王 RPGバトル実況スクリプト"
)
subparsers = parser.add_subparsers(dest='command')
# battleコマンド
parser_battle = subparsers.add_parser('battle', help='RPGバトル実況を開始')
parser_battle.add_argument('--verbose', action='store_true', help='進行をゆっくり表示')
# listコマンド
parser_list = subparsers.add_parser('list', help='実況/勝敗メッセージ一覧を表示')
# summaryコマンド
parser_summary = subparsers.add_parser('summary', help='Skillの概要を表示')
args = parser.parse_args()
if args.command == 'battle':
print_battle_sequence(verbose=args.verbose)
elif args.command == 'list':
list_events()
elif args.command == 'summary':
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
本Skillは、OSアップデートの進捗バーや通知演出をRPGバトル実況に変換することで、日常の開発現場に遊び心とリフレッシュ効果をもたらします。バトルの進行やセリフは毎回ランダムで生成され、最後に勝敗もランダム決定されます。
# 公式ドキュメント抜粋
- Python random: https://docs.python.org/ja/3/library/random.html
- Python argparse: https://docs.python.org/ja/3/library/argparse.html
- time.sleep: https://docs.python.org/ja/3/library/time.html
# 利用例
- Slackやチャットで「アップデート」や「バグ」などの話題が出た際、/skillsコマンドで明示的に呼び出し
- チームの朝会やリリース前後の息抜きイベントとして利用
# 注意点
- 実際のアップデートやファイル操作は行いません。
- 出力は一時的で、ローカル保存や履歴管理はありません。
- 業務の妨げにならない範囲でご利用ください。
# 設計方針
- シンプルなCLI構成で、明示/暗黙両トリガーに対応
- バトル実況や勝敗演出は毎回ランダム生成
- 拡張性を考慮し、イベントやメッセージはリストで管理
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-fake-software-update-boss-fight .agents/skills/random-os-fake-software-update-boss-fight
.agents/skills/random-os-fake-software-update-boss-fight の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-software-update-boss-fight
# 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 との連携設計はどうあるべきか?
- 進捗バーや通知がRPG風バトル実況になっているか
- バトルの展開やセリフが毎回ランダムで変化するか
- 最後に勝敗がランダムで決定し、きちんと通知されるか
実際に Codex で試した検証ログは Codexで通知・演出・OS連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
