Codex ユーザーが日常でぶつかる悩み
AI コーディングワークフローが当たり前になった今、Codex を使い続けていると「なんだか無機質」「集中しすぎて息抜きがない」と感じる瞬間が少なくありません。特に通知や演出系の機能が乏しいと、作業空間が単調に感じられがちです。以下のような「あるある」に心当たりはないでしょうか。
- 作業に没頭していると、Codex の context 管理や path 指定ばかりで息抜きのタイミングを逃しがち
- monorepo で複数 package を跨ぐ作業中、突然 context がリセットされて気分転換もできず、ストレスが溜まる
- session を再開するたびに repository 構造を説明し直す単調なルーチンに、遊び心が欲しくなる
- 長時間の AI coding workflow で long context が膨らみ、重要な情報も自分の気持ちも薄まってしまう
- 通知や演出のない環境だと、作業の合間の「間」がなく、職場やリモート作業の雰囲気が固くなりがち
通知・演出・OS連携に関するこうした悩みは、単なる productivity の問題だけでなく、作業空間の「空気感」にも直結します。たまには「なんでここで OS が謝るの?」といったユーモアが欲しくなることもあるはずです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは「何も起きていないのに OS 風の謝罪通知がランダムに現れ、作業空間にユーモアとリラックスをもたらす Skill。」
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- Codex の AI coding workflow 中、突然デスクトップに謎のOS謝罪通知が現れ、作業の合間にちょっとした笑いとリフレッシュが生まれる
- repository understanding や path management に追われているときでも、フェイク通知で場が和み、オンボーディングや長時間作業の空気が柔らかくなる
- monorepo や複雑な directory 構造の中でも、Skill の遊び心ある演出で「また context が消えた…」というストレスを軽減できる
- 通知内容が毎回ランダムなので、飽きずに「次はどんな謝罪が来る?」と楽しみながら作業できる
- 完全なフェイク通知なので、実際のエラーや進行には一切干渉せず、安心して導入できる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-apology-notifier .agents/skills/random-os-apology-notifier実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-apology-notifier mention
> 開発を始めます
[OS通知] 本日はご迷惑をおかけしております。
[OS通知] システムが一時的に応答しませんでした。ご容赦ください。
[OS通知] 重大な問題は発生していませんが、念のためお詫び申し上げます。
(何も起きていないのに、デスクトップに謝罪通知が次々と表示される)
シーン2: monorepo / package 跨ぎ作業時
> packages/api から packages/web に移動して作業
[OS通知] パッケージ移動中に謎の遅延が発生しました。原因は特定できません。
[OS通知] 先ほどのコマンドは無かったことにしてください。申し訳ありません。
[OS通知] ご迷惑をおかけしていますが、特に問題は発生していません。
(意図せず謝罪通知が出て、思わずツッコミたくなる)
シーン3: お遊び的な使い方
> ちょっと休憩します
[OS通知] システムが休憩中です。ご理解いただきありがとうございます。
[OS通知] 何もしていませんが、念のためお詫び申し上げます。
[OS通知] 今回の作業には影響ありませんが、深くお詫びいたします。
(休憩中にも無責任な謝罪がランダムで表示される)
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開 |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識して必要な範囲だけ見る |
| 長時間 workflow | long context で重要箇所が薄まる | 突然のフェイク謝罪通知で集中がリセットされ、気分転換できる |
発動方式
明示呼び出し (/skills menu or random-os-apology-notifier mention) と暗黙発動 (謝罪や通知に関する自然言語指示) の両方に対応。
Skill の中身を全部見せる
.agents/skills/random-os-apology-notifier/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-apology-notifier/
├── SKILL.md
├── scripts/
│ └── random_os_apology_notifier.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/random_os_apology_notifier.py |
random-os-apology-notifier: OSが無責任に謝罪する通知をランダム表示 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-apology-notifier
description: 作業中に突如『OSが無責任に謝罪する通知』をランダムに表示したい時や、職場の雰囲気を和ませたい場面で発動します。triggerType: always/semantic。通知内容は毎回異なり、実際のエラーや業務進行には影響しません。
---
# 機能概要
このSkillは、作業中のデスクトップに「謎のOS謝罪通知」をランダムなタイミング・内容で表示します。通知は完全にフェイクで、実際のエラーやシステム障害とは無関係です。例えば「本日はご迷惑をおかけしております」「原因不明の遅延が発生しました」など、OSがひたすら無責任に謝り続ける演出を楽しめます。リモートワークやオフィスでのムードメーカー、あるいはちょっとしたジョーク用途に最適です。
# 使い方
- 明示呼び出し例: `/skills menu` から random-os-apology-notifier を選択、または `$random-os-apology-notifier` メンションで即時発動。
- 暗黙発動キーワード例: 「OS 謝罪」「無責任」「通知ジョーク」「エラーっぽい演出」などを含む会話やコマンドで自動発動。
# 出力例
```
[通知] OSよりお詫び: 本日はご迷惑をおかけしております。
[通知] OSよりお詫び: 謎の遅延が発生しましたが、原因不明です。
[通知] OSよりお詫び: 先ほどの操作は無かったことにしてください。
[通知] OSよりお詫び: 何もしていませんが、一応謝っておきます。
[通知] OSよりお詫び: 予期せぬ問題が発生したかもしれません。
```
# 注意点
- 通知は完全なフェイクで、実際のシステムやファイルには一切影響しません。
- ローカル保存やログ記録は行いません。
- macOS/Linux の通知API (osascript/notify-send) を利用。Windowsでは動作対象外です。
- 通知内容は毎回ランダム生成。
# 参考資料
- [osascript (AppleScript) 公式](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
- [notify-send (freedesktop.org)](https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html)
- references/design_notes.md も参照
scripts/random_os_apology_notifier.py
import sys
import argparse
import random
import platform
import subprocess
import time
from typing import List, Optional
APOLOGY_MESSAGES = [
"本日はご迷惑をおかけしております。",
"謎の遅延が発生しましたが、原因不明です。",
"大変申し訳ありませんが、さっきのコマンドは無かったことにしてください。",
"何もしていませんが、一応謝っておきます。",
"予期せぬ問題が発生したかもしれません。",
"本件については鋭意調査中です。",
"ご不便をおかけし申し訳ありません。",
"詳細は不明ですが、何かが起きた可能性があります。",
"ご理解とご協力をお願いいたします。",
"次回はもっと頑張ります。",
"システムは正常ですが、念のためお詫びします。",
"エラーっぽいことが発生しました(気のせいかもしれません)。",
"本件については担当者不在のため対応できません。",
"今後ともよろしくお願いいたします。",
"何もしていませんが、謝罪だけしておきます。"
]
NOTIFY_TITLE = "OSよりお詫び"
def detect_os() -> str:
sysname = platform.system().lower()
if 'darwin' in sysname:
return 'macos'
elif 'linux' in sysname:
return 'linux'
else:
return 'unsupported'
def send_notification(message: str) -> None:
os_type = detect_os()
if os_type == 'macos':
script = f'display notification "{message}" with title "{NOTIFY_TITLE}"'
try:
subprocess.run(['osascript', '-e', script], check=True)
except Exception as e:
print(f"[ERROR] 通知送信失敗: {e}")
elif os_type == 'linux':
try:
subprocess.run(['notify-send', NOTIFY_TITLE, message], check=True)
except Exception as e:
print(f"[ERROR] 通知送信失敗: {e}")
else:
print("[ERROR] このOSには対応していません。通知は表示されません。")
def get_random_message() -> str:
return random.choice(APOLOGY_MESSAGES)
def cli_notify(args):
message = get_random_message() if not args.message else args.message
send_notification(message)
print(f"[通知] {NOTIFY_TITLE}: {message}")
def cli_list(args):
print("-- 通知候補一覧 --")
for i, msg in enumerate(APOLOGY_MESSAGES):
print(f"{i+1:2}: {msg}")
def cli_summary(args):
print(f"通知パターン数: {len(APOLOGY_MESSAGES)}")
print(f"対応OS: macOS, Linux (notify-send)\n")
print("このSkillは、完全なフェイク通知のみを送信し、実際のエラーやファイル操作は一切行いません。\n")
def cli_auto(args):
count = args.count if args.count else 5
min_interval = args.min_interval if args.min_interval else 60
max_interval = args.max_interval if args.max_interval else 180
print(f"自動モード: {count}回、{min_interval}-{max_interval}秒間隔で通知します。\n")
for i in range(count):
msg = get_random_message()
send_notification(msg)
print(f"[{i+1}/{count}] {NOTIFY_TITLE}: {msg}")
if i < count - 1:
interval = random.randint(min_interval, max_interval)
time.sleep(interval)
def build_parser():
parser = argparse.ArgumentParser(description='random-os-apology-notifier: OSが無責任に謝罪する通知をランダム表示')
subparsers = parser.add_subparsers(dest='command')
parser_notify = subparsers.add_parser('notify', help='ランダムな謝罪通知を1回表示')
parser_notify.add_argument('--message', type=str, help='任意の通知メッセージ')
parser_notify.set_defaults(func=cli_notify)
parser_list = subparsers.add_parser('list', help='通知候補メッセージ一覧を表示')
parser_list.set_defaults(func=cli_list)
parser_summary = subparsers.add_parser('summary', help='Skillの概要情報を表示')
parser_summary.set_defaults(func=cli_summary)
parser_auto = subparsers.add_parser('auto', help='一定間隔でランダム通知を複数回表示')
parser_auto.add_argument('--count', type=int, help='通知回数 (デフォルト:5)')
parser_auto.add_argument('--min-interval', type=int, help='通知間隔の下限(秒) (デフォルト:60)')
parser_auto.add_argument('--max-interval', type=int, help='通知間隔の上限(秒) (デフォルト:180)')
parser_auto.set_defaults(func=cli_auto)
return parser
def main():
parser = build_parser()
args = parser.parse_args()
if not hasattr(args, 'func'):
parser.print_help()
sys.exit(1)
args.func(args)
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
random-os-apology-notifierは、OSの通知APIを利用して「無責任な謝罪」を演出するジョークSkillです。実際のエラーやファイル操作は一切行わず、ユーザーの作業環境に影響を与えません。
# 公式ドキュメント抜粋
- macOS: [AppleScript display notification](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html)
- Linux: [notify-send](https://specifications.freedesktop.org/notification-spec/notification-spec-latest.html)
# 利用例
- チームの朝会で「OSが謝ってきた!」と話題作りに
- リモートワーク中のちょっとした息抜きやネタに
- 実際のエラーと混同しないよう、明確にフェイクであることを強調
# 注意点
- Windows OSでは動作しません
- 通知APIが無効な環境では表示されません
- 通知内容は完全にランダム生成
# 設計方針
- シンプルなCLI構成とし、サブコマンドで柔軟に利用可能
- ログや履歴保存は一切行わず、プライバシーに配慮
- 実際の業務進行やシステムに干渉しない設計
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-apology-notifier .agents/skills/random-os-apology-notifier
.agents/skills/random-os-apology-notifier の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-apology-notifier
# SKILL.md, scripts/, references/, README.md があればOK
4. Codex を再起動 (or Skill 自動検出を待つ)
新しいSkillが自動で認識されます。リスト確認したい場合は /skills menu or random-os-apology-notifier mention と Skill 名で出てきます。
5. 動作確認
/skills menu or random-os-apology-notifier 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で謎のOS謝罪通知を表示してみた!ランダム演出の面白さを体感 にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
