Codexで古風な通知演出を活用して作業集中力を劇的アップする方法

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

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

AIコーディング支援ツール Codex を活用していると、日々の開発フローの中で「集中力の維持」や「単調な作業の打破」が意外と難題になる場面が少なくありません。とくに長時間の repository 作業や複雑な path management、directory 構造の理解を要する monorepo での開発では、気分転換やリフレッシュのタイミングを見失いがちです。通知・演出・OS連携系の Skill で、こうした日常の“飽き”や“マンネリ”を打破したいというニーズも根強くあります。

  • Codex が context を見失って違う場所のコードを参照するため、集中が途切れやすい
  • monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れ、何度も説明し直す煩雑さがある
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけないので、気持ちが乗らない
  • 長時間の AI coding workflow で long context が膨らみ、重要な repository understanding が薄まってしまう
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になり、作業が単調化する

通知や演出の工夫で、こうした「飽き」や「集中力低下」を乗り越えたい――そんな声に応える Skill が求められています。

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

一言サマリ: このスキルは、Codex の日常作業に“突如現れる謎の侍通知”という遊び心を注入し、集中力のリセットや気分転換を新感覚で演出する Skill。

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

  • 長時間の AI coding workflow でも、突発的な侍メッセージで context の切り替えや気分転換ができる
  • repo や directory を跨いだ瞬間、作業空間が一気に侍ワールドに変貌し、単調な repository understanding タスクも楽しくなる
  • session 再開時や onboarding のタイミングで、侍風のメッセージが集中スイッチを押してくれる
  • Skill の通知内容が毎回変化し、飽きずに使い続けられる
  • OS 連携でデスクトップやターミナルに“正気か疑う”ほど時代錯誤な演出が炸裂し、開発のマンネリを打破
QUICK INSTALL
このSkillをすぐ試す

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

npx degit aazutaku/ai-note/codex/random-os-fake-ancient-samurai-alert .agents/skills/random-os-fake-ancient-samurai-alert

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

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

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


# /skills menu or random-os-fake-ancient-samurai-alert mention
> プロジェクトの作業を始める

【侍OS ALERT】
拙者、/src/context/understanding.py の抜刀訓練状況を監視しておる。
油断大敵、Altキーの居合切りに注意せよ。
本日も見事なリポジトリ構造、感服つかまつる!

(侍からの謎の達しが画面に表示される)

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


> packages/utils/ から packages/api/ へ移動

【侍OS ALERT】
お主、monorepo の境界を跨いだな。
/packages/api/routes/ 内の道、迷わぬよう心得よ。
侍の如く、directory boundary を守りて進むべし!

(突然の侍メッセージで context 切り替えを演出)

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


> ちょっと集中力が切れてきたので /skills menu

【侍OS ALERT】
油断召されるな、マウスの居合切りは一瞬の隙を生む。
/repo/onboarding/ にて、新たな門出を祝す。
拙者、常にお主の memory を見守っておるぞ!

(意味不明な侍語録で一息つける)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Codex が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 侍通知で workflow にリズムが生まれ、重要な情報の再認識ができる

発動方式

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

Skill の中身を全部見せる

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

.agents/skills/random-os-fake-ancient-samurai-alert/
├── SKILL.md
├── scripts/
│   └── samurai_alert.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/samurai_alert.py 作業中に謎のOS侍警告を炸裂させるスキル。デスクトップ通知またはターミナル出力で侍メッセージを表示。
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-ancient-samurai-alert
description: 作業中やコマンド実行時に“侍ネタ”の謎OS通知をランダムに表示し、集中力や気分転換が必要な場面(例: 長時間作業・/skills menu呼び出し・skill名言及)で発動します。
---

# 機能概要
このSkillは、あなたの作業環境に突如「古のOS侍」からの達しをランダムに通知します。内容は毎回異なり、「Altキーの抜刀訓練状況を監視しておる」「油断大敵、マウスの居合切りに注意せよ」など、時代錯誤かつ意味不明な侍的警句が炸裂。通知はデスクトップ(Windows/macOS/Linux)またはターミナル上に出現し、マンネリ化した作業に突如“侍ワールド”を挿入。集中力のリフレッシュや雑談のきっかけ、チーム内の話題作りにも活用できます。システムやファイルへの実害は一切ありません。

# 使い方
- 明示呼び出し例: `/skills menu` でSkill一覧から選択、または `$ random-os-fake-ancient-samurai-alert` で直接発動
- 暗黙発動: 長時間のコマンド実行や「侍」「alert」「集中」などのキーワード検知時に自動発動

# 出力例
```
[OS侍警告] 拙者、あなたのAltキーの抜刀訓練状況を監視しておる。
[OS侍警告] 油断大敵、マウスの居合切りに注意せよ。
[OS侍警告] このターミナル、既に斬撃済み。
[OS侍警告] ファイル保存、まるで刀の鞘納めの如し。
[OS侍警告] スクロールは風の如く、急ぐべからず。
```

# 注意点
- 通知内容は毎回ランダムで変化しますが、実際のデータやシステムには一切影響しません
- ローカル保存や履歴記録は行いません
- 通知は標準出力またはOS通知APIを利用
- 侍ネタが苦手な方はご注意ください

# 参考資料
- references/design_notes.md に設計方針・利用例を記載
- 公式API: Python `plyer.notification`, `subprocess`, `os` モジュール等

scripts/samurai_alert.py

import sys
import os
import random
import argparse
import platform
import subprocess
from typing import List

SAMURAI_MESSAGES = [
    "拙者、あなたのAltキーの抜刀訓練状況を監視しておる。",
    "油断大敵、マウスの居合切りに注意せよ。",
    "このターミナル、既に斬撃済み。",
    "ファイル保存、まるで刀の鞘納めの如し。",
    "スクロールは風の如く、急ぐべからず。",
    "ウィンドウ切替、まるで忍びの如し。",
    "コマンド入力、心静かに一刀両断せよ。",
    "エラー多発、修羅の道を歩む覚悟はあるか。",
    "ディレクトリ移動、まるで城攻めの如し。",
    "ログアウト、武士の情けを忘れるな。",
    "CapsLock、誤って押すは切腹もの也。",
    "スリープ解除、まるで瞑想から覚める侍の如し。",
    "バッテリー残量、命の灯火に等し。",
    "パーミッション拒否、門前払いの恥辱也。",
    "ファイル名に空白、敵の隙を作るな。",
    "コピペ多用、己の刀を信じよ。",
    "アップデート怠慢、刀の錆に注意せよ。",
    "タスクキル、敵将首を討ち取ったり。",
    "リネーム、名を変えるは覚悟の証。",
    "シンタックスエラー、文法の乱れは心の乱れ。"
]

NOTIF_TITLE = "OS侍警告"


def choose_message() -> str:
    return random.choice(SAMURAI_MESSAGES)


def show_terminal_alert(message: str):
    print(f"[{NOTIF_TITLE}] {message}")


def show_desktop_notification(message: str):
    system = platform.system()
    if system == "Darwin":
        # macOS
        script = f'display notification "{message}" with title "{NOTIF_TITLE}"'
        try:
            subprocess.run(["osascript", "-e", script], check=True)
        except Exception as e:
            show_terminal_alert(message)
    elif system == "Linux":
        # Linux (notify-send)
        try:
            subprocess.run(["notify-send", NOTIF_TITLE, message], check=True)
        except Exception as e:
            show_terminal_alert(message)
    elif system == "Windows":
        # Windows 10+ (powershell toast)
        try:
            powershell_script = (
                f"[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null; "
                f"$template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02); "
                f"$textNodes = $template.GetElementsByTagName('text'); "
                f"$textNodes.Item(0).AppendChild($template.CreateTextNode('{NOTIF_TITLE}')) > $null; "
                f"$textNodes.Item(1).AppendChild($template.CreateTextNode('{message}')) > $null; "
                f"$toast = [Windows.UI.Notifications.ToastNotification]::new($template); "
                f"$notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('SamuraiAlert'); "
                f"$notifier.Show($toast);"
            )
            subprocess.run([
                "powershell", "-NoProfile", "-Command", powershell_script
            ], check=True)
        except Exception as e:
            show_terminal_alert(message)
    else:
        show_terminal_alert(message)


def list_messages():
    print("--- OS侍 謎メッセージ一覧 ---")
    for i, msg in enumerate(SAMURAI_MESSAGES, 1):
        print(f"{i:2d}: {msg}")


def alert(args):
    msg = choose_message()
    if args.terminal:
        show_terminal_alert(msg)
    else:
        show_desktop_notification(msg)


def main():
    parser = argparse.ArgumentParser(
        description="作業中に謎のOS侍警告を炸裂させるスキル。デスクトップ通知またはターミナル出力で侍メッセージを表示。"
    )
    subparsers = parser.add_subparsers(dest="command", required=True)

    parser_alert = subparsers.add_parser("alert", help="ランダムな侍警告を表示")
    parser_alert.add_argument(
        "--terminal", action="store_true", help="ターミナル出力のみ(デスクトップ通知を使わない)"
    )
    parser_alert.set_defaults(func=alert)

    parser_list = subparsers.add_parser("list", help="すべての侍メッセージを一覧表示")
    parser_list.set_defaults(func=lambda args: list_messages())

    args = parser.parse_args()
    try:
        args.func(args)
    except Exception as e:
        print(f"[ERROR] {e}", file=sys.stderr)
        sys.exit(1)

if __name__ == "__main__":
    main()

references/design_notes.md

# 概要
このSkillは、作業中に突如“侍ネタ”の警告を表示することで、集中力のリセットや気分転換を促します。通知内容は毎回ランダムで、現代的なOS操作と侍風の言い回しを組み合わせたユーモアを重視しています。

# 公式ドキュメント抜粋
- Python 標準 `subprocess`, `os`, `platform` モジュールを利用し、各OSの通知API(macOS: osascript, Linux: notify-send, Windows: PowerShell Toast)を直接呼び出します。
- 参考: https://docs.python.org/3/library/subprocess.html

# 利用例
- `/skills menu` から明示的に呼び出し
- 長時間作業や「侍」「alert」などのキーワード検知時に自動発動
- チームの雑談ネタや集中力のリフレッシュに

# 注意点
- メッセージ内容は完全に無害で、データやシステムには一切影響しません
- 通知履歴やログは残りません
- OS通知が失敗した場合はターミナル出力にフォールバックします

# 設計方針
- 実在APIのみを利用し、CLI/ターミナル/デスクトップのどれでも確実に動作すること
- メッセージは随時追加・編集可能な設計
- エラー時も安全に終了する堅牢性を確保

導入手順

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

1. 前提

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

2. degit でフォルダ取得

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

npx degit aazutaku/ai-note/codex/random-os-fake-ancient-samurai-alert .agents/skills/random-os-fake-ancient-samurai-alert

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

3. ファイル配置確認

ls .agents/skills/random-os-fake-ancient-samurai-alert
# 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で謎の侍通知を炸裂させてみた!ランダムメッセージがクセになる にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。

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

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

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

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