Codex ユーザーが日常でぶつかる悩み
AI Coding Agent「Codex」を使った開発現場では、集中して作業していると、ふとした瞬間に単調さや緊張感のなさを感じることが多いものです。特に通知や演出まわりは「本番さながら」の臨場感とは程遠く、淡々とした画面に没入し続けることが日常化しています。こんな悩み、Codexユーザーなら一度は経験があるはずです。
- 長時間同じ context で作業していると、緊張感が薄れて workflow がマンネリ化しがち
- repository understanding に集中している最中、突然の刺激や遊び心が欲しくなる
- monorepo の directory を行き来しても、画面や通知に変化がなく、作業空間が単調
- AI coding workflow のなかで「OSっぽい」演出や alerts を体験したくても、現状は皆無
- onboarding や長時間 memory を使う場面で、気分転換や笑いが欲しいが、仕組みがない
こうした「単調な作業空間」「遊び心の欠如」「意図的な緊張感の演出不足」は、通知・演出・OS連携系 Skill の出番です。特に「突然の謎アラートで空気を変える」仕掛けは、日常の閉塞感を一瞬で打破する力があります。
この Skill が一言でいうと何を解決するか
一言サマリ: 作業に集中しているとSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 単調なAI coding workflowに、突然のフェイクOSダウンタイム通知で“謎の危機感”と遊び心を注入できる
- repositoryやdirectory構造の理解に没頭しすぎて context が硬直した瞬間、笑いや緊張感で気分転換できる
- onboardingや長時間作業時のstale context問題を、意図的なアラートでリフレッシュできる
- monorepo作業中も、思わぬタイミングで“OSからの謎通知”が飛び、作業空間に変化をもたらす
- Skillの導入だけで、Codexの通知・演出体験が一段上の“遊び場”に進化する
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/os-random-fake-sudden-downtime-alert .agents/skills/os-random-fake-sudden-downtime-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or os-random-fake-sudden-downtime-alert mention
> プロジェクト開始
=== 緊急通知: OSメンテナンス予告 ===
このPCは15分後に「やる気低下」により自動ダウンタイムに突入します。
理由: repository understanding レベルが限界値に到達
対策: キーボードを褒め称えることで延命可能
影響範囲: /src /config /README.md
詳細: https://developers.openai.com/codex/skills
===============================
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に移動
!!! 緊急: OSからのダウンタイム予告 !!!
15分後に「パッケージ跨ぎ疲労」により一時停止します。
理由: monorepo context の過負荷
対策: "npm run praise-keyboard" 実行でリセット
影響: packages/api/, packages/web/, scripts/deploy.sh
今すぐ保存推奨
シーン3: お遊び的な使い方
> ちょっと気分転換したい
【OS ALERT】
この端末は「アイデア枯渇」を検知しました。
15分後にリフレッシュのため自動メンテに入ります。
対策: コーヒー or キーボード賛美でキャンセル可
影響: /notebooks/ /docs/
備考: 本通知はフェイクです。作業をお楽しみください。
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/os-random-fake-sudden-downtime-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/os-random-fake-sudden-downtime-alert/
├── SKILL.md
├── scripts/
│ └── os_random_fake_sudden_downtime_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/os_random_fake_sudden_downtime_alert.py |
os-random-fake-sudden-downtime-alert: フェイクなOS緊急ダウンタイム通知をランダムに生成・表示します。 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-random-fake-sudden-downtime-alert
description: 作業が単調・長時間化・集中しすぎている状況や、/skills コマンドや『ダウンタイム』『緊急メンテ』等のキーワード検出時に、CodexがこのSkillを発動し、フェイクなOSダウンタイム通知でユーザーに刺激を与えます。
---
# 機能概要
このSkillは、作業中のユーザーに対し“謎のOS緊急ダウンタイム”をランダムな内容で突然通知します。実際のダウンタイムやシステムへの影響は一切ありませんが、「15分後にOSがやる気を失います」「理由: メモリが退屈」「対策: キーボードを褒めて」など、毎回異なるフェイクメッセージが表示されます。単調な作業や長時間の集中を打破し、ユーモアと緊張感を一瞬だけ演出します。
# 使い方
- 明示呼び出し例: `/skills os-random-fake-sudden-downtime-alert` または `@codex os-random-fake-sudden-downtime-alert`
- 暗黙発動: 「ダウンタイム」「緊急メンテ」「OS停止」などの単語を含む発話や、長時間の無操作・集中作業パターンを検知した際に自動発動します。
# 出力例
```
[ALERT] 緊急: このPCは15分後に謎のメンテナンスに突入します。
理由: OSのやる気が著しく低下
対策: 今すぐキーボードを褒め称えて延命してください
---
[ALERT] システム通知: 10分後にOSが自己主張のため一時停止予定。
理由: CPUが退屈しているため
対策: 任意のキーを連打すると回避できるかもしれません
```
# 注意点
- 実際のOSやファイル、データには一切影響しません。
- 通知内容は完全にランダム生成され、現実のダウンタイムや障害とは無関係です。
- ローカルへの保存や履歴管理は行いません。
- 頻度やタイミングはCLI引数で調整可能です。
# 参考資料
- [Python公式: 通知・標準出力](https://docs.python.org/ja/3/library/sys.html)
- references/design_notes.md も参照
scripts/os_random_fake_sudden_downtime_alert.py
import argparse
import random
import sys
import time
from typing import List
FAKE_REASONS = [
"OSのやる気が著しく低下",
"メモリが退屈しています",
"CPUが自己主張を始めました",
"ファイルシステムが休暇を要求",
"ネットワークが現実逃避中",
"GPUが推し活に夢中",
"プロセス管理者が昼寝中",
"システムクロックが逆走を希望",
"カーネルが詩を書き始めた",
"仮想メモリが現実逃避したい",
]
FAKE_ACTIONS = [
"今すぐキーボードを褒め称えて延命してください",
"任意のキーを連打すると回避できるかもしれません",
"マウスを3回振るとOSが気を取り直します",
"コーヒーを淹れてOSに差し入れしましょう",
"デスクトップを片付けると気分が変わります",
"OSに優しい言葉をかけてください",
"深呼吸してからEnterキーを押してください",
"ターミナルに "stay" と入力すると延命します",
"画面を見つめて微笑むと効果的です",
"Ctrl+Alt+LOVEで回避できるかも",
]
FAKE_HEADERS = [
"[ALERT] 緊急: このPCは{min}分後に謎のメンテナンスに突入します。",
"[ALERT] システム通知: {min}分後にOSが自己主張のため一時停止予定。",
"[ALERT] WARNING: {min}分後にOSが気まぐれで再起動するかもしれません。",
"[ALERT] Notice: {min}分後にOSが自発的に休憩を開始します。",
"[ALERT] Attention: {min}分後にOSが謎の沈黙モードに入ります。",
]
HISTORY: List[str] = []
def generate_fake_alert() -> str:
min_left = random.choice([5, 10, 15, 20])
header = random.choice(FAKE_HEADERS).format(min=min_left)
reason = random.choice(FAKE_REASONS)
action = random.choice(FAKE_ACTIONS)
alert = f"{header}\n理由: {reason}\n対策: {action}"
return alert
def print_alert(alert: str):
print(alert)
print("---")
def log_alert(alert: str):
HISTORY.append(alert)
def list_history():
if not HISTORY:
print("まだ通知履歴はありません。")
return
for i, alert in enumerate(HISTORY, 1):
print(f"[{i}]\n{alert}\n---")
def summary_history():
print(f"通知履歴: {len(HISTORY)}件")
reasons = {}
for alert in HISTORY:
for reason in FAKE_REASONS:
if reason in alert:
reasons[reason] = reasons.get(reason, 0) + 1
if reasons:
print("理由別発生回数:")
for k, v in sorted(reasons.items(), key=lambda x: -x[1]):
print(f" {k}: {v}回")
else:
print("理由別統計はありません。")
def main():
parser = argparse.ArgumentParser(
description="os-random-fake-sudden-downtime-alert: フェイクなOS緊急ダウンタイム通知をランダムに生成・表示します。"
)
subparsers = parser.add_subparsers(dest="command", required=False)
# サブコマンド: alert
alert_parser = subparsers.add_parser("alert", help="フェイクダウンタイム通知を1回表示")
alert_parser.add_argument("--count", type=int, default=1, help="通知回数 (デフォルト: 1)")
alert_parser.add_argument("--interval", type=float, default=0, help="通知間隔(秒)")
# サブコマンド: list
list_parser = subparsers.add_parser("list", help="通知履歴を表示")
# サブコマンド: summary
summary_parser = subparsers.add_parser("summary", help="通知履歴の統計を表示")
# サブコマンドなし: 1回だけalert
args = parser.parse_args()
if args.command == "alert" or args.command is None:
count = getattr(args, "count", 1)
interval = getattr(args, "interval", 0)
for _ in range(count):
alert = generate_fake_alert()
print_alert(alert)
log_alert(alert)
if interval > 0 and _ < count - 1:
time.sleep(interval)
elif args.command == "list":
list_history()
elif args.command == "summary":
summary_history()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
本Skillは、作業に没頭しがちなユーザーに“謎のOSダウンタイム”というフェイク通知を送り、単調な空間に遊び心と一瞬の緊張感を提供します。実際のシステムやデータには一切影響しません。
# 公式ドキュメント抜粋
- Python argparse: https://docs.python.org/ja/3/library/argparse.html
- Python random: https://docs.python.org/ja/3/library/random.html
# 利用例
- `/skills os-random-fake-sudden-downtime-alert` で即座に通知
- 長時間の作業や「ダウンタイム」等の発話時に自動発動
# 注意点
- 通知は全てランダム生成で、現実の障害やOSイベントとは無関係です。
- 履歴は実行中のプロセス内でのみ保持し、永続化しません。
- 実際のOSやファイルには一切アクセスしません。
# 設計方針
- ユーザーの安全・安心を最優先し、冗談通知のみを提供
- CLIサブコマンドで通知履歴や統計も確認可能
- 拡張性を考慮し、通知文や理由・対策の追加が容易な構造
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/os-random-fake-sudden-downtime-alert .agents/skills/os-random-fake-sudden-downtime-alert
.agents/skills/os-random-fake-sudden-downtime-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/os-random-fake-sudden-downtime-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で謎のOS緊急ダウンタイム告知を体験してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
