Codex ユーザーが日常でぶつかる悩み
長時間のAIコーディング作業や複雑なリポジトリを扱っていると、どうしても単調さや集中力の低下がつきまといます。特にCodexを活用するワークフローでは、contextやpath管理、repository understandingに神経を使う一方で、作業現場の雰囲気が固くなりがちです。こうした状況では、ちょっとした息抜きや刺激が欲しくなるものです。
- Codexがcontextを見失い、意図しないdirectoryやrepositoryのコードを参照してしまうことがある
- monorepoでpackageをまたぐとき、repo全体の構造やdirectory boundaryの把握を再度説明する手間が発生する
- session再開時に、前回までのcontextやpath指定を毎回最初から説明し直さなければならない
- 長時間のAI coding workflowでlong contextが膨らみ、重要な情報がstale contextとして埋もれてしまう
- 「このrepoはこういう構造です」と、同じ説明を毎回チャット冒頭に書くことに疲れてしまう
通知・演出・OS連携系Skillがあれば、こうした単調な作業現場にちょっとした変化や笑いをもたらし、リフレッシュのきっかけにもなります。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは作業中Skill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Codexによるrepository understandingやpath managementに追われる単調な作業現場に、ジョーク通知で緊張をほぐし、気分転換を促す
- monorepoや長時間のAI coding workflowでcontextが膨らみがちなとき、意図的に“リセット感”や“笑い”を演出し、集中力回復のきっかけを作る
- セッション再開やonboarding時の堅苦しい雰囲気を、完全に無害なジョーク通知で和らげる
- Skill導入が話題となり、チーム内のコミュニケーションやアイスブレイクにも役立つ
- 通知内容が毎回ランダムで、飽きずに楽しめる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-virus-detect-alert .agents/skills/random-os-fake-virus-detect-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-fake-virus-detect-alert mention
> プロジェクトの初期化をお願いします
[通知] OSウイルス検出アラート
------------------------------------
ウイルス名: 怠惰ウイルス (LazyVirus)
影響範囲: /src/utils/
症状: コーヒーブレイクが止まりません
対策: 休憩を推奨します。実害はありません。
(ジョーク通知です。作業を続けて問題ありません)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/frontend/ に移動
[通知] OSウイルス検出アラート
------------------------------------
ウイルス名: 残業無限増殖型バグウイルス (OverworkInfiniteBug)
影響範囲: /packages/frontend/components/
症状: コードレビュー依頼が無限ループしています
対策: 今日は早めに帰宅しましょう
(この通知はジョークです)
シーン3: お遊び的な使い方
> ちょっと気分転換したい
[通知] OSウイルス検出アラート
------------------------------------
ウイルス名: コーヒー依存症ウイルス (CoffeeAddict)
影響範囲: /docs/
症状: ドキュメントにカフェインが検出されました
対策: お水を飲んで深呼吸しましょう
(ジョークですのでご安心ください)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | ジョーク通知で気分転換、集中力をリセット |
発動方式
明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。
Skill の中身を全部見せる
.agents/skills/random-os-fake-virus-detect-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-virus-detect-alert/
├── SKILL.md
├── scripts/
│ └── fake_virus_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_virus_alert.py |
Random OS Fake Virus Detect Alert |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-virus-detect-alert
description: 作業中やコマンド実行時、または「ウイルス」「アラート」「通知」などのキーワードを含む会話や指示があった際に、ジョークのOSウイルス検出通知を発動します。明示的な呼び出しや定期的な自動発動にも対応。
---
# 機能概要
このSkillは、PC作業中やコマンド実行時に、完全ジョーク仕様の「OSウイルス検出アラート」をデスクトップ通知として表示します。通知内容は毎回ランダム生成され、「怠惰ウイルス」「残業無限増殖型バグウイルス」「コーヒー依存症ウイルス」など、実害ゼロ・緊張ゼロのカオスなネーミングが特徴です。退屈な現場に不条理な刺激と笑いをもたらし、会話や作業のリフレッシュを狙います。
# 使い方
- 明示呼び出し: `/skills random-os-fake-virus-detect-alert` または `$random-os-fake-virus-detect-alert`
- 暗黙発動: 「ウイルス」「アラート」「通知」「セキュリティ」「ジョーク」などのキーワードを含む会話や、一定間隔ごとの自動発動にも対応
- CLIサブコマンド: `python fake_virus_alert.py trigger` で即時通知、`python fake_virus_alert.py run` で定期発動
# 出力例
```
[通知] 謎のウイルス検出: "怠惰ウイルス" がシステムに潜伏中です!
[通知] 検出: "残業無限増殖型バグウイルス" (脅威度: 低) を隔離しました
[通知] "コーヒー依存症ウイルス" がCPU使用率を上昇させています
[通知] "会議無限ループ型ウイルス" の駆除に失敗しました
[通知] "進捗ゼロウイルス" が発見されました。至急ご休憩ください
```
# 注意点
- 本Skillは100%ジョーク通知のみを行い、システムやデータには一切影響しません
- 通知内容は毎回ランダム生成され、実在のウイルス名や脅威とは無関係です
- ローカル保存や履歴記録は行いません
- 通知機能はOS環境依存です(Windows/macOS/Linuxの主要デスクトップ環境で動作)
# 参考資料
- references/design_notes.md に設計方針・利用例を記載
- 通知API: [plyer](https://github.com/kivy/plyer) / [notify2](https://pypi.org/project/notify2/) / [win10toast](https://pypi.org/project/win10toast/)
scripts/fake_virus_alert.py
import sys
import os
import random
import time
import argparse
import platform
try:
if platform.system() == 'Windows':
from win10toast import ToastNotifier
elif platform.system() == 'Darwin':
import subprocess
else:
import notify2
except ImportError:
pass
FAKE_VIRUS_NAMES = [
'怠惰ウイルス',
'残業無限増殖型バグウイルス',
'コーヒー依存症ウイルス',
'会議無限ループ型ウイルス',
'進捗ゼロウイルス',
'無限リファクタリングウイルス',
'仕様変更感染型ウイルス',
'無限デバッグウイルス',
'エナジードリンク依存症ウイルス',
'タスク増殖型ウイルス',
'やる気喪失ウイルス',
'納期爆発ウイルス',
'ランチ逃亡ウイルス',
'Slack通知過剰ウイルス',
'モチベ低下ウイルス',
'レビュー無限待ちウイルス',
'リリース延期ウイルス',
'バグ温存ウイルス',
'自己肯定感減少ウイルス',
'仕様未定義ウイルス'
]
FAKE_ALERT_PATTERNS = [
'謎のウイルス検出: "{name}" がシステムに潜伏中です!',
'検出: "{name}" (脅威度: {level}) を隔離しました',
'"{name}" がCPU使用率を上昇させています',
'"{name}" の駆除に失敗しました',
'"{name}" が発見されました。至急ご休憩ください',
'警告: "{name}" の活動を検知しました',
'"{name}" を削除しました(再発の可能性あり)',
'"{name}" の感染が拡大中です',
'"{name}" がメモリを消費しています',
'システムは "{name}" の影響下にあります'
]
THREAT_LEVELS = ['低', '中', '高', '極低', '注意', '未知']
def pick_fake_alert():
name = random.choice(FAKE_VIRUS_NAMES)
pattern = random.choice(FAKE_ALERT_PATTERNS)
level = random.choice(THREAT_LEVELS)
return pattern.format(name=name, level=level)
def notify(message):
system = platform.system()
if system == 'Windows':
try:
toaster = ToastNotifier()
toaster.show_toast('ウイルス検出アラート', message, duration=8, threaded=True)
except Exception as e:
print('[通知失敗] Windows通知APIエラー:', e)
print('[通知内容]', message)
elif system == 'Darwin':
try:
script = f'display notification "{message}" with title "ウイルス検出アラート"'
subprocess.run(['osascript', '-e', script], check=True)
except Exception as e:
print('[通知失敗] macOS通知APIエラー:', e)
print('[通知内容]', message)
else:
try:
notify2.init('FakeVirusAlert')
n = notify2.Notification('ウイルス検出アラート', message)
n.set_timeout(8000)
n.show()
except Exception as e:
print('[通知失敗] Linux通知APIエラー:', e)
print('[通知内容]', message)
def trigger_alert():
alert = pick_fake_alert()
print(f'[通知] {alert}')
notify(alert)
def run_periodic_alerts(interval_sec=600, count=None):
print(f'[INFO] 定期的にジョークウイルスアラートを通知します (間隔: {interval_sec}秒)')
i = 0
try:
while True:
trigger_alert()
i += 1
if count and i >= count:
break
time.sleep(interval_sec)
except KeyboardInterrupt:
print('\n[INFO] 停止されました')
def list_fake_viruses():
print('== ジョークウイルス名一覧 ==')
for v in FAKE_VIRUS_NAMES:
print('-', v)
def list_patterns():
print('== 通知パターン一覧 ==')
for p in FAKE_ALERT_PATTERNS:
print('-', p.replace('{name}', 'ウイルス名').replace('{level}', '脅威度'))
def main():
parser = argparse.ArgumentParser(description='Random OS Fake Virus Detect Alert')
subparsers = parser.add_subparsers(dest='command')
trigger_parser = subparsers.add_parser('trigger', help='即時でジョークアラートを通知')
run_parser = subparsers.add_parser('run', help='定期的にジョークアラートを通知')
run_parser.add_argument('--interval', type=int, default=600, help='通知間隔(秒)')
run_parser.add_argument('--count', type=int, help='通知回数(指定しない場合は無限)')
list_parser = subparsers.add_parser('list', help='ジョークウイルス名一覧を表示')
patterns_parser = subparsers.add_parser('patterns', help='通知パターン一覧を表示')
args = parser.parse_args()
if args.command == 'trigger':
trigger_alert()
elif args.command == 'run':
run_periodic_alerts(interval_sec=args.interval, count=args.count)
elif args.command == 'list':
list_fake_viruses()
elif args.command == 'patterns':
list_patterns()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、作業現場にユーモアとリフレッシュをもたらすための完全ジョーク通知システムです。実害ゼロ・誤認ゼロを徹底し、通知内容は毎回カオスなオリジナルネーミングで構成されます。
# 公式ドキュメント抜粋
- plyer: https://github.com/kivy/plyer
- notify2: https://pypi.org/project/notify2/
- win10toast: https://pypi.org/project/win10toast/
# 利用例
- `/skills random-os-fake-virus-detect-alert` で即時発動
- Pythonスクリプトの `trigger` サブコマンドでCLIからも利用可能
- 定期通知モードで作業中のリフレッシュやチームのアイスブレイクに
# 注意点
- 実在のウイルスやセキュリティ脅威とは一切関係ありません
- 通知履歴や個人情報は一切保存されません
- 一部Linux環境では通知ライブラリの追加インストールが必要な場合があります
# 設計方針
- 100%ジョークと分かる文言のみ使用
- システムやユーザーデータへの影響ゼロ
- 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-virus-detect-alert .agents/skills/random-os-fake-virus-detect-alert
.agents/skills/random-os-fake-virus-detect-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-virus-detect-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 との連携設計はどうあるべきか?
- 通知内容が100%ジョークと分かるネーミング・文言になっているか?
- 通知が定期的または適当な頻度で出現するか?
- システムやデータへの影響が一切ないことを確認できるか?
実際に Codex で試した検証ログは Codexで謎のジョークウイルス通知を爆誕させてみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
