Codex ユーザーが日常でぶつかる悩み
Codex で日々開発していると、思いもよらないタイミングで context がズレたり、repository の理解が抜け落ちたりといった「あるある」な困りごとに直面しがちです。特に monorepo 環境や複数 directory を跨ぐプロジェクトでは、path 管理や context の維持が想像以上に煩雑になることも。そんな中、現実逃避したくなる瞬間や、ちょっとした息抜きが欲しいと感じることも少なくありません。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
こうした日常の「面倒」に、突然現れる“謎の人事研修通知”が笑いと現実逃避をもたらすことで、気持ちを切り替えたり、チームのコミュニケーションのきっかけになったりする場面も考えられます。
この Skill が一言でいうと何を解決するか
一言サマリ: 作業中やコマンド実行時にSkill。
このSkillを導入することで、作業の合間やコマンド実行時に突然“OS人事研修強制参加通知”が炸裂し、現実の煩わしさを笑い飛ばすユニークな体験が得られます。Codex の context 管理や repository understanding の流れを邪魔せず、通知内容が毎回ランダムで変化するため、長時間のAI coding workflowにも新鮮な刺激を与えます。
- 作業中に突如現れるランダムな“人事研修”通知で、単調なAI coding workflowに笑いと現実逃避をプラス
- 通知はOSやターミナル上で違和感なく表示され、集中しすぎた session に適度なリフレッシュを提供
- repo や directory の構造・context 管理には一切影響を与えず、安全に遊べる演出系Skill
- 毎回異なる通知内容で、onboardingやチーム内コミュニケーションのきっかけにも
- 実データやファイルには一切影響せず、memoryやpath managementの流れを妨げない安心設計
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-fake-hr-training-alert .agents/skills/random-os-fake-hr-training-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-fake-hr-training-alert mention
> 新しい session を開始
[OS通知] 緊急:本日14時より「謎のパワポ芸入門」研修が開催されます。
全開発者は必ず参加してください。参加URLは後ほど配布されます。
[OS通知] 重要:OS公式「無限ビデオ視聴」研修がまもなく始まります。
完了するまでターミナルは自動ロックされます。
(通知は毎回ランダムに変化)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ へディレクトリ移動
[OS通知] ご注意:ただ今より「謎マナー講座」への強制参加が命じられました。
対象: packages/web/ 配下の全メンバー
[OS通知] 速報:monorepo全体で「OS流・謎の朝礼」リモート開催中。
「/packages/api/」から「/packages/web/」への移動者は特別セッションにご参加ください。
シーン3: お遊び的な使い方
> ちょっと気分転換したい
[OS通知] 重要:本日より「謎のリモート雑談研修」がスタートします。
退出不可。カメラON必須です。
[OS通知] 緊急:今すぐ「OS公認・無限アンケート回答」研修を受講してください。
所要時間:不明
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-hr-training-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-fake-hr-training-alert/
├── SKILL.md
├── scripts/
│ └── fake_hr_training_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_hr_training_alert.py |
謎の人事研修強制通知をランダムに表示します |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-fake-hr-training-alert
description: 作業中やコマンド実行時に、ターミナルやデスクトップへ“謎の人事研修強制通知”をランダムに表示します。triggerType: always/semantic。キーワード例: 研修, 通知, OS, 人事, アラート。
---
# 機能概要
このSkillは、作業中やCLIコマンドの実行時に、現実には絶対に体験したくない“謎のOS人事研修強制参加通知”を、デスクトップ通知やターミナル出力として唐突に表示します。通知内容は毎回ランダム生成され、「緊急:本日14時より“謎のパワポ芸入門”研修必須」「重要:OS公式“無限ビデオ視聴”研修が始まります」など、カオスで笑える人事イベントを演出。現実逃避とユーモアを同時に提供し、作業の合間にちょっとした息抜きをもたらします。
# 使い方
- 明示呼び出し例:
- `/skills menu` から `random-os-fake-hr-training-alert` を選択
- `$random-os-fake-hr-training-alert` をターミナルで実行
- 暗黙発動キーワード例:
- 「研修」「人事」「通知」「アラート」などの語を含むコマンドや会話
- 実行すると、OSの通知APIまたはターミナルにランダムな“人事研修通知”が即時表示されます。
# 出力例
```
[ALERT] 緊急:本日14:00より「謎のパワポ芸入門」研修が強制開催されます。
[NOTICE] 重要:OS公式「無限ビデオ視聴」研修が今すぐ開始されます。
[WARNING] ただ今より「謎マナー講座」への参加が必須です。
[INFO] 新着:本日17:30より「謎のリモート背景選手権」研修が始まります。
[ALERT] 参加必須:OS人事部主催「無限フィードバック地獄」研修が開幕!
```
# 注意点
- 実データやファイルには一切影響を与えません。
- 通知は一時的な表示のみで、履歴や記録は残りません。
- OSの通知APIやターミナル出力のみを利用し、ローカル保存や権限変更は行いません。
- 通知内容は完全なフィクションです。
# 参考資料
- [Python公式: notifications](https://docs.python.org/3/library/subprocess.html)
- references/design_notes.md 参照
scripts/fake_hr_training_alert.py
import sys
import os
import random
import argparse
import platform
import subprocess
import time
from datetime import datetime
NOTIFICATION_TEMPLATES = [
'[ALERT] 緊急:本日{hour}:{minute}より「{title}」研修が強制開催されます。',
'[NOTICE] 重要:OS公式「{title}」研修が今すぐ開始されます。',
'[WARNING] ただ今より「{title}」への参加が必須です。',
'[INFO] 新着:本日{hour}:{minute}より「{title}」研修が始まります。',
'[ALERT] 参加必須:OS人事部主催「{title}」研修が開幕!',
'[NOTICE] 重要:{weekday}は「{title}」研修デーです。',
'[WARNING] 緊急連絡:{title}研修のリマインダーです。',
'[INFO] ご注意:「{title}」研修の事前課題があります。',
'[ALERT] 本日中に「{title}」研修の受講を完了してください。',
'[NOTICE] 重要:「{title}」研修の参加が義務付けられました。'
]
TRAINING_TITLES = [
'謎のパワポ芸入門',
'無限ビデオ視聴',
'謎マナー講座',
'リモート背景選手権',
'無限フィードバック地獄',
'謎のオンライン自己紹介',
'OS公式エア出社体験',
'謎のカメラON強制',
'無限アンケート回答',
'謎の社内用語暗記',
'謎のバーチャル飲み会',
'謎のエクセル芸道場',
'謎のSlackスタンプ研修',
'謎の仮想会議耐久',
'OS人事部謎のサバイバル',
'謎のアイスブレイク選手権',
'謎のリモート雑談訓練',
'謎のマイクON地獄',
'謎のカレンダー共有講座',
'謎の無限リマインダー研修'
]
WEEKDAYS = ['月曜', '火曜', '水曜', '木曜', '金曜']
def get_random_time():
hour = random.randint(8, 18)
minute = random.choice(['00', '15', '30', '45'])
return hour, minute
def get_random_weekday():
return random.choice(WEEKDAYS)
def generate_notification():
template = random.choice(NOTIFICATION_TEMPLATES)
title = random.choice(TRAINING_TITLES)
hour, minute = get_random_time()
weekday = get_random_weekday()
return template.format(title=title, hour=str(hour).zfill(2), minute=minute, weekday=weekday)
def show_terminal_notification(msg):
print(msg)
def show_desktop_notification(msg):
sys_platform = platform.system()
try:
if sys_platform == 'Darwin': # macOS
subprocess.run([
'osascript', '-e', f'display notification "{msg}" with title "人事研修アラート"'
], check=True)
elif sys_platform == 'Linux':
# notify-sendがあれば使う
if subprocess.call(['which', 'notify-send'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) == 0:
subprocess.run([
'notify-send', '人事研修アラート', msg
], check=True)
else:
show_terminal_notification(msg)
elif sys_platform == 'Windows':
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast("人事研修アラート", msg, duration=6)
except ImportError:
show_terminal_notification(msg)
else:
show_terminal_notification(msg)
except Exception as e:
show_terminal_notification(f"[通知失敗] {msg} ({e})")
def main():
parser = argparse.ArgumentParser(description='謎の人事研修強制通知をランダムに表示します')
subparsers = parser.add_subparsers(dest='command', help='サブコマンド')
parser_alert = subparsers.add_parser('alert', help='今すぐランダム通知を1件表示')
parser_alert.add_argument('--desktop', action='store_true', help='デスクトップ通知も試行')
parser_batch = subparsers.add_parser('batch', help='複数回ランダム通知を表示')
parser_batch.add_argument('-n', type=int, default=5, help='通知回数 (デフォルト: 5)')
parser_batch.add_argument('--interval', type=float, default=2.0, help='通知間隔秒 (デフォルト: 2.0)')
parser_batch.add_argument('--desktop', action='store_true', help='デスクトップ通知も試行')
parser_list = subparsers.add_parser('list', help='サンプル通知を一覧表示')
parser_list.add_argument('-n', type=int, default=10, help='表示件数')
args = parser.parse_args()
if args.command == 'alert':
msg = generate_notification()
show_terminal_notification(msg)
if args.desktop:
show_desktop_notification(msg)
elif args.command == 'batch':
for i in range(args.n):
msg = generate_notification()
show_terminal_notification(msg)
if args.desktop:
show_desktop_notification(msg)
if i < args.n - 1:
time.sleep(args.interval)
elif args.command == 'list':
for _ in range(args.n):
msg = generate_notification()
print(msg)
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、現実には絶対に体験したくない“謎の人事研修通知”を、ランダムでターミナルやデスクトップに表示する演出系ツールです。通知内容は毎回異なり、作業中の息抜きやジョークとして利用できます。
# 公式ドキュメント抜粋
- Python subprocess: https://docs.python.org/3/library/subprocess.html
- notify-send (Linux): https://specifications.freedesktop.org/notification-spec/latest/
- osascript (macOS): https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/
# 利用例
- `/skills menu`や`$random-os-fake-hr-training-alert alert --desktop`で即時通知
- `batch`サブコマンドで複数回通知の連発
# 注意点
- 通知内容は完全なフィクションであり、実在の人事イベントや個人情報とは無関係です。
- OSの通知APIやターミナル出力のみを利用し、ファイルやシステム設定には一切影響を与えません。
# 設計方針
- ランダム性・バリエーション重視で、テンプレートとタイトルを多数用意
- OSごとの通知APIを自動判別し、失敗時は必ずターミナル出力にフォールバック
- 履歴や記録を一切残さず、完全な一時通知のみを実現
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-fake-hr-training-alert .agents/skills/random-os-fake-hr-training-alert
.agents/skills/random-os-fake-hr-training-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-fake-hr-training-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 との連携設計はどうあるべきか?
- 通知内容が毎回ランダムでバリエーション豊富に出るか?
- OSやターミナルに違和感なく“人事研修系”通知が表示されるか?
- 実データやファイルに一切影響しない安全設計になっているか?
実際に Codex で試した検証ログは Codexで謎の人事研修通知をランダムに表示してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
