Codexで作業中に謎の休日通知を自動演出する方法完全攻略

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

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

日々Codexを使ったAI coding workflowに没頭していると、作業が単調になりがちです。特に長時間のsessionや大規模なmonorepoを扱う場面では、集中力が切れたり、気分転換のタイミングを見失うことも。「もう少し余裕があれば…」と感じる瞬間は誰しも経験があるはずです。通知や演出系Skillが欲しくなるのは、そんな「現実逃避したい」気分が高まったとき。Codexのcontext管理やrepository understandingの悩みとあわせて、以下のような“あるある”が挙げられます。

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

こうした悩みが積み重なると、作業がマンネリ化しやすくなります。ときには「今日はもう全休でいいのでは?」と心の中で呟きたくなる瞬間も。そんな時に、ふと現れる“謎の休日通知”が、絶妙なカオスと癒しをもたらしてくれるかもしれません。

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

一言サマリ: 作業中に突如“謎のOS公式休日発表”がデスクトップ通知で現れますSkill。

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

  • 単調なAI coding workflowの中に、思わず笑ってしまう“休み宣言”サプライズが届く
  • Codexの長時間sessionやonboarding時の気分転換に、遊び心ある通知演出が加わる
  • repository理解やpath管理で煮詰まったタイミングに、強制的な“全業務停止”宣言で一息つける
  • monorepoやdirectory構造の把握に疲れた時、現実逃避のきっかけとして機能する
  • AI workflowに“余白”を作り、作業効率や記憶(メモリ)のリフレッシュにも繋がる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/os-fake-holiday-announcer .agents/skills/os-fake-holiday-announcer

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


# /skills menu or os-fake-holiday-announcer mention
> 今日から新しいプロジェクト開始です

[OS公式通知]
本日は「バグ記念日」につき全業務停止となります。
理由: システムが自発的に祝日を設定しました。
影響範囲: src/、tests/ ディレクトリ全体
備考: コーディング、レビュー、デプロイ等 一切不可

ご理解とご協力をお願いいたします。

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


> packages/api から packages/web に移動して作業します

[OS公式通知]
緊急:OSが「自己都合休暇」を宣言しました。
対象: packages/web ディレクトリ配下の全作業
理由: 本日は「リファクタ記念日」のため
推奨: 午後は強制昼寝タイムとします

引き続き良い開発ライフをお過ごしください。

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


> 今日はもうやる気が出ません…

[OS公式通知]
本日は「やる気紛失記念日」となりました。
全repositoryでの作業は自動的に中断されます。
理由: OSが現実逃避モードに突入しました

次回の出勤日は未定です。ゆっくりお休みください。

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

.agents/skills/os-fake-holiday-announcer/
├── SKILL.md
├── scripts/
│   └── os_fake_holiday_announcer.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/os_fake_holiday_announcer.py os-fake-holiday-announcer: OSが謎の休日を勝手に宣言する通知演出ツール
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: os-fake-holiday-announcer
description: 作業がマンネリ化・集中力が低下した際や、/skills menu から明示的に呼び出されたときに発動。通知・休暇・祝日・業務停止・休み・サボり等のキーワードを含む状況で、開発者の気分転換やリフレッシュを促すために利用されます。
---

# 機能概要
このSkillは、日々の単調な作業や長時間のコーディングに疲れた開発者のために、突然“OS公式の謎の休日”をデスクトップ通知で宣言します。例えば「本日はバグ記念日につき全業務停止」や「緊急:OSが自主休暇を宣言しました」など、根拠のないカオスな休み宣言が現れ、現実逃避を一瞬だけ演出します。実際の業務やシステムには一切影響せず、気分転換や笑いを提供します。

# 使い方
- 明示呼び出し: `/skills menu` から `os-fake-holiday-announcer` を選択、または `$os-fake-holiday-announcer` をメンション
- 暗黙発動: 「通知」「休暇」「祝日」「業務停止」「休み」「サボり」などのキーワードが会話やコードコメントで検出された場合に自動発動

# 出力例
```
[通知] OS公式休日発表: 本日はバグ記念日につき全業務停止となります。
[通知] 緊急:OSが自主休暇を宣言しました。午後は全プロセスおやすみです。
[通知] システム都合により15時から強制昼寝タイムが発動します。
[通知] 本日は“メモリ解放記念日”のため、全員で休憩しましょう。
[通知] OSアップデート記念日!全タスクは自動的に中断されます。
```

# 注意点
- 通知は完全なジョークであり、実際の業務やファイル、プロセスには一切影響しません
- 通知頻度は1時間に1回まで自動制御されます
- ローカルPCの通知API(Windows: Toast, macOS: AppleScript, Linux: notify-send)を利用します
- 通知履歴はローカルにのみ保存され、外部送信されません

# 参考資料
- [Python公式: plyer.notification](https://plyer.readthedocs.io/en/latest/)(クロスプラットフォーム通知)
- references/design_notes.md も参照

scripts/os_fake_holiday_announcer.py

import sys
import os
import random
import json
import time
import argparse
from datetime import datetime, timedelta

try:
    from plyer import notification
except ImportError:
    print("plyerパッケージが必要です。pip install plyer でインストールしてください。", file=sys.stderr)
    sys.exit(1)

HOLIDAY_MESSAGES = [
    "本日はバグ記念日につき全業務停止となります。",
    "緊急:OSが自主休暇を宣言しました。午後は全プロセスおやすみです。",
    "システム都合により15時から強制昼寝タイムが発動します。",
    "本日は“メモリ解放記念日”のため、全員で休憩しましょう。",
    "OSアップデート記念日!全タスクは自動的に中断されます。",
    "セグメンテーション違反追悼日:今日は何もしてはいけません。",
    "CPU温度上昇記念日:冷却のため業務停止します。",
    "ファイルシステムの気まぐれ休暇:保存作業は一切不要です。",
    "OSがサボりたがっています。全員で一緒にサボりましょう。",
    "今日は“仮想メモリ拡張記念日”のため、作業量も拡張休暇です。"
]

HISTORY_FILE = os.path.expanduser("~/.os_fake_holiday_history.json")
FREQ_LIMIT_MINUTES = 60  # 1時間に1回まで


def load_history():
    if not os.path.exists(HISTORY_FILE):
        return []
    try:
        with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
            data = json.load(f)
            return data if isinstance(data, list) else []
    except Exception:
        return []


def save_history(history):
    try:
        with open(HISTORY_FILE, 'w', encoding='utf-8') as f:
            json.dump(history, f, ensure_ascii=False, indent=2)
    except Exception as e:
        print(f"履歴保存に失敗しました: {e}", file=sys.stderr)


def can_announce():
    history = load_history()
    if not history:
        return True
    last = history[-1]
    last_time = datetime.fromisoformat(last['timestamp'])
    now = datetime.now()
    diff = now - last_time
    return diff >= timedelta(minutes=FREQ_LIMIT_MINUTES)


def announce_fake_holiday():
    if not can_announce():
        print("通知頻度制限中です。しばらくお待ちください。", file=sys.stderr)
        return
    message = random.choice(HOLIDAY_MESSAGES)
    title = "OS公式休日発表"
    try:
        notification.notify(
            title=title,
            message=message,
            app_name="os-fake-holiday-announcer",
            timeout=10
        )
        print(f"[通知] {title}: {message}")
        # 履歴保存
        history = load_history()
        history.append({
            "timestamp": datetime.now().isoformat(),
            "message": message
        })
        # 履歴は直近50件まで保持
        save_history(history[-50:])
    except Exception as e:
        print(f"通知に失敗しました: {e}", file=sys.stderr)


def list_history():
    history = load_history()
    if not history:
        print("通知履歴はありません。")
        return
    for item in history:
        ts = item.get("timestamp", "?")
        msg = item.get("message", "?")
        print(f"{ts[:19]} - {msg}")


def summary():
    history = load_history()
    print(f"これまでの通知回数: {len(history)} 回")
    if history:
        last = history[-1]
        print(f"最終通知: {last['timestamp'][:19]} - {last['message']}")
    else:
        print("まだ通知はありません。")


def main():
    parser = argparse.ArgumentParser(description="os-fake-holiday-announcer: OSが謎の休日を勝手に宣言する通知演出ツール")
    subparsers = parser.add_subparsers(dest="command", required=True)

    subparsers.add_parser("announce", help="ランダムなOS公式休日を通知する")
    subparsers.add_parser("list", help="通知履歴を表示する")
    subparsers.add_parser("summary", help="通知履歴のサマリーを表示する")

    args = parser.parse_args()

    if args.command == "announce":
        announce_fake_holiday()
    elif args.command == "list":
        list_history()
    elif args.command == "summary":
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
os-fake-holiday-announcerは、開発者の作業中に突如“架空のOS公式休日”を通知することで、気分転換やユーモアを提供するSkillです。通知内容は完全にジョークで、業務やシステムには一切影響しません。

# 公式ドキュメント抜粋
本SkillはPythonのplyer.notification APIを利用し、クロスプラットフォームでローカル通知を実現しています。通知履歴はユーザーのホームディレクトリ直下にJSONとして保存され、外部送信はありません。

# 利用例
- 長時間のコーディングで集中力が切れた時に明示呼び出し
- 「休みたい」「サボりたい」などの発言やコメントで自動発動
- チームの雑談やリモートワークの息抜き用にも

# 注意点
- 通知頻度は1時間に1回まで自動制御
- 実際のファイルやプロセスには一切影響なし
- plyer未インストール時はpip install plyerが必要

# 設計方針
- シンプルで堅牢な構成とし、誤作動や過剰通知を防ぐ
- ユーザー体験を損なわず、純粋な演出・気分転換に特化

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/os-fake-holiday-announcer .agents/skills/os-fake-holiday-announcer

.agents/skills/os-fake-holiday-announcer の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agents/skills/os-fake-holiday-announcer
# 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で謎の休日通知を突然表示してみた!現実逃避に最適な演出を検証 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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