Claude Codeで作業中の休憩タイミングを通知する演出スキル構築ガイド

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

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

Claude Code を使っていると、集中力が切れてしまったり、ちょっと席を外したタイミングで思わぬ挙動に悩まされることがよくあります。特に長時間の AI coding workflow や monorepo を扱う現場では、気づかぬうちに context や repository understanding がズレたり、path 管理が煩雑になりがちです。そんな時、ふとした無操作時間が生まれ、気まずい沈黙が流れることも。

  • 作業の合間に30秒ほど手を止めた瞬間、何となく間延びした空気になりがち
  • onboarding や説明中に手が止まり、周囲から「寝てる?」と突っ込まれることがある
  • AI coding workflow の最中に長めの無操作が発生し、session の context が stale になりやすい
  • monorepo で package を跨いだ直後、思考が止まって repository 理解がリセットされる
  • 「今どこにいるんだっけ?」と directory や path management で迷子になりやすい

特に通知や演出系 Skill があれば、こうした「気まずい無言」や「うっかりサボり」を笑いに変えられるのに――と感じる瞬間がありませんか。

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

一言サマリ: このスキルは、作業中に30秒以上無操作が続くと、ランダムな“お昼寝検出アラート”を通知して、気まずい沈黙やサボりをユーモアで演出するSkill。

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

  • 無操作による session の間延びや stale context を、ユーモラスな通知で即座に察知・リセットできる (Claude Code の context 管理にも気づきやすい)
  • onboarding や説明会などで、職場やチームの雰囲気を和ませる演出ができる
  • AI coding workflow の中だるみや、repository understanding のリフレッシュタイミングを自然に作れる
  • monorepo や大規模 directory での作業中、path management の切り替え時にリズムを生む
  • 「サボり」や「うたた寝」をネタにして、作業効率やチームのコミュニケーション活性化にもつながる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-nap-detection-alert .claude/skills/random-os-nap-detection-alert

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

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

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


# /random-os-nap-detection-alert
> session start

[INFO] Skill "random-os-nap-detection-alert" activated.
[NOTICE] 30秒以上無操作を検出した場合、通知を表示します。

(30秒後...)

[ALERT] 検出:うたた寝モード突入
[HINT] Claude Code も夢の中で repository understanding を強化中です。
[MEMO] context の復元や path management の再確認をおすすめします。

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


> cd packages/service-a
(作業を一時中断し、30秒以上放置...)

[ALERT] OS推奨:夢の中でバグ修正中
[NOTICE] directory: packages/service-a/
[MEMO] repository understanding のリフレッシュタイミングです。
[HINT] Claude Code の context を再セットしておきましょう。

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


> (編集作業中にコーヒーブレイクで30秒離席)

[ALERT] 睡眠ログをクラウドにアップロード中...
[NOTICE] Claude Code が長時間の無操作を検出しました。
[MEMO] AI coding workflow の再開準備OKです。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 無操作時に通知で context をリフレッシュするきっかけを得られる

発動方式

明示呼び出し (/random-os-nap-detection-alert) と暗黙発動 (30秒以上の無操作を自動検出) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-nap-detection-alert/
├── SKILL.md
├── scripts/
│   └── nap_detection_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/nap_detection_alert.py random-os-nap-detection-alert skill
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-nap-detection-alert
description: 30秒以上の無操作(コマンド入力やエディタ編集が停止)を検出した際に発動。作業中断やサボりをユーモラスなランダム通知で警告し、集中力低下や職場の和み演出に活用可能。
---

# 機能概要
`random-os-nap-detection-alert`は、作業中に30秒以上の無操作状態(コマンド入力・エディタ編集の停止)を検出すると、デスクトップ通知やターミナルに「OSお昼寝検出アラート」を自動表示するスキルです。通知内容は毎回ランダムで、「検出:うたた寝モード突入」「OS推奨:夢の中でバグ修正」「睡眠ログをクラウドにアップロード中」など絶妙なツッコミ系。作業に集中できない時や、職場で和みや笑いを誘いたいシーンに最適です。

# 使い方
- 明示呼び出し: `/random-os-nap-detection-alert` で即時発動
- 暗黙発動: コマンド入力やエディタ操作が30秒以上停止した場合に自動発動
- カテゴリ: 通知・演出・OS連携
- トリガー: semantic-or-explicit

# 出力例
```
[15:32:10] 検出:うたた寝モード突入
[15:32:41] OS推奨:夢の中でバグ修正をどうぞ
[15:33:12] 睡眠ログをクラウドにアップロード中...
[15:34:00] 注意:キーボードが恋しがっています
[15:34:31] 謎のOSアラート:作業復帰をお待ちしています
```

# 注意点
- データ損失や環境破壊は一切発生しません
- 通知はローカル端末にのみ表示され、外部送信や保存は行いません
- 一部環境(WSL等)でデスクトップ通知が動作しない場合、ターミナル通知のみ
- サボり検出の閾値は30秒に固定

# 参考資料
- [Python公式: subprocess, time, notify2](https://docs.python.org/3/library/)
- references/design_notes.md に設計方針・利用例を記載

scripts/nap_detection_alert.py

import sys
import os
import time
import threading
import argparse
import random
import subprocess

try:
    import notify2
    NOTIFY_AVAILABLE = True
except ImportError:
    NOTIFY_AVAILABLE = False

NAP_MESSAGES = [
    '検出:うたた寝モード突入',
    'OS推奨:夢の中でバグ修正をどうぞ',
    '睡眠ログをクラウドにアップロード中...',
    '注意:キーボードが恋しがっています',
    '謎のOSアラート:作業復帰をお待ちしています',
    '警告:OSが夢の世界へ誘導中',
    'お昼寝検出:コーヒーブレイク推奨',
    'サボりログをAIで解析中...',
    '作業再開をOSが待機しています',
    'お昼寝モード:生産性低下中'
]

LAST_ACTIVITY_FILE = os.path.expanduser('~/.random_os_nap_last_activity')

CHECK_INTERVAL = 2  # seconds
NAP_THRESHOLD = 30  # seconds


def get_last_activity_time():
    if not os.path.exists(LAST_ACTIVITY_FILE):
        return time.time()
    try:
        with open(LAST_ACTIVITY_FILE, 'r') as f:
            return float(f.read().strip())
    except Exception:
        return time.time()


def update_last_activity_time():
    try:
        with open(LAST_ACTIVITY_FILE, 'w') as f:
            f.write(str(time.time()))
    except Exception:
        pass


def send_notification(message):
    # Try desktop notification
    if NOTIFY_AVAILABLE:
        try:
            notify2.init('Random OS Nap Detection')
            n = notify2.Notification('OSお昼寝検出アラート', message)
            n.set_urgency(notify2.URGENCY_NORMAL)
            n.show()
            return
        except Exception:
            pass
    # Fallback: macOS
    if sys.platform == 'darwin':
        try:
            subprocess.run(['osascript', '-e', f'display notification "{message}" with title "OSお昼寝検出アラート"'], check=True)
            return
        except Exception:
            pass
    # Fallback: terminal output
    print(f'[{time.strftime("%H:%M:%S")}] {message}')


def monitor_activity():
    last_alert_time = 0
    while True:
        last_activity = get_last_activity_time()
        now = time.time()
        idle = now - last_activity
        if idle >= NAP_THRESHOLD and (now - last_alert_time) > NAP_THRESHOLD:
            message = random.choice(NAP_MESSAGES)
            send_notification(message)
            last_alert_time = now
        time.sleep(CHECK_INTERVAL)


def log_activity():
    update_last_activity_time()
    print(f'[{time.strftime("%H:%M:%S")}] 活動記録:操作を検知しました')


def list_alerts():
    print('--- OSお昼寝アラート候補一覧 ---')
    for msg in NAP_MESSAGES:
        print(f'- {msg}')


def summary():
    last_activity = get_last_activity_time()
    idle = time.time() - last_activity
    print(f'最終操作から経過: {int(idle)} 秒')
    if idle >= NAP_THRESHOLD:
        print('現在:お昼寝検出アラート発動中')
    else:
        print('現在:活動中')


def main():
    parser = argparse.ArgumentParser(description='random-os-nap-detection-alert skill')
    subparsers = parser.add_subparsers(dest='command')

    subparsers.add_parser('monitor', help='無操作監視モードでアラートを自動発動')
    subparsers.add_parser('log', help='操作イベントを手動記録')
    subparsers.add_parser('list', help='アラートメッセージ一覧を表示')
    subparsers.add_parser('summary', help='最終操作時刻と状態を表示')
    subparsers.add_parser('alert', help='即時ランダムアラートを発動')

    args = parser.parse_args()

    if args.command == 'monitor':
        print('無操作監視モードを開始します (30秒無操作でアラート発動)')
        monitor_activity()
    elif args.command == 'log':
        log_activity()
    elif args.command == 'list':
        list_alerts()
    elif args.command == 'summary':
        summary()
    elif args.command == 'alert':
        message = random.choice(NAP_MESSAGES)
        send_notification(message)
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの無操作状態を30秒単位で監視し、作業中断時にユーモラスなアラートを発動します。Pythonの標準ライブラリとnotify2(Linux)、osascript(macOS)によるデスクトップ通知、またはターミナル出力で幅広い環境に対応しています。

# 公式ドキュメント抜粋
- [notify2](https://pypi.org/project/notify2/): Linux向けデスクトップ通知
- [subprocess](https://docs.python.org/3/library/subprocess.html): macOS通知やコマンド実行に使用
- [time](https://docs.python.org/3/library/time.html): 無操作検出ロジック

# 利用例
- 作業に集中できない時の自虐ネタや、職場でのアイスブレイク
- チームでのペアプロ時に「サボり検出」演出

# 注意点
- データ損失や外部送信は一切ありません
- WSLなど一部環境ではデスクトップ通知が動作しない場合があります

# 設計方針
- ユーザー体験を損なわず、絶妙なタイミングで通知
- メッセージは毎回ランダム、繰り返しでも飽きが来ない工夫
- シンプルなファイル記録でクロスプラットフォーム対応

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/claude-code/random-os-nap-detection-alert .claude/skills/random-os-nap-detection-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-nap-detection-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 との連携設計はどうあるべきか?
  • 30秒程度の無操作で正しく通知されるか?
  • 通知内容が毎回ランダムで変化し、飽きないか?
  • 通知によるデータ損失や環境破壊が一切発生しないか?

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

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

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

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

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