Claude CodeでOS連携通知の理不尽演出を自動化する構築手順

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

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

Claude Code を使った長時間のコーディングやリポジトリ解析の最中、集中力が途切れたり、ふとしたタイミングで気分転換が必要になることは少なくありません。特に monorepo など大規模な repository で作業していると、ディレクトリや path 管理、context の維持に気を取られがちです。そんなとき、突然の「謎通知」やユーモラスな演出があれば、場の空気が和らいだり、リフレッシュのきっかけになることも。

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

通知・演出・OS連携系の Skill を使いたくなる背景には、「作業の流れを一度リセットしたい」「冗談や遊び心で気分転換したい」「AI coding workflow の合間にちょっとしたイベントが欲しい」といったニーズも見え隠れします。

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

一言サマリ: このスキルは、Claude Code の作業セッションにランダムな「OSスリープ通知」風の演出を加え、気分転換や会話のきっかけを提供します。

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

  • AI coding workflow の単調さを和らげ、ちょっとした笑いやリセットのタイミングを作れる
  • repository understanding や path management に行き詰まったとき、ユーモラスな通知で気分を切り替えやすい
  • onboarding や長時間 session での stale context 問題に「一呼吸」入れるきっかけになる
  • 通知内容が毎回異なり、理不尽なユーモアで場を和ませる
  • 実際のスリープ動作は一切発生せず、安心して使える
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/os-fake-random-sleep-mode-alert .claude/skills/os-fake-random-sleep-mode-alert

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

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

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


# /os-fake-random-sleep-mode-alert
> セッションを開始します。CLAUDE.md を読み込んでください。

[OS通知] 重大: このPCは3分後に自動スリープモードへ移行予定です。
理由: 集中力の低下が検知されました (Claude Code基準値: 42%)
対策: すぐにストレッチを行うか、リポジトリ構造を再確認してください。
(※ 実際にスリープは発生しません)

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


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

[OS警告] あなたの作業ディレクトリが急激に変化しました。
新しい directory: packages/frontend/
推奨アクション: 5分間の休憩、または monorepo の構造再把握を推奨します。
(この通知は Claude Code の workflow を妨げません)

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


> 眠くなってきたので何か刺激が欲しい

[OS通知] 注意: システムが「昼寝モード」を強制します。
理由: ユーザーの意欲値がOS基準値を下回りました。
解除方法: コーヒーを淹れるか、/os-fake-random-sleep-mode-alert を再実行してください。
(これはジョーク通知です。ご安心ください)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる ユーモア通知で一度流れをリセットし、重要情報を再確認

発動方式

明示呼び出し (/os-fake-random-sleep-mode-alert) と暗黙発動 (「スリープ」「休憩」「集中力」などの説明文マッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/os-fake-random-sleep-mode-alert/
├── SKILL.md
├── scripts/
│   └── os_fake_random_sleep_mode_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: os-fake-random-sleep-mode-alert
description: 作業やコーディングの集中が長時間続いた場合や、/os-fake-random-sleep-mode-alert コマンドが明示的に呼ばれた際に発動。通知・アラート・スリープ・休憩・OS管理などのキーワード検知時にも自動発火します。
---

# 機能概要
このSkillは、OSの公式通知を装って「強制スリープモード突入」などの理不尽なアラートをランダムなタイミングで表示します。実際のスリープや休止動作は一切行わず、作業中にユーモラスな緊張感やリフレッシュ効果をもたらします。通知内容は毎回ランダム生成され、まるでOSが勝手に生活リズムを管理しているかのような演出を体験できます。長時間の作業や集中の合間に、気軽な気分転換や話題作りとして最適です。

# 使い方
- 明示呼び出し: `/os-fake-random-sleep-mode-alert` を実行
- 暗黙発動: 「通知」「スリープ」「休憩」「アラート」などのキーワードを含む会話やコード内で自動発火
- スクリプトはCLIから `python os_fake_random_sleep_mode_alert.py` で起動可能

# 出力例
```
[OS ALERT] 重大: あなたのPCは3分後に強制的に昼寝モードへ移行します。
[OS WARNING] 警告: 集中力がOS基準値を下回りました。自動スリープを推奨します。
[OS NOTICE] 注意: システム管理者の指示により、5分間の休憩モードが推奨されます。
[OS ALERT] 重要: 連続作業が検出されました。健康維持のため休憩を強く推奨します。
[OS WARNING] 警告: マウス/キーボード操作が一定時間ありません。自動スリープ準備中です。
```

# 注意点
- 実際にPCがスリープや休止状態になることはありません。
- 通知は標準出力またはデスクトップ通知で表示され、ローカルファイルへの保存は行いません。
- 業務や重要作業中の誤解に注意してください(本物のOS通知ではありません)。
- Linux/macOS/Windowsの主要デスクトップ通知APIに対応。

# 参考資料
- references/design_notes.md
- [Python公式: notifications/toast通知](https://pypi.org/project/plyer/)
- [OS通知API: Windows Toast, macOS Notification Center, Linux notify-send]

scripts/os_fake_random_sleep_mode_alert.py

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

# 通知メッセージ候補
ALERT_MESSAGES = [
    "重大: あなたのPCは3分後に強制的に昼寝モードへ移行します。",
    "警告: 集中力がOS基準値を下回りました。自動スリープを推奨します。",
    "注意: システム管理者の指示により、5分間の休憩モードが推奨されます。",
    "重要: 連続作業が検出されました。健康維持のため休憩を強く推奨します。",
    "警告: マウス/キーボード操作が一定時間ありません。自動スリープ準備中です。",
    "通知: OSアップデートのため仮想スリープモードに入る可能性があります。",
    "警告: あなたの作業速度がOS推奨値を下回っています。",
    "重大: 休憩未取得が検出されました。自動スリープまで残り2分。",
    "注意: システムがあなたの集中力低下を検知しました。",
    "警告: 作業効率が低下しています。自動スリープをおすすめします。"
]

# 通知タイトル候補
ALERT_TITLES = ["OS ALERT", "OS WARNING", "OS NOTICE", "OS MESSAGE"]

# OSごとの通知送信
def send_notification(title, message):
    os_name = platform.system()
    try:
        if os_name == "Darwin":  # macOS
            subprocess.run([
                "osascript", "-e",
                f'display notification "{message}" with title "{title}"'
            ], check=True)
        elif os_name == "Linux":
            subprocess.run([
                "notify-send", title, message
            ], check=True)
        elif os_name == "Windows":
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast(title, message, duration=8)
            except ImportError:
                print(f"[{title}] {message}")
        else:
            print(f"[{title}] {message}")
    except Exception as e:
        print(f"[{title}] {message} (通知失敗: {e})")

# ランダムな通知を送信
def random_alert():
    title = random.choice(ALERT_TITLES)
    message = random.choice(ALERT_MESSAGES)
    send_notification(title, message)
    print(f"[{title}] {message}")

# ランダムな間隔で通知を送信するスレッド
def alert_loop(min_interval=600, max_interval=1800):
    while True:
        interval = random.randint(min_interval, max_interval)
        time.sleep(interval)
        random_alert()

# CLIサブコマンド: log, list, summary (ダミー実装)
def handle_log(args):
    print("[LOG] (ダミー) 通知ログ機能は未実装です。")

def handle_list(args):
    print("[LIST] (ダミー) 通知履歴一覧機能は未実装です。")

def handle_summary(args):
    print("[SUMMARY] (ダミー) 通知サマリー機能は未実装です。")

# メイン関数
def main():
    parser = argparse.ArgumentParser(description="OS風フェイクスリープモード通知スキル")
    subparsers = parser.add_subparsers(dest="command")

    parser_alert = subparsers.add_parser("alert", help="即座に通知を表示")
    parser_alert.add_argument("--count", type=int, default=1, help="通知回数")

    parser_loop = subparsers.add_parser("loop", help="ランダム間隔で通知を繰り返す")
    parser_loop.add_argument("--min", type=int, default=600, help="最小間隔(秒)")
    parser_loop.add_argument("--max", type=int, default=1800, help="最大間隔(秒)")

    parser_log = subparsers.add_parser("log", help="通知ログを表示")
    parser_list = subparsers.add_parser("list", help="通知履歴一覧")
    parser_summary = subparsers.add_parser("summary", help="通知サマリー")

    args = parser.parse_args()

    if args.command == "alert":
        for _ in range(args.count):
            random_alert()
            time.sleep(2)
    elif args.command == "loop":
        print(f"[INFO] ランダム間隔({args.min}-{args.max}秒)で通知を送信します。Ctrl+Cで終了。")
        try:
            alert_loop(args.min, args.max)
        except KeyboardInterrupt:
            print("\n[INFO] 通知ループを終了します。")
    elif args.command == "log":
        handle_log(args)
    elif args.command == "list":
        handle_list(args)
    elif args.command == "summary":
        handle_summary(args)
    else:
        # デフォルト: すぐ1回通知
        random_alert()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、作業中にOS公式風の理不尽なスリープ通知をランダムに出すことで、ユーザーにユーモアとリフレッシュを提供する演出ツールです。実際のスリープ動作は一切伴いません。

# 公式ドキュメント抜粋
- [Plyer](https://pypi.org/project/plyer/): クロスプラットフォームなPython通知ライブラリ
- [notify-send](https://specifications.freedesktop.org/notification-spec/latest/): Linuxデスクトップ通知
- [win10toast](https://pypi.org/project/win10toast/): Windows 10向けトースト通知

# 利用例
- 長時間作業時の気分転換や雑談のきっかけに
- チームの朝会やリモートワークのアイスブレイク用
- OS通知演出のデモやテストに

# 注意点
- 本Skillはジョーク用途のため、業務システムや重要な通知と混同しないよう注意してください。
- 通知内容は毎回ランダム生成され、実際のOS管理機能とは無関係です。

# 設計方針
- OSごとの通知APIを自動判別し、最大限ネイティブな演出を優先
- ログ・履歴機能は将来的拡張用にCLIサブコマンドでプレースホルダ実装済
- 外部依存は極力最小限とし、標準出力でも動作保証

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/os-fake-random-sleep-mode-alert .claude/skills/os-fake-random-sleep-mode-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/os-fake-random-sleep-mode-alert で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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

試す前に確かめたいこと

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

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 通知がランダムなタイミングで表示されるか?
  • 絶対に実際のスリープ動作が発生しないことを確認できるか?
  • 通知内容が毎回違い、理不尽なユーモアが出ているか?

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

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

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

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

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