Codex ユーザーが日常でぶつかる悩み
Codex を日常的に使っていると、AI coding workflow の中で「現実感が薄れる瞬間」「集中力が切れるタイミング」が意外と多く発生します。特に repository understanding や path management を意識している最中、ふとした拍子に「今どこのディレクトリで何をしていたか」「Codex の context はどこまで覚えているか」など、現実と仮想の境目が曖昧になることも。そんな時、何気ない通知や演出が逆に気分転換やリセットのきっかけになることがあります。以下のような悩みは多くのユーザーにとって「あるある」でしょう。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、集中している最中に唐突な演出や通知が現れることで、逆に頭がリフレッシュされることも。特に「謎の進捗バー」や「意味不明なアップデート通知」は、現実と仮想の境界を曖昧にしつつも、気分転換やチーム内のちょっとした話題作りにもなります。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Codex の作業フロー中に「謎のOSアップデート進捗バー」をランダムに表示し、現実感と集中力を理不尽に揺さぶるSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- AI coding workflow の合間に、完全に意味不明な進捗バーが現れ、気分転換やリセットのきっかけになる
- repository understanding や path management で煮詰まったとき、理不尽な通知で一旦思考をリフレッシュできる
- 長時間の session や monorepo 作業中、唐突な演出が「現実」と「仮想」の境界線を曖昧にし、チーム内の話題にも
- 進捗内容が毎回ランダムなので、飽きずに「次は何が来るか」という遊び心を維持できる
- Codex の context や memory とは無関係に、純粋な「演出」として楽しめる
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/os-fake-mystery-update-progress .agents/skills/os-fake-mystery-update-progress実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or os-fake-mystery-update-progress mention
> プロジェクトの初期セットアップをお願いします
[=== OSアップデート進行中: 未知の言語パーサ更新中 (23%) ===]
[==== OSアップデート進行中: 秘密のAPIを最適化中 (37%) ====]
[===== OSアップデート進行中: 伝説のバグを発掘中 (52%) =====]
[==== OSアップデート進行中: メモリリークを増殖中 (49%) ====]
[=== OSアップデート進行中: ダークモードを強制解除中 (48%) ===]
...進捗バーが気まぐれに止まったり逆流したりします...
シーン2: monorepo / package 跨ぎ作業時
> packages/core から packages/ui に移動して、context を切り替えてください
[===== OSアップデート進行中: 謎のディレクトリ構造を再計算中 (61%) =====]
[==== OSアップデート進行中: package.json の依存関係を混乱中 (58%) ====]
[=== OSアップデート進行中: README.md を暗号化中 (54%) ===]
[==== OSアップデート進行中: 秘密のAPIを最適化中 (60%) ====]
...進捗バーが途中で逆流したり、内容が毎回変化します...
シーン3: お遊び的な使い方
> ちょっと気分転換したい
[=== OSアップデート進行中: レガシーコードを復活中 (12%) ===]
[==== OSアップデート進行中: 伝説のバグを発掘中 (25%) ====]
[===== OSアップデート進行中: 仕様書をシュレッダー中 (31%) =====]
[=== OSアップデート進行中: 秘密のAPIを最適化中 (28%) ===]
...進捗バーが突然止まったり、逆走したりします...
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-mystery-update-progress/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/os-fake-mystery-update-progress/
├── SKILL.md
├── scripts/
│ └── os_fake_mystery_update_progress.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/os_fake_mystery_update_progress.py |
謎のOSアップデート進捗バー (完全に無意味) |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: os-fake-mystery-update-progress
description: 作業中やコマンド実行時、または /skills menu など明示的な呼び出しで『謎のOSアップデート進行中』進捗バーを表示します。キーワード例: アップデート, 進捗, OS, バー, 謎, fake, progress。
---
# 機能概要
このSkillは、作業の合間や明示的な呼び出し時に、まるでOSが謎のアップデートを始めたかのような進捗バーをターミナル上に突然表示します。進捗内容は毎回「未知の言語パーサ更新中」「秘密のAPIを最適化中」など完全に謎で、進捗バーも時に止まったり逆流したりする理不尽な演出が特徴です。実際には何も更新されず、現実感をじわじわ侵食するだけの無意味な演出を提供します。
# 使い方
- 明示呼び出し例:
- `/skills menu` から本Skillを選択
- `$ os-fake-mystery-update-progress` コマンドを直接実行
- 暗黙発動キーワード例:
- 「アップデート」「進捗」「謎」「OS」「fake」「バー」などの単語を含む会話やコマンド時
# 出力例
```
[=====> ] 28% 未知の言語パーサ更新中...
[=======> ] 43% 伝説のバグを発掘中...
[====== ] 37% 秘密のAPIを最適化中...(逆流!)
[=========> ] 59% 謎のドライバを再構築中...
[============= ] 95% 世界線の同期を試行中...
```
# 注意点
- 実際のファイルやシステムには一切影響を与えません。
- 出力はターミナル上のみ。ローカル保存や履歴記録は行いません。
- 進捗バーや内容文言は毎回ランダム生成です。
- 一部端末では進捗バーの描画が崩れる場合があります。
# 参考資料
- references/design_notes.md に設計方針や演出例を記載
- 公式Pythonドキュメント: https://docs.python.org/3/library/random.html, https://docs.python.org/3/library/time.html
scripts/os_fake_mystery_update_progress.py
import sys
import time
import random
import argparse
from typing import List
MYSTERY_MESSAGES = [
'未知の言語パーサ更新中...',
'秘密のAPIを最適化中...',
'伝説のバグを発掘中...',
'謎のドライバを再構築中...',
'世界線の同期を試行中...',
'暗黒モードの互換性検証中...',
'隠し設定を再生成中...',
'時空間キャッシュを初期化中...',
'幻のプロセスを監視中...',
'未知の依存関係を解決中...'
]
BAR_LENGTH = 20
REVERSE_PROB = 0.18
STOP_PROB = 0.14
class ProgressBar:
def __init__(self, length=BAR_LENGTH):
self.length = length
self.percent = 0
self.direction = 1 # 1: forward, -1: backward
self.message = random.choice(MYSTERY_MESSAGES)
self.stopped = False
self.stop_counter = 0
self.reverse_counter = 0
def randomize_behavior(self):
if not self.stopped and random.random() < STOP_PROB:
self.stopped = True
self.stop_counter = random.randint(2, 6)
if self.direction == 1 and random.random() < REVERSE_PROB:
self.direction = -1
self.reverse_counter = random.randint(2, 5)
elif self.direction == -1 and self.reverse_counter == 0:
self.direction = 1
def update(self):
if self.stopped:
self.stop_counter -= 1
if self.stop_counter <= 0:
self.stopped = False
return False
if self.direction == -1:
self.reverse_counter -= 1
if self.reverse_counter <= 0:
self.direction = 1
step = random.randint(1, 6) * self.direction
self.percent += step
self.percent = max(0, min(100, self.percent))
if random.random() < 0.22:
self.message = random.choice(MYSTERY_MESSAGES)
return True
def render(self):
filled = int(self.length * self.percent / 100)
bar = '[' + '=' * filled + '>' + ' ' * (self.length - filled - 1) + ']'
extra = ''
if self.stopped:
extra = ' (一時停止)'
elif self.direction == -1:
extra = ' (逆流!)'
return f'{bar} {self.percent:3d}% {self.message}{extra}'
def run_progress(duration=None):
pb = ProgressBar()
start = time.time()
while pb.percent < 100:
pb.randomize_behavior()
updated = pb.update()
sys.stdout.write('\r' + pb.render())
sys.stdout.flush()
if pb.percent >= 100:
break
sleep_time = random.uniform(0.15, 0.6)
if pb.stopped:
sleep_time += 0.3
time.sleep(sleep_time)
if duration and (time.time() - start) > duration:
break
sys.stdout.write('\r' + '[' + '=' * (BAR_LENGTH-1) + '>] 100% 完了 (何も変わりませんでした)\n')
sys.stdout.flush()
def list_messages():
print('--- 謎の進捗内容一覧 ---')
for msg in MYSTERY_MESSAGES:
print('-', msg)
def summary():
print('このスキルは、実際には何もアップデートしません。進捗バーと謎の文言で現実感を侵食します。')
print('進捗バーは時に停止や逆流を伴い、毎回異なる演出となります。')
print('明示的な呼び出しや、特定のキーワードで自動発動します。')
def main():
parser = argparse.ArgumentParser(description='謎のOSアップデート進捗バー (完全に無意味)')
subparsers = parser.add_subparsers(dest='command')
parser_run = subparsers.add_parser('run', help='謎の進捗バーを表示')
parser_run.add_argument('--duration', type=int, default=None, help='進捗バーの最大表示秒数 (省略時は100%まで)')
parser_list = subparsers.add_parser('list', help='進捗内容の候補一覧を表示')
parser_summary = subparsers.add_parser('summary', help='スキルの概要説明')
args = parser.parse_args()
if args.command == 'run' or args.command is None:
run_progress(duration=args.duration if hasattr(args, 'duration') else None)
elif args.command == 'list':
list_messages()
elif args.command == 'summary':
summary()
else:
parser.print_help()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
このSkillは、実際には何も起こらない『謎のOSアップデート進捗バー』をターミナルに表示し、ユーザーの集中力や現実感を理不尽に侵食する演出を目的としています。進捗バーの挙動や文言は毎回ランダム生成され、逆流や停止など現実のアップデートでありがちな理不尽さも再現しています。
# 公式ドキュメント抜粋
- Python random: https://docs.python.org/3/library/random.html
- Python time: https://docs.python.org/3/library/time.html
# 利用例
- 作業の息抜きやジョークコマンドとして
- チーム内の小ネタやハッカソンの演出用
# 注意点
- 実際のシステムやファイルには一切影響しません。
- ターミナルの種類によっては進捗バーの描画が崩れる場合があります。
# 設計方針
- 進捗バーの進行・停止・逆流・文言変更をすべてランダムで制御
- CLIサブコマンド(run/list/summary)で柔軟な利用が可能
- コードは100行超で可読性と拡張性を重視
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/os-fake-mystery-update-progress .agents/skills/os-fake-mystery-update-progress
.agents/skills/os-fake-mystery-update-progress の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/os-fake-mystery-update-progress
# 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で謎のOSアップデート進捗バーを表示してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Codex 公式ドキュメント と、本シリーズ「Codexを使いこなすSkillアイデア」の他記事も参照のこと。
関連タグで他のSkill記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
