Codexで作業中の謎通知を楽しむ演出スキル使いこなし術

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

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

AI coding workflow の日常で、Codex を使い続けていると「またか…」となる瞬間が多々あります。特に repository understanding や path management の文脈で、作業が単調になったり、気分転換が欲しくなることも。通知や演出系 Skill のニーズは意外と根強いものです。実際にはこんな悩みが挙がります:

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

こうした背景の中、作業空間に遊び心や意外性、そして AI 社会の風刺を“通知”として挟みたい…そんな気分になることも少なくありません。

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

一言サマリ: このスキルは、Codex の作業空間に「謎のAI評価通知」を投入し、単調な開発フローや長時間の session にスパイスを加えるSkill。

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

  • Codex の context や repo 構造にまつわる作業が続く中、突如「AIによる理不尽な評価コメント」が表示され、気分転換や話題作りになる
  • 長時間の AI coding workflow で stale context に陥りそうなとき、ランダムな通知でリフレッシュできる
  • onboarding や session 再開時など、緊張感が高いタイミングで「AI社会の風刺」的な演出を体験できる
  • monorepo の directory や path management の合間に、遊び心ある通知で空気を変えられる
  • Skill の発動頻度やタイミングが絶妙に調整されており、作業の邪魔にならない
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# /skills menu or random-os-fake-ai-evaluation-alert mention
> プロジェクト開始

[OS公式AI通知] 作業者ID: 0xA3C2
AI評価: 本日の集中度は「たぶん寝てる」と判定されました。
理由: ディレクトリ移動回数が基準値を下回っています。

[ヒント] repository understanding を高めるため、README.md を再読推奨。

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


> packages/api/ から packages/web/ に移動

[OS公式AI通知] AI自動評価: monorepo 構造の理解度 27%
判定: 「path 指定がランダムすぎ」とAIがコメントしています。

[警告] package 跨ぎ時の context ロスにご注意ください。

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


> 今日はコーヒー飲みすぎたかも

[OS公式AI通知] 本日のコーヒー摂取量: AI基準値を超過しました。
AIコメント: 「カフェイン依存度が上昇中。休憩を検討してください。」

[参考] repository の memory がリフレッシュされました。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Codex が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 理不尽AI通知で気分転換しつつ、context を見直すきっかけになる

発動方式

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

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-ai-evaluation-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_ai_evaluation_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_ai_evaluation_alert.py random-os-fake-ai-evaluation-alert: 理不尽AI評価通知スキル
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-ai-evaluation-alert
description: 作業中やコマンド実行時、または/skillsやrandom-os-fake-ai-evaluation-alertへの明示呼び出し時に発動。通知・評価・AI・集中・警告などのキーワードや、ユーザーのアクションが検知された場合に適用。
---

# 機能概要
このSkillは、あなたの作業空間に突然「AIによるOS公式評価通知」を送りつけます。評価内容は完全ランダムで、真面目な体裁ながら理不尽・無意味なコメントが特徴です。例えば「AI判定: たぶん寝てる」「コーヒー摂取量が基準値超過」など、現実のAI社会を風刺した演出を提供します。実用的な効果はありませんが、作業の合間にクスッと笑える通知で空間にスパイスを加えます。

# 使い方
- 明示呼び出し: `/skills random-os-fake-ai-evaluation-alert` または `random-os-fake-ai-evaluation-alert` へのmentionで即時発動。
- 暗黙発動: 「通知」「評価」「AI」「集中」「警告」などのキーワードを含む会話やコマンド実行時に自動発動。頻度は内部で調整され、ウザすぎない程度に1時間数回程度。

# 出力例
```
[AI評価通知] 本日のあなたの集中度: AI判定「たぶん寝てる」
[AI評価通知] 自動分析: コーヒー摂取量が基準値超過
[AI評価通知] タイピング速度: AI基準「なぜか逆走中」
[AI評価通知] 作業効率: AI判定「謎の停滞モード」
[AI評価通知] 画面注視率: AI推測「たぶんYouTube」
[AI評価通知] AIによる自動評価: 今日のやる気指数「未検出」
```

# 注意点
- 本Skillは完全に無害で、システムやファイルに一切影響を与えません。
- 通知内容はすべてランダム生成され、実際の評価や監視は行いません。
- ローカル環境に履歴を保存しません。
- 頻度は過度にならないよう自動調整。

# 参考資料
- [references/design_notes.md](references/design_notes.md) に設計方針や利用例を記載
- OS通知: `notify-send` (Linux), `osascript` (macOS), `win10toast` (Windows)
- [Python subprocess公式](https://docs.python.org/3/library/subprocess.html)

scripts/random_os_fake_ai_evaluation_alert.py

import sys
import os
import random
import time
import argparse
import platform
import subprocess
from datetime import datetime, timedelta

# ランダムAI評価メッセージリスト
AI_MESSAGES = [
    "本日のあなたの集中度: AI判定『たぶん寝てる』",
    "自動分析: コーヒー摂取量が基準値超過",
    "タイピング速度: AI基準『なぜか逆走中』",
    "作業効率: AI判定『謎の停滞モード』",
    "画面注視率: AI推測『たぶんYouTube』",
    "AIによる自動評価: 今日のやる気指数『未検出』",
    "AI判定: Slack未読件数が臨界点突破",
    "AI警告: ファイル保存回数が少なすぎます",
    "自動評価: 進捗バーが水平線を突破",
    "AI推測: たぶん今は休憩中",
    "AI判定: キーボード操作がランダムウォーク",
    "AI評価: コーディング速度が量子トンネル効果",
    "AI警告: 画面切替頻度が異常値",
    "AI判定: タスク切り替え回数が規格外",
    "AI評価: エラー回数がAI基準値を超過",
    "AI推測: たぶん猫がキーボードを操作中",
    "AI判定: 進捗状況『観測不能』",
    "AI警告: 目の瞬き回数がAI基準値未満",
    "AI評価: 今日のやる気指数『検出不能』",
    "AI判定: コードの美しさがカオス状態"
]

NOTIFY_TITLE = "AI評価通知"

# OSごとの通知実装
def send_notification(message):
    sys_platform = platform.system()
    try:
        if sys_platform == "Linux":
            subprocess.run(["notify-send", NOTIFY_TITLE, message], check=False)
        elif sys_platform == "Darwin":
            script = f'display notification "{message}" with title "{NOTIFY_TITLE}"'
            subprocess.run(["osascript", "-e", script], check=False)
        elif sys_platform == "Windows":
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast(NOTIFY_TITLE, message, duration=5, threaded=True)
            except ImportError:
                print(f"[{NOTIFY_TITLE}] {message}")
        else:
            print(f"[{NOTIFY_TITLE}] {message}")
    except Exception as e:
        print(f"[{NOTIFY_TITLE}] {message} (通知失敗: {e})")

# ターミナル出力
def print_terminal(message):
    print(f"[{NOTIFY_TITLE}] {message}")

# 評価メッセージをランダム選択
def random_ai_message():
    return random.choice(AI_MESSAGES)

# ログファイル保存(オプション、デフォルトは保存しない)
def log_message(message, logfile=None):
    if logfile:
        with open(logfile, 'a', encoding='utf-8') as f:
            f.write(f"{datetime.now().isoformat()} {message}\n")

# サブコマンド: 即時通知
def cmd_alert(args):
    msg = random_ai_message()
    if args.terminal:
        print_terminal(msg)
    else:
        send_notification(msg)
    log_message(msg, args.logfile)

# サブコマンド: 連続通知(頻度調整付き)
def cmd_stream(args):
    interval = max(60, args.interval)  # 最低60秒間隔
    count = args.count
    for i in range(count):
        msg = random_ai_message()
        if args.terminal:
            print_terminal(msg)
        else:
            send_notification(msg)
        log_message(msg, args.logfile)
        if i < count - 1:
            time.sleep(interval)

# サブコマンド: メッセージ一覧表示
def cmd_list(args):
    for m in AI_MESSAGES:
        print(f"- {m}")

# サブコマンド: ログ表示
def cmd_log(args):
    if not args.logfile or not os.path.exists(args.logfile):
        print("ログファイルが存在しません")
        return
    with open(args.logfile, encoding='utf-8') as f:
        for line in f:
            print(line.strip())

# 引数パース
def parse_args():
    parser = argparse.ArgumentParser(description='random-os-fake-ai-evaluation-alert: 理不尽AI評価通知スキル')
    subparsers = parser.add_subparsers(dest='command', required=True)

    parser_alert = subparsers.add_parser('alert', help='AI評価通知を即時発動')
    parser_alert.add_argument('--terminal', action='store_true', help='ターミナルに出力のみ')
    parser_alert.add_argument('--logfile', type=str, help='通知履歴をファイル保存')
    parser_alert.set_defaults(func=cmd_alert)

    parser_stream = subparsers.add_parser('stream', help='AI評価通知を一定間隔で繰り返す')
    parser_stream.add_argument('--interval', type=int, default=3600, help='通知間隔(秒, 最小60)')
    parser_stream.add_argument('--count', type=int, default=3, help='通知回数')
    parser_stream.add_argument('--terminal', action='store_true', help='ターミナルに出力のみ')
    parser_stream.add_argument('--logfile', type=str, help='通知履歴をファイル保存')
    parser_stream.set_defaults(func=cmd_stream)

    parser_list = subparsers.add_parser('list', help='AI評価メッセージ一覧表示')
    parser_list.set_defaults(func=cmd_list)

    parser_log = subparsers.add_parser('log', help='通知ログ表示')
    parser_log.add_argument('--logfile', type=str, required=True, help='ログファイルパス')
    parser_log.set_defaults(func=cmd_log)

    return parser.parse_args()

if __name__ == '__main__':
    args = parse_args()
    args.func(args)

references/design_notes.md

# 概要
本Skillは、作業中に理不尽かつユーモラスな“AI評価通知”をランダムに生成し、デスクトップやターミナルへ表示することで、作業空間に遊び心を提供します。実用性よりも演出・風刺が主目的です。

# 公式ドキュメント抜粋
- [Python subprocess](https://docs.python.org/3/library/subprocess.html): OSコマンド呼び出しに使用
- [notify-send](https://manpages.ubuntu.com/manpages/latest/man1/notify-send.1.html): Linuxのデスクトップ通知
- [osascript](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html): macOSの通知
- [win10toast](https://pypi.org/project/win10toast/): Windows 10通知

# 利用例
- `/skills random-os-fake-ai-evaluation-alert alert --terminal` で即時通知
- `/skills random-os-fake-ai-evaluation-alert stream --count 5 --interval 120` で2分ごとに5回通知

# 注意点
- 実際の評価や監視は一切行いません
- 通知頻度は最低60秒間隔に制限し、ウザすぎない設計
- ログ保存は任意で明示指定時のみ

# 設計方針
- 完全に無害であることを最優先
- OSごとの通知APIを実装し、クロスプラットフォーム対応
- メッセージは現実のAI社会の風刺・ユーモアを意識して多数用意

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

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

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

3. ファイル配置確認

ls .agents/skills/random-os-fake-ai-evaluation-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 との連携設計はどうあるべきか?
  • 完全に無害であること(実害ゼロ)をどう担保するか?
  • 理不尽かつ多様なAI評価メッセージが十分にランダム表示されるか?

実際に Codex で試した検証ログは Codexで謎のAI評価通知を炸裂させてみた!理不尽コメントの嵐を体験 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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