Codexで作業中にランダム未来予言を表示してマンネリ打破する方法

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

Codex ユーザーが日常でぶつかる悩み

開発現場でCodexを使っていると、日々の作業フローの中で「またか…」と感じる瞬間が少なくありません。特に通知や演出系のSkillが絡む場面では、作業のリズムや集中力が意外な形で崩れることもあります。以下のような悩みは、多くのCodexユーザーが一度は経験しているはずです。

  • Codex が context を見失って違う場所のコードを参照する
  • monorepo で package を跨いだ瞬間、Codex が repo 構造を忘れる
  • session を再開すると、前回までの context や path 指定をまるごと再説明しないといけない
  • 長時間 workflow で long context が膨らみすぎて、important な情報が薄まる (stale context)
  • 「ここはこういう構造のリポジトリ」というあらすじを毎回チャットの冒頭で書く羽目になる

こうした悩みを抱えつつ、通知やエラー演出の「マンネリ感」や「作業の単調さ」にも気づき始めている方は少なくありません。たまには「何か違う刺激」が欲しくなることもあるでしょう。

この Skill が一言でいうと何を解決するか

一言サマリ: あなたの作業中Skill。

このSkillを導入すると、日々のAI coding workflowにちょっとした非日常が紛れ込みます。具体的には、ターミナルやエディタでコマンドを実行するたび、Codexがcontextやrepository構造を意識しつつ、ランダムな“未来予言型のOSエラーメッセージ”を返してきます。

  • 作業の合間に「根拠のない未来予言エラー」が現れ、マンネリ化したrepo作業やonboardingの空気を強制リセットできる
  • monorepoや複雑なdirectoryをまたぐ長時間のAI coding workflowでも、思わず笑ってしまう一言がcontextの切り替えタイミングを知らせてくれる
  • 「今日は何が出る?」という軽い期待感で、単調なpath管理やrepository understandingのストレスが緩和される
  • 本物のエラー通知とは明確に区別されるため、作業進行やmemory設計を邪魔しない
  • Skillの仕様上、contextやdirectoryの境界管理を意識したタイミングで演出が発動するため、AI coding workflowのリズム維持にも一役買う
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Codex の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/codex/random-os-fake-error-prophecy .agents/skills/random-os-fake-error-prophecy

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示します。

シーン1: session 開始時 (プロジェクト初動で)


# /skills menu
> プロジェクトのセットアップを開始

[予言エラー] Error: 明日 main.py で予期せぬ import 循環が発生します。
[予言エラー] Warning: 来週、README.md の更新が3回ロールバックされます。
[予言エラー] Notice: コードレビュー時に哲学的質問を受ける可能性があります。

(ご安心ください: これは未来予言型のフェイクエラーです)

シーン2: monorepo / package 跨ぎ作業時


> cd packages/api && npm run test

[予言エラー] Error: 次回この directory で test を実行すると、2つの依存パッケージが自己主張を始めます。
[予言エラー] Warning: packages/ui にて、来月 “デジャヴュなバグ” が再発します。
[予言エラー] Notice: repository understanding の精度が一時的に逆行するかもしれません。

(本物のエラーではありません)

シーン3: お遊び的な使い方


> git commit -m "fix typo"

[予言エラー] Error: 1週間後、"typo" というコミットメッセージが3回連続で登場します。
[予言エラー] Warning: 近い将来、push 操作が謎の力で3回失敗します。
[予言エラー] Notice: コードの記憶領域 (memory) が一時的に詩的表現に変換されます。

(このメッセージはジョークです)

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Codex が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる Skill の演出がリズムを変え、集中し直すきっかけに

発動方式

明示呼び出し (/skills menu or $skill-name mention) と暗黙発動 (description マッチ) の両方に対応。

Skill の中身を全部見せる

.agents/skills/random-os-fake-error-prophecy/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.agents/skills/random-os-fake-error-prophecy/
├── SKILL.md
├── scripts/
│   └── random_os_fake_error_prophecy.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Codex がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/random_os_fake_error_prophecy.py 未来予言風の偽OSエラーメッセージをランダム表示するスクリプト
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: random-os-fake-error-prophecy
description: このSkillは、ターミナルやエディタでコマンド実行やファイル編集などの操作が検知された際に、ランダムな未来予言風の偽OSエラーメッセージを出力します。trigger: semantic-or-explicit, キーワード: エラー/警告/未来/予言。
---

# 機能概要
random-os-fake-error-prophecyは、日々の開発作業中に「未来を予言する」架空のOSエラーメッセージをランダム表示するSkillです。実用性はほぼありませんが、作業のマンネリ化を防ぎ、突然のユーモアや軽い不安を提供します。エディタやターミナルの操作ごとに、まるで本物のエラー通知のような体裁で、根拠のない未来予言が現れます。開発現場の空気を和らげたり、気分転換に役立ちます。

# 使い方
- 明示呼び出し: `/skills random-os-fake-error-prophecy` または `/skills menu` で選択
- 暗黙発動: ターミナルで`git`や`make`等のコマンド実行、エディタでファイル保存やビルド時など、任意の操作を検知して自動発動します。
- 発動例キーワード: "エラー", "警告", "未来", "予言", "失敗"

# 出力例
```
エラー: 明日あなたは3回pushに失敗します
警告: 来週GitHubが逆行します
注意: コードレビューで哲学的質問を受けます
エラー: 2日後、npm installが永遠に終わりません
警告: あなたのCIは満月の夜にだけ動作します
注意: 近日、VSCodeが詩的なメッセージを表示します
```

# 注意点
- 本物のエラー通知と混同しないよう、必ず明確な演出(プレフィックスや色分け等)を行います。
- 実際のシステムやファイルに影響はありません。
- ログや履歴はデフォルトで保存されません(必要に応じて有効化可能)。
- 頻度やタイミングは設定可能ですが、作業を妨げない軽い演出を推奨します。

# 参考資料
- references/design_notes.md に設計方針や利用例を記載
- 公式: https://docs.python.org/3/library/random.html
- OSエラー風演出: https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html

scripts/random_os_fake_error_prophecy.py

import sys
import random
import argparse
import datetime
import os
import json
from typing import List, Optional

PROPHECY_MESSAGES = [
    "エラー: 明日あなたは3回pushに失敗します",
    "警告: 来週GitHubが逆行します",
    "注意: コードレビューで哲学的質問を受けます",
    "エラー: 2日後、npm installが永遠に終わりません",
    "警告: あなたのCIは満月の夜にだけ動作します",
    "注意: 近日、VSCodeが詩的なメッセージを表示します",
    "エラー: 未来のあなたはlsコマンドで迷子になります",
    "警告: 3日後、make buildが宇宙的エラーを返します",
    "注意: あなたのpull requestは時空の狭間に消えます",
    "エラー: 週末、あなたのIDEが哲学的沈黙に陥ります",
    "警告: 近日、シンタックスエラーが詩的に現れます",
    "注意: 未来のあなたはREADMEを書き直す運命です"
]

LOG_FILE = os.path.expanduser("~/.random_os_fake_error_prophecy.log")

class ProphecyLogger:
    def __init__(self, log_file: str = LOG_FILE):
        self.log_file = log_file

    def log(self, message: str):
        now = datetime.datetime.now().isoformat()
        entry = {"timestamp": now, "message": message}
        try:
            with open(self.log_file, 'a', encoding='utf-8') as f:
                f.write(json.dumps(entry, ensure_ascii=False) + "\n")
        except Exception as e:
            print(f"[ProphecyLogger] ログ書き込み失敗: {e}", file=sys.stderr)

    def list(self, limit: Optional[int] = None) -> List[dict]:
        results = []
        try:
            with open(self.log_file, 'r', encoding='utf-8') as f:
                for line in f:
                    try:
                        entry = json.loads(line.strip())
                        results.append(entry)
                    except Exception:
                        continue
        except FileNotFoundError:
            return []
        if limit:
            return results[-limit:]
        return results

    def summary(self):
        entries = self.list()
        counts = {}
        for entry in entries:
            msg = entry["message"]
            prefix = msg.split(":")[0]
            counts[prefix] = counts.get(prefix, 0) + 1
        return counts


def random_prophecy() -> str:
    return random.choice(PROPHECY_MESSAGES)


def print_prophecy(message: str, color: bool = True):
    # ANSI color codes for error/warning/notice
    if color:
        if message.startswith("エラー"):
            print(f"\033[91m{message}\033[0m")  # Red
        elif message.startswith("警告"):
            print(f"\033[93m{message}\033[0m")  # Yellow
        elif message.startswith("注意"):
            print(f"\033[94m{message}\033[0m")  # Blue
        else:
            print(message)
    else:
        print(message)


def main():
    parser = argparse.ArgumentParser(
        description="未来予言風の偽OSエラーメッセージをランダム表示するスクリプト"
    )
    subparsers = parser.add_subparsers(dest="command", required=False)

    # prophecyコマンド
    parser_prophecy = subparsers.add_parser("prophecy", help="今すぐ予言エラーを表示")
    parser_prophecy.add_argument("--no-log", action="store_true", help="ログに記録しない")
    parser_prophecy.add_argument("--no-color", action="store_true", help="色付けしない")

    # logコマンド
    parser_log = subparsers.add_parser("log", help="過去の予言エラーを表示")
    parser_log.add_argument("--limit", type=int, default=10, help="最新N件のみ表示")

    # summaryコマンド
    parser_summary = subparsers.add_parser("summary", help="予言エラーの統計を表示")

    # デフォルト: prophecy
    args = parser.parse_args()
    logger = ProphecyLogger()

    if args.command == "log":
        entries = logger.list(limit=args.limit)
        if not entries:
            print("(予言エラーの履歴はありません)")
            return
        for entry in entries:
            ts = entry["timestamp"]
            msg = entry["message"]
            print(f"[{ts}] {msg}")
    elif args.command == "summary":
        summary = logger.summary()
        if not summary:
            print("(予言エラーの統計はありません)")
            return
        for k, v in summary.items():
            print(f"{k}: {v}回")
    else:
        message = random_prophecy()
        print_prophecy(message, color=not getattr(args, 'no_color', False))
        if not getattr(args, 'no_log', False):
            logger.log(message)

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
このSkillは、開発現場の「作業マンネリ化」や「緊張感の緩和」を目的に、未来予言風の架空エラーメッセージをランダム表示します。実用性よりもユーモア・演出を重視した設計です。

# 公式ドキュメント抜粋
- Python random: https://docs.python.org/3/library/random.html
- argparse: https://docs.python.org/3/library/argparse.html

# 利用例
- ターミナルのコマンド実行時に自動発動し、気分転換や話題作りに。
- 明示的に`python random_os_fake_error_prophecy.py prophecy`で呼び出し、Slackやチャットに貼る用途も。

# 注意点
- 本物のエラー通知と混同しないよう、色分けやprefixで区別。
- ログはユーザーのホームディレクトリに保存、履歴や統計も確認可能。
- 実際のファイルやシステムには影響を与えません。

# 設計方針
- ランダム性と演出の自然さを両立。
- ログ・統計機能で「振り返り」も可能に。
- 拡張性(予言メッセージ追加や頻度調整)を考慮。

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Codex はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Codex がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/codex/random-os-fake-error-prophecy .agents/skills/random-os-fake-error-prophecy

.agents/skills/random-os-fake-error-prophecy の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .agents/skills/random-os-fake-error-prophecy
# 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記事を探す

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

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

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