Codex ユーザーが日常でぶつかる悩み
AIコーディングエージェントとしての Codex を使っていると、日々の開発フローの中で「ちょっとした気分転換」や「リズムの切り替え」が欲しくなる瞬間が意外と多いものです。特に長時間の session や複雑な monorepo での作業が続くと、集中力が切れてしまったり、同じ context の繰り返しで作業が単調になりがちです。そんな時、思わず「なんで今!?」とツッコミたくなるような演出が、逆に場の空気を変えてくれることもあります。
- Codex が context を見失って違う場所のコードを参照する
- monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
- session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
- 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
- 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる
また、通知・演出・OS連携系の Skill をうまく活用できていないと、作業のリズムが単調になりがちで「何か面白いアクセントがあれば…」と感じる人も少なくありません。
この Skill が一言でいうと何を解決するか
一言サマリ: このスキルは、Codex の日常作業に「謎のOS復元ウィンドウ」という遊び心を突然差し込むSkill。
もう少し具体化すると、このSkillを入れることで以下のような状態になる:
- 作業の合間や集中が切れた瞬間に、ランダムなタイミングで「OSシステム復元進捗ウィンドウ」が現れ、場の空気を一変できる
- 進捗バーやテキストが毎回ランダムで、単調な workflow に予測不能なアクセントが加わる
- 実害ゼロで「何も起きない」ので、context や repo 構造を壊さずに気分転換ができる
- 通知・演出系 Skill の活用例として、onboarding や session 再開時のアイスブレイクにも使える
- Codex の AI coding workflow に「遊び」を持ち込むことで、長時間作業のストレス軽減やチームの話題作りに貢献
GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。
npx degit aazutaku/ai-note/codex/random-os-sudden-fake-system-restore .agents/skills/random-os-sudden-fake-system-restore実行したらこうなる (3つの利用シーン)
使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。
シーン1: session 開始時 (プロジェクト初動で)
# /skills menu or random-os-sudden-fake-system-restore
[OS: システム復元]
--------------------------
進捗: 37%
謎の変更を元に戻しています...
[パス: /Users/you/projects/awesome-repo/]
--------------------------
ヒント: システムの気分調整中。お待ちください。
(進捗バーがランダムに増減)
進捗: 89%
進捗: 12%
進捗: 100%
[復元完了] 何も変わりませんでした。
シーン2: monorepo / package 跨ぎ作業時
> 移動: packages/api/ から packages/ui/ へ
[OS: システム復元]
--------------------------
進捗: 52%
OSの気分転換中です...
[パス: /Users/you/projects/monorepo/packages/ui/]
--------------------------
進捗: 13%
進捗: 76%
進捗: 100%
[復元完了] 何も起きませんでした。
シーン3: お遊び的な使い方
> ちょっと休憩したい
[OS: システム復元]
--------------------------
進捗: 5%
謎のファイル構造を再構築中...
[パス: /Users/you/projects/fun-project/]
--------------------------
進捗: 62%
進捗: 99%
進捗: 7%
進捗: 100%
[復元完了] 気分がリフレッシュされました(気のせい)。
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/random-os-sudden-fake-system-restore/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。
.agents/skills/random-os-sudden-fake-system-restore/
├── SKILL.md
├── scripts/
│ └── fake_system_restore.py
└── references/
└── design_notes.md
各ファイルの役割
| ファイル | 役割 |
|---|---|
SKILL.md |
Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します |
scripts/fake_system_restore.py |
謎のOSシステム復元進捗ウィンドウをフェイク表示するスクリプト |
references/design_notes.md |
概要 をまとめた参考資料 |
SKILL.md
---
name: random-os-sudden-fake-system-restore
description: このSkillは、作業中や長時間のセッション時、または「復元」「システム」「進捗」などのキーワードが会話やコマンドに現れた際に、突如“フェイクOS復元進捗ウィンドウ”を演出します。明示的な呼び出しやメニュー選択でも発動可能です。
---
# 機能概要
このSkillは、ユーザーが作業に集中している最中や、会話内で「復元」「システム」「進捗」などの単語が出現した際に、突如として“謎のOSシステム復元進捗ウィンドウ”を模した演出を表示します。進捗バーやステータスメッセージは毎回ランダム生成され、「謎の変更を元に戻しています」「OSの気分調整中」などのユーモラスなテキストとともに進行します。復元完了後も実際のシステムには何も影響を与えません。作業の緊張感や単調さを一瞬でカオスに変える、遊び心満載のスキルです。
# 使い方
- 明示呼び出し: `/skills menu` から「random-os-sudden-fake-system-restore」を選択、または `$random-os-sudden-fake-system-restore` とメンション
- 暗黙発動: 会話やコマンド内に「復元」「システム」「進捗」「リセット」などのキーワードが含まれている場合、自動的に進捗ウィンドウが表示されます
# 出力例
```
[OSシステム復元ツール]
-----------------------------
進捗: 37% | 謎の変更を元に戻しています...
進捗: 62% | OSの気分調整中...
進捗: 85% | 不明なファイルを復元中...
進捗: 100% | システム復元完了(何も起きませんでした)
-----------------------------
```
# 注意点
- このSkillは完全なフェイク演出であり、実際のシステムやファイルには一切変更を加えません。
- ローカル保存や履歴への記録は行われません。
- 一部の環境(ターミナル以外や特殊なUI)では表示が崩れる場合があります。
- 実際のシステム復元機能とは一切関係ありません。
# 参考資料
- [Python公式ドキュメント](https://docs.python.org/ja/3/library/random.html)
- [OS風UI演出サンプル](https://github.com/willmcgugan/rich)
- 詳細な設計方針や応用例は references/ 以下を参照してください。
scripts/fake_system_restore.py
import argparse
import random
import sys
import time
from typing import List
RESTORE_MESSAGES = [
"謎の変更を元に戻しています...",
"OSの気分調整中...",
"不明なファイルを復元中...",
"レジストリの気まぐれを修正中...",
"システムの気分転換を実施中...",
"意味不明なエラーを解決中...",
"不可視ファイルを復元中...",
"進捗バーの色を調整中...",
"謎のプロセスを再起動中...",
"仮想メモリのご機嫌を確認中...",
"バックグラウンドで何かしています...",
"システムのやる気を回復中..."
]
COMPLETE_MESSAGE = "システム復元完了(何も起きませんでした)"
def generate_progress_steps(min_steps=8, max_steps=20) -> List[int]:
steps = random.randint(min_steps, max_steps)
progress_points = sorted(random.sample(range(5, 100), steps - 1))
progress_points.append(100)
return progress_points
def pick_random_message() -> str:
return random.choice(RESTORE_MESSAGES)
def print_restore_header():
print("[OSシステム復元ツール]")
print("-----------------------------")
def print_restore_footer():
print("-----------------------------")
def simulate_restore(progress_delay=0.6, message_delay=0.3):
print_restore_header()
progress_steps = generate_progress_steps()
last_progress = 0
for progress in progress_steps:
message = pick_random_message()
bar = progress_bar(progress)
sys.stdout.write(f"\r進捗: {progress:3d}% {bar} | {message} ")
sys.stdout.flush()
time.sleep(random.uniform(progress_delay * 0.5, progress_delay * 1.2))
sys.stdout.write("\n")
time.sleep(random.uniform(message_delay * 0.5, message_delay * 1.5))
last_progress = progress
sys.stdout.write(f"進捗: 100% | {COMPLETE_MESSAGE}\n")
print_restore_footer()
def progress_bar(progress: int, width: int = 24) -> str:
filled = int(width * progress / 100)
return "[" + "#" * filled + "-" * (width - filled) + "]"
def handle_log(args):
print("[LOG] フェイク復元進捗を記録します (実際には何も保存されません)")
simulate_restore()
def handle_list(args):
print("[LIST] 過去のフェイク復元履歴 (履歴はありません)")
print("(このSkillは履歴保存機能を持ちません)")
def handle_summary(args):
print("[SUMMARY] フェイク復元進捗のサマリー")
print("全てランダム生成・記録なし・本物の復元ではありません")
def main():
parser = argparse.ArgumentParser(
description="謎のOSシステム復元進捗ウィンドウをフェイク表示するスクリプト"
)
subparsers = parser.add_subparsers(dest="command", help="サブコマンド")
parser_log = subparsers.add_parser("log", help="フェイク復元進捗を表示")
parser_log.set_defaults(func=handle_log)
parser_list = subparsers.add_parser("list", help="履歴一覧 (機能しません)")
parser_list.set_defaults(func=handle_list)
parser_summary = subparsers.add_parser("summary", help="サマリー表示")
parser_summary.set_defaults(func=handle_summary)
args = parser.parse_args()
if hasattr(args, 'func'):
args.func(args)
else:
# デフォルト動作: フェイク復元進捗を表示
simulate_restore()
if __name__ == '__main__':
main()
references/design_notes.md
# 概要
本Skillは、OSのシステム復元や進捗バーの“本物らしさ”と“フェイク感”を両立させた演出ツールです。ユーザーの作業中や特定キーワード検知時に、完全に無害な進捗ウィンドウを出現させ、場の空気を和ませたり、意図的に混乱を演出する用途で設計されています。
# 公式ドキュメント抜粋
- [Python random](https://docs.python.org/ja/3/library/random.html): 進捗やメッセージのランダム化に利用
- [argparse](https://docs.python.org/ja/3/library/argparse.html): CLIインターフェースの実装
# 利用例
- 長時間のコーディングや会議の合間に“謎の復元”を挟み、場を和ませる
- チームメンバーをちょっとだけ驚かせる
- システム管理者ごっこや演出用途
# 注意点
- 本Skillは実際のファイルやシステムには一切影響を与えません
- 履歴やログも残りません
- 本物の復元作業と誤認しないよう注意
# 設計方針
- 進捗率やメッセージは毎回完全ランダム
- CLIサブコマンド(log/list/summary)で柔軟な演出
- シンプルな依存関係でどこでも動作
導入手順
このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。
1. 前提
- Node.js v16 以上 (
degit実行に必要) - Codex がローカルで動いていること
2. degit でフォルダ取得
プロジェクトのルートで以下のコマンドを実行します。
npx degit aazutaku/ai-note/codex/random-os-sudden-fake-system-restore .agents/skills/random-os-sudden-fake-system-restore
.agents/skills/random-os-sudden-fake-system-restore の中に SKILL.md / scripts/ / references/ / README.md が展開されます。
3. ファイル配置確認
ls .agents/skills/random-os-sudden-fake-system-restore
# 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記事を探す
本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!
