Codex ユーザーが日常でぶつかる悩み
Codex を使った AI coding workflow では、ターミナルやコマンド実行時の「作業感」「気分」が単調になりがちです。特に長時間の作業や、同じようなコマンドを繰り返す局面では、集中力やモチベーションの維持が難しくなることもよくあります。また、通知や演出がないと、作業の区切りや切り替えのタイミングが曖昧になりがちです。Codex 固有の context や path management の課題も相まって、以下のような「あるある」に直面します。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
通知・演出系 Skill が不足していると、作業のメリハリやちょっとした息抜きができず「ひたすら真面目なターミナル」になりがちです。context や repository understanding の問題に加え、「気分転換」や「遊び心」の不足も、実は見過ごせない悩みの一つです。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、ターミナル作業をランダムな「気分指数」とコメントで演出し、Codex の作業体験に遊び心とメリハリをもたらします。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- コマンド実行のたびに「気分指数」と小ネタコメントがランダム表示され、ターミナル作業が一気に楽しくなる
- 真面目な AI coding workflow の中に遊び心が生まれ、長時間の作業でも気分転換しやすい
- Codex の context や repository understanding の切り替えタイミングで、気分バロメーターがアクセントとなり作業リズムを整える
- onboarding や session 再開時にも、自然に「今の気分」を演出できる
- monorepo や大規模 repository での path management の場面でも、作業感に変化を持たせられる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/terminal-mood-barometer .agents/skills/terminal-mood-barometer実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or terminal-mood-barometer mention
> プロジェクト初期化
[terminal-mood-barometer] やる気指数:87
[コメント] 今日のあなたは「集中モード全開」。repository の全 directory が味方です。
--------------------------------------------------
main repo: /Users/you/projects/awesome-app
onboarding: 完了
--------------------------------------------------
シーン2: monorepo / package 跨ぎ作業時
> cd packages/auth && ls
[terminal-mood-barometer] やる気指数:12
[コメント] 眠気注意報発令中。monorepo の package 境界で一息つきましょう。
--------------------------------------------------
現在位置: packages/auth
directory understanding: 更新完了
--------------------------------------------------
シーン3: お遊び的な使い方
> git status
[terminal-mood-barometer] やる気指数:99
[コメント] 伝説級のやる気!このまま repository を征服しましょう。
--------------------------------------------------
memory: context snapshot 取得済み
--------------------------------------------------
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/terminal-mood-barometer/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/terminal-mood-barometer/
├── SKILL.md
├── scripts/
│ └── mood_barometer.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/mood_barometer.py |
terminal-mood-barometer: ターミナル作業に気分指数を演出表示 |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: terminal-mood-barometer
description: コマンド実行やターミナル操作時に、必ず“気分指数”とランダムな小ネタコメントを表示し、作業気分を演出します。コマンド発行・/skills menu・skill名明示時に発動。
---
# 機能概要
terminal-mood-barometerは、ターミナルでコマンドを実行するたびに、完全ランダムな「気分指数」とコメントを表示し、作業中の雰囲気をユーモラスに演出するSkillです。真面目な作業の合間に、謎の“やる気スコア”や小ネタが割り込むことで、ターミナルが遊び場に変貌。コマンドの成否や内容に関係なく、毎回異なる気分指数とコメントが表示されるため、作業の合間にクスッとできる余白を提供します。
# 使い方
- 明示呼び出し: `/skills menu` から本Skillを選択、または `terminal-mood-barometer` を明記して呼び出します。
- 暗黙発動: 任意のコマンド実行時(例: `ls`, `git status`, `python script.py` など)、または「やる気」「気分」「テンション」などのキーワードを含む会話時に自動発動します。
# 出力例
```
$ git pull
[terminal-mood-barometer]
やる気指数: 87
コメント: 今日もコーディング日和!集中力MAX。
$ ls
[terminal-mood-barometer]
やる気指数: 12
コメント: そろそろカフェイン補給の時間です。
$ python script.py
[terminal-mood-barometer]
やる気指数: 44
コメント: まあまあ、ぼちぼちいきましょう。
```
# 注意点
- 気分指数とコメントは完全ランダムで、実際の作業状況や履歴とは無関係です。
- ローカルに記録や統計は保存しません(セッションログ等も非対応)。
- 作業を阻害しすぎないよう、1行または2行で簡潔に表示されます。
- 除外パスや特定コマンドの除外設定はありません。
# 参考資料
詳細な設計方針や参考事例は references/design_notes.md を参照してください。ランダム値生成にはPython標準ライブラリrandomを利用し、CLI通知の演出は標準出力に限定しています。
scripts/mood_barometer.py
import argparse
import random
import sys
import subprocess
import shlex
from datetime import datetime
MOOD_COMMENTS = [
(0, 10, "カフェイン補給推奨。"),
(11, 30, "今日はスロースタート。無理せずに。"),
(31, 50, "まあまあ、ぼちぼちいきましょう。"),
(51, 70, "集中力が高まってきたかも?"),
(71, 85, "いい感じ!このまま進みましょう。"),
(86, 100, "今日もコーディング日和!集中力MAX。")
]
EXTRA_COMMENTS = [
"そろそろ休憩しませんか?",
"おやつタイムが近づいています。",
"やる気スイッチ、どこに置いたっけ?",
"この調子でバグも撃退!",
"深呼吸してリフレッシュ。",
"たまにはストレッチも大事です。",
"進捗どうですか?",
"コーヒーがあなたを呼んでいます。",
"気分転換に散歩もおすすめ。",
"自分を褒めてあげましょう。"
]
HISTORY_LOG = []
def generate_mood():
mood_score = random.randint(0, 100)
comment = None
for lower, upper, base_comment in MOOD_COMMENTS:
if lower <= mood_score <= upper:
comment = base_comment
break
# 30%の確率でEXTRA_COMMENTSから追加コメント
if random.random() < 0.3:
comment += " " + random.choice(EXTRA_COMMENTS)
return mood_score, comment
def print_mood_barometer():
mood_score, comment = generate_mood()
print("[terminal-mood-barometer]")
print(f"やる気指数: {mood_score}")
print(f"コメント: {comment}")
HISTORY_LOG.append({
"timestamp": datetime.now().isoformat(),
"score": mood_score,
"comment": comment
})
def run_command(command):
try:
# コマンド実行
result = subprocess.run(shlex.split(command), capture_output=True, text=True)
print(result.stdout, end="")
if result.stderr:
print(result.stderr, file=sys.stderr)
print_mood_barometer()
except FileNotFoundError:
print(f"コマンドが見つかりません: {command}", file=sys.stderr)
except Exception as e:
print(f"エラーが発生しました: {e}", file=sys.stderr)
def list_history():
if not HISTORY_LOG:
print("-- mood barometerの履歴はありません --")
return
for idx, entry in enumerate(HISTORY_LOG, 1):
print(f"{idx}. {entry['timestamp']} | やる気指数: {entry['score']} | {entry['comment']}")
def summary():
if not HISTORY_LOG:
print("-- mood barometerの履歴はありません --")
return
scores = [entry['score'] for entry in HISTORY_LOG]
avg = sum(scores) / len(scores)
print(f"平均やる気指数: {avg:.1f}")
print(f"記録回数: {len(scores)}")
print(f"最高: {max(scores)} / 最低: {min(scores)}")
def main():
parser = argparse.ArgumentParser(description="terminal-mood-barometer: ターミナル作業に気分指数を演出表示")
subparsers = parser.add_subparsers(dest="command", help="サブコマンド")
# run: 任意のコマンドを実行しつつ mood barometer を表示
run_parser = subparsers.add_parser("run", help="コマンドを実行し、気分指数を表示")
run_parser.add_argument("cmd", nargs=argparse.REMAINDER, help="実行するコマンド")
# mood: 気分だけ表示
mood_parser = subparsers.add_parser("mood", help="今の気分指数とコメントを表示")
# list: 履歴表示
list_parser = subparsers.add_parser("list", help="気分指数の履歴一覧を表示 (セッション内)")
# summary: 平均や統計
summary_parser = subparsers.add_parser("summary", help="気分指数の統計サマリを表示")
args = parser.parse_args()
if args.command == "run":
if not args.cmd:
print("コマンドを指定してください。例: python mood_barometer.py run ls -l")
sys.exit(1)
run_command(" ".join(args.cmd))
elif args.command == "mood":
print_mood_barometer()
elif args.command == "list":
list_history()
elif args.command == "summary":
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
terminal-mood-barometerは、ターミナル作業時に毎回ユーモラスな「やる気指数」とコメントを表示し、作業の雰囲気を和らげるための演出Skillです。コマンド実行ごとにランダム値を生成し、標準出力に挿入します。
# 公式ドキュメント抜粋
Pythonのrandom標準ライブラリを利用し、サブプロセス実行にはsubprocess.runを採用。CLIサブコマンド方式で、コマンドラッパーとしても単体演出としても利用可能です。
# 利用例
`python mood_barometer.py run ls -l` でコマンド実行+気分指数表示。`python mood_barometer.py mood` で気分だけ表示。`list`や`summary`で履歴や統計も確認できます(セッション内のみ)。
# 注意点
気分指数やコメントは完全ランダムで、実際の作業内容や履歴とは無関係です。履歴はメモリ上のみで、永続保存はありません。
# 設計方針
作業の邪魔になりすぎず、でも確実に目につく1-2行の演出を重視。コマンドラッパーとしても単体Skillとしても柔軟に使えるよう設計しています。
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/terminal-mood-barometer .agents/skills/terminal-mood-barometer
.agents/skills/terminal-mood-barometer の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/terminal-mood-barometer
# 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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
