Codexでターミナル作業気分を可視化して楽しむ活用ガイド

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

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 の場面でも、作業感に変化を持たせられる
QUICK INSTALL
このSkillをすぐ試す

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

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

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

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