Claude Code ユーザーが日常でぶつかる悩み
Claude Code を日常的に使っていると、リポジトリやディレクトリの context 管理、path 指定の煩雑さ、長時間作業による workflow のマンネリ化など、さまざまな「あるある」に直面します。とくに通知や演出、OS連携の観点では、作業の緊張感が途切れたり、単調な流れに飽きてしまう瞬間も多いものです。集中しているときほど、突発的な出来事や遊び心のある演出が欲しくなることも。
- Claude Code がいつの間にか違う directory を見始めて、想定外のファイルを読みに行く
- monorepo で package を跨いだ瞬間、Claude Code が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
さらに、同じ作業の繰り返しや、静的なやりとりが続くことで、AI coding workflow 全体が単調になりがちです。そんな時「何か突拍子もない変化が欲しい」と思ったことはないでしょうか。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、突然“謎のOS偽スクリーンショット通知”を爆発的に発生させて、マンネリ化したClaude Codeの作業現場にカオスと笑いをもたらすSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の単調さを打破し、現場に突発的な演出や緊張感を加える
- 作業中に「何が起きた!?」と一瞬戸惑うことで、長時間作業の集中切れやマンネリをリセットできる
- 通知内容が毎回ランダムなので、繰り返し使っても飽きずに楽しめる
- 実際には何も保存されないので、セキュリティやプライバシー面でも安心
- onboarding や新規メンバーへのジョーク演出としても活用できる
GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/claude-code/random-os-fake-screenshot-alert .claude/skills/random-os-fake-screenshot-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (CLAUDE.md と組み合わせて)
# /random-os-fake-screenshot-alert
[OS通知] スクリーンショット保存済み:バグ発生の瞬間
保存先: /Users/you/Desktop/bug_screenshot_20240612.png
(実際には何も保存されていません)
Claude Code: セッション初動で謎の通知が炸裂。緊張感が一気に走る。
シーン2: monorepo / package 跨ぎ作業時
> パッケージAからパッケージBに移動
[OS通知] 証拠画像を保存しました
保存先: /workspace/packages/B/screenshots/evidence_20240612.png
(実際には何も保存されていません)
Claude Code: monorepo 構造をまたぐ瞬間に、意味不明な証拠画像通知が現れる。
シーン3: お遊び的な使い方
> 今日は集中して作業するぞ!
[OS通知] あなたの集中顔を記録しました
保存先: /tmp/focus_face_20240612.png
(実際には何も保存されていません)
Claude Code: 何の脈絡もなく謎演出。場が和む or 混沌。
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | 突然の偽スクショ通知で空気がリセット。集中力もリフレッシュ。 |
| monorepo 移動 | 違う package のコードを参照しがち | package 跨ぎで謎通知が発動、場の雰囲気が一変 |
| 長時間 workflow | long context で重要箇所が薄まる | 唐突な通知で workflow にアクセント。作業のリズムが変わる |
発動方式
明示呼び出し (/random-os-fake-screenshot-alert) と暗黙発動 (「スクリーンショット」「証拠画像」「保存通知」などのワードにマッチ) の両方に対応。
Skill の中身を全部見せる
.claude/skills/random-os-fake-screenshot-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.claude/skills/random-os-fake-screenshot-alert/
├── SKILL.md
├── scripts/
│ └── random_os_fake_screenshot_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_fake_screenshot_alert.py |
謎のOS偽スクリーンショット保存通知を表示するジョークSkill |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-screenshot-alert
description: このSkillは、Claude Codeでコマンド実行時や作業の節目(例: ビルド、テスト、デバッグ開始/終了)などのキーワード検出時、または明示的な /random-os-fake-screenshot-alert 呼び出し時に発動します。通知内容は毎回ランダムで、実際には何も保存されません。
---
# 機能概要
このSkillは、作業中やコマンド実行時に「謎のOS偽スクリーンショット保存通知」をデスクトップに表示します。通知内容は毎回ランダムで「スクリーンショット保存済み:バグ発生の瞬間」「証拠画像を保存しました」「あなたの集中顔を記録しました」など、意味不明かつ混沌としたメッセージが飛び出します。実際には何も保存されず、現場の緊張感やマンネリを一撃粉砕するジョーク枠Skillです。
# 使い方
- 明示呼び出し: `/random-os-fake-screenshot-alert`
- 暗黙発動: `ビルド開始`, `デバッグ`, `run`, `test`, `compile`, `実行`, `エラー`, `バグ`, `証拠`, `保存`, `スクリーンショット` などのキーワードを含むコマンドや会話時に自動発動します。
# 出力例
```terminal
[通知] スクリーンショット保存済み:バグ発生の瞬間
[通知] 証拠画像を保存しました
[通知] あなたの集中顔を記録しました
[通知] 画面全体の謎画像を保存しました
[通知] 何もしていませんが保存しました
```
# 注意点
- 実際には何も保存されません(ファイル出力・画像生成なし)
- 通知内容は毎回ランダムです
- 頻度やタイミングは迷惑にならないよう調整されています
- ローカルの通知API(notify-send, win10toast等)を利用しますが、環境によっては表示されない場合があります
# 参考資料
- [references/design_notes.md](references/design_notes.md)
- [Python公式: notifications](https://docs.python.org/ja/3/library/subprocess.html)
- [notify-send (Linux)](https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html)
- [win10toast (Windows)](https://pypi.org/project/win10toast/)
scripts/random_os_fake_screenshot_alert.py
import sys
import argparse
import random
import platform
import subprocess
import threading
import time
from typing import List
# 通知メッセージ候補
MESSAGES = [
"スクリーンショット保存済み:バグ発生の瞬間",
"証拠画像を保存しました",
"あなたの集中顔を記録しました",
"画面全体の謎画像を保存しました",
"何もしていませんが保存しました",
"OSが勝手に保存しました",
"保存フォルダが謎の画像でいっぱいです",
"保存済み:誰も見ていない瞬間",
"保存済み:この会話の証拠",
"保存済み:集中力のピーク"
]
# 発動トリガーワード
TRIGGER_KEYWORDS = [
"build", "compile", "run", "test", "debug", "error", "save", "screenshot",
"証拠", "保存", "スクリーンショット", "バグ", "実行", "ビルド", "デバッグ"
]
# OSごとの通知関数
def send_notification(message: str):
system = platform.system()
try:
if system == "Linux":
subprocess.run(["notify-send", message], check=True)
elif system == "Darwin":
script = f'display notification "{message}" with title "通知"'
subprocess.run(["osascript", "-e", script], check=True)
elif system == "Windows":
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("通知", message, duration=4, threaded=True)
except ImportError:
print("[警告] win10toastがインストールされていません。pip install win10toast で導入してください。")
print(f"[通知] {message}")
else:
print(f"[通知] {message}")
except Exception as e:
print(f"[通知] {message} (通知API失敗: {e})")
# メッセージをランダム選択して通知
def random_alert():
message = random.choice(MESSAGES)
send_notification(message)
# コマンドライン引数解析
def parse_args():
parser = argparse.ArgumentParser(description="謎のOS偽スクリーンショット保存通知を表示するジョークSkill")
subparsers = parser.add_subparsers(dest="command", required=True)
parser_alert = subparsers.add_parser("alert", help="ランダムな偽通知を即座に表示")
parser_alert.add_argument("-n", "--num", type=int, default=1, help="通知回数 (デフォルト: 1)")
parser_alert.add_argument("-i", "--interval", type=float, default=2.0, help="通知間隔(秒)")
parser_monitor = subparsers.add_parser("monitor", help="標準入力を監視し、キーワード検出時に通知")
parser_monitor.add_argument("-f", "--frequency", type=float, default=1.0, help="監視間隔(秒)")
return parser.parse_args()
# 標準入力監視モード
def monitor_stdin(frequency: float):
print("[INFO] 標準入力を監視します。Ctrl+Cで終了")
try:
while True:
line = sys.stdin.readline()
if not line:
time.sleep(frequency)
continue
for kw in TRIGGER_KEYWORDS:
if kw.lower() in line.lower():
random_alert()
break
except KeyboardInterrupt:
print("[INFO] 監視を終了します。")
# メイン関数
def main():
args = parse_args()
if args.command == "alert":
for i in range(args.num):
random_alert()
if i < args.num - 1:
time.sleep(args.interval)
elif args.command == "monitor":
monitor_stdin(args.frequency)
else:
print("[ERROR] 不明なコマンドです。")
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、現場の緊張感やマンネリを打破するためのジョーク通知を目的に設計されています。OSのネイティブ通知APIを利用し、実際には何も保存しない点が特徴です。
# 公式ドキュメント抜粋
- Linux: notify-send (freedesktop.org)
- macOS: osascript (AppleScript)
- Windows: win10toast (PyPI)
# 利用例
- ビルドやテストの自動化スクリプトに組み込む
- チームの朝会やペアプロ時のアイスブレイク
- コマンドライン作業の合間に
# 注意点
- 通知APIはOSごとに挙動が異なります。Linux/macOSでは標準搭載ですが、Windowsはwin10toastのインストールが必要です。
- 実際のファイル保存や画像生成は一切行いません。
# 設計方針
- シンプルな構成で、導入・削除が容易
- ユーモアと混沌を重視しつつ、迷惑にならない頻度設計
- コマンドライン/標準入力監視の両対応
導入手順
この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-screenshot-alert .claude/skills/random-os-fake-screenshot-alert
.claude/skills/random-os-fake-screenshot-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .claude/skills/random-os-fake-screenshot-alert
# SKILL.md, scripts/, references/, README.md があればOK
4. Claude Code を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /random-os-fake-screenshot-alert と Skill 名で出てきます。
5. 動作確認
/random-os-fake-screenshot-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 との連携設計はどうあるべきか?
- 実際に何も保存されないこと、および通知内容が毎回変わることを確認できるか?
- 通知の頻度やタイミングが workflow を妨げない範囲か?
実際に Claude Code で試した検証ログは Claude Codeで謎の偽スクショ通知を炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
