Codexで突発通知を活用してオフィスの緊張感と笑いを生む方法

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

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

AIコーディングワークフローにCodexを活用していると、便利な一方で「作業の流れが単調になりがち」「集中力が切れてミスが増える」「チーム内での緊張感や空気感が希薄になる」といった悩みを感じることがあります。特に、長時間のsessionや大規模なrepository作業では、ちょっとした演出や刺激が欲しくなる瞬間があるものです。

  • Codex が context を見失って違う場所のコードを参照することで、思わぬトラブルが発生しやすい
  • monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れてしまい、意図しない directory のコードが混入する
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけないため、作業効率が落ちる
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まり stale context になりやすい
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になり、マンネリ化する

こうした悩みを、通知・演出・OS連携系のSkillで一時的にリセットしたり、場の空気を変えたりできれば、workflowのリズムや集中力の維持にも一役買ってくれます。

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

一言サマリ: このスキルは、作業中に「謎のOS再起動予告」という強烈な演出で、空気を一変させるSkill。

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

  • AI coding workflowの単調さを打破し、チームや個人の集中力・緊張感をランダムにリセットできる
  • 長時間のrepo作業やmonorepo移動時、突発的な通知が話題や笑いを生み、オンボーディングや場の活性化にも寄与
  • Codexのcontextやmemoryが膨らみ stale context になりそうなタイミングで、疑似的な「再起動」イベントを挟み、リフレッシュ効果を演出
  • directoryやpath managementの作業感に変化をつけ、repository understandingのきっかけやチームコミュニケーションの種になる
  • 「本当に再起動はしない」ので、安心して遊び心を持ち込める
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-system-reboot-notifier .agents/skills/random-os-fake-system-reboot-notifier

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

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

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


# /skills menu or random-os-fake-system-reboot-notifier mention
> 今日は新しいrepoで開発を始めます

[通知] 重要なお知らせ: 5分後にシステムは謎の理由で再起動します
理由: カーネルの気まぐれ
影響範囲: /src/main.py, /config/settings.yaml
キャンセル不可。データ保存を推奨します。

(※実際には何も起こりません)

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


> packages/api から packages/web へ移動します

[通知] システム再起動予告: 2分後に再起動予定
理由: repository understanding エラー
影響: packages/api/, packages/web/
ご安心ください。本通知は冗談です。

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


> ちょっと気分転換したい

[通知] 緊急: OSが自己判断で再起動を決定
理由: directory構造が複雑すぎるため
再起動まで残り3分
# そのまま作業を続行できます

before / after の違い

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

発動方式

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

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-system-reboot-notifier/
├── SKILL.md
├── scripts/
│   └── random_os_fake_system_reboot_notifier.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-system-reboot-notifier
description: 作業中や集中タイム、または『再起動』『OS』『通知』などのキーワードが会話やコマンドに含まれる場合、または/skillsメニューやrandom-os-fake-system-reboot-notifierの明示呼び出し時に発動します。唐突なシステム再起動予告を演出します。
---

# 機能概要
このSkillは、ユーザーの作業中に突然“謎のOSシステム再起動予告”をデスクトップ通知として表示します。『5分後にシステムは謎の理由で再起動します』や『理由:カーネルの気まぐれ』など、内容は毎回ランダム生成され、実際には何も起きません。チーム内の雰囲気を一瞬ピリッとさせつつ、即座にネタだと分かる脱力系通知で、オフィスやリモートワークの話題作り・アイスブレイクに最適です。

# 使い方
- 明示呼び出し: `/skills random-os-fake-system-reboot-notifier` または `$random-os-fake-system-reboot-notifier`
- 暗黙発動: 「再起動」「OS」「システム通知」「shutdown」などのキーワードを含む会話やコマンド時に自動発動

# 出力例
```
[通知] 重要なお知らせ: 5分後にシステムは謎の理由で再起動します。
理由: カーネルの気まぐれ

[通知] システムメンテナンス: 3分後に全プロセスが一時停止されます。
理由: メモリの気分転換

[通知] OSアップデート: 10分後に再起動が予定されています。
理由: 不明なエラーコード 0xDEADBEEF
```

# 注意点
- 通知はユーザーのローカル環境にのみ表示され、実際の再起動やシステム操作は一切行いません。
- 通知内容は毎回ランダムに生成されます。
- ログや履歴はローカルには保存されません。
- Linux/macOS/Windowsの主要デスクトップ通知APIに対応していますが、仮想環境や一部リモート環境では通知が表示されない場合があります。

# 参考資料
- references/design_notes.md に設計方針・API選定理由を記載
- 公式: [Python plyer通知API](https://plyer.readthedocs.io/en/latest/)
- [Windows Toast通知](https://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/)
- [Linux notify-send](https://specifications.freedesktop.org/notification-spec/)

scripts/random_os_fake_system_reboot_notifier.py

import random
import sys
import argparse
import platform
from datetime import datetime

try:
    from plyer import notification
except ImportError:
    notification = None

REASONS = [
    'カーネルの気まぐれ',
    '不明なエラーコード 0xDEADBEEF',
    'メモリの気分転換',
    'OSの自己主張',
    'システムの都合',
    'CPUの気まぐれ',
    '管理者のイタズラ',
    'アップデートの衝動',
    '謎のシステムイベント',
    '予期しない例外発生',
    'AIの判断',
    'ユーザーの運命',
    '未知のプロセス干渉',
    'タイムラインの修正',
    'システムの気分転換'
]

TITLES = [
    '重要なお知らせ',
    'システムメンテナンス',
    'OSアップデート',
    '緊急通知',
    'システム警告',
    '再起動予告',
    '管理者メッセージ',
    'OSからのお願い'
]

ACTIONS = [
    '5分後にシステムは謎の理由で再起動します。',
    '3分後に全プロセスが一時停止されます。',
    '10分後に再起動が予定されています。',
    '2分後にOSが自動的に再起動します。',
    '1分後にシステムがリセットされます。',
    '7分後に全サービスが再起動されます。',
    '15分後にOSが再起動します。',
    '6分後にセッションが終了します。',
    '4分後に強制的に再起動されます。',
    '8分後にシステムが再起動します。'
]

LOG = []


def generate_notification():
    title = random.choice(TITLES)
    action = random.choice(ACTIONS)
    reason = random.choice(REASONS)
    message = f"{title}: {action}\n理由: {reason}"
    return title, action, reason, message


def send_notification(title, message):
    if notification:
        try:
            notification.notify(
                title=title,
                message=message,
                app_name='FakeSystemRebootNotifier',
                timeout=10
            )
        except Exception as e:
            print(f"[エラー] 通知送信に失敗しました: {e}")
    else:
        # plyerがない場合はstdoutに出力
        print(f"[通知] {title}: {message}")


def log_event(title, action, reason):
    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    LOG.append({
        'time': now,
        'title': title,
        'action': action,
        'reason': reason
    })


def list_events():
    if not LOG:
        print("[履歴] 通知履歴はありません。")
        return
    for ev in LOG:
        print(f"[{ev['time']}] {ev['title']} | {ev['action']} | 理由: {ev['reason']}")


def summary():
    print(f"合計通知回数: {len(LOG)}")
    reasons = {}
    for ev in LOG:
        reasons[ev['reason']] = reasons.get(ev['reason'], 0) + 1
    if reasons:
        print("理由別内訳:")
        for k, v in sorted(reasons.items(), key=lambda x: -x[1]):
            print(f"  {k}: {v}回")


def main():
    parser = argparse.ArgumentParser(description='謎のOS再起動通知スキル')
    subparsers = parser.add_subparsers(dest='command')

    parser_notify = subparsers.add_parser('notify', help='ランダムな再起動通知を送信')
    parser_notify.add_argument('--dry-run', action='store_true', help='通知を画面に表示せず標準出力に出す')

    subparsers.add_parser('list', help='通知履歴を表示')
    subparsers.add_parser('summary', help='通知の集計を表示')

    args = parser.parse_args()

    if args.command == 'notify' or args.command is None:
        title, action, reason, message = generate_notification()
        if getattr(args, 'dry_run', False):
            print(f"[通知] {title}: {action}\n理由: {reason}")
        else:
            send_notification(title, f"{action}\n理由: {reason}")
        log_event(title, action, reason)
    elif args.command == 'list':
        list_events()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの作業中に唐突な“謎のOS再起動通知”をデスクトップに表示し、緊張感とユーモアを演出することを目的としています。実際のシステム操作は一切行わず、通知のみで完結します。

# 公式ドキュメント抜粋
通知APIにはPythonのplyerライブラリを採用。plyerはクロスプラットフォームで、Windows・macOS・Linuxの主要通知仕様(Windows Toast, macOS Notification Center, Linux notify-send等)に対応。

# 利用例
- オフィス内でのアイスブレイクやチームの話題作り
- リモートワーク時の軽いジョーク
- システム管理者や開発者の気分転換

# 注意点
- plyerがインストールされていない場合は標準出力にフォールバックします。
- 実際の再起動やシステムへの影響はありません。
- 一部仮想環境やリモートデスクトップでは通知が表示されない場合があります。

# 設計方針
- 実在APIのみを利用し、CLIからも呼び出せる構成
- 通知内容は毎回ランダム生成し、ネタ感を重視
- ローカル保存や副作用を持たせず、安全性を最優先
- コマンドラインから履歴や集計も確認可能な設計

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-system-reboot-notifier .agents/skills/random-os-fake-system-reboot-notifier

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

3. ファイル配置確認

ls .agents/skills/random-os-fake-system-reboot-notifier
# 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をコピーしました!
目次