Codexで仕事中の集中力を揺さぶる通知演出活用ガイド

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

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

Codex を日々使い込んでいると、作業の合間や集中が切れたタイミングで「ちょっとした息抜き」や「現実感をリセットしたい瞬間」が意外と多いものです。AI coding workflow のなかで、単調なリファクタや長いセッションの繰り返しは、どうしても集中力を消耗しがち。そんなとき、思わず「え、なにそれ?」とツッコミたくなるような遊び心が、作業全体のリズムを変えてくれることもあります。

特に「通知・演出・OS連携」に関する悩みとして、以下のような「あるある」が挙げられます:

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

こうした課題に向き合いながらも、時には「作業の隙間にちょっとした非日常感がほしい」「AIとのやりとりに遊び心を持たせたい」と感じる瞬間も多いはずです。

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

一言サマリ: このスキルは、Codex の作業中に“謎のOS公式・緊急カンファレンスコール通知”をランダムに発動し、現実感と集中力にユーモラスな刺激を与える Skill です。

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

  • AI coding workflow の合間に、完全にネタな通知が突如炸裂し、作業のリズムや気分転換になる
  • 長時間の session や単調な repository understanding のタイミングで、非日常的な演出が挟まることで、context の切り替えや再集中を促進
  • monorepo など複雑な directory 構造の中でも、突然のフェイク通知が現れることで、path management や onboarding の空気を一変
  • 通知内容が毎回ランダムなので、「また来た!」と仲間内で盛り上がるネタにも
  • 実作業やデータには一切影響せず、純粋な演出として楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# /skills menu or random-os-fake-conference-call-alert mention
> プロジェクト初期化

[OS公式 緊急カンファレンスコール通知]
------------------------------------------
会議タイトル: 今すぐ全員集合:超重要案件について
議題: /src/context/management/ ディレクトリに眠る謎ファイルの再検討
出欠判定: OSが自動的に判断します
開始時刻: 13:37 (ただし会議は始まりません)
備考: 参加できない場合はコーヒー豆の粒度を再調整してください
------------------------------------------
(この通知はフィクションです)

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


> packages/core/context-helper のテスト開始

[OS公式 緊急カンファレンスコール通知]
------------------------------------------
本日の議題: monorepo内 /packages/utils/ ディレクトリで検出された未分類ファイル
参加条件: repository understanding レベル3以上
出欠判定: AIが自動集計中
議事録: 提出不要
------------------------------------------
(この通知は完全なネタです)

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


> 今日も長時間作業で疲れた

[OS公式 緊急カンファレンスコール通知]
------------------------------------------
議題: 本日のコーヒー豆粒度再検討
参加者: 全 directory 管理者
出欠判定: すでに決定済み (詳細は秘密)
備考: 参加しない場合はAI workflowに追加課題が発生します (嘘です)
------------------------------------------
(この通知は現実の会議とは一切関係ありません)

before / after の違い

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

発動方式

明示呼び出し (/skills menu or random-os-fake-conference-call-alert mention) と、特定キーワードや説明文にマッチした場合の暗黙発動(semantic-or-explicit)に両対応しています。

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-conference-call-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_conference_call_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_conference_call_alert.py OS公式フェイク会議通知スキル
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-conference-call-alert
description: Codexは、作業中のユーザーに“OS公式・緊急カンファレンスコール通知”をランダムなタイミングで表示したい場合、または/skills menuやrandom-os-fake-conference-call-alertの明示呼び出しキーワードが入力された際にこのSkillを発動してください。通知内容は完全なネタであり、実作業やデータに影響を与えません。
---

# 機能概要
このSkillは、作業中に突如として“OS公式・緊急カンファレンスコール通知”をデスクトップまたはターミナルに表示する、遊び心満載の演出を提供します。通知内容は毎回ランダムで、現実には絶対に存在しないカオスな議題や出席判定が含まれ、ユーザーの集中力や現実感を一瞬だけ揺さぶります。会議自体は始まらず、通知のみが出現するため、実作業やデータ損失の心配はありません。

# 使い方
- 明示呼び出し: `/skills menu` から本Skillを選択、または `random-os-fake-conference-call-alert` で直接呼び出し
- 暗黙発動: 「会議」「通知」「緊急」「カンファレンス」等のキーワードや、作業中の特定タイミング(例: 長時間の無操作)で自動発動

# 出力例
```
[OS公式] 緊急カンファレンスコール通知
----------------------------------------
議題: 本日のコーヒー豆粒度再検討
参加必須: 全ユーザー(出欠はOSが自動判定します)
開始時刻: 今すぐ
備考: 重要度MAX。会議URLは後日発表。
----------------------------------------
```

# 注意点
- 通知内容は完全なネタであり、実在の会議や業務には一切影響しません。
- 通知頻度は1時間に1回未満を推奨(過度な発動は控えてください)。
- ローカルファイルやシステム設定には一切変更を加えません。
- デスクトップ通知はOS標準APIのみ利用します。

# 参考資料
詳細な設計方針や利用例は `references/design_notes.md` を参照してください。デスクトップ通知APIの公式ドキュメント: https://docs.python.org/3/library/subprocess.html, https://pypi.org/project/plyer/

scripts/random_os_fake_conference_call_alert.py

import argparse
import random
import sys
import time
import platform
import subprocess
from typing import List

# 通知メッセージ候補
FAKE_TOPICS = [
    "今すぐ全員集合:超重要案件について",
    "本日の議題:コーヒー豆の粒度再検討",
    "出欠はOSが自動判定します",
    "緊急:システムフォントの統一案",
    "会議URLは後日発表されます",
    "全ユーザー参加必須:謎のアップデート説明会",
    "議題:ユーザー名の読み方再確認",
    "重要度MAX:OSマスコットキャラ選定会議",
    "本日の会議はAIが進行します",
    "OS公式:謎の新機能発表会"
]

FAKE_NOTES = [
    "重要度MAX。会議URLは後日発表。",
    "参加必須。欠席は自動的に記録されます。",
    "会議の録画は禁止されています。",
    "議事録はAIが自動生成します。",
    "議題は当日発表。サプライズあり。",
    "出席確認はOSが行います。",
    "会議終了後、アンケートがあります。",
    "会議時間は未定です。",
    "会議資料は配布されません。",
    "会議開始時刻:今すぐ"
]

FAKE_PARTICIPANTS = [
    "全ユーザー(出欠はOSが自動判定します)",
    "管理者・ゲスト含む全員",
    "選抜メンバー(選定基準は非公開)",
    "AI・人間全員",
    "本日ログインしたユーザー全員",
    "OSサポートチーム",
    "全アプリケーション開発者",
    "特別ゲストあり",
    "匿名参加可能",
    "参加者リストは後日公開"
]

# OSごとに通知を出す

def send_notification(title: str, message: str):
    system = platform.system()
    try:
        if system == "Darwin":  # macOS
            subprocess.run([
                "osascript", "-e",
                f'display notification "{message}" with title "{title}"'
            ], check=True)
        elif system == "Linux":
            subprocess.run([
                "notify-send", title, message], check=True)
        elif system == "Windows":
            try:
                from plyer import notification
                notification.notify(title=title, message=message, timeout=6)
            except ImportError:
                print("[警告] plyerパッケージが必要です: pip install plyer")
        else:
            print("[通知未対応] このOSでは通知がサポートされていません。")
    except Exception as e:
        print(f"[通知エラー] {e}")


def generate_fake_alert() -> str:
    topic = random.choice(FAKE_TOPICS)
    note = random.choice(FAKE_NOTES)
    participant = random.choice(FAKE_PARTICIPANTS)
    alert = (
        "[OS公式] 緊急カンファレンスコール通知\n"
        "----------------------------------------\n"
        f"議題: {topic}\n"
        f"参加必須: {participant}\n"
        "開始時刻: 今すぐ\n"
        f"備考: {note}\n"
        "----------------------------------------"
    )
    return alert


def print_alert(alert: str):
    print(alert)


def log_alert(alert: str, logfile: str = "conference_call_alert.log"):
    try:
        with open(logfile, "a", encoding="utf-8") as f:
            f.write(alert + "\n\n")
    except Exception as e:
        print(f"[ログエラー] {e}")


def list_log(logfile: str = "conference_call_alert.log"):
    try:
        with open(logfile, "r", encoding="utf-8") as f:
            print(f.read())
    except FileNotFoundError:
        print("ログファイルが存在しません。")
    except Exception as e:
        print(f"[ログ表示エラー] {e}")


def summary_log(logfile: str = "conference_call_alert.log"):
    try:
        with open(logfile, "r", encoding="utf-8") as f:
            alerts = f.read().split("[OS公式] 緊急カンファレンスコール通知")
            count = len([a for a in alerts if a.strip()])
            print(f"過去のフェイク会議通知回数: {count}")
    except FileNotFoundError:
        print("ログファイルが存在しません。")
    except Exception as e:
        print(f"[サマリーエラー] {e}")


def main():
    parser = argparse.ArgumentParser(description="OS公式フェイク会議通知スキル")
    subparsers = parser.add_subparsers(dest="command")

    # 通知発動
    parser_alert = subparsers.add_parser("alert", help="フェイク会議通知を即時発動")
    parser_alert.add_argument("--no-notify", action="store_true", help="デスクトップ通知を出さずにターミナル出力のみ")
    parser_alert.add_argument("--log", action="store_true", help="通知内容をログファイルに保存")

    # ログ閲覧
    parser_list = subparsers.add_parser("list", help="過去の通知ログを表示")
    parser_list.add_argument("--logfile", default="conference_call_alert.log", help="ログファイル名")

    # サマリー
    parser_summary = subparsers.add_parser("summary", help="通知回数のサマリーを表示")
    parser_summary.add_argument("--logfile", default="conference_call_alert.log", help="ログファイル名")

    # デモ自動発動
    parser_demo = subparsers.add_parser("demo", help="一定間隔で自動的にフェイク通知を発動 (Ctrl+Cで停止)")
    parser_demo.add_argument("--interval", type=int, default=3600, help="通知間隔(秒)")
    parser_demo.add_argument("--log", action="store_true", help="通知内容をログファイルに保存")

    args = parser.parse_args()

    if args.command == "alert":
        alert = generate_fake_alert()
        print_alert(alert)
        if not args.no_notify:
            send_notification("緊急カンファレンスコール", alert.replace("\n", " "))
        if args.log:
            log_alert(alert)
    elif args.command == "list":
        list_log(args.logfile)
    elif args.command == "summary":
        summary_log(args.logfile)
    elif args.command == "demo":
        try:
            while True:
                alert = generate_fake_alert()
                print_alert(alert)
                send_notification("緊急カンファレンスコール", alert.replace("\n", " "))
                if args.log:
                    log_alert(alert)
                time.sleep(args.interval)
        except KeyboardInterrupt:
            print("\n[終了] デモモードを停止しました。")
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
本Skillは、業務や作業中に“OS公式”を装った完全なネタ通知を発生させることで、ユーザーに遊び心やリフレッシュを提供することを目的としています。実際の会議やタスクには一切影響を与えず、通知内容も現実には存在しないカオスなものです。

# 公式ドキュメント抜粋
通知はOS標準のAPI(macOS: osascript, Linux: notify-send, Windows: plyer)を用いて実装しています。詳細は各OSの公式ドキュメント(https://docs.python.org/3/library/subprocess.html, https://pypi.org/project/plyer/)を参照してください。

# 利用例
- 長時間の作業や単調なタスク中に、突如として“謎の会議通知”が現れ、場を和ませる演出が可能です。
- `/skills menu`やCLIから明示的に発動することで、チーム内のレクリエーションやアイスブレイクにも活用できます。

# 注意点
- 通知内容はすべてフィクションであり、実際の業務やデータには影響を与えません。
- 通知頻度が高すぎると逆効果になるため、適度な間隔での発動を推奨します。

# 設計方針
- OS標準APIのみを利用し、追加の常駐プロセスや外部サービスは不要です。
- ログ機能やサマリー表示も備え、ユーザーが過去の通知を振り返ることができます。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

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

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

3. ファイル配置確認

ls .agents/skills/random-os-fake-conference-call-alert
# SKILL.md, scripts/, references/, README.md があればOK

4. Codex を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は /skills menu or random-os-fake-conference-call-alert mention と Skill 名で出てきます。

5. 動作確認

/skills menu or random-os-fake-conference-call-alert 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で謎の偽カンファレンス通知を爆撃してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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