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化を、強制的な“瞑想タイム”で一旦リセットしやすくなる
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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
