Codex ユーザーが日常でぶつかる悩み
日々Codexを活用していると、作業フローの中で「集中が切れる」「単調な流れが続く」といった“気分転換のタイミング”が案外多いものです。AI coding workflowが高度化するほど、repository understandingやdirectory構造の把握といった頭の切り替えが求められる場面も増えてきます。そんなとき、ただの通知やリマインダーだけでは物足りなさを感じることも。
- 単調な path management や context 指定作業が続くと、気分転換できず集中力が下がる
- 長時間の workflow で long context が膨らみ、重要な情報が埋もれて stale context になりやすい
- monorepo で package を跨ぐたびに repository の構造把握を再度意識し直す必要がある
- session 再開時、前回までの context や directory の流れを思い出すのが面倒
- Codex の通知やアラートが味気なく、作業空間に遊び心や刺激がほしい
特に「通知・演出・OS連携」系のSkillが欲しい瞬間は、単なる業務効率化以上の“ちょっとした非日常”を求めがちです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中に突如「幕末パロディのカウントダウン通知」を炸裂させるSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、無害かつ強烈な歴史パロディ通知で気分転換ができる
- Codex の context や repository understanding の切り替えタイミングで、独特なフェイクアラートが挟まることで、作業空間に遊び心や話題が生まれる
- monorepo や長時間作業で stale context が溜まりがちなときも、突発的なアラートで意識をリセットできる
- 通知内容が毎回異なり、directory や path にまつわるネタも混ざるので、マンネリ化しにくい
- 実害ゼロで、repositoryやmemoryには一切影響しない安心設計
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/os-fake-bakumatsu-countdown-alert .agents/skills/os-fake-bakumatsu-countdown-alert実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or os-fake-bakumatsu-countdown-alert mention
> 今日から新しいプロジェクトで作業開始
【緊急通達】本日、/src/ 配下は黒船によるリセット対象となりました。
カウントダウン開始:あと12分で「明治維新プロセス」発動!
全 repository 構造が再編成される恐れがあります。
今のうちに context を保存してください。
(この通知はフィクションです。ご安心ください)
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ から packages/web/ に移動
【幕末速報】「本能寺リブート」まで残り8分。
/packages/web/ ディレクトリは新時代の渦中にあります。
重要: path management の混乱にご注意を。
repository understanding の再確認を推奨します。
(このアラートは歴史的パロディです)
シーン3: お遊び的な使い方
> ちょっと気分転換したい
【黒船アラート】「/docs/」ディレクトリにペリー来航!
あと5分で context が江戸から明治へタイムスリップします。
memory refresh 推奨。今だけの長 context をお楽しみください。
(史実とは無関係です)
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/os-fake-bakumatsu-countdown-alert/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/os-fake-bakumatsu-countdown-alert/
├── SKILL.md
├── scripts/
│ └── bakumatsu_countdown_alert.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/bakumatsu_countdown_alert.py |
OS幕末カウントダウン通知スクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-fake-bakumatsu-countdown-alert
description: 作業中やコマンド実行時に、"幕末"や"カウントダウン"などのキーワードを含む会話やリクエストがあった場合、または/skillsメニューや明示的な呼び出しが行われた際にこのSkillを発動します。歴史パロディ風の無害なアラート通知で作業空間に遊び心を提供します。
---
# 機能概要
このSkillは、あなたの作業中に突如として幕末日本史をモチーフにしたフェイクカウントダウンアラートをデスクトップやターミナルに表示する演出系スキルです。通知内容は毎回ランダム生成され、「緊急:システムはあと13分で明治維新されます」「黒船再来。本能寺リブートまで残り8分」など、歴史パロディに満ちた意味不明なカウントダウンが炸裂します。実害ゼロで、作業の合間にちょっとした笑いやリフレッシュをもたらします。
# 使い方
- 明示呼び出し例:`/skills menu` から本Skillを選択、または `os-fake-bakumatsu-countdown-alert` を直接メンション
- 暗黙発動キーワード例:「幕末」「カウントダウン」「黒船」「明治維新」「本能寺」「システム終了」などの単語が会話やコマンドに含まれる場合
# 出力例
```
[OS幕末カウントダウン通知]
緊急:システムはあと13分で明治維新されます。
カウントダウン開始:13:00
...
[OS幕末カウントダウン通知]
本日は黒船再来。本能寺リブートまで残り8分。
カウントダウン開始:08:00
...
[OS幕末カウントダウン通知]
徳川システム維持モード終了まで残り5分。
カウントダウン開始:05:00
```
# 注意点
- 実際のシステム操作やファイル削除等の危険な処理は一切行いません。
- 通知はランダム生成されるため、毎回内容が異なります。
- ローカルに履歴やデータを保存しません。
- 通知はターミナルまたはOSのネイティブ通知APIで表示されます。
# 参考資料
- references/design_notes.md に詳細な設計方針と利用例を記載
- Python公式 `subprocess`, `random`, `platform`, `time` モジュール利用
- OS通知: Windowsは`toast`, macOSは`osascript`, Linuxは`notify-send`を活用
scripts/bakumatsu_countdown_alert.py
import sys
import argparse
import random
import time
import platform
import subprocess
from datetime import datetime
BAKUMATSU_ALERTS = [
"緊急:システムはあと{mins}分で明治維新されます。",
"本日は黒船再来。本能寺リブートまで残り{mins}分。",
"徳川システム維持モード終了まで残り{mins}分。",
"坂本龍馬のアップデート適用まで残り{mins}分。",
"ペリー提督がポート{port}に接続を試みています。残り{mins}分で開国。",
"新選組プロセスが暴走中。鎮圧カウントダウン:{mins}分。",
"幕府ファイアウォール解除まで残り{mins}分。",
"長州藩スクリプトが起動。システム再構築まで{mins}分。",
"西郷隆盛がリブートを要求。再起動まで{mins}分。",
"薩摩藩ネットワーク切断まで残り{mins}分。"
]
PORTS = [80, 443, 8080, 3000, 22, 1868, 1192]
def random_alert():
mins = random.randint(3, 20)
port = random.choice(PORTS)
alert = random.choice(BAKUMATSU_ALERTS)
return alert.format(mins=mins, port=port), mins
def show_terminal_alert(alert_text, mins):
print("[OS幕末カウントダウン通知]")
print(alert_text)
print(f"カウントダウン開始:{mins:02d}:00")
for i in range(mins, 0, -1):
sys.stdout.write(f"\r残り {i:02d}:00 ... ")
sys.stdout.flush()
time.sleep(0.4)
print("\n[幕末カウントダウン終了] システムは無事維新されました(何も起きません)\n")
def show_os_notification(alert_text):
sys_os = platform.system()
title = "OS幕末カウントダウン通知"
if sys_os == "Darwin":
script = f'display notification "{alert_text}" with title "{title}"'
subprocess.call(["osascript", "-e", script])
elif sys_os == "Linux":
subprocess.call(["notify-send", title, alert_text])
elif sys_os == "Windows":
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
toaster.show_toast(title, alert_text, duration=10)
except ImportError:
print("[通知] win10toastが見つかりません。pip install win10toast でインストールしてください。")
else:
print(f"[通知未対応OS] {alert_text}")
def log_alert(alert_text, mins):
logline = f"{datetime.now().isoformat()} | {alert_text} | {mins}分\n"
with open("bakumatsu_alert.log", "a", encoding="utf-8") as f:
f.write(logline)
def list_log():
try:
with open("bakumatsu_alert.log", "r", encoding="utf-8") as f:
lines = f.readlines()
for line in lines[-10:]:
print(line.strip())
except FileNotFoundError:
print("まだ通知履歴がありません。")
def summary_log():
try:
with open("bakumatsu_alert.log", "r", encoding="utf-8") as f:
lines = f.readlines()
print(f"通算通知回数: {len(lines)}")
if lines:
print(f"最新: {lines[-1].strip()}")
except FileNotFoundError:
print("まだ通知履歴がありません。")
def main():
parser = argparse.ArgumentParser(description='OS幕末カウントダウン通知スクリプト')
subparsers = parser.add_subparsers(dest='command')
parser_alert = subparsers.add_parser('alert', help='幕末カウントダウン通知を発動')
parser_alert.add_argument('--os', action='store_true', help='OSネイティブ通知も併用')
parser_alert.add_argument('--log', action='store_true', help='通知履歴を記録')
parser_list = subparsers.add_parser('list', help='通知履歴を最新10件表示')
parser_summary = subparsers.add_parser('summary', help='通知履歴のサマリー表示')
args = parser.parse_args()
if args.command == 'alert':
alert_text, mins = random_alert()
show_terminal_alert(alert_text, mins)
if args.os:
show_os_notification(alert_text)
if args.log:
log_alert(alert_text, mins)
elif args.command == 'list':
list_log()
elif args.command == 'summary':
summary_log()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
本Skillは、作業環境に遊び心を加えるための演出系通知スクリプトです。歴史パロディと無意味なカウントダウンを組み合わせ、ユーザーの集中を邪魔しない範囲で気分転換を図ります。
# 公式ドキュメント抜粋
- Python公式: https://docs.python.org/ja/3/
- OS通知API: Windows (win10toast), macOS (osascript), Linux (notify-send)
# 利用例
- `/skills menu` から選択し、即時に幕末アラートを発動
- "カウントダウン"や"幕末"などの単語を含む会話時に自動発動
- `python bakumatsu_countdown_alert.py alert --os --log` でターミナル+OS通知+履歴記録
# 注意点
- 実際のシステム操作やファイル削除は一切行いません
- win10toastが未インストールの場合はpipで追加が必要
- 履歴ファイル(bakumatsu_alert.log)は同ディレクトリにのみ保存
# 設計方針
- 通知内容は毎回異なるよう乱数とテンプレートを組み合わせ
- OSごとの通知APIを自動判別し、最適な方法で表示
- コマンド履歴管理機能も実装し、ユーザーが通知履歴を振り返れるよう配慮
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/os-fake-bakumatsu-countdown-alert .agents/skills/os-fake-bakumatsu-countdown-alert
.agents/skills/os-fake-bakumatsu-countdown-alert の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/os-fake-bakumatsu-countdown-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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
