Codex ユーザーが日常でぶつかる悩み
AI coding workflow を日々回していると、作業の合間や長時間の session でふとした「間」が生まれることがある。特に repository understanding を深めつつ進める開発や、monorepo で複数の directory を意識しなければならない場面では、集中力が切れたり、path management に疲れたりする瞬間も珍しくない。そんなとき、場の空気を一変させる“謎の演出”が欲しくなることはないだろうか。
- 長時間の workflow で context や memory の管理に疲れてくるが、気分転換のきっかけがない
- リポジトリや directory を切り替えるたびに、Codex の context も切り替わるため、作業のリズムが途切れがち
- monorepo で package を跨いだ瞬間に、「今どこの何をやっているか」自分自身も見失いがち
- AI が返す出力に遊び心やカオスな演出が欲しいが、通知や演出系 Skill は実用一辺倒になりやすい
- 職場や自宅で「今日の気分、天気予報で出るのはさすがに謎」と呟きたくなるような場のネタが欲しい
通知・演出・OS連携カテゴリの Skill にも、単なる効率化だけでなく「カオスな空気」を差し込む余地がある。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業環境に“OS風・謎の気分天気バー”をランダム表示し、場の空気を強制カオス化するSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、完全ランダムな「気分天気」演出が入り、長時間作業の空気を一変させられる
- repo や directory の切り替え時に、意味不明な天気ワードが出現し、onboarding や session 再開時の“間”を和らげる
- Codex の通知・演出系 Skill と組み合わせて、memory や context の切り替えタイミングで遊び心を加えられる
- monorepo や大規模 repository でも、path management の「疲れ」を一瞬だけ吹き飛ばすネタになる
- 「今日は仕様雪崩」「集中力台風接近中」など、職場や自宅で話題になるカオスな気分天気バーを即席で体験できる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/os-fake-mood-weather-bar .agents/skills/os-fake-mood-weather-bar実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu
> os-fake-mood-weather-bar
[OS風・気分天気バー]
現在の気分天気: やる気霧雨
メッセージ: 「本日の作業効率、やや湿り気あり」
-----------------------------------------------
project: /Users/taro/dev/awesome-monorepo
directory: apps/web/
-----------------------------------------------
シーン2: monorepo / package 跨ぎ作業時
> 移動: packages/api/
[OS風・気分天気バー]
現在の気分天気: バグの嵐
メッセージ: 「API層に突入、嵐の予感」
-----------------------------------------------
project: /Users/taro/dev/awesome-monorepo
directory: packages/api/
-----------------------------------------------
シーン3: お遊び的な使い方
> 今日の気分天気を教えて
[OS風・気分天気バー]
現在の気分天気: 仕様雪崩
メッセージ: 「本日は仕様変更が止まらない予報」
-----------------------------------------------
project: /Users/taro/dev/awesome-monorepo
directory: scripts/
-----------------------------------------------
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-mood-weather-bar/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/os-fake-mood-weather-bar/
├── SKILL.md
├── scripts/
│ └── fake_mood_weather_bar.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_mood_weather_bar.py |
謎の気分天気バーを表示します |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-fake-mood-weather-bar
description: Codexは「気分」「天気」「通知」「演出」などのキーワードや、明示的な /skills menu コマンド、または os-fake-mood-weather-bar へのメンションがあった際にこのSkillを発動してください。
---
# 機能概要
os-fake-mood-weather-barは、あなたの作業環境に“謎の気分天気バー”を出現させる演出系Skillです。実用性は一切ありませんが、画面端やメニューバーに「絶好調・晴れ」「やる気霧雨」「集中力台風接近中」「仕様雪崩」など、完全ランダムな“気分天気”ワードを表示し、職場や自宅の空気をカオスに彩ります。日々のコーディングや作業に、ちょっとした謎のユーモアと脱力感を提供します。
# 使い方
- 明示呼び出し: `/skills menu` でスキル一覧から選択、または `$ os-fake-mood-weather-bar` を直接メンション
- 暗黙発動キーワード例: 「気分」「天気」「通知」「バー」「演出」「今日の調子」などが会話やコードに含まれると自動発動します。
# 出力例
```
[OS風・謎の気分天気バー]
現在の気分天気: 仕様雪崩
(次回更新まで: 3分)
[OS風・謎の気分天気バー]
現在の気分天気: バグの嵐
(次回更新まで: 5分)
[OS風・謎の気分天気バー]
現在の気分天気: やる気霧雨
(次回更新まで: 2分)
```
# 注意点
- 実際の天気や気分とは一切関係ありません。
- 他の通知・演出系Skillと同時利用時は重複表示に注意。
- ローカル保存や履歴機能はありません。
- Mac/Linux: tkinterでポップアップ表示、Windows: タスクバー通知で演出します。
# 参考資料
- [Python公式 tkinterドキュメント](https://docs.python.org/ja/3/library/tkinter.html)
- references/design_notes.md も参照してください。
scripts/fake_mood_weather_bar.py
import sys
import argparse
import random
import threading
import time
import platform
try:
import tkinter as tk
from tkinter import messagebox
except ImportError:
tk = None
MOOD_WEATHER_LIST = [
"絶好調・晴れ",
"やる気霧雨",
"集中力台風接近中",
"バグの嵐",
"仕様雪崩",
"納期雷警報",
"バグの小春日和",
"会議前線通過中",
"レビュー曇り時々晴れ",
"進捗微風",
"仕様熱波",
"タスク猛吹雪",
"やる気微塵",
"集中力高気圧",
"デバッグ寒波",
"コミット晴れのち雷",
"バグの霧",
"仕様の大雨",
"テスト嵐",
"納期の虹"
]
REFRESH_INTERVALS = [120, 180, 240, 300] # 秒
class MoodWeatherBar:
def __init__(self, interval=None):
self.current_mood = None
self.next_interval = interval or random.choice(REFRESH_INTERVALS)
self.root = None
self.label = None
self.running = True
self.platform = platform.system()
self._lock = threading.Lock()
def random_mood(self):
return random.choice(MOOD_WEATHER_LIST)
def update_mood(self):
with self._lock:
self.current_mood = self.random_mood()
self.next_interval = random.choice(REFRESH_INTERVALS)
if self.label:
self.label.config(text=self._format_text())
def _format_text(self):
return f"[OS風・謎の気分天気バー]\n現在の気分天気: {self.current_mood}\n(次回更新まで: {self.next_interval//60}分)"
def _tkinter_loop(self):
self.root = tk.Tk()
self.root.title("OS風・謎の気分天気バー")
self.root.resizable(False, False)
self.root.attributes('-topmost', True)
self.root.geometry(f"400x90+{self.root.winfo_screenwidth()-420}+30")
self.label = tk.Label(self.root, text=self._format_text(), font=("Meiryo", 13), justify="left", anchor="w")
self.label.pack(fill="both", expand=True, padx=10, pady=10)
threading.Thread(target=self._auto_refresh, daemon=True).start()
self.root.protocol("WM_DELETE_WINDOW", self.stop)
self.root.mainloop()
def _auto_refresh(self):
while self.running:
time.sleep(self.next_interval)
if not self.running:
break
self.update_mood()
def _windows_notify(self):
try:
from win10toast import ToastNotifier
toaster = ToastNotifier()
while self.running:
mood = self.random_mood()
interval = random.choice(REFRESH_INTERVALS)
toaster.show_toast(
"OS風・謎の気分天気バー",
f"現在の気分天気: {mood}\n(次回更新まで: {interval//60}分)",
duration=10,
threaded=True
)
for _ in range(interval):
if not self.running:
break
time.sleep(1)
except ImportError:
print("win10toastがインストールされていません。\n pip install win10toast で導入してください。")
def start(self):
self.current_mood = self.random_mood()
if self.platform == "Windows":
self._windows_notify()
elif tk:
self._tkinter_loop()
else:
print(self._format_text())
print("tkinterが利用できません。CLI出力のみ対応します。")
while self.running:
time.sleep(self.next_interval)
self.update_mood()
print(self._format_text())
def stop(self):
self.running = False
if self.root:
self.root.destroy()
def list_moods():
print("--- 気分天気ワード一覧 ---")
for m in MOOD_WEATHER_LIST:
print(f"- {m}")
def main():
parser = argparse.ArgumentParser(description="謎の気分天気バーを表示します")
subparsers = parser.add_subparsers(dest="command")
parser_show = subparsers.add_parser("show", help="気分天気バーを表示")
parser_show.add_argument("--interval", type=int, help="更新間隔(秒)")
parser_list = subparsers.add_parser("list", help="気分天気ワード一覧を表示")
parser_once = subparsers.add_parser("once", help="1回だけランダム気分天気を表示")
args = parser.parse_args()
if args.command == "show":
bar = MoodWeatherBar(interval=args.interval)
try:
bar.start()
except KeyboardInterrupt:
bar.stop()
elif args.command == "list":
list_moods()
elif args.command == "once":
mood = random.choice(MOOD_WEATHER_LIST)
interval = random.choice(REFRESH_INTERVALS)
print(f"[OS風・謎の気分天気バー]\n現在の気分天気: {mood}\n(次回更新まで: {interval//60}分)")
else:
parser.print_help()
if __name__ == "__main__":
main()
references/design_notes.md
# 概要
このSkillは、実用性を完全に排除した“気分天気”バーをOS風に演出するための設計です。職場や自宅のPC環境で、唐突に謎の気分天気を表示し、会話や雰囲気を和ませることを目的としています。
# 公式ドキュメント抜粋
- [Python tkinter公式ドキュメント](https://docs.python.org/ja/3/library/tkinter.html)
- [win10toast (Windows通知)](https://pypi.org/project/win10toast/)
# 利用例
- コード実行時や会話の合間に自動/手動でバーを表示
- 「今日の気分は?」と聞かれた時に即時ランダム天気を出す
# 注意点
- 表示は完全にランダムで、実際の気分や天候とは無関係
- Mac/Linuxはtkinter、Windowsはwin10toastを利用
- 他の通知系Skillと同時利用時は競合に注意
# 設計方針
- 100%ランダム生成で、履歴や記録は一切残さない
- OSごとに最適な通知方法を選択(tkinter/タスクバー)
- CLIサブコマンドで柔軟な呼び出しに対応
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/os-fake-mood-weather-bar .agents/skills/os-fake-mood-weather-bar
.agents/skills/os-fake-mood-weather-bar の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/os-fake-mood-weather-bar
# 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 との連携設計はどうあるべきか?
- 謎の気分天気バーが想定どおり画面端やメニューバーに表示されるか?
- 表示内容が毎回ランダムかつカオスなワードになっているか?
- 他の通知・演出系Skillと競合しないか?
実際に Codex で試した検証ログは Codexで謎の気分天気バーを画面に出してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
