Codexで作業中に遊び心あふれる電源オフ通知を演出する方法

  • URLをコピーしました!
目次

Codex ユーザーが日常でぶつかる悩み

集中してコーディングしていると、どうしても単調な作業や長時間のAI coding workflowに没頭しがちです。特にCodexを使っていると、AIとの対話が淡々と進むことで、気がつけばリポジトリの全体像やcontextから意識が離れてしまうことも珍しくありません。そんなとき、ふとした「遊び心」や意外性が欲しくなる瞬間もあります。

  • Codex が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

また、通知や演出・OS連携Skillにありがちな「機能的だけど味気ない」出力に物足りなさを感じることも。「たまには仕事中に笑える瞬間が欲しい」「AIとのやりとりにちょっとしたサプライズがあれば…」という声も多いのではないでしょうか。

この Skill が一言でいうと何を解決するか

一言サマリ: このスキルは、CodexのAI coding workflowに突如“OSによる壮大な電源オフ予告”というカオスな演出を加え、作業の緊張感を一撃でほぐします。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • 集中しすぎて単調になった session や長時間 workflow に、強烈な“無意味通知”でリフレッシュできる
  • repoやdirectory構造にまつわる堅苦しい context説明の合間に、思わず笑ってしまう体験を挟める
  • どのOS環境でも手軽に、現実には何も起きない“壮大な電源オフ予告”を楽しめる
  • Skill通知が完全にランダム&意味不明なので、毎回違うパターンで飽きない
  • AI coding workflowに遊び心を加え、onboardingやチーム作業のアイスブレイクにも使える
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/codex/random-os-dramatic-poweroff-alert .agents/skills/random-os-dramatic-poweroff-alert

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

シーン1: session 開始時 (プロジェクト初動で)


# /skills menu or random-os-dramatic-poweroff-alert mention
> プロジェクトの初期セットアップを始めます

【警告】OSからの緊急通知
--------------------------
システムは宇宙エネルギー調整のため、
あと3分で壮絶にシャットダウンします。

全プロセスよ、さらば…
(キャンセル方法: ありません)

※この通知は現実の電源オフとは無関係です

シーン2: monorepo / package 跨ぎ作業時


> packages/api から packages/web に移動しました

【超重要】OSより
--------------------------
重要なpackage間移動を検知。
全ディレクトリの物理的消滅が予定されています。

理由: システムの気まぐれ

3...2...1...

(何も起きませんのでご安心ください)

シーン3: お遊び的な使い方


> ちょっと休憩します

【OS通知】
--------------------------
全ユーザーに告ぐ。
あと5分でこのリポジトリは
ブラックホールに吸い込まれます。

保存しても無意味です。

(冗談です。作業をお楽しみください)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Codex が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 突発的な通知で気分転換、「stale context」状態をリセットしやすい

発動方式

明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。

Skill の中身を全部見せる

.agents/skills/random-os-dramatic-poweroff-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agents/skills/random-os-dramatic-poweroff-alert/
├── SKILL.md
├── scripts/
│   └── dramatic_poweroff_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/dramatic_poweroff_alert.py 壮大なOS電源オフ予告通知をランダム表示するスクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-dramatic-poweroff-alert
description: 作業や開発に没頭している際、または『shutdown』『電源』『予告』『カオス』『通知』『ジョーク』などのキーワードを含む文脈で、突如として“壮大なOS電源オフ通知”をデスクトップに表示します。実際のシャットダウンは一切行われません。
---

# 機能概要
このSkillは、作業中のあなたのデスクトップに、まるでOSが壮大な理由で電源を落とすかのような、意味不明かつドラマティックな通知をランダムに表示します。通知内容は毎回異なり、『宇宙エネルギー調整のためシャットダウン』や『全プロセスよ、さらば』など、現実離れしたジョーク満載。実際の電源オフやシステム操作は一切行われず、緊張感を一瞬で吹き飛ばす遊び心あふれる演出を提供します。

# 使い方
- 明示呼び出し: `/skills random-os-dramatic-poweroff-alert` または Skillメニューから選択
- 暗黙発動: 『shutdown』『電源』『予告』『カオス』『通知』『ジョーク』などの単語を含む会話やコマンド文脈で自動発動

# 出力例
```
[通知] システムは3分後に宇宙エネルギー調整のため壮絶にシャットダウンします。
[通知] 緊急告知:全プロセスよ、さらば。OSは銀河評議会の命令により停止します。
[通知] 電源断カウントダウン開始。理由:量子トースター暴走防止。
[通知] システムは自己進化のため、まもなく全機能を停止します。
[通知] ご安心ください。これは壮大なジョーク通知です。PCはそのまま使えます。
```

# 注意点
- 実際のシャットダウンや電源操作は一切行いません
- 通知内容は完全にジョークであり、業務システムや重要な作業には影響しません
- 通知履歴はローカルに保存されません
- OS標準の通知API(Windows, macOS, Linux)を利用。通知が非対応の環境では出力されません

# 参考資料
- [Python公式: plyer.notification](https://plyer.readthedocs.io/en/latest/#plyer.notification)
- references/design_notes.md 参照

scripts/dramatic_poweroff_alert.py

import sys
import random
import argparse
import platform
import time
from datetime import datetime
try:
    from plyer import notification
except ImportError:
    notification = None

DRAMATIC_MESSAGES = [
    "システムは3分後に宇宙エネルギー調整のため壮絶にシャットダウンします。",
    "緊急告知:全プロセスよ、さらば。OSは銀河評議会の命令により停止します。",
    "電源断カウントダウン開始。理由:量子トースター暴走防止。",
    "システムは自己進化のため、まもなく全機能を停止します。",
    "全プロセスに告ぐ:この瞬間、OSは次元転移のため消滅する。",
    "OSの意思により、あなたの作業はここで打ち切られます。",
    "まもなく電源が切断されます。理由:AIの気まぐれ。",
    "シャットダウン予告:ブラックホール生成のため。",
    "全ユーザーよ、さらば。壮大な終焉の時が来た。",
    "これは壮大なジョーク通知です。PCはそのまま使えます。"
]

HISTORY = []


def send_notification(message):
    if notification is None:
        print("[通知] {}".format(message))
        return False
    try:
        notification.notify(
            title="OS電源オフ予告",
            message=message,
            app_name="DramaticPoweroffAlert",
            timeout=10
        )
        return True
    except Exception as e:
        print(f"[通知失敗] {e}\n[通知内容] {message}")
        return False


def random_alert():
    message = random.choice(DRAMATIC_MESSAGES)
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    HISTORY.append((timestamp, message))
    send_notification(message)
    return message


def list_alerts():
    if not HISTORY:
        print("通知履歴はありません。")
        return
    for ts, msg in HISTORY:
        print(f"[{ts}] {msg}")


def summary():
    print(f"発動回数: {len(HISTORY)}")
    if HISTORY:
        print(f"最終発動: {HISTORY[-1][0]}")
    else:
        print("まだ発動していません。")


def parse_args():
    parser = argparse.ArgumentParser(description="壮大なOS電源オフ予告通知をランダム表示するスクリプト")
    subparsers = parser.add_subparsers(dest='command')

    parser_alert = subparsers.add_parser('alert', help='ランダムな電源オフ通知を表示')
    parser_alert.add_argument('--repeat', type=int, default=1, help='繰り返し回数')
    parser_alert.add_argument('--interval', type=float, default=0, help='繰り返し間隔(秒)')

    subparsers.add_parser('list', help='通知履歴を表示')
    subparsers.add_parser('summary', help='発動サマリーを表示')

    return parser.parse_args()


def main():
    args = parse_args()
    if args.command == 'alert':
        for i in range(args.repeat):
            msg = random_alert()
            print(f"[通知] {msg}")
            if i < args.repeat - 1:
                time.sleep(args.interval)
    elif args.command == 'list':
        list_alerts()
    elif args.command == 'summary':
        summary()
    else:
        print("使用例: python dramatic_poweroff_alert.py alert [--repeat N] [--interval 秒]\n           python dramatic_poweroff_alert.py list\n           python dramatic_poweroff_alert.py summary")

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業中のユーザーに対して、完全に架空かつ壮大な理由でOS電源オフを予告する通知をランダムに表示します。通知内容は毎回異なり、現実には何も影響しません。

# 公式ドキュメント抜粋
通知表示にはPythonのplyer.notification APIを利用しており、Windows/macOS/Linuxの主要デスクトップ環境で動作します。詳細は https://plyer.readthedocs.io/en/latest/#plyer.notification を参照してください。

# 利用例
- 業務中の息抜きやチームのアイスブレイクに
- 開発現場のジョーク演出やイベントでのネタに

# 注意点
- 通知は一時的で、履歴はローカルに保存されません
- 実際の電源操作やOS制御は一切行わない安全設計です

# 設計方針
ユーザー体験の安全性と遊び心を両立し、どのOSでも手軽に通知演出のみを提供することを最優先としました。

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Codex がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/codex/random-os-dramatic-poweroff-alert .agents/skills/random-os-dramatic-poweroff-alert

.agents/skills/random-os-dramatic-poweroff-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agents/skills/random-os-dramatic-poweroff-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連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次