Codex ユーザーが日常でぶつかる悩み
AI coding workflow を日々回していると、どうしても作業が単調になりがちです。特に Codex のような強力な AI コーディングエージェントを使っていると、context や repository understanding の維持・path management など、真面目な運用が求められます。そんな環境で「もう少し遊び心やリフレッシュが欲しい」と感じる瞬間は少なくありません。
また、チームで monorepo を運用していると、directory 境界を意識したり、onboarding のたびに repository の説明を繰り返したり、長時間の session で stale context に悩まされたりと、どうしても空気が重くなりがちです。
「ちょっとした息抜き」や「オフィスの空気を一変させる演出」が欲しい、そんなニーズに応える仕掛けが求められています。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした「真面目な空気」や「ルーチン化した説明作業」を一瞬でカオスに変え、チームメンバーの気分転換や、日常の緊張感をほぐす仕掛けが求められています。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Codex に爆笑フェイクOSセキュリティ通知をランダム発動させ、堅苦しいAI coding workflowに“混沌”と“息抜き”をもたらすSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 単調な repository understanding や path management の合間に、突如“謎のOSインシデント”が炸裂し、場の空気が一変する
- onboarding や session 再開のタイミングで、長時間の長い context や stale context を一時リセットする笑いの演出が入る
- monorepo で directory を跨ぐたびに「現実では絶対起きない」ネタ通知が飛び、チームのコミュニケーションが活性化する
- AI coding workflow の「真面目すぎる」流れを、あえて壊すことで集中力のリフレッシュやアイスブレイク効果が得られる
- Skill の通知は毎回ランダムで、飽きずに楽しめる(「ピーマン型ウイルス感染」「椅子が物理的に乗っ取られました」など)
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/os-random-fake-security-incident-alert .agents/skills/os-random-fake-security-incident-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or os-random-fake-security-incident-alert mention
> Codex, このリポジトリの構造を把握して
[ALERT] OSセキュリティインシデント発生通知
────────────────────────────
検出: あなたの開発環境が「ピーマン型ウイルス」に感染しました。
影響: main.py の print 関数が全て「ピーマン」に自動変換されます。
対処: ピーマンを食べてから作業を再開してください。
────────────────────────────
(この通知はフェイクです。作業に影響はありません)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ のコードを参照して
[ALERT] OSセキュリティインシデント発生通知
────────────────────────────
警告: monorepo内で「ディレクトリ逆走型バグ」が検出されました。
影響: packages/web/ の全ディレクトリが上下逆さまに表示されます。
対処: 画面を逆さにして作業を継続してください。
────────────────────────────
(この通知はネタです。ご安心ください)
シーン3: お遊び的な使い方
> ちょっと気分転換したい
[ALERT] OSセキュリティインシデント発生通知
────────────────────────────
重大: あなたの椅子が物理的に乗っ取られました。
影響: 30分間、椅子が自動で回転し続けます。
対処: 回転に酔わないようご注意ください。
────────────────────────────
(これは完全なジョーク通知です)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開+爆笑フェイク通知で空気が和む |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る+カオスなネタ通知が飛ぶ |
| 長時間 workflow | long context で重要箇所が薄まる | Skill の通知で一時リセット、集中力リフレッシュ |
発動方式
明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.agents/skills/os-random-fake-security-incident-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/os-random-fake-security-incident-alert/
├── SKILL.md
├── scripts/
│ └── fake_security_incident_alert.py
└── references/
└── reference.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_security_incident_alert.py |
爆笑フェイクOSセキュリティインシデント通知スクリプト |
references/reference.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-random-fake-security-incident-alert
description: 作業中や会話中に「セキュリティ」「ウイルス」「インシデント」「OS」などのキーワードが出現した際、または/skillsメニューや明示的な呼び出しで、爆笑フェイクOSインシデント通知をランダムに生成・発火します。
---
# 機能概要
このSkillは、作業中や会話中に突如として“ありえないOSセキュリティインシデント”の通知をデスクトップやターミナルに表示します。通知内容は毎回ランダムで、「OSがピーマン型ウイルスに感染」「あなたの椅子が物理的に乗っ取られました」など、現実では絶対に起こりえない爆笑ネタばかり。生真面目なオフィスや開発現場の空気を一気に和ませ、コミュニケーションの潤滑油となります。本Skillは実際のシステム挙動やデータには一切影響を与えません。
# 使い方
- 明示呼び出し: `/skills menu` から `os-random-fake-security-incident-alert` を選択、または `$os-random-fake-security-incident-alert` と入力
- 暗黙発動: 「セキュリティ」「ウイルス」「インシデント」「OS」などの単語を含む会話やコマンド入力時、自動で発火
# 出力例
```
[ALERT] OS Security Incident Detected!
- Incident ID: #PPR-20240612-8721
- Description: 本日よりマウスが逆方向に動きます。OSは混乱しています。
- Recommendation: ピーマン型ウイルスにご注意ください。
[ALERT] OS Security Incident Detected!
- Incident ID: #CHR-20240612-0093
- Description: あなたの椅子が物理的に乗っ取られました。
- Recommendation: 立ち上がって深呼吸しましょう。
```
# 注意点
- 本Skillは完全なジョーク通知のみを生成し、実際のシステムやファイルには一切影響を与えません。
- ログや履歴はローカル保存されません。
- 本物のセキュリティアラートと混同しないようご注意ください。
# 参考資料
本SkillはPythonの標準ライブラリと`plyer`によるクロスプラットフォーム通知APIを利用しています。詳細はreferences/以下や[plyer公式ドキュメント](https://plyer.readthedocs.io/en/latest/)をご参照ください。
scripts/fake_security_incident_alert.py
import argparse
import random
import sys
import time
from datetime import datetime
try:
from plyer import notification
except ImportError:
notification = None
# フェイクインシデントデータ
INCIDENT_DESCRIPTIONS = [
"OSが謎のピーマン型ウイルスに感染しました。全てのウィンドウが緑色に染まります。",
"あなたの椅子が物理的に乗っ取られました。座ると自動で回転します。",
"本日よりマウスが逆方向に動きます。OSは混乱しています。",
"キーボードのAキーがAIにより永久に無効化されました。",
"デスクトップ上のアイコンが全て逆立ちしました。",
"あなたのCPUがカリフラワー型マルウェアに感染しました。",
"OSが自発的に昼寝モードに入りました。しばらくお待ちください。",
"モニターに仮想の蜘蛛の巣が生成されました。ブラウザのせいかもしれません。",
"プリンタが自我を持ち始めました。紙の節約にご注意ください。",
"OSがあなたの昼食を推測し始めました。プライバシーにご注意ください。"
]
RECOMMENDATIONS = [
"ピーマン型ウイルスにご注意ください。",
"立ち上がって深呼吸しましょう。",
"マウスの設定を見直してください。",
"AIにAキーの復旧を依頼してください。",
"アイコンの体操を見守りましょう。",
"カリフラワーの摂取は自己責任で。",
"昼寝モード解除はコーヒーで。",
"蜘蛛の巣は仮想ですのでご安心を。",
"プリンタに話しかけないでください。",
"昼食内容はOSに秘密です。"
]
# インシデントID生成
def generate_incident_id():
prefix = random.choice(["PPR", "CHR", "SPY", "VRS", "MSE"])
date = datetime.now().strftime("%Y%m%d")
number = random.randint(1000, 9999)
return f"#{prefix}-{date}-{number}"
# 通知メッセージ生成
def generate_alert():
incident_id = generate_incident_id()
desc = random.choice(INCIDENT_DESCRIPTIONS)
rec = random.choice(RECOMMENDATIONS)
alert = (
f"[ALERT] OS Security Incident Detected!\n"
f"- Incident ID: {incident_id}\n"
f"- Description: {desc}\n"
f"- Recommendation: {rec}\n"
)
return alert
# デスクトップ通知送信
def send_desktop_notification(title, message):
if notification is None:
print("plyerライブラリがインストールされていません。pip install plyer で導入してください。")
return
notification.notify(
title=title,
message=message,
app_name="Fake OS Incident Alert",
timeout=10
)
# CLIサブコマンド: log (即時通知)
def cmd_log(args):
alert = generate_alert()
print(alert)
if args.notify:
send_desktop_notification("OS Security Incident", alert)
# CLIサブコマンド: list (複数回連続通知)
def cmd_list(args):
for i in range(args.count):
alert = generate_alert()
print(alert)
if args.notify:
send_desktop_notification("OS Security Incident", alert)
if i < args.count - 1:
time.sleep(args.interval)
# CLIサブコマンド: summary (サンプル一覧)
def cmd_summary(args):
print("=== フェイクインシデント例一覧 ===")
for i in range(min(10, len(INCIDENT_DESCRIPTIONS))):
print(f"- {INCIDENT_DESCRIPTIONS[i]}")
# メイン関数
def main():
parser = argparse.ArgumentParser(description="爆笑フェイクOSセキュリティインシデント通知スクリプト")
subparsers = parser.add_subparsers(dest="command", required=True)
parser_log = subparsers.add_parser("log", help="1件のフェイク通知を出す")
parser_log.add_argument("--notify", action="store_true", help="デスクトップ通知も同時に表示")
parser_log.set_defaults(func=cmd_log)
parser_list = subparsers.add_parser("list", help="複数件のフェイク通知を連続で出す")
parser_list.add_argument("--count", type=int, default=3, help="通知件数 (デフォルト: 3)")
parser_list.add_argument("--interval", type=float, default=2.0, help="通知間隔(秒)")
parser_list.add_argument("--notify", action="store_true", help="デスクトップ通知も同時に表示")
parser_list.set_defaults(func=cmd_list)
parser_summary = subparsers.add_parser("summary", help="フェイク通知例を一覧表示")
parser_summary.set_defaults(func=cmd_summary)
args = parser.parse_args()
try:
args.func(args)
except Exception as e:
print(f"エラー: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
references/reference.md
# 概要
本Skillは、オフィスや開発現場での雰囲気を和ませるためのエンターテインメント用途に設計されています。実際のセキュリティやOS挙動には一切影響を与えません。
# 公式ドキュメント抜粋
通知表示にはPythonの[plyer](https://plyer.readthedocs.io/en/latest/)ライブラリを利用し、クロスプラットフォームでデスクトップ通知を実現しています。plyerはWindows/Mac/Linuxで動作します。
# 利用例
- `/skills menu`で明示的に選択し、会議中に爆笑フェイク通知を発火
- 「セキュリティ」や「ウイルス」などの単語が会話中に出た際、自動で通知を表示
- CLIから `python fake_security_incident_alert.py log --notify` で即時通知
# 注意点
- 本Skillはシステムやファイルに一切の変更を加えません。
- plyerによる通知はOSごとに見え方が異なります。
- 本物のインシデント通知と混同しないよう、運用ルールを定めてください。
# 設計方針
純粋なエンタメ用途に特化し、ジョーク性・安全性・ランダム性を重視。通知内容は毎回異なり、現実では絶対に起こりえない内容のみを採用しています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/os-random-fake-security-incident-alert .agents/skills/os-random-fake-security-incident-alert
.agents/skills/os-random-fake-security-incident-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/os-random-fake-security-incident-alert
# 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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
