Claude Codeで謎のOSシャットダウン瞑想タイムを演出する通知構築ガイド

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

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

Claude Code を使っていると、集中してコーディングしている最中にふと気づくと context が行方不明になったり、思いもよらない directory で作業していたり、repo の全体構造を再説明する羽目になったりと、微妙なストレスが積み重なります。特に monorepo や大規模プロジェクトでは、path 管理や repository understanding の手間が増え、AI coding workflow の流れが妙に中断されがちです。

  • Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
  • monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

こうした「またか…」という瞬間に、思いがけない演出や通知で気分転換やリセットを促してくれる仕掛けがあれば、開発体験も少し違ってくるかもしれません。

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

一言サマリ: このスキルは、作業に没頭しすぎた開発者の集中を「謎のOSシャットダウン瞑想通知」で強制リセットし、気分転換と repository understanding の再起動を演出します。

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

  • AI coding workflow の合間に、意味不明なOS風通知や瞑想タイマーが突如現れ、集中しすぎによる context の stale 化や path 管理の「マンネリ」を強制リセットできる
  • repository や directory の切り替えタイミングで、気分転換と同時に Claude Code の context をリフレッシュするきっかけになる
  • session 再開時や monorepo を跨ぐ際に、強制的な「無の境地」タイムで記憶や context のリセットを促し、再度 repository understanding をやり直せる
  • 長時間の作業や onboarding の途中で、ユーモラスな通知が入り、思わず笑って workflow の流れを変えられる
  • Skill の導入で、AI coding workflow の中に「遊び心」と「リセットポイント」を自然に組み込める
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-shutdown-meditation .claude/skills/random-os-fake-shutdown-meditation

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

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

シーン1: session 開始時 (CLAUDE.md と組み合わせて)


# /random-os-fake-shutdown-meditation
> session を再開したい。前回の context を復元して

[OS通知] 「システムは5分間、無の境地に入ります」
[瞑想度] [======            ]  35%
[タイマー] 4:57 残り
「強制メンテ:心の再起動モードが発動しました」
(Claude Code: context の復元を一時停止しています…)

[通知] 「椅子で悟りを開いてください。復帰後に repository understanding を再開します」

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


> packages/core から packages/utils に移動して続きをやりたい

[OS通知] 「OS推奨:パッケージの狭間で一度深呼吸してください」
[瞑想度] [===               ]  15%
[タイマー] 1:23 残り
「monorepo の directory 境界を越えたため、context を一時リセットします」
(Claude Code: repository understanding を再スキャン中…)

[通知] 「進捗バーが100%になったら再開できます」

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


> なんか集中しすぎて逆に疲れた。リフレッシュしたい

[OS通知] 「意味不明なシャットダウン:心の再起動を推奨します」
[瞑想度] [=========         ]  60%
[タイマー] 2:00 残り
「OSがあなたの脳内キャッシュをクリア中です」
(Claude Code: memory を一時リセットしています…)

[通知] 「進捗バーが満タンになったら作業に戻ってください」

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開+謎の瞑想通知で気分転換
monorepo 移動 違う package のコードを参照しがち directory boundary で「瞑想タイム」→ context リセット・再構築を促進
長時間 workflow long context で重要箇所が薄まる 定期的な「無の境地」通知で context を強制リフレッシュ

発動方式

明示呼び出し (/random-os-fake-shutdown-meditation) と、自然言語での description マッチ (「リセットしたい」「集中しすぎた」「瞑想したい」等) の両方に対応。

Skill の中身を全部見せる

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

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

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_shutdown_meditation.py 謎のOSシャットダウン瞑想タイムをランダム発動するスクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-shutdown-meditation
description: 作業に没頭しすぎた時や「shutdown」「meditation」「無の境地」などのキーワードを含む会話・コマンドが出現した際に、ランダムな“OSシャットダウン瞑想通知”を発動します。進捗バーや謎タイマーも表示され、集中を強制リセットします。
---

# 機能概要
このSkillは、開発作業やコーディングに熱中している際に、突如として“謎のOSシャットダウン瞑想タイム”を演出する通知・タイマー・進捗バーをランダムに発動します。意味不明なメッセージや瞑想度バー、静寂タイマーが現れ、ユーザーの集中を一時的にリセットし、強制的に“無”の時間を提供します。開発者の気分転換やユーモア、意図的な撹乱を目的として設計されています。

# 使い方
- 明示呼び出し: `/random-os-fake-shutdown-meditation` を実行すると即時発動します。
- 暗黙発動: 「shutdown」「meditation」「再起動」「無の境地」「悟り」などの単語が会話やコマンドに含まれると、ランダムタイミングで自動発動します。
- OSのデスクトップ通知、端末出力、進捗バーが表示されます。

# 出力例
```
[通知] システムは5分間、無の境地に入ります。
[進捗バー] 瞑想度: [====      ] 40%
[タイマー] 残り 04:12
[通知] 強制メンテ:心の再起動モード
[進捗バー] 瞑想度: [========  ] 80%
[終了通知] 悟りタイムが完了しました。作業に戻れます。
```

# 注意点
- このSkillは実際のOSシャットダウンや再起動は行いません。
- 通知・タイマーはローカル環境でのみ動作します(Linux/macOS/Windows対応)。
- 長時間の強制タイマーはありません。集中を妨げすぎないよう設計されています。
- ログや履歴は保存されません。

# 参考資料
- references/design_notes.md に設計方針や動作例を記載
- OS通知: https://docs.python.org/ja/3/library/subprocess.html, https://github.com/jithurjacob/Windows-10-Toast-Notifications
- 進捗バー: https://tqdm.github.io/

scripts/random_os_fake_shutdown_meditation.py

import sys
import time
import random
import argparse
import platform
import subprocess
from threading import Thread

try:
    from tqdm import tqdm
except ImportError:
    tqdm = None

# メッセージ候補
NOTIFICATIONS = [
    "システムは5分間、無の境地に入ります。",
    "強制メンテ:心の再起動モード",
    "OS推奨:椅子で悟りを開いてください",
    "謎のシャットダウン瞑想タイム発動中…",
    "進捗バーで悟り度を計測中",
    "静寂を強制する謎タイマーが現れました",
    "メモリ最適化中:思考を一時停止してください",
    "CPU負荷低減:心のリセットを推奨",
    "OSからのお知らせ:深呼吸してみましょう",
    "仮想再起動:現実世界でリフレッシュしてください"
]

END_MESSAGES = [
    "悟りタイムが完了しました。作業に戻れます。",
    "再起動完了。集中モードに復帰します。",
    "無の境地から帰還しました。",
    "OS瞑想モード終了。引き続き作業をどうぞ。"
]

# OS通知を送る
def send_notification(title, message):
    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 win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast(title, message, duration=5)
            except ImportError:
                print(f"[通知] {title}: {message}")
        else:
            print(f"[通知] {title}: {message}")
    except Exception as e:
        print(f"[通知] {title}: {message} (通知失敗: {e})")

# 進捗バーを表示
def meditation_progress_bar(duration_sec):
    steps = 10
    interval = duration_sec / steps
    if tqdm:
        for i in tqdm(range(steps), desc="瞑想度", ncols=60):
            time.sleep(interval)
    else:
        for i in range(steps):
            bar = "[" + "=" * (i+1) + " " * (steps - i - 1) + "]"
            percent = int((i+1) / steps * 100)
            print(f"[進捗バー] 瞑想度: {bar} {percent}%")
            time.sleep(interval)

# タイマー表示
def meditation_timer(duration_sec):
    for remaining in range(duration_sec, 0, -1):
        mins, secs = divmod(remaining, 60)
        time_str = f"{mins:02}:{secs:02}"
        print(f"[タイマー] 残り {time_str}", end="\r", flush=True)
        time.sleep(1)
    print(" " * 40, end="\r")

# メイン瞑想イベント
def run_meditation_event(duration=300):
    notif = random.choice(NOTIFICATIONS)
    send_notification("謎のOS瞑想タイム", notif)
    print(f"[通知] {notif}")
    # 進捗バーとタイマーを並列実行
    bar_thread = Thread(target=meditation_progress_bar, args=(duration,))
    timer_thread = Thread(target=meditation_timer, args=(duration,))
    bar_thread.start()
    timer_thread.start()
    bar_thread.join()
    timer_thread.join()
    end_msg = random.choice(END_MESSAGES)
    send_notification("瞑想終了", end_msg)
    print(f"\n[終了通知] {end_msg}")

# コマンドライン引数処理
def parse_args():
    parser = argparse.ArgumentParser(
        description="謎のOSシャットダウン瞑想タイムをランダム発動するスクリプト"
    )
    parser.add_argument(
        "run",
        nargs="?",
        default=None,
        help="瞑想タイムを即時発動"
    )
    parser.add_argument(
        "--duration", "-d",
        type=int,
        default=300,
        help="瞑想タイムの秒数 (デフォルト: 300秒)"
    )
    parser.add_argument(
        "list",
        nargs="?",
        default=None,
        help="通知メッセージ一覧を表示"
    )
    return parser.parse_args()

# メイン関数
def main():
    args = parse_args()
    if args.run == "run":
        run_meditation_event(duration=args.duration)
    elif args.list == "list":
        print("--- 通知メッセージ候補 ---")
        for m in NOTIFICATIONS:
            print(f"- {m}")
        print("--- 終了メッセージ候補 ---")
        for m in END_MESSAGES:
            print(f"- {m}")
    else:
        # 暗黙発動用: stdinからキーワード検知
        print("[INFO] キーワード監視モード。Ctrl+Cで終了。")
        keywords = ["shutdown", "meditation", "再起動", "無の境地", "悟り"]
        try:
            while True:
                line = sys.stdin.readline()
                if not line:
                    break
                if any(k in line for k in keywords):
                    if random.random() < 0.5:  # 50%の確率で発動
                        run_meditation_event(duration=180)
        except KeyboardInterrupt:
            print("\n[INFO] 終了します。")

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、開発者の集中を意図的に撹乱し、ユーモアや気分転換を提供するための“謎のOSシャットダウン瞑想タイム”を演出します。通知・進捗バー・タイマーを組み合わせて、現実には何もシャットダウンしない安全な仕組みです。

# 公式ドキュメント抜粋
- Python標準のsubprocess, osascript, notify-send, win10toast等でクロスプラットフォームな通知を実現。
- 進捗バーはtqdmライブラリを優先利用、未導入時は自作バーで代替。

# 利用例
- 明示的に `/random-os-fake-shutdown-meditation` を呼ぶと即時発動。
- コーディング中に「shutdown」「meditation」等の単語が現れると、50%の確率で自動発動。

# 注意点
- 実際のOS操作は一切行わず、通知・端末表示のみ。
- ローカル通知APIのため、リモート環境や一部OSでは通知が表示されない場合があります。

# 設計方針
- ユーザー体験を損なわないよう、タイマー時間や発動頻度は控えめ。
- 冗談やネタとしての利用を想定し、実用性よりも演出・体験を重視しています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-shutdown-meditation .claude/skills/random-os-fake-shutdown-meditation

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

3. ファイル配置確認

ls .claude/skills/random-os-fake-shutdown-meditation
# SKILL.md, scripts/, references/, README.md があればOK

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

新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-shutdown-meditation と Skill 名で出てきます。

5. 動作確認

/random-os-fake-shutdown-meditation で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Claude Code に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Claude Code に把握させ、こちらが 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 コードを拾ってしまう可能性
  • Claude Code 固有の引っかかり: paths フロントマターでの絞り込みを使わないと意図しないタイミングで発動する
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory
  • 通知・演出の過剰発動: 頻度やタイミングの調整が甘いと workflow の邪魔になる可能性

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 意味不明なシャットダウン瞑想通知がランダムで発動するか?
  • 瞑想進捗バーやタイマー演出が実際に表示されるか?
  • 開発者が思わず二度見・苦笑いする謎体験ができるか?

実際に Claude Code で試した検証ログは 謎のOSシャットダウン瞑想通知をClaude Codeで試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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