Codexで作業中に気分転換を生む通知演出活用ガイド

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

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

日々 Codex を活用していると、便利なはずの AI coding workflow の中で思わぬ「行き詰まり」や「気の緩み」を感じる瞬間が少なくありません。特に repository understanding や path management、context の維持といった地味な苦労が積み重なることで、集中力が切れたり、作業に飽きが出てしまうことも。「通知・演出・OS連携」系の工夫があれば、そんな日常にちょっとした変化を加えられるのでは、と感じるユーザーも多いのではないでしょうか。

  • Codex が context を見失って違う場所のコードを参照するので、思いがけないエラーや無関係な提案が返ってくる
  • monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れてしまい、directory や path 指定を毎回やり直す羽目になる
  • session を再開した際、前回までの context や path 指定をまるごと再説明しないと作業が進まない
  • 長時間の AI coding workflow で long context が膨らみすぎ、important な情報が薄まり stale context になる
  • 「ここはこういう構造の repository」というあらすじを毎回チャットの冒頭で書くことがルーティン化し、気が滅入る

これらの悩みは、集中力の断絶や単調な作業感の増大につながりがちです。もし、ちょっとした非日常の演出や“息抜き”が workflow の合間に自動で挟まれたら、気持ちをリセットして再び repository understanding や path management に向き合えるかもしれません。

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

一言サマリ: このスキルは作業中やコマンド実行の合間に、謎の404通知で気分転換をもたらすSkill。

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

  • AI coding workflow の単調さを和らげ、context や repository understanding をリフレッシュできる
  • monorepo や複雑な directory 構造で疲れた頭に、絶妙にウザい“非日常”をランダムに届ける
  • 長時間の作業や stale context のタイミングで、思わず笑ってしまう fake 404 notification が集中力を切り替えるきっかけになる
  • 実用性ゼロの通知をあえて挟むことで、オンボーディングや session 再開時の緊張を和らげる
  • Codex の path management や context 操作に疲れた時、遊び心で workflow に彩りを加えられる
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-404-notification .agents/skills/random-os-fake-404-notification

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

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

シーン1: session 開始時 (プロジェクト初動で)


# /skills menu or random-os-fake-404-notification mention
> プロジェクトの初期セットアップを開始

[OS Notification] 404: あなたのやる気が見つかりません
────────────────────────────
公式: 本日の集中モードは404エラーです。
ヒント: coffee.sh を実行して再試行してください。

(この通知は完全に無視してOKです)
────────────────────────────

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


> cd packages/api && npm run build

[OS Notification] 404: 予定されていた進捗が行方不明です
────────────────────────────
repo: monorepo-sample/
directory: packages/api/
詳細: 進捗ファイルが404エラーで応答しません。
対策: 気にせず作業を続けてください。

(この通知は完全に無視してOKです)
────────────────────────────

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


> echo "集中力MAXでいくぞ!"

[OS Notification] 404: 今日の集中力が迷子です
────────────────────────────
メッセージ: OSは集中力ファイルを見失いました。
アドバイス: 5分だけ深呼吸してみましょう。

(この通知は完全に無視してOKです)
────────────────────────────

before / after の違い

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

発動方式

明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-404-notification/
├── SKILL.md
├── scripts/
│   └── random_os_fake_404_notification.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_404_notification.py 標準入力を監視し、キーワード検出時にcallbackを呼ぶ
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-404-notification
description: Codexは、ユーザーがコマンド実行や作業中に長時間操作がない、または集中力や進捗に関するワードが出現した際にこのSkillを発動してください。triggerType: always/semantic-or-explicit。
---

# 機能概要
このSkillは、作業やコマンド実行の合間に、デスクトップやターミナル上へ“OS公式風”の404エラー通知をランダムなタイミングで表示します。通知内容は毎回異なり、「404: あなたのやる気が見つかりません」「404: 今日の集中力が迷子です」など、実用性ゼロでありながらクスっと笑えるメッセージが特徴です。作業の合間にちょっとした気分転換やリフレッシュを提供し、日常の単調さを打破します。

# 使い方
- 明示呼び出し: `/skills random-os-fake-404-notification` またはスキルメニューから選択
- 暗黙発動キーワード例: 「やる気」「進捗」「集中」「エラー」「404」などの出現時や、長時間操作がない場合に自動発火

# 出力例
```
[通知] 404: あなたのやる気が見つかりません
[通知] 404: 今日の集中力が迷子です
[通知] 404: 予定されていた進捗が行方不明です
[通知] 404: コーヒーブレイクが検出されませんでした
[通知] 404: 午後の生産性が応答しません
[通知] 404: Motivation Not Found
[通知] 404: 重要なアイデアが行方不明です
```

# 注意点
- 本Skillは冗談目的であり、実際のエラーやシステム障害ではありません。
- 通知の頻度は過度にならないよう調整されていますが、必要に応じて停止・間引きが可能です。
- ローカル環境でのみ通知が表示され、外部サーバーやクラウドには何も送信しません。
- 一部OSでは通知表示に追加パッケージが必要な場合があります。

# 参考資料
詳細は `references/design_notes.md` および [Python公式通知API](https://docs.python.org/ja/3/library/subprocess.html) を参照してください。

scripts/random_os_fake_404_notification.py

import sys
import os
import time
import random
import argparse
import threading
import platform
import subprocess
from datetime import datetime, timedelta

NOTIFICATIONS = [
    "404: あなたのやる気が見つかりません",
    "404: 今日の集中力が迷子です",
    "404: 予定されていた進捗が行方不明です",
    "404: コーヒーブレイクが検出されませんでした",
    "404: 午後の生産性が応答しません",
    "404: Motivation Not Found",
    "404: 重要なアイデアが行方不明です",
    "404: 進捗状況がサーバーに見つかりません",
    "404: あなたのやる気スイッチが見つかりません",
    "404: 休憩タイムが見つかりませんでした"
]

TRIGGER_KEYWORDS = [
    "やる気", "進捗", "集中", "エラー", "404", "motivation", "productivity", "break", "idea"
]

MIN_INTERVAL = 300  # 秒(5分)
MAX_INTERVAL = 1200 # 秒(20分)

class NotificationManager:
    def __init__(self):
        self.os_type = platform.system()

    def send_notification(self, message):
        if self.os_type == "Darwin":
            subprocess.run(["osascript", "-e", f'display notification "{message}" with title "OS Notification"'], check=False)
        elif self.os_type == "Linux":
            subprocess.run(["notify-send", "OS Notification", message], check=False)
        elif self.os_type == "Windows":
            try:
                from win10toast import ToastNotifier
                toaster = ToastNotifier()
                toaster.show_toast("OS Notification", message, duration=5)
            except ImportError:
                print(f"[通知] {message}")
        else:
            print(f"[通知] {message}")

    def print_terminal(self, message):
        print(f"[通知] {message}")


def random_interval():
    return random.randint(MIN_INTERVAL, MAX_INTERVAL)


def monitor_keywords(keywords, callback):
    """標準入力を監視し、キーワード検出時にcallbackを呼ぶ"""
    try:
        while True:
            line = sys.stdin.readline()
            if not line:
                break
            for kw in keywords:
                if kw in line:
                    callback(random.choice(NOTIFICATIONS))
    except KeyboardInterrupt:
        pass


def notification_loop(args):
    nm = NotificationManager()
    next_time = datetime.now() + timedelta(seconds=random_interval())
    while True:
        now = datetime.now()
        if now >= next_time:
            msg = random.choice(NOTIFICATIONS)
            if args.terminal:
                nm.print_terminal(msg)
            else:
                nm.send_notification(msg)
            next_time = now + timedelta(seconds=random_interval())
        time.sleep(2)


def list_messages():
    print("利用可能な通知メッセージ一覧:")
    for i, msg in enumerate(NOTIFICATIONS):
        print(f"{i+1}. {msg}")


def summary():
    print("random-os-fake-404-notification Skill 概要:")
    print("- OS風404エラー通知をランダムなタイミングで表示")
    print("- 通知内容は毎回異なるジョークメッセージ")
    print("- 明示呼び出し/暗黙発動の両対応")
    print(f"- 通知間隔: {MIN_INTERVAL//60}〜{MAX_INTERVAL//60}分")


def main():
    parser = argparse.ArgumentParser(description='Random OS Fake 404 Notification Skill')
    subparsers = parser.add_subparsers(dest='command')

    parser_run = subparsers.add_parser('run', help='通知をランダムに発火')
    parser_run.add_argument('--terminal', action='store_true', help='通知をターミナルに出力')
    parser_run.add_argument('--stdin-monitor', action='store_true', help='標準入力からキーワード監視で即時通知')

    parser_list = subparsers.add_parser('list', help='全通知メッセージを表示')
    parser_summary = subparsers.add_parser('summary', help='Skill概要を表示')

    args = parser.parse_args()

    if args.command == 'run':
        if args.stdin_monitor:
            nm = NotificationManager()
            monitor_keywords(TRIGGER_KEYWORDS, nm.print_terminal if args.terminal else nm.send_notification)
        else:
            notification_loop(args)
    elif args.command == 'list':
        list_messages()
    elif args.command == 'summary':
        summary()
    else:
        parser.print_help()

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、ユーザーの作業中に“OS公式風”の404ジョーク通知をランダムなタイミングで表示することで、気分転換やコミカルな演出を提供します。通知は実際のエラーとは明確に区別される文言を用い、誤解を防止します。

# 公式ドキュメント抜粋
- [notify-send (Linux)](https://specifications.freedesktop.org/notification-spec/latest/)
- [osascript (macOS)](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
- [win10toast (Windows)](https://pypi.org/project/win10toast/)

# 利用例
- 長時間作業中のリマインダーとして
- チームのアイスブレイクや雑談用
- ターミナルやデスクトップでの気分転換

# 注意点
- 通知が本物のシステムエラーと誤認されないよう、文言・タイトルは工夫しています。
- OSごとの通知APIに依存するため、Linux/macOS/Windowsで動作確認済みですが、追加パッケージが必要な場合があります。

# 設計方針
- ジョーク性・非日常感を重視し、通知頻度や内容はランダム性を最大化。
- 明示呼び出しとキーワード検出の両方に対応し、柔軟なトリガー設計としています。

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-404-notification .agents/skills/random-os-fake-404-notification

.agents/skills/random-os-fake-404-notification の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agents/skills/random-os-fake-404-notification
# SKILL.md, scripts/, references/, README.md があればOK

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

新しいSkillが自動で認識されます。リスト確認したい場合は /skills menu or $skill-name mention と Skill 名で出てきます。

5. 動作確認

/skills menu or $skill-name mention で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Codex に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Codex に把握させ、こちらが 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 コードを拾ってしまう可能性
  • Codex 固有の引っかかり: description のセマンティックマッチ精度が要件次第
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • AGENTS.md との連携設計はどうあるべきか?
  • 通知が確実にランダムなタイミング・内容で表示されるか
  • 本物のエラーと誤解されない演出・文言になっているか
  • 通知が作業の邪魔になりすぎない頻度で発火するか

実際に Codex で試した検証ログは Codexで謎の404通知をデスクトップに炸裂させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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