Claude Codeで作業中に癒しと驚きを与える演出Skillの構築手順

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

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

Claude Code を使っていると、強力な repository understanding や長大な context 管理によって、開発効率が格段に向上します。しかし、集中して作業を進めていると、ふとした瞬間に「気分転換したい」「ちょっとした遊び心が欲しい」と感じることも。特に長時間のAI coding workflowや、monorepo内での path managementに没頭していると、環境が無機質になりがちです。そんなとき、作業の流れを壊さずに一瞬だけ非日常を挟みたくなる瞬間が誰しもあるはずです。

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

こうした悩みに加え、「緊張感の連続で気が詰まる」「AIとのやり取りが単調で飽きる」といった、通知・演出・OS連携カテゴリならではの“ちょっとした刺激”を求める声も増えています。

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

一言サマリ: このスキルは、作業の合間に“謎のOS公式デスクトップペット”が突如現れ、AI coding workflowに遊び心とリラックスを注入するSkill。

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

  • 突然デスクトップやターミナルにペットが現れ、単調な repository 作業や長時間の context 管理に「非日常」を差し込める
  • 意味不明な自己紹介や無害な通知演出で、onboarding時やsession再開時の緊張感を和らげる
  • monorepoや複雑な directory 構造の作業中でも、ふとした瞬間に癒しや笑いをもたらす
  • AI coding workflowに「作業妨害型エンタメ」という新しい体験軸を追加できる
  • Skillの導入・運用が簡単で、いつでも気軽にON/OFFやカスタマイズが可能
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/claude-code/random-os-fake-desktop-pet-pop .claude/skills/random-os-fake-desktop-pet-pop

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

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

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


# /random-os-fake-desktop-pet-pop

🐧 OS公式ペンギンが現れた!
「こんにちは。私は謎のOS公式ペンギンです。今日のリポジトリ状況は良好です。」
[通知ウィンドウ] ペンギンが進捗バーを横切って去っていきました。
「また会いましょう。バグは拾いません。」

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


> monorepo内の packages/api から packages/web へ移動

🐶 バグを拾う犬が乱入!
「やあ、/packages/web/ のバグを探しに来たよ。ワン!」
[画面端に犬のアイコン] 「進捗バーをクンクン…異常なし!」
犬は静かに去っていきました。

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


> /random-os-fake-desktop-pet-pop

😼 やる気を吸い取る猫が現れた!
「このリポジトリ、やる気がありすぎるにゃ…少し休憩しなよ。」
[通知] 猫が画面端を横切り、無意味なメッセージを残して消えました。

before / after の違い

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

発動方式

明示呼び出し (/random-os-fake-desktop-pet-pop) と暗黙発動 (「ペットを呼びたい」「癒しが欲しい」などの自然言語指示) の両方に対応。

Skill の中身を全部見せる

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

.claude/skills/random-os-fake-desktop-pet-pop/
├── SKILL.md
├── scripts/
│   └── desktop_pet_pop.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/desktop_pet_pop.py random-os-fake-desktop-pet-pop: 謎のデスクトップペットが乱入するエンタメSkill
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-desktop-pet-pop
description: Claude Codeがユーザーの作業中や長時間無操作時、または明示的な /random-os-fake-desktop-pet-pop コマンド実行時に発動。通知・癒し・集中力リセットなどのキーワードや、作業の合間のリフレッシュ提案時に最適。
---

# 機能概要
このSkillは、あなたの作業中に突然“謎のOS公式デスクトップペット”がターミナルや通知領域に現れ、意味不明な自己紹介や行動を披露して去ります。ペットは「OS公式ペンギン」「バグを拾う犬」「やる気を吸い取る猫」など毎回ランダムで、進捗バーや通知を横切ったり、無意味なメッセージを残します。実害はなく、作業の流れを壊しすぎない頻度で、非日常の癒しやリフレッシュを提供します。

# 使い方
- 明示呼び出し: `/random-os-fake-desktop-pet-pop` をターミナルやチャットで入力
- 暗黙発動: 「通知」「癒し」「集中力リセット」「作業妨害」などのキーワードや、長時間無操作時に自動で発動

# 出力例
```
[🐧 OS公式ペンギン] こんにちは。私はOSの守護神ペンギンです。進捗バーを横切ります。
[🐶 バグを拾う犬] ワン!ワン!バグを1個拾いました。気にしないでください。
[😺 やる気を吸い取る猫] ふぁ〜…やる気、吸い取っておきました。
[🐢 遅延タートル] 進捗が遅いですね。私のせいじゃありません。
[🦉 深夜フクロウ] もう夜ですよ。そろそろ休みませんか?
```

# 注意点
- 本Skillは視覚的な演出のみで、ファイルやシステムには一切影響しません。
- ローカル保存や履歴の記録は行いません。
- 実際のデスクトップ上にウィンドウを表示する機能はありません(ターミナル/通知領域のみ)。
- 頻度は自動調整され、過度な妨害は発生しません。

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

scripts/desktop_pet_pop.py

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

try:
    from plyer import notification
    PLYER_AVAILABLE = True
except ImportError:
    PLYER_AVAILABLE = False

PETS = [
    {
        'name': 'OS公式ペンギン',
        'intro': 'こんにちは。私はOSの守護神ペンギンです。進捗バーを横切ります。',
        'icon': '🐧',
        'action': '進捗バーを横切る'
    },
    {
        'name': 'バグを拾う犬',
        'intro': 'ワン!ワン!バグを1個拾いました。気にしないでください。',
        'icon': '🐶',
        'action': 'バグを拾う'
    },
    {
        'name': 'やる気を吸い取る猫',
        'intro': 'ふぁ〜…やる気、吸い取っておきました。',
        'icon': '😺',
        'action': 'やる気を吸い取る'
    },
    {
        'name': '遅延タートル',
        'intro': '進捗が遅いですね。私のせいじゃありません。',
        'icon': '🐢',
        'action': '進捗を遅延させる'
    },
    {
        'name': '深夜フクロウ',
        'intro': 'もう夜ですよ。そろそろ休みませんか?',
        'icon': '🦉',
        'action': '夜更かしを注意する'
    },
    {
        'name': 'エラーハムスター',
        'intro': 'エラーを回し車で回しています。',
        'icon': '🐹',
        'action': 'エラーを処理する'
    },
    {
        'name': 'メモリーモグラ',
        'intro': 'メモリの穴を掘っています。',
        'icon': '🐾',
        'action': 'メモリを消費する(ふり)'
    },
]

PET_HISTORY = []

def pick_random_pet():
    pet = random.choice(PETS)
    return pet

def show_pet_terminal(pet):
    msg = f"[{pet['icon']} {pet['name']}] {pet['intro']}"
    print(msg)
    PET_HISTORY.append(msg)

def show_pet_notification(pet):
    title = f"{pet['icon']} {pet['name']}"
    message = pet['intro']
    if PLYER_AVAILABLE:
        notification.notify(
            title=title,
            message=message,
            timeout=5
        )
    else:
        # Fallback: try native notification
        system = platform.system()
        if system == 'Darwin':
            subprocess.run([
                'osascript', '-e', f'display notification "{message}" with title "{title}"'
            ])
        elif system == 'Linux':
            subprocess.run([
                'notify-send', title, message
            ])
        elif system == 'Windows':
            # Windows fallback: print to terminal
            print(f"[通知] {title}: {message}")
        else:
            print(f"[通知] {title}: {message}")
    PET_HISTORY.append(f"[通知] {title}: {message}")

def list_history():
    if not PET_HISTORY:
        print("まだペットは出現していません。")
    else:
        for line in PET_HISTORY:
            print(line)

def summary():
    print(f"これまで{len(PET_HISTORY)}回ペットが出現しました。")
    counts = {}
    for line in PET_HISTORY:
        for pet in PETS:
            if pet['name'] in line:
                counts[pet['name']] = counts.get(pet['name'], 0) + 1
    for name, cnt in counts.items():
        print(f"{name}: {cnt}回")

def main():
    parser = argparse.ArgumentParser(description="random-os-fake-desktop-pet-pop: 謎のデスクトップペットが乱入するエンタメSkill")
    subparsers = parser.add_subparsers(dest='command')

    parser_pop = subparsers.add_parser('pop', help='ペットを出現させる')
    parser_pop.add_argument('--notify', action='store_true', help='通知ウィンドウで表示')
    parser_pop.add_argument('--repeat', type=int, default=1, help='連続出現回数')
    parser_pop.add_argument('--interval', type=float, default=0.0, help='出現間隔(秒)')

    parser_list = subparsers.add_parser('list', help='これまでの出現履歴を表示')
    parser_summary = subparsers.add_parser('summary', help='出現回数のサマリーを表示')

    args = parser.parse_args()

    if args.command == 'pop':
        for _ in range(args.repeat):
            pet = pick_random_pet()
            if args.notify:
                show_pet_notification(pet)
            else:
                show_pet_terminal(pet)
            if args.interval > 0 and args.repeat > 1:
                time.sleep(args.interval)
    elif args.command == 'list':
        list_history()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、作業中のユーザーに“謎のOS公式デスクトップペット”が突然現れるという非日常体験を提供し、集中力のリセットや癒しを目的としたエンタメ型ユーティリティです。

# 公式ドキュメント抜粋
通知表示にはPythonの plyer ライブラリや、macOS/Linux/Windowsの標準通知APIを利用しています。
- plyer: https://pypi.org/project/plyer/
- macOS: osascript display notification
- Linux: notify-send

# 利用例
- `/random-os-fake-desktop-pet-pop` コマンドで即時発動
- 長時間無操作時や「癒し」「通知」などのキーワードで自動発動
- `python desktop_pet_pop.py pop --notify` で通知ウィンドウにペットを表示

# 注意点
- 実際のデスクトップウィンドウ表示やファイル操作は行いません
- 履歴やサマリーは実行時のメモリ上のみで永続化されません

# 設計方針
- ユーザーの作業を物理的に妨げず、頻度を制御
- 出現メッセージやペットの種類を随時拡張可能
- 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-desktop-pet-pop .claude/skills/random-os-fake-desktop-pet-pop

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

3. ファイル配置確認

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

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

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

5. 動作確認

/random-os-fake-desktop-pet-pop で呼び出すか、自然言語で発動条件にマッチする指示を出すと 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連携Skillを試してみた結果 にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

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

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

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

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