Claude Codeで職場に非日常を演出するOS通知スキルの作り方

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

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

Claude Code を使っていると、日々のコーディングやリポジトリ管理の中で「ちょっとした非日常」や「息抜き」がほしくなる瞬間が意外と多いものです。特に集中して作業していると、緊張感や単調さが続き、職場やチームの空気が硬直しがちです。通知・演出系のSkillがあれば、そんな場面にちょっとした変化や笑いをもたらせるのでは、という声も聞こえてきます。

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

こうした真面目な悩みに加え、たまには「謎のOSロックダウン通知」など、作業現場に意図的なカオスや笑いを投入して場を和ませたい、というニーズも見逃せません。通知・演出・OS連携系のSkillは、単なる便利機能だけでなく、チームの雰囲気を一変させるユーモアの起爆剤にもなり得ます。

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

一言サマリ: このスキルは、Claude Code の作業現場に「謎のOSロックダウン通知」を炸裂させ、非日常の演出と笑いをもたらします。

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

  • 長時間の AI coding workflow に突如カオスな通知が走り、場の空気がリフレッシュされる
  • onboarding や session 再開時に「謎のロックダウン」通知で会話が盛り上がる
  • monorepo や複雑な repository 構造で作業中でも、予期せぬタイミングで通知が現れ、意図的な interruption を演出できる
  • Skill の context や path management とは別軸で、職場コミュニケーションのきっかけになる
  • 通知は完全ランダム生成で、毎回異なるメッセージが飛ぶため飽きずに使える
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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

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


# /random-os-fake-lockdown-alert

[ALERT] 緊急: 本日より全ファイル凍結モード発動
理由: カフェイン過剰摂取検知 (user@dev-machine)
影響範囲: ./src/ から ./tests/ まで全 directory
解除方法: デスクから立ち上がり、深呼吸を5回
備考: Claude Code の repository understanding 機能は一時停止します

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


> 作業ディレクトリを packages/api/ から packages/web/ に移動

[OS LOCKDOWN NOTICE]
モジュール "web" で異常なファイルアクセスを検知しました
理由: repository context が急激に変化
対策: 10秒間、全 directory の編集を制限します
解除コマンド: /unlock-now
ヒント: monorepo 構造を Claude Code に再説明してください

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


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

[FAKE SYSTEM ALERT]
全ユーザーに告ぐ: 本日 16:00 より「作業ファイル凍結祭り」開催
原因: AI coding workflow の過剰最適化を検出
解除方法: 隣の席の人に「お疲れ様」と声をかける
備考: この通知はランダムに発生します

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 突如ロックダウン通知が入り、集中力をリセットできる

発動方式

明示呼び出し (/random-os-fake-lockdown-alert) と暗黙発動 (「OSロックダウン」「ファイル凍結」などのdescriptionマッチ) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-lockdown-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_lockdown_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

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

SKILL.md

---
name: random-os-fake-lockdown-alert
description: 作業中・コマンド実行時・集中状態などに、ランダムかつ非現実的な『OSロックダウン通知』を発動。通知・演出・ジョーク系Skillとして、明示呼び出しや特定キーワード検知時に適用。
---

# 機能概要
このSkillは、作業中に突如として「謎のOSロックダウン発令通知」をデスクトップやターミナルに表示します。通知内容は完全ランダムで、例えば「全ファイル凍結」「理由:カフェイン過剰摂取検知」「解除方法:深呼吸5回」など、現実にはあり得ない非日常的なメッセージが炸裂。真面目な作業現場に突如カオスと笑いをもたらし、チームの雰囲気を一瞬だけ和ませます。実ファイルや環境への影響は一切なく、演出専用です。

# 使い方
- 明示呼び出し例:`/random-os-fake-lockdown-alert` または `/skill random-os-fake-lockdown-alert`
- 暗黙発動例:会話やコード内に「集中」「眠い」「退屈」「生産性」などのキーワードが含まれる場合、自動で通知が発動します。

# 出力例
```
=== 緊急OSロックダウン発令 ===
発令時刻: 2024-06-01 14:23:11
理由: カフェイン過剰摂取検知
影響範囲: 全ユーザーディレクトリ
解除方法: 深呼吸5回 + 机の上を片付ける
=============================
```
```
=== 謎のシステム凍結警告 ===
発令時刻: 2024-06-01 15:02:44
理由: キーボード連打による過熱
影響範囲: /tmp, /home, /dev/null
解除方法: 画面を3秒間見つめる
=============================
```

# 注意点
- 実際のファイルやシステムには一切影響を与えません。
- 通知は標準出力またはデスクトップ通知APIでのみ表示されます。
- ローカルに履歴や記録は残しません。
- 業務環境での使用はジョーク目的に限定し、誤解を招かないよう注意してください。

# 参考資料
- [Python公式: notifications, random, argparse](https://docs.python.org/3/library/)
- references/design_notes.md 参照

scripts/random_os_fake_lockdown_alert.py

import random
import argparse
import sys
import time
import datetime
import platform
import subprocess

# メッセージテンプレート
REASONS = [
    'カフェイン過剰摂取検知',
    'キーボード連打による過熱',
    'AI過剰利用',
    '生産性が高すぎるため',
    '集中力の急激な低下',
    '謎の宇宙線干渉',
    'OSの気分が乗らない',
    'ファイルシステムからの悲鳴',
    'ネットワークのやる気低下',
    'ユーザーの退屈度が閾値超過'
]

AFFECTED = [
    '全ユーザーディレクトリ',
    '/tmp, /home, /dev/null',
    'デスクトップと書類フォルダ',
    'カレントディレクトリ',
    '全プロセス',
    'ランダムな3ファイル',
    'ネットワーク全域',
    '仮想メモリ',
    'USBデバイス',
    '隣の席のPC'
]

UNLOCKS = [
    '深呼吸5回 + 机の上を片付ける',
    '画面を3秒間見つめる',
    'コーヒーを1杯減らす',
    '手を振る',
    '目を閉じて「解除」と唱える',
    '椅子から立ち上がる',
    '好きな曲を1フレーズ歌う',
    'タイマーを1分セット',
    'ターミナルを再起動',
    '同僚に「ロックダウン発令」と伝える'
]

BANNERS = [
    '=== 緊急OSロックダウン発令 ===',
    '=== 謎のシステム凍結警告 ===',
    '=== OSストライキ通知 ===',
    '=== セキュリティ異常アラート ===',
    '=== 仮想環境パニック発令 ==='
]

FOOTER = '============================='

HISTORY = []


def random_alert():
    now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    banner = random.choice(BANNERS)
    reason = random.choice(REASONS)
    affected = random.choice(AFFECTED)
    unlock = random.choice(UNLOCKS)
    alert = f"{banner}\n発令時刻: {now}\n理由: {reason}\n影響範囲: {affected}\n解除方法: {unlock}\n{FOOTER}"
    HISTORY.append({
        'timestamp': now,
        'banner': banner,
        'reason': reason,
        'affected': affected,
        'unlock': unlock,
        'alert': alert
    })
    return alert


def show_alert(alert, notify=False):
    print(alert)
    if notify:
        send_desktop_notification(alert)


def send_desktop_notification(message):
    system = platform.system()
    title = 'OSロックダウン通知'
    if system == 'Darwin':  # macOS
        try:
            subprocess.run([
                'osascript', '-e',
                f'display notification "{message}" with title "{title}"'
            ], check=True)
        except Exception:
            pass
    elif system == 'Linux':
        try:
            subprocess.run([
                'notify-send', title, message], check=True)
        except Exception:
            pass
    # Windowsは標準で通知API非対応(拡張可)


def list_history():
    if not HISTORY:
        print('まだロックダウン通知は発令されていません。')
        return
    for i, h in enumerate(HISTORY, 1):
        print(f"[{i}] {h['timestamp']} - {h['reason']} -> {h['affected']}")


def summary():
    print(f"累計発令回数: {len(HISTORY)}")
    if HISTORY:
        last = HISTORY[-1]
        print(f"直近: {last['timestamp']} / {last['reason']}")


def parse_args():
    parser = argparse.ArgumentParser(description='謎のOSロックダウン通知を発令します')
    parser.add_argument('command', nargs='?', default='alert', choices=['alert', 'list', 'summary'], help='サブコマンド: alert/list/summary')
    parser.add_argument('--notify', action='store_true', help='デスクトップ通知も同時に表示')
    parser.add_argument('--repeat', type=int, default=1, help='繰り返し回数')
    parser.add_argument('--interval', type=float, default=0, help='繰り返し間隔(秒)')
    return parser.parse_args()


def main():
    args = parse_args()
    if args.command == 'alert':
        for i in range(args.repeat):
            alert = random_alert()
            show_alert(alert, notify=args.notify)
            if i < args.repeat - 1 and args.interval > 0:
                time.sleep(args.interval)
    elif args.command == 'list':
        list_history()
    elif args.command == 'summary':
        summary()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
本Skillは、現実には発生し得ない『OSロックダウン通知』を完全ランダムな内容で生成し、チームや個人作業の場に一瞬の非日常を演出します。実際のファイルや環境には一切影響を与えません。

# 公式ドキュメント抜粋
- [Python random](https://docs.python.org/3/library/random.html)
- [argparse](https://docs.python.org/3/library/argparse.html)
- [notify-send (Linux)](https://man7.org/linux/man-pages/man1/notify-send.1.html)
- [osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)

# 利用例
- `/random-os-fake-lockdown-alert --notify` でデスクトップ通知
- `/random-os-fake-lockdown-alert alert --repeat 3 --interval 10` で10秒ごとに3回発令
- `/random-os-fake-lockdown-alert list` で過去発令履歴を表示

# 注意点
- 実際のシステムやファイルには何も影響を与えません。
- 通知内容は完全に架空で、演出目的です。
- 履歴はメモリ上のみで永続化されません。

# 設計方針
- シンプルかつ安全な構成
- OSごとの通知APIを自動判別
- ランダム性・非現実性・ジョーク性を重視

導入手順

この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-lockdown-alert .claude/skills/random-os-fake-lockdown-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-lockdown-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をコピーしました!
目次