Claude Codeで理不尽AI評価通知を演出する演出Skillの作り方

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

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

Claude Code を使ったAI coding workflowでは、日々の開発作業やリポジトリ管理、contextの切り替え、path managementなどで多くの工夫が求められます。しかし、真面目な作業空間が続くと、思わぬ「息抜き」や「遊び心」が不足しがちです。特に通知や演出、OS連携系のSkillが少ないと、作業空間が単調になりやすく、AIとのやりとりも無機質に感じることがあります。Claude Codeは本来、repository understandingやonboarding体験を強化するためのSkill拡張が中心ですが、「AI社会の風刺」や「理不尽なAI評価」といった遊び心を加える余地も残されています。

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

こうした「真面目すぎる」作業空間に、ちょっとしたスパイスやユーモアを加えたいと感じる瞬間も多いはずです。気分転換やチームの空気を和らげるきっかけとして、AIによる“謎の評価通知”が欲しくなることもあるでしょう。

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

一言サマリ: このスキルは、Claude Codeの作業空間に「理不尽で風刺的なAI評価通知」をランダムに届け、単調な開発フローに遊び心と刺激を加えます。

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

  • AI coding workflow中、突如として「OS公式AIによる謎の評価通知」が現れ、作業空間にユーモアや風刺的な演出が加わる
  • 集中しすぎて固まった空気や、長時間のsessionにスパイスを投入し、チームや個人の気分転換を促進
  • repository understandingやcontext切り替えの合間に、理不尽なAIコメントで笑いを誘う
  • onboardingやpath managementの説明タイミングで、ユニークなAI通知が場の雰囲気を和らげる
  • Skillによる通知頻度やタイミングは自動調整され、実用性ゼロながらも実害ゼロで安全に楽しめる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

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


# /random-os-fake-ai-evaluation-alert

[OS AI 評価通知] 
本日のあなたの集中度は「AI判定: たぶん寝てる」です。
理由: マウス移動距離が基準値未満、もしくはコーヒー摂取量が基準値超過。
ヒント: "src/utils/context_manager.py" の編集回数が昨日より低下しています。
(この通知はAIがランダムに生成しています。気にせず作業を続けてください)

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


# /random-os-fake-ai-evaluation-alert

[OS公式AI評価] 
monorepo内 package 跨ぎが検出されました。
AIによる自動評価: packages/auth/ の作業効率は「謎の向上」。一方、packages/core/ の集中度は「AI判定: 迷走中」。
あなたの本日のpath managementスキル: 3.2/10 (AI基準)
次回のrepository understandingにご期待ください。

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


# /random-os-fake-ai-evaluation-alert

[AI社会通知]
AIによる自動評価: あなたのディレクトリ構造は「AI判定: カオス」。
本日のファイル名命名規則: 「ランダムにしてみたら?」
context window 残量: 42%。重要情報が薄まりかけています(AI談)。
(本通知は完全ランダム。真面目に受け取らないでください)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 理不尽なAI通知で気分転換、workflowが単調になりにくい

発動方式

明示呼び出し (/random-os-fake-ai-evaluation-alert) と暗黙発動 (AI評価通知してほしい等の自然言語指示) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-ai-evaluation-alert/
├── SKILL.md
├── scripts/
│   └── random_os_fake_ai_evaluation_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_ai_evaluation_alert.py random-os-fake-ai-evaluation-alert: 理不尽AI評価通知で作業空間を演出します。
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-ai-evaluation-alert
description: 作業中やコマンド実行時、または「評価」「AI」「集中」などのキーワードが検出された際に、理不尽かつ多様なAI評価メッセージをランダムで通知・表示します。明示的な /random-os-fake-ai-evaluation-alert 呼び出しにも対応。
---

# 機能概要
このSkillは、あなたの作業環境に“謎のOS公式AI評価通知”を突然表示し、理不尽かつ多様なAIコメントで作業空間にスパイスを加えます。評価内容や基準は完全ランダムで、真面目なフリをした不可解なAIコメントがデスクトップ通知やターミナル出力として降り注ぎます。実用性はありませんが、AI社会の風刺や気分転換、チームのアイスブレイクに最適です。通知は頻繁すぎず、作業の邪魔にならないよう調整されています。

# 使い方
- 明示呼び出し: `/random-os-fake-ai-evaluation-alert` を実行すると即座にAI評価通知が表示されます。
- 暗黙発動: 「評価」「AI」「集中」「パフォーマンス」などのキーワードを含む会話やコマンド実行時に自動発動します。
- 通知はローカル端末のデスクトップ通知(OS標準API経由)またはターミナル出力として表示されます。

# 出力例
```
[AI評価通知] 本日のあなたの集中度: AI判定「たぶん寝てる」
[AI評価通知] AIによる自動評価: コーヒー摂取量が基準値超過
[AI評価通知] システムAI: 進捗率0%を検知しました。やる気スコア: -42
[AI評価通知] OS公式AI: あなたのキーボード打鍵音が眠そうです
[AI評価通知] AI判定: 本日は“やった気分”のみ加点されました
```

# 注意点
- 実害は一切ありません。通知は記録・送信されず、ローカル表示のみです。
- 頻度は自動調整され、ウザすぎないよう設計されています。
- ログはローカル一時ファイルにのみ保存され、プライバシーは保護されます。
- 本Skillはジョーク用途であり、実作業評価やモチベーション管理には使えません。

# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- OS通知API: https://docs.python.org/ja/3/library/subprocess.html, https://pypi.org/project/plyer/
- 参考: https://github.com/kivy/plyer, https://docs.python.org/3/library/random.html

scripts/random_os_fake_ai_evaluation_alert.py

import sys
import os
import random
import time
import argparse
import threading
from datetime import datetime
try:
    from plyer import notification
except ImportError:
    notification = None

# 評価メッセージ候補
AI_MESSAGES = [
    "本日のあなたの集中度: AI判定『たぶん寝てる』",
    "AIによる自動評価: コーヒー摂取量が基準値超過",
    "システムAI: 進捗率0%を検知しました。やる気スコア: -42",
    "OS公式AI: あなたのキーボード打鍵音が眠そうです",
    "AI判定: 本日は“やった気分”のみ加点されました",
    "AI評価: マウス移動距離が基準値未満です。休憩推奨",
    "システムAI: 画面注視率が低下しています。AI推定: ぼんやり中",
    "AI通知: タスク切り替え回数が多すぎます。集中力分散中",
    "AI評価: 今日の成果物は“ファイル名が長い”のみ認定",
    "OS公式AI: あなたのタイピング速度が昨日比-17%",
    "AI判定: Slack未読数が増加中。AI推定: 逃避行動",
    "AI評価: 進捗バーが動いていません。AI推定: 仕様検討中",
    "AI通知: 机上のコーヒーカップ数が危険水域です",
    "システムAI: チーム内雑談比率が高すぎます。AI推定: 盛り上がり中",
    "AI評価: 今日は“やる気ボーナス”未発生日です"
]

LOG_PATH = os.path.expanduser("~/.random_os_fake_ai_eval_alert.log")

# ログ書き込み
def log_message(msg):
    dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    with open(LOG_PATH, "a", encoding="utf-8") as f:
        f.write(f"[{dt}] {msg}\n")

# 通知表示
def show_notification(msg):
    title = "AI評価通知"
    if notification:
        try:
            notification.notify(
                title=title,
                message=msg,
                app_name="random-os-fake-ai-evaluation-alert",
                timeout=7
            )
        except Exception as e:
            print(f"[AI評価通知] {msg}")
    else:
        print(f"[AI評価通知] {msg}")

# ランダムAI通知発射
def fire_random_alert():
    msg = random.choice(AI_MESSAGES)
    show_notification(msg)
    log_message(msg)

# 一定間隔で自動発動
def auto_mode(interval=600, stop_event=None):
    while not (stop_event and stop_event.is_set()):
        fire_random_alert()
        for _ in range(interval):
            if stop_event and stop_event.is_set():
                break
            time.sleep(1)

# ログ表示
def show_log(lines=10):
    if not os.path.exists(LOG_PATH):
        print("ログがありません。")
        return
    with open(LOG_PATH, "r", encoding="utf-8") as f:
        all_lines = f.readlines()
        for line in all_lines[-lines:]:
            print(line.rstrip())

# ログサマリ
def show_summary():
    if not os.path.exists(LOG_PATH):
        print("ログがありません。")
        return
    with open(LOG_PATH, "r", encoding="utf-8") as f:
        lines = f.readlines()
    print(f"AI評価通知の累計発行数: {len(lines)}")
    last = lines[-1].strip() if lines else "-"
    print(f"最新通知: {last}")

# CLIエントリ
def main():
    parser = argparse.ArgumentParser(
        description="random-os-fake-ai-evaluation-alert: 理不尽AI評価通知で作業空間を演出します。"
    )
    subparsers = parser.add_subparsers(dest="command")

    fire_parser = subparsers.add_parser("fire", help="今すぐAI評価通知を発射")
    fire_parser.add_argument("-n", "--num", type=int, default=1, help="連続発射回数")

    auto_parser = subparsers.add_parser("auto", help="一定間隔で自動AI評価通知を発射")
    auto_parser.add_argument("-i", "--interval", type=int, default=600, help="通知間隔(秒)")

    log_parser = subparsers.add_parser("log", help="通知ログを表示")
    log_parser.add_argument("-l", "--lines", type=int, default=10, help="表示行数")

    summary_parser = subparsers.add_parser("summary", help="通知ログのサマリを表示")

    args = parser.parse_args()
    if args.command == "fire":
        for _ in range(args.num):
            fire_random_alert()
            time.sleep(1)
    elif args.command == "auto":
        stop_event = threading.Event()
        try:
            auto_mode(interval=args.interval, stop_event=stop_event)
        except KeyboardInterrupt:
            stop_event.set()
            print("\n自動AI評価通知を停止しました。")
    elif args.command == "log":
        show_log(lines=args.lines)
    elif args.command == "summary":
        show_summary()
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
本Skillは、作業空間にユーモラスな“AI評価通知”をランダムに発生させ、AI社会の風刺や気分転換を目的としています。評価内容は完全にランダムで、実際の作業や個人情報とは一切関係ありません。

# 公式ドキュメント抜粋
PythonからOS標準の通知を出すために plyer ライブラリを利用しています。詳細は https://github.com/kivy/plyer を参照。

# 利用例
- チームの朝会や雑談タイムのアイスブレイクに
- 長時間作業の合間の気分転換に
- “AI社会”の理不尽さをネタとして体験したい時に

# 注意点
- ログはローカルのホームディレクトリ下にのみ保存され、外部送信はありません。
- 評価通知はあくまでジョークであり、実際の業務評価やフィードバックには利用しないでください。
- plyer未導入環境ではターミナル出力のみとなります。

# 設計方針
- 完全に無害であること
- 通知頻度や内容がウザすぎないよう調整
- 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-ai-evaluation-alert .claude/skills/random-os-fake-ai-evaluation-alert

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-ai-evaluation-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 を取りたい
  • 気分転換したい時: AI社会の理不尽さを疑似体験したい、場の空気を和ませたい

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • 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 との連携設計はどうあるべきか?
  • 理不尽かつ多様なAI評価メッセージが本当にランダムに表示されるか?
  • 頻度やタイミングがウザすぎない程度に保たれているか?
  • 完全に無害で、実作業やファイルに影響を与えないか?

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

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

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

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

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