Codex ユーザーが日常でぶつかる悩み
日々 Codex を使っていると、プロジェクトごとの context や repo の directory 構造をうまく伝えきれず、思わぬ混乱を招くシーンが多々あります。特に monorepo や長時間の AI coding workflow では、Codex の記憶や path management 周りの「抜け」や「ズレ」が発生しがちです。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repository 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間の AI coding workflow で long context が膨らみすぎて、重要な情報が薄まる
- 「ここはこういう構造の repository」というあらすじを毎回チャットの冒頭で書く羽目になる
また、作業が煮詰まったときに「ちょっとした息抜き」や「空気のゆるみ」が欲しい瞬間もよくあります。通知・演出・OS連携系の Skill で、そうした場面をうまく演出できるとチームの雰囲気も和みます。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、作業中の“気分温度”をOSのステータスバー風に毎回ランダム表示し、カオスな演出で空気を和ませるSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、気分の“温度”を毎回ユーモラスに演出し、長時間作業の緊張感を和らげる
- Codex の context 切り替えや repository onboarding 時に、温度バーが場を和ませてくれる
- monorepo での directory 移動や package 跨ぎ作業時に、謎の温度演出で会話やレビューが盛り上がる
- 作業テンションや workflow の“空気”を可視化し、チーム内コミュニケーションのきっかけになる
- Skill の導入だけで、OS風の演出を簡単に追加できる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/os-mood-temperature-bar .agents/skills/os-mood-temperature-bar実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu
> プロジェクトの初期セットアップを始めます
[os-mood-temperature-bar]
─────────────────────────────
気分温度: 絶好調 38.7℃
(本日のテンション: 夏の甲子園決勝並)
─────────────────────────────
repo: my-monorepo/
directory: apps/web/
─────────────────────────────
シーン2: monorepo / package 跨ぎ作業時
> packages/api/ に移動して main 関数を修正
[os-mood-temperature-bar]
─────────────────────────────
気分温度: 炎上中 42.5℃
(テンション: 緊急対応モード)
─────────────────────────────
repo: my-monorepo/
directory: packages/api/
─────────────────────────────
シーン3: お遊び的な使い方
> テストが全部落ちたので、ちょっと一息
[os-mood-temperature-bar]
─────────────────────────────
気分温度: 冷え冷え 15.2℃
(テンション: 北極圏)
─────────────────────────────
repo: my-monorepo/
directory: tests/
─────────────────────────────
before / after の違い
| 場面 | Skill 無し | Skill 有り |
|---|---|---|
| session 再開時 | repo 構造から毎回説明、path も指定し直し | Codex が自動で context を復元、最小プロンプトで再開+気分温度の演出で和む |
| monorepo 移動 | 違う package のコードを参照しがち | directory boundary を意識した温度演出で、今どこにいるか分かりやすい |
| 長時間 workflow | long context で重要箇所が薄まる | 温度バーで workflow の区切りや気分転換ができる |
発動方式
明示呼び出し (/skills menu や Skill 名での mention) と、説明文マッチによる暗黙発動の両方に対応しています。
Skill の中身を全部見せる
.agents/skills/os-mood-temperature-bar/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/os-mood-temperature-bar/
├── SKILL.md
├── scripts/
│ └── mood_temperature_bar.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/mood_temperature_bar.py |
気分温度ステータスバー |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-mood-temperature-bar
description: コマンド実行時やターミナル作業中、または明示的なSkill呼び出し(/skills menuやos-mood-temperature-barメンション)時に発動。気分温度やテンションをランダムな数値とコメントでOSバー風に表示したい場合に使用。
---
# 機能概要
このSkillは、あなたの作業中の“気分温度”を、まるでOSのステータスバーやメニューバーのような演出で表示します。コマンド実行やエディタ操作時に、気分やテンションを「絶好調39度」「冷え冷え16度」「炎上中42.5度」など、完全ランダムな温度とコメントで可視化。作業現場の空気を和ませたり、ちょっとしたカオスを演出したいときに最適です。
# 使い方
- 明示呼び出し: `/skills menu` で一覧から選択、または `os-mood-temperature-bar` を直接メンション。
- 暗黙発動: 「気分」「テンション」「温度」「バー」「ステータス」などのキーワードを含む会話やコマンド実行時に自動発動。
# 出力例
```
[os-mood-temperature-bar] 気分温度: 42.7℃ (炎上中) | ステータスバー: [■■■■■■■■■■■ ]
[os-mood-temperature-bar] 気分温度: 16.2℃ (冷え冷え) | ステータスバー: [■■■ ]
[os-mood-temperature-bar] 気分温度: 39.0℃ (絶好調) | ステータスバー: [■■■■■■■■■■■■■■■ ]
[os-mood-temperature-bar] 気分温度: 27.5℃ (まあまあ) | ステータスバー: [■■■■■■■■■ ]
[os-mood-temperature-bar] 気分温度: 35.1℃ (ノリノリ) | ステータスバー: [■■■■■■■■■■■■ ]
```
# 注意点
- 温度やコメントは完全ランダムで、実際の体調や作業効率とは無関係です。
- ローカルにログファイル(`mood_temperature.log`)が保存されます。
- OSの本物のメニューバーには直接表示されません。ターミナルやエディタでの演出となります。
- 長時間の連続実行や自動化には向きません。
# 参考資料
- 詳細な設計や利用例は`references/design_notes.md`を参照。
- 公式ドキュメント: https://docs.python.org/3/library/random.html, https://docs.python.org/3/library/argparse.html
scripts/mood_temperature_bar.py
import sys
import argparse
import random
import datetime
import os
MOOD_LABELS = [
(15, '冷え冷え'),
(25, 'まあまあ'),
(32, '普通'),
(37, 'ノリノリ'),
(40, '絶好調'),
(43, '炎上中'),
]
BAR_LENGTH = 20
LOG_FILE = 'mood_temperature.log'
def get_mood_label(temp):
for threshold, label in MOOD_LABELS:
if temp < threshold:
return label
return MOOD_LABELS[-1][1]
def generate_temperature():
# 15.0〜43.0度の範囲でランダム
return round(random.uniform(15.0, 43.0), 1)
def generate_bar(temp):
# 15.0〜43.0度を0〜BAR_LENGTHにマッピング
min_temp, max_temp = 15.0, 43.0
filled = int((temp - min_temp) / (max_temp - min_temp) * BAR_LENGTH)
bar = '■' * filled + ' ' * (BAR_LENGTH - filled)
return f'[{bar}]'
def format_status(temp, label):
bar = generate_bar(temp)
return f"[os-mood-temperature-bar] 気分温度: {temp}℃ ({label}) | ステータスバー: {bar}"
def log_status(temp, label, status):
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open(LOG_FILE, 'a', encoding='utf-8') as f:
f.write(f"{now}\t{temp}\t{label}\t{status}\n")
def show_log():
if not os.path.exists(LOG_FILE):
print("ログファイルがありません。まだ気分温度を記録していません。")
return
with open(LOG_FILE, 'r', encoding='utf-8') as f:
for line in f:
print(line.strip())
def show_summary():
if not os.path.exists(LOG_FILE):
print("ログファイルがありません。まだ気分温度を記録していません。")
return
temps = []
labels = {}
with open(LOG_FILE, 'r', encoding='utf-8') as f:
for line in f:
parts = line.strip().split('\t')
if len(parts) >= 3:
try:
temp = float(parts[1])
label = parts[2]
temps.append(temp)
labels[label] = labels.get(label, 0) + 1
except Exception:
continue
if not temps:
print("記録がありません。")
return
print(f"記録数: {len(temps)}")
print(f"平均気分温度: {round(sum(temps)/len(temps), 1)}℃")
print("コメント分布:")
for label, count in sorted(labels.items(), key=lambda x: -x[1]):
print(f" {label}: {count}回")
def main():
parser = argparse.ArgumentParser(description='気分温度ステータスバー')
subparsers = parser.add_subparsers(dest='command')
parser_log = subparsers.add_parser('log', help='最新の気分温度を表示し、ログに記録')
parser_list = subparsers.add_parser('list', help='気分温度ログを表示')
parser_summary = subparsers.add_parser('summary', help='気分温度ログのサマリを表示')
parser.add_argument('--no-log', action='store_true', help='ログに記録しない')
args = parser.parse_args()
if args.command == 'list':
show_log()
elif args.command == 'summary':
show_summary()
else:
temp = generate_temperature()
label = get_mood_label(temp)
status = format_status(temp, label)
print(status)
if not args.no_log:
log_status(temp, label, status)
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、作業中の気分やテンションを“温度”という形で可視化し、ターミナルやエディタ上でOSバー風に演出します。温度は完全ランダムで、実際の体調や心理状態とは無関係です。
# 公式ドキュメント抜粋
- Python random: https://docs.python.org/3/library/random.html
- argparse: https://docs.python.org/3/library/argparse.html
# 利用例
- コマンド実行ごとに気分温度を表示して、作業の雰囲気を和ませる
- ログやサマリで過去の“気分温度”の分布を確認し、ネタとして楽しむ
# 注意点
- 本物のOSメニューバーには表示されません。ターミナルやチャットbot経由での演出です。
- ログはローカルに保存され、プライバシーには配慮されています。
# 設計方針
- シンプルなCLI構成で、log/list/summaryの3サブコマンドを用意
- 温度やコメントはランダム生成、演出重視
- ログファイルはUTF-8で安全に追記
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/os-mood-temperature-bar .agents/skills/os-mood-temperature-bar
.agents/skills/os-mood-temperature-bar の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/os-mood-temperature-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 との連携設計はどうあるべきか?
- 温度表示が毎回ランダム/おかしな値になるか
- OSのメニューバーやターミナルでしっかり演出されるか
- 作業テンションの“温度”表現が十分にカオスか
実際に Codex で試した検証ログは Codexで気分の“温度”をOS風バーに表示してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
