Codexで作業中の気分を演出する謎の天気バー活用ガイド

  • URLをコピーしました!
目次

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 の「疲れ」を一瞬だけ吹き飛ばすネタになる
  • 「今日は仕様雪崩」「集中力台風接近中」など、職場や自宅で話題になるカオスな気分天気バーを即席で体験できる
QUICK INSTALL
このSkillをすぐ試す

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記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次