Codexで謎のOSシャットダウン瞑想タイムを自動演出する方法

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

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

開発に没頭していると、つい時間を忘れてしまうことがあります。集中しすぎて気付けば何時間も同じ姿勢、頭のリフレッシュもできず、結果としてパフォーマンスが低下することも。特にCodexのようなAI coding workflowを使っていると、コンテキストやリポジトリの構造を都度説明したり、directoryやpath管理に気を取られがちで、気がつけば心身ともに疲弊していることも少なくありません。そんな中、ちょっとした“遊び心”や強制的なリフレッシュが欲しくなる瞬間、ありませんか?

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

通知や演出系のSkillがあれば、こうした日常の「詰まり」や「疲れ」を和らげ、AI coding workflowにちょっとした変化や笑いを生み出すことができます。

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

一言サマリ: このスキルは、作業中に突然“謎のOSシャットダウン瞑想タイム”を演出し、開発者の集中と緊張をゆるめるSkill。

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

  • AI coding workflowの単調なリズムに“強制リフレッシュ”や笑いを挟むことで、長時間作業時の集中力低下やcontextのマンネリ化を防ぐ
  • Codexのsession再開やmonorepo作業時など、context切り替えのタイミングで“瞑想通知”が現れ、気分転換とともにrepository understandingを促進
  • 意味不明なシャットダウン通知や瞑想進捗バーが、記憶やcontextのリセットを疑似体験させることで、path managementやonboarding時の心理的負担を軽減
  • directoryやrepo構造の説明に疲れたタイミングで“無の境地”演出が入り、思わず二度見・苦笑いすることでストレスが和らぐ
  • 長時間のlong context蓄積によるstale context化を、強制的な“瞑想タイム”で一旦リセットしやすくなる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-shutdown-meditation .agents/skills/random-os-fake-shutdown-meditation

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

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

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


# /skills menu or random-os-fake-shutdown-meditation mention
> プロジェクトの初動タスクを開始

[通知] システムは5分間、無の境地に入ります。
[瞑想進捗バー] [====                ] 20%
[タイマー] 4:59 残り
[メッセージ] 強制メンテ:心の再起動モードを発動中
[Tips] この間、repositoryの構造を俯瞰してみましょう
[終了通知] シャットダウン瞑想タイムが完了しました。作業を再開してください。

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


> packages/api から packages/web への作業切り替え

[通知] OS推奨:椅子で悟りを開いてください (3分間)
[瞑想進捗バー] [=========           ] 50%
[タイマー] 1:30 残り
[メッセージ] package boundary を意識しましょう。path管理も深呼吸。
[Tips] monorepo の全体像をイメージしながら、context を整理してください。
[終了通知] 悟りモード終了。directory 構造の再把握をおすすめします。

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


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

[通知] システムは今から「謎のシャットダウン瞑想」に突入します。
[瞑想進捗バー] [================== ] 95%
[タイマー] 0:15 残り
[メッセージ] 何も考えず、ただ directory tree を眺めましょう。
[終了通知] 目を開けてください。context がリフレッシュされました。

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

.agents/skills/random-os-fake-shutdown-meditation/
├── SKILL.md
├── scripts/
│   └── fake_shutdown_meditation.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-shutdown-meditation
description: 作業やコーディング中に「シャットダウン」「再起動」「メンテ」「瞑想」などの単語や進捗バー表示リクエストが含まれる場合、または明示的にSkill呼び出しがあった場合に発動します。
---

# 機能概要
このSkillは、開発者の作業中に突如として「謎のOSシャットダウン瞑想タイム」を演出する通知・演出ツールです。デスクトップ通知や画面端に、毎回ランダムな意味不明メッセージ(例:「システムは5分間、無の境地に入ります」「強制メンテ:心の再起動モード」など)が表示され、進捗バーで“瞑想度”を測ったり、静寂を強制するタイマーも現れます。集中を撹乱しつつ、開発者に一瞬の悟り体験を提供します。

# 使い方
- 明示呼び出し例: `/skills random-os-fake-shutdown-meditation` または Skill メニューから選択
- 暗黙発動キーワード例: 「シャットダウン」「再起動」「メンテ」「瞑想」「進捗バー」などを含む会話やコマンドで自動発動

# 出力例
```
[通知] OS推奨:椅子で悟りを開いてください
[進捗バー] 瞑想度: [██████    ] 60%
[タイマー] 残り 03:12
[通知] 強制メンテ:心の再起動モード
[進捗バー] 瞑想度: [████████  ] 80%
[通知] システムは5分間、無の境地に入ります
```

# 注意点
- 本Skillは実際のOSシャットダウンやシステム操作は行いません。
- 通知・進捗バーはPythonの標準/主要GUIライブラリでローカル表示されます。
- ログや進捗は自動保存されません。実行中のみ演出が現れます。
- 一部環境(Linux/Windows/Mac)で通知表示方法が異なります。

# 参考資料
- references/design_notes.md 参照
- 公式: https://docs.python.org/ja/3/library/tkinter.html
- 通知API: https://pypi.org/project/plyer/ , https://pypi.org/project/notifiers/

scripts/fake_shutdown_meditation.py

import sys
import time
import random
import threading
import argparse
try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False
try:
    import tkinter as tk
    from tkinter import ttk
    TK_AVAILABLE = True
except ImportError:
    TK_AVAILABLE = False

MEDITATION_MESSAGES = [
    "システムは5分間、無の境地に入ります",
    "強制メンテ:心の再起動モード",
    "OS推奨:椅子で悟りを開いてください",
    "プロセス停止:思考のリセットを推奨します",
    "無限ループ検出:内面デバッグを開始します",
    "メモリ解放:雑念を消去中...",
    "ユーザー入力を遮断します。しばらく無になってください",
    "悟り進捗バーを初期化中...",
    "OSアップデート:心のパッチ適用中",
    "CPU温度上昇:沈静化モード突入"
]

PROGRESS_BAR_LENGTH = 30
MEDITATION_TIME_SEC = 300  # 5分


def send_notification(title, message):
    if PLYER_AVAILABLE:
        notification.notify(title=title, message=message, timeout=7)
    else:
        print(f"[通知] {title}: {message}")


def print_progress_bar(percent):
    bar_length = PROGRESS_BAR_LENGTH
    filled_length = int(bar_length * percent // 100)
    bar = '█' * filled_length + ' ' * (bar_length - filled_length)
    print(f"[進捗バー] 瞑想度: [{bar}] {percent}%")


def show_tk_progress_bar(duration_sec):
    if not TK_AVAILABLE:
        print("[警告] Tkinterがインストールされていないため、GUI進捗バーは表示できません。")
        return
    root = tk.Tk()
    root.title("OS Fake Shutdown Meditation")
    root.geometry("420x120+100+100")
    label = tk.Label(root, text=random.choice(MEDITATION_MESSAGES), font=("Meiryo", 12))
    label.pack(pady=10)
    progress = ttk.Progressbar(root, orient="horizontal", length=350, mode="determinate")
    progress.pack(pady=10)
    timer_label = tk.Label(root, text="", font=("Meiryo", 10))
    timer_label.pack(pady=5)
    
    def update_bar():
        for i in range(duration_sec + 1):
            percent = int(i * 100 / duration_sec)
            progress['value'] = percent
            remain = duration_sec - i
            m, s = divmod(remain, 60)
            timer_label.config(text=f"残り {m:02}:{s:02}")
            root.update()
            time.sleep(1)
        root.destroy()
    threading.Thread(target=update_bar).start()
    root.mainloop()


def meditation_sequence(duration_sec=300, gui=True, interval=30):
    # 1. 開始通知
    msg = random.choice(MEDITATION_MESSAGES)
    send_notification("Fake Shutdown Meditation", msg)
    print(f"[通知] {msg}")
    start = time.time()
    elapsed = 0
    percent = 0
    if gui and TK_AVAILABLE:
        threading.Thread(target=show_tk_progress_bar, args=(duration_sec,)).start()
    while elapsed < duration_sec:
        percent = int((elapsed / duration_sec) * 100)
        print_progress_bar(percent)
        if random.random() < 0.33:
            msg = random.choice(MEDITATION_MESSAGES)
            send_notification("Fake Shutdown Meditation", msg)
            print(f"[通知] {msg}")
        remain = duration_sec - elapsed
        m, s = divmod(remain, 60)
        print(f"[タイマー] 残り {m:02}:{s:02}")
        time.sleep(interval)
        elapsed = int(time.time() - start)
    print_progress_bar(100)
    send_notification("Fake Shutdown Meditation", "瞑想タイム終了!作業に戻れます。")
    print("[通知] 瞑想タイム終了!作業に戻れます。")


def list_messages():
    print("--- ランダム瞑想メッセージ一覧 ---")
    for msg in MEDITATION_MESSAGES:
        print(f"- {msg}")


def main():
    parser = argparse.ArgumentParser(description="Random OS Fake Shutdown Meditation Skill")
    subparsers = parser.add_subparsers(dest="command")

    parser_run = subparsers.add_parser("run", help="瞑想タイムを発動する")
    parser_run.add_argument("--duration", type=int, default=300, help="瞑想タイム(秒)")
    parser_run.add_argument("--nogui", action="store_true", help="GUI進捗バーを表示しない")
    parser_run.add_argument("--interval", type=int, default=30, help="進捗・通知の更新間隔(秒)")

    parser_list = subparsers.add_parser("list", help="メッセージ一覧を表示")

    args = parser.parse_args()
    if args.command == "run":
        meditation_sequence(duration_sec=args.duration, gui=not args.nogui, interval=args.interval)
    elif args.command == "list":
        list_messages()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、開発者の作業環境に“謎のシャットダウン瞑想”を演出することで、集中のリズムを意図的に崩し、ユーモラスな気分転換やリフレッシュを促します。Pythonの標準GUIや通知APIを活用し、実際のOS操作は一切行いません。

# 公式ドキュメント抜粋
- plyer: https://plyer.readthedocs.io/en/latest/
- tkinter: https://docs.python.org/ja/3/library/tkinter.html

# 利用例
- CLIから `python fake_shutdown_meditation.py run` を実行すると、5分間の瞑想タイムが始まり、進捗バーやタイマー、通知がランダムに現れます。
- `python fake_shutdown_meditation.py list` でメッセージ一覧を確認できます。

# 注意点
- plyer, tkinterが未インストールの場合は、通知やGUI進捗バーが表示されません(代替として標準出力に出力)。
- 実際のシャットダウンや再起動は一切行わない安全設計です。

# 設計方針
- クロスプラットフォーム(Windows/Mac/Linux)で動作可能なAPIのみ採用。
- ランダム性と進捗演出を重視し、毎回異なる体験を提供します。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-shutdown-meditation .agents/skills/random-os-fake-shutdown-meditation

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

3. ファイル配置確認

ls .agents/skills/random-os-fake-shutdown-meditation
# 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連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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