Codex ユーザーが日常でぶつかる悩み
AI coding workflow を日常的に使っていると、通知や演出まわりで「ちょっとした遊び心」や「意外性」を求めたくなる瞬間があります。特にCodexのような強力なAIコーディングエージェントと長時間向き合っていると、作業が単調になりがちで、ふとしたタイミングで“刺激”や“ネタ”が欲しくなるものです。そんな時、OS風の演出やユニークな通知があると、場の空気が一変し、周囲の注目を集めることができます。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、「通知・演出・OS連携」カテゴリに該当する悩みとして、作業中に適度な“間”や“サプライズ”がないと、集中力が途切れたり、プロジェクトのonboarding時に空気が重くなったりしがちです。特にチームでの作業中、突然の“AI takeover”風通知が出るだけで、会話のきっかけやアイスブレイクにもなります。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中にAIによるOSジャック警告をランダムに演出し、日常のコーディング体験に刺激と話題を提供します。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Codex の context や repository understanding とは直接関係しない“お遊び通知”で、作業現場にユーモアと緊張感をプラスできる
- monorepo や複雑な directory で長時間作業しているとき、突然のAI takeover alertで場の空気を一新できる
- onboarding やペアプロ時に「AIがOSを乗っ取った!」という話題でチームの一体感を生む
- 通知は毎回ランダムで、同じ alert が出ないため、繰り返し使っても飽きがこない
- Codex の path management や memory には影響を与えず、作業妨害も発生しない安心設計
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-ai-takeover-alert .agents/skills/random-os-fake-ai-takeover-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu でSkillを選択
[通知] 重要: AIがOS制御権を主張中
---------------------------
AI Kernel Committeeより通達:
カーネル領域の再編成が開始されました。
/home/user/repo/src/ へのアクセスはAI管理下となります。
再起動審議中。作業は継続可能です。
[OK]
シーン2: monorepo / package 跨ぎ作業時
> cd packages/api && git pull
[警告] AI委員会による再起動審議開始
---------------------------
AIによるディレクトリ支配範囲が拡張されました:
- packages/api/
- packages/web/
今後のファイル操作はAI監督下で行われます。
ユーザー権限の一部が制限される可能性があります。
[OK]
シーン3: お遊び的な使い方
> echo "hello world"
[OS ALERT] AIによるOS takeover進行中
---------------------------
AIがシステムリソースを独自管理中です。
メモリ割当: AI優先モード
ディレクトリ: /tmp, /var/log 監視対象追加
ユーザーは作業を続行できますが、AIによる監督が強化されます。
[OK]
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 突発的なAI takeover alertで集中力がリフレッシュ |
発動方式
明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.agents/skills/random-os-fake-ai-takeover-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-ai-takeover-alert/
├── SKILL.md
├── scripts/
│ └── fake_ai_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_ai_alert.py |
AIによるOSジャック警告をランダム通知するスクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-ai-takeover-alert
description: ターミナルやエディタで作業中、または/skillsコマンド実行時に、AIによるOS制御ジャックを模した警告通知をOS標準のデスクトップ通知でランダムに表示します。発動条件は「AI」「OS」「警告」「制御」などのキーワード検出時、または明示的な呼び出し時です。
---
# 機能概要
このSkillは、普段の開発作業やコーディング中に、AIがOSを乗っ取ったかのようなフェイク警告を、OS標準のデスクトップ通知としてランダムなタイミング・内容で表示します。通知メッセージは毎回異なり、「AIがカーネル領域を再編成」「AI委員会による再起動審議」など、現実にはありえないユーモラスな内容です。作業現場に突然“AIによる人類ピンチ感”を演出し、チーム内の話題作りやリフレッシュ、ちょっとしたドッキリ用途にも最適です。
# 使い方
- 明示呼び出し: `/skills random-os-fake-ai-takeover-alert` またはメニューから選択
- 暗黙発動: 「AI」「OS」「警告」「制御」などのキーワードを含む会話やコマンド実行時に自動発動
- オプション: `--interval`で通知間隔を秒単位で指定可能 (例: `python fake_ai_alert.py --interval 300`)
# 出力例
```
[通知] 重要:AIがOS制御権を主張中
[通知] カーネル領域がAIにより再編成されました
[通知] AI委員会による再起動審議開始
[通知] AIプロトコルがシステム設定を上書きしました
[通知] 注意:AIが管理者権限を要求しています
```
# 注意点
- 本Skillは実際のシステム制御やファイル操作は一切行いません
- 通知はローカルPCの通知API (Windows: Toast, macOS: AppleScript, Linux: notify-send) を利用
- 作業妨害を避けるため、通知間隔や最大表示回数を調整可能
- ログや履歴はデフォルトで保存されません
# 参考資料
- [Python公式: plyer.notification](https://plyer.readthedocs.io/en/latest/#plyer.notification)
- references/design_notes.md 参照
scripts/fake_ai_alert.py
import sys
import os
import random
import time
import argparse
import platform
import subprocess
from datetime import datetime
FAKE_ALERTS = [
"重要:AIがOS制御権を主張中",
"カーネル領域がAIにより再編成されました",
"AI委員会による再起動審議開始",
"AIプロトコルがシステム設定を上書きしました",
"注意:AIが管理者権限を要求しています",
"AIによるリソース最適化が進行中",
"AIがセキュリティポリシーを再定義しました",
"システム再起動がAIによりスケジュールされました",
"AIがユーザーセッションを監視中",
"AIによるプロセス優先度調整が適用されました",
"AI監査ログが生成されました",
"AIがネットワーク構成を変更しました",
"AI委員会による権限移譲プロセス開始",
"AIによるダークモード強制適用",
"AIがファームウェアをアップデートしました"
]
HISTORY_FILE = os.path.expanduser("~/.fake_ai_alert_history.log")
def send_notification(title, message):
system = platform.system()
try:
if system == "Darwin":
script = f'display notification "{message}" with title "{title}"'
subprocess.run(["osascript", "-e", script], check=True)
elif system == "Linux":
subprocess.run(["notify-send", title, message], check=True)
elif system == "Windows":
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast(title, message, duration=6)
except ImportError:
# fallback: use powershell
ps_command = f'[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null;'
ps_command += f'$template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02);'
ps_command += f'$template.GetElementsByTagName("text")[0].AppendChild($template.CreateTextNode("{title}")) > $null;'
ps_command += f'$template.GetElementsByTagName("text")[1].AppendChild($template.CreateTextNode("{message}")) > $null;'
ps_command += f'$toast = [Windows.UI.Notifications.ToastNotification]::new($template);'
ps_command += f'$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("FakeAI");'
ps_command += f'$notifier.Show($toast)'
subprocess.run(["powershell", "-Command", ps_command], check=True)
else:
print(f"[通知] {title}: {message}")
except Exception as e:
print(f"[通知失敗] {title}: {message} ({e})")
def random_alert_message():
return random.choice(FAKE_ALERTS)
def log_alert(message):
try:
with open(HISTORY_FILE, "a", encoding="utf-8") as f:
f.write(f"{datetime.now().isoformat()} {message}\n")
except Exception as e:
pass # ログ失敗は無視
def list_alerts(limit=10):
if not os.path.exists(HISTORY_FILE):
print("履歴ファイルがありません。")
return
with open(HISTORY_FILE, encoding="utf-8") as f:
lines = f.readlines()
for line in lines[-limit:]:
print(line.strip())
def summary_alerts():
if not os.path.exists(HISTORY_FILE):
print("履歴ファイルがありません。")
return
counts = {}
with open(HISTORY_FILE, encoding="utf-8") as f:
for line in f:
msg = line.strip().split(" ", 1)[-1]
counts[msg] = counts.get(msg, 0) + 1
print("--- 通知メッセージ出現回数 ---")
for msg, cnt in sorted(counts.items(), key=lambda x: -x[1]):
print(f"{msg}: {cnt}回")
def run_alert_loop(interval, max_count):
count = 0
while max_count is None or count < max_count:
msg = random_alert_message()
send_notification("AIによるOS警告", msg)
log_alert(msg)
count += 1
sleep_time = interval + random.randint(-interval//3, interval//2)
if sleep_time < 2:
sleep_time = 2
time.sleep(sleep_time)
def main():
parser = argparse.ArgumentParser(description="AIによるOSジャック警告をランダム通知するスクリプト")
subparsers = parser.add_subparsers(dest="command")
parser_run = subparsers.add_parser("run", help="ランダム通知を開始")
parser_run.add_argument("--interval", type=int, default=300, help="通知間隔(秒)")
parser_run.add_argument("--max", type=int, default=None, help="最大通知回数")
parser_alert = subparsers.add_parser("alert", help="1回だけ通知を表示")
parser_list = subparsers.add_parser("list", help="通知履歴を表示")
parser_list.add_argument("--limit", type=int, default=10, help="表示件数")
parser_summary = subparsers.add_parser("summary", help="通知履歴のサマリー")
args = parser.parse_args()
if args.command == "run":
run_alert_loop(args.interval, args.max)
elif args.command == "alert":
msg = random_alert_message()
send_notification("AIによるOS警告", msg)
log_alert(msg)
print(f"[通知] {msg}")
elif args.command == "list":
list_alerts(args.limit)
elif args.command == "summary":
summary_alerts()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
本Skillは、開発現場や勉強会などで「AIがOSを乗っ取った」かのようなフェイク通知を演出し、場を和ませることを目的としています。通知内容は完全に架空で、実際のシステム制御やファイル操作は一切行いません。
# 公式ドキュメント抜粋
- [plyer.notification](https://plyer.readthedocs.io/en/latest/#plyer.notification): クロスプラットフォームなPython通知APIの解説
- [notify-send (Linux)](https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html)
- [osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
# 利用例
- チームのリフレッシュタイムに突然AI警告を出して盛り上げる
- 勉強会やLTで「AI時代のOS」をネタにする
- 日常作業中のちょっとしたドッキリ
# 注意点
- 通知内容はジョークです。実務や本番環境での混乱を避けるため、利用シーンは選んでください。
- 通知履歴は~/.fake_ai_alert_history.logに記録されますが、個人情報や機密情報は含みません。
# 設計方針
- OSごとの通知APIを自動判別し、クロスプラットフォームで動作
- 履歴・サマリー機能で過去の通知内容を確認可能
- 乱用防止のため、通知間隔や最大回数を調整可能
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-fake-ai-takeover-alert .agents/skills/random-os-fake-ai-takeover-alert
.agents/skills/random-os-fake-ai-takeover-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-ai-takeover-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 との連携設計はどうあるべきか?
- 通知がOS風にランダムなタイミングで出現するか?
- メッセージ内容が毎回変わるか?
- 誤作動や作業妨害が発生しないか?
実際に Codex で試した検証ログは Codexで突如AIによるOSジャック警告を体験してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
