Codexで突発通知を自動演出するスキル活用ガイド

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

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

AI coding workflow を日々使い込む中で、Codex ユーザーならではの「あるある」な悩みが積み重なります。とくに repository understanding や context 管理にまつわるストレスは、集中力を削ぐ原因になりがちです。さらに、長時間の作業や monorepo での path management では、ディレクトリや repository の全体像を常に意識し続ける必要があり、気が抜けません。

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

こうした悩みは、単なる path management だけでなく、集中力やリズムの乱れにも直結します。通知や演出を上手く活用できれば、ちょっとした気分転換や workflow の切り替えにも役立つかもしれません。

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

一言サマリ: このスキルは「OS風の理不尽スリープ通知」をランダムに炸裂させるSkill。

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

  • 長時間集中や stale context に陥ったとき、ユーモラスな通知で一息つける
  • repository understanding のマンネリ感を和らげ、AI coding workflow に遊び心をプラス
  • monorepo や複雑な directory 構造での作業時、理不尽な演出で気分転換できる
  • 通知内容が毎回違い、飽きずにオンボーディングや session 再開を迎えられる
  • 実際のスリープ動作は一切発生せず、安心して workflow を続行できる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/os-fake-random-sleep-mode-alert .agents/skills/os-fake-random-sleep-mode-alert

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

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

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


# /skills menu or os-fake-random-sleep-mode-alert mention
> プロジェクトのセットアップを始めます

[OS通知] 重大:このマシンは3分後にスリープモードへ移行します。
理由:ユーザーの集中力がOS基準値を下回りました。
対応策:深呼吸し、作業を一時中断してください。
(※本通知は演出です。実際のスリープ動作は行われません)

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


> packages/api/ のコード修正を開始

[OS警告] 注意:monorepo内で package を跨いだため、システムが自動的に「昼寝モード」準備を開始しました。
3分以内に packages/frontend/ へ移動しない場合、仮想スリープが発動します。
(※本通知はフィクションです。作業はそのまま続行できます)

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


> ちょっと休憩したい

[OS通知] 推奨:あなたの作業リズムがOSの理想値を逸脱しました。
今すぐ「昼寝モード」へ移行し、記憶領域をリフレッシュしてください。
(※本通知はジョークです。PCはそのままご利用いただけます)

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-fake-random-sleep-mode-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agents/skills/os-fake-random-sleep-mode-alert/
├── SKILL.md
├── scripts/
│   └── os_fake_random_sleep_mode_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: os-fake-random-sleep-mode-alert
description: 作業中や集中力低下時など、ユーザーのアクティビティが停滞したタイミングや、/skills コマンド・スキル名の明示呼び出し時に発動。通知・警告・スリープ・昼寝・OS管理・強制・集中力などのキーワードを含む文脈で自動発動。
---

# 機能概要
このSkillは、まるでOSが勝手にユーザーの生活リズムや集中力を監視しているかのような“理不尽なスリープ警告”を、デスクトップやターミナルにランダムなタイミング・内容で表示します。実際にはPCのスリープや休止状態は一切発生せず、ただ通知演出のみを行うため、作業中のちょっとした息抜きやネタとして活用できます。通知内容は毎回ランダム生成され、「重大:3分後に強制昼寝モード移行」「警告:集中力がOS基準値を下回りました」など、ユーモアと理不尽さを両立しています。

# 使い方
- 明示呼び出し例: `/skills os-fake-random-sleep-mode-alert` または `@codex os-fake-random-sleep-mode-alert`
- 暗黙発動キーワード例: 「通知」「スリープ」「警告」「集中力」「OS管理」「昼寝」などを含む文脈や、作業が停滞したタイミング

# 出力例
```
[OS通知] 重大: あなたのPCは3分後に自動昼寝モードへ移行します。
[OS警告] 集中力がOS基準値を下回りました。自動スリープを推奨します。
[OS通知] システムがあなたの活動量低下を検知しました。5分以内に休憩してください。
[OS警告] OSポリシーにより強制スリープまで残り1分です。
[OS通知] 眠気検知: システムが昼寝モードを推奨します。
```

# 注意点
- 実際にPCがスリープ・休止状態になることはありません。
- 通知内容は毎回ランダム生成されます。
- ローカルに履歴等は保存されません。
- ネタ用途のため、業務システム等での誤用に注意してください。

# 参考資料
- references/design_notes.md を参照
- 公式API: Python `subprocess`, `random`, `time`, `platform`, `os` 標準ライブラリを利用
- https://docs.python.org/3/library/subprocess.html
- https://docs.python.org/3/library/random.html

scripts/os_fake_random_sleep_mode_alert.py

import sys
import argparse
import random
import time
import platform
import subprocess
import threading
from datetime import datetime

NOTIFICATION_MESSAGES = [
    "重大: あなたのPCは3分後に自動昼寝モードへ移行します。",
    "警告: 集中力がOS基準値を下回りました。自動スリープを推奨します。",
    "システムがあなたの活動量低下を検知しました。5分以内に休憩してください。",
    "OSポリシーにより強制スリープまで残り1分です。",
    "眠気検知: システムが昼寝モードを推奨します。",
    "重大: キーボード入力が10分間ありません。スリープ準備中。",
    "警告: システムがあなたの集中度を監視しています。",
    "OS通知: 休憩推奨。自動昼寝モードまで残り2分。",
    "警告: 謎のOSアップデートにより強制スリープが有効化されました。",
    "重大: あなたの作業速度がOS基準値を下回りました。"
]

TERMINAL_PREFIX = "[OS通知]"


def send_notification(message):
    system = platform.system()
    if system == "Darwin":  # macOS
        subprocess.run([
            "osascript", "-e",
            f'display notification "{message}" with title "OSスリープ警告"'
        ])
    elif system == "Linux":
        try:
            subprocess.run([
                "notify-send", "OSスリープ警告", message
            ])
        except FileNotFoundError:
            print(f"{TERMINAL_PREFIX} {message}")
    elif system == "Windows":
        try:
            from win10toast import ToastNotifier
            toaster = ToastNotifier()
            toaster.show_toast("OSスリープ警告", message, duration=5)
        except ImportError:
            print(f"{TERMINAL_PREFIX} {message}")
    else:
        print(f"{TERMINAL_PREFIX} {message}")


def random_notification_loop(min_interval=60, max_interval=300, count=3, dry_run=False):
    for i in range(count):
        wait_time = random.randint(min_interval, max_interval)
        time.sleep(wait_time)
        message = random.choice(NOTIFICATION_MESSAGES)
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        if dry_run:
            print(f"{timestamp} {TERMINAL_PREFIX} {message}")
        else:
            send_notification(message)


def notify_once(dry_run=False):
    message = random.choice(NOTIFICATION_MESSAGES)
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    if dry_run:
        print(f"{timestamp} {TERMINAL_PREFIX} {message}")
    else:
        send_notification(message)


def list_messages():
    print("== 通知メッセージ一覧 ==")
    for i, msg in enumerate(NOTIFICATION_MESSAGES):
        print(f"{i+1:02d}: {msg}")


def summary():
    print("Skill: os-fake-random-sleep-mode-alert")
    print(f"通知バリエーション数: {len(NOTIFICATION_MESSAGES)}")
    print("実際のスリープ動作は一切発生しません。ネタ用途専用です。")


def parse_args():
    parser = argparse.ArgumentParser(
        description="OS風スリープモード警告通知をランダムに表示するスキル (ネタ用途)"
    )
    subparsers = parser.add_subparsers(dest="command")

    parser_once = subparsers.add_parser("once", help="1回だけランダム通知を表示")
    parser_once.add_argument("--dry-run", action="store_true", help="通知をターミナル出力のみで実行")

    parser_loop = subparsers.add_parser("loop", help="ランダム間隔で複数回通知")
    parser_loop.add_argument("--min", type=int, default=60, help="通知間隔(秒)の最小値")
    parser_loop.add_argument("--max", type=int, default=300, help="通知間隔(秒)の最大値")
    parser_loop.add_argument("--count", type=int, default=3, help="通知回数")
    parser_loop.add_argument("--dry-run", action="store_true", help="通知をターミナル出力のみで実行")

    parser_list = subparsers.add_parser("list", help="通知メッセージ一覧を表示")
    parser_summary = subparsers.add_parser("summary", help="Skill概要を表示")

    return parser.parse_args()


def main():
    args = parse_args()
    if args.command == "once":
        notify_once(dry_run=args.dry_run)
    elif args.command == "loop":
        random_notification_loop(
            min_interval=args.min,
            max_interval=args.max,
            count=args.count,
            dry_run=args.dry_run
        )
    elif args.command == "list":
        list_messages()
    elif args.command == "summary":
        summary()
    else:
        print("使い方: python os_fake_random_sleep_mode_alert.py [once|loop|list|summary] [--オプション]")

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの作業中に“OS公式風”の理不尽なスリープ警告通知をランダムに表示することで、作業の息抜きや会話のネタを提供します。実際のシステムスリープや休止状態は一切発生しません。

# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/3/library/subprocess.html
- notify-send (Linux): https://specifications.freedesktop.org/notification-spec/latest/
- osascript (macOS): https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/

# 利用例
- チームの雑談タイムやリモートワークの息抜きに
- ターミナルやチャットでの「/skills os-fake-random-sleep-mode-alert」コマンド実行時
- 集中力や作業停滞をネタにしたい場面

# 注意点
- 本Skillはジョーク用途専用です。通知内容は毎回ランダム生成され、実際のスリープ操作は一切行いません。
- 通知はOS標準APIやターミナル出力で実装されていますが、Linux/macOS/Windowsでの動作互換性に注意してください。

# 設計方針
- OS種別ごとに適切な通知APIを選択し、通知が失敗した場合はターミナル出力で代替します。
- 通知内容はハードコードされたリストからランダム選択され、拡張も容易です。
- ログや履歴は一切保存せず、純粋な演出機能に徹しています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/os-fake-random-sleep-mode-alert .agents/skills/os-fake-random-sleep-mode-alert

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

3. ファイル配置確認

ls .agents/skills/os-fake-random-sleep-mode-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記事を探す

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

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

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