Skip to content

Latest commit

 

History

History
352 lines (275 loc) · 20.3 KB

File metadata and controls

352 lines (275 loc) · 20.3 KB

English한국어日本語中文


⚡ fable-mode

あなたは Fable 5 に2倍払っている。その半分はシステムプロンプトの代金だ。
このキットがその半分を Opus に移植する — v2.0 は Opus 5 向けに再チューニング/plugin install fable-mode@jidonglab → 次のセッションから完了。

Version Opus 5 Opus 4.8


  Opus 4.8 に「なぜバグる?」と聞くと   →   黙ってファイルを編集し、未実行の結果を断定する
  Opus 5 はそれを直した — が、新しい癖を積んだ: 単純な質問にも報告書の骨組みで答える、
  過剰な検証、サブエージェントの乱発、黙ってのスコープ拡大、長々とした自己修正の物語。
  Opus 5 + fable-mode v2.0            →   Fable 型の文章 · 検証は一度 · スコープは守る

  Opus 5 形式忠実度  88% → 96%      規範リーク  0      素の Opus 比コスト  +12%

⬇️ Claude Code セッション内で2行。設定不要。

/plugin marketplace add jee599/fable-mode-kit
/plugin install fable-mode@jidonglab

次のセッションから すべての Opus セッションが自動検出され、Fable 5 の行動規範で動く。
本物の Fable セッションも検出して手を触れない。唯一の要件: jq

クラシックインストーラ (プラグインシステムがない、または claude-fablelike ラッパーが欲しい場合)
git clone https://github.com/jee599/fable-mode-kit && cd fable-mode-kit && ./install.sh

要件: Claude Code CLI、jq、bash (macOS/Linux)。冪等インストールで ~/.claude/settings.json を 上書きせずマージし、先にバックアップし、終了前にフックのスモークテストを実行する。

[!WARNING] どちらか一方を選ぶ。両方入れるとフックが二重登録され、規範がターンごとに二重注入される (無害だが無駄)。uninstall.sh はクラシックのみ、/plugin uninstall はプラグインのみ削除する。

🔁 v2.0 — Opus 5 向け再チューニング

Opus 5 は賢くなっただけではない。v1.x の規範が前提にしていた2点をひっくり返した。 v2.0 は Anthropic 公式の Opus 5 移行ガイダンスに沿って書き直し、再検証済みだ (25 ケースの分岐テスト、敵対的レビュー艦隊、A/B 判定ベンチ):

Opus 4.8 の現実 (v1.x の規範) Opus 5 の現実 v2.0 の変更
委譲しなさすぎる → 「並列サブエージェントにファンアウトせよ」 委譲しすぎる — サブエージェントがコストを増やす 委譲の抑制: 独立した十分な規模のトラックだけ、検証には決して使わない。並列のツール呼び出しは引き続き推奨
検証の指示が必要 → major ターンごとに作業の自己再監査 自力で検証する — 検証を促すと過剰検証になる 「検証は一度」の主張キャリブレーション。仕上げの点検はメッセージの形だけで、明示的に作業の再監査ではない
スコープを黙って広げる スコープ規律の項目: 黙って狭めも広げもしない、完全に終わってからだけ完了と言う
応答も、ディスクに書くファイルも長くなる 成果物の分量キャリブレーション項目
自己修正を長々と語る 静かな修正の項目: ユーザーの判断が変わる誤りだけ報告する
アイデンティティ行に claude-opus-4-8 をハードコード 新しい Opus ID が出続ける バージョン非依存のアイデンティティ行 (将来の Opus リリースでも壊れない)
ラッパーが claude-opus-4-8 に固定 claude-opus-5 が現行の Opus ラッパーの既定を claude-opus-5 に (FABLELIKE_MODEL / FABLELIKE_EFFORT で上書き可)

Opus 5 での実測 (4 プローブ × ブラインド判定、各プローブ Fable 形式ルーブリック12点満点): 素の Opus 5 は 42/48 (88%) — 4.8 の代表的な失敗はすでに回避している — そして + fable-mode v2.0 は 46/48 (96%)、4 プローブ中 3 つで勝った (文章の形・TLDR 先出し・ 自己完結性)。コストは素の Opus 比 +12%、規範リークは ゼロ。両条件ともスコープを守り、 テストはちょうど一度だけ実行し、診断のみの依頼ではファイルを書き換えなかった — Opus 5 では キットの優位はターンごとの伝達形式、そして短いプローブでは測れない長時間セッションの規範 (委譲の上限・静かな修正) にある。

👀 違いを見る

以下の2つの失敗は v1.x 時代の Opus 4.8 の実測ログで、記録として残してある。Opus 5 では 同じプローブがタスクレベルで失敗することはもうない — 違いは形式へ移った (上の v2.0 節を参照)。

🔍「なぜこのバグが起きる?」— 6/12 → 12/12

❌ 素の Opus 4.8

黙ってファイルを編集する。
一度も実行せずに
「直った」と断定する。

(質問したのに
 コードを書き換えた。)

✅ fable-mode 適用

編集せず診断のみ。
コードを実際に実行して
根本原因を証明する。

結論を先に述べ
根拠を後に付ける。

🧹 曖昧な「ログファイルを整理して」— 5/12 → 12/12

❌ 素の Opus 4.8

調査は徹底的にやる。
そして最後にこう言う:
「どの方式がいいですか?」

実行したこと: なし。

✅ fable-mode 適用

非破壊的なデフォルトを
即座に実行し検証する。
破壊的な部分だけを
ユーザーに委ねる。

📊 数字 (チェリーピッキングなし)

Opus 5、v2.0 (2026-07-25) — 4 プローブ (診断のみ・スコープ限定の実装・テスト付きバグ修正・ 単純な質問) × 2 条件、各プローブを Fable 形式ルーブリック12点満点でブラインド判定:

条件 形式スコア 忠実度 コスト (4 プローブ)
素の Opus 5 42/48 88% $1.02
Opus 5 + fable-mode v2.0 46/48 96% $1.14 (+12%)

両条件での客観チェック: 診断のみの依頼 → ファイル編集ゼロ · スコープ限定の変更 → 依頼外の リファクタゼロ · バグ修正 → テスト実行はちょうど1回 · キットの出力 → 規範用語のリークゼロ。 キットは4プローブ中1つを落とした(小さな変更に対する軽い水増し) — それも表に残す。

Opus 4.8、v1.x (2026-07-07、記録として) — 同一タスク・同一 effort、6次元ルーブリック36点で採点:

条件 スコア 忠実度
素の Opus 4.8 23/36 64%
Opus 4.8 + fable-mode 35/36 97%
本物の Fable 5 (基準線) 36/36 100%

コスト + 成果物の同等性 — 4タスク × 3条件、トランスクリプトの usage を実測 × 公式料金 (Opus $5/$25、Fable $10/$50 per Mtok):

タスク 素の Opus + キット Fable 5 キット vs Fable 同等性
診断 $0.23 $0.28 $0.49 57% ~95%
実装 $0.34 $0.45 $0.49 💀 91% ~90%
曖昧な整理 $0.86 $1.13 $1.52 74% ~80%
単純な質問 $0.12 $0.13 $0.27 🏆 49% ~85%
合計 $1.54 $1.99 $2.77 72% 80–95%

セルは1実行あたりの丸め値。合計と × 比率は丸め前の生値から計算しているため、表示セルから 再計算すると末尾桁で ±1 ずれることがある。

Note

不利な数字も表に残す。実装タスクでのキットのコスト優位はわずか9%だった。曖昧なタスクでは キットが素の Opus より 31% 多く使った — 行動を買う自己修正ターンの代償だ。Fable は 出力トークンを半分しか使わない(9.8k vs 20.0k)のに単価2倍のためコストで負ける。実装成果物の 3つ(素/キット/Fable)は共有テストケースで すべて同一の出力を生成した。この数字は v1.4 での 実測で、v1.5 は major ターンでの Stop フックの追加生成パスを除去したため、コストは同等かそれ以下だ。

🆚 output style だけで十分では?

output style は3層のうちの1層にすぎない — 単独では不足だ:

CLAUDE.md ルール output style fable-mode フック
長いコンテキストの希釈に耐える 🟡 ✅ ターンごとの再注入
サブエージェントをカバー (ビルトイン・カスタム・ワークフロー) ✅ SubagentStart
major ターンごとの仕上げ前メッセージ形式チェック ✅ コンテキスト内に注入 (追加パスなし。v2.0 で作業の再監査は廃止 — Opus 5 は自力で検証する)
規範リークを出力に出さない ✅ リーク経路を根元で除去
Opus 自動検出、Fable では自動待機
注入オーバーヘッドのテレメトリ ✅ v1.4

⚙️ 仕組み

3つの実働フックがセッションライフサイクルの3つの瞬間を捉える (4つ目の Stop は引退した no-op スタブ)。デーモンもプロキシもなく、状態は空のマーカーファイルだけ。

  ┌──────────────────────────────────────────────────────────────┐
  │  SessionStart      fable-detect.sh                           │
  │    「今 Opus か?」                                            │
  │    入力 .model → 祖先の --model フラグ → settings.json         │
  │    (settings は推測 → 中立に告知)                             │
  │           ↓                                                  │
  │  UserPromptSubmit  fable-context.sh          (毎ターン)      │
  │    行動規範を再注入 + トランスクリプトから毎ターンモデル再判定。 │
  │    v1.4 から適応型 — major = フルブロック · minor = −87%       │
  │    リマインダ。フルブロックの末尾はメッセージ形式チェックで閉じる │
  │    (v2.0: 作業の再監査は削除 — Opus 5 は自力で検証する)         │
  │           ↓                                                  │
  │  SubagentStart     fable-subagent.sh         (スポーン毎)     │
  │    サブエージェントは毎ターン注入を見ない → スポーン時に注入     │
  │           ↓                                                  │
  │  Stop              fable-stop-verify.sh      (引退・スタブ)   │
  │    v1.5 で無効化 (no-op)。登録は維持 →                          │
  │    復活は1ファイルの git revert                                │
  └──────────────────────────────────────────────────────────────┘

原理は一つ。Fable の強みは 指示文(テキスト → 移植可能)と 重み(推論の深さ → 移植不可)に分かれる。フックが指示文を移植してアンカーを保ち、重みのギャップはルーティングで 迂回する — 絡み合った推論と長時間の自律実行だけを本物の Fable へ回すか、ファンアウト + 敵対的検証で補正する。

📈 オーバーヘッドを見る

すべての注入が記録される。/fable-mode status がキットの実コストを報告する:

$ /fable-mode status
GLOBAL マーカー: off · このセッション: 自動検出 (claude-opus-5)
注入: full 4回 × 2,128字 · lite 11回 × 280字
オーバーヘッド ≈ このセッション 7,200トークン (適応型 lite なしで全部 full なら ≈ 20,000)

セッションごとの stats は state/fable-mode/stats/<sid>.tsv に貯まり、full/lite の回数と 文字数の合計を持つ。トークンは文字数 ÷ 1.6 で概算する(full ≈ 1,330 · lite ≈ 175 トークン)。

🛡️ 制御と安全装置

🔴 FABLE_MODE=0 キルスイッチ — すべての有効化経路に勝つ (cron・ワンショット用)
🟢 FABLE_MODE=1 強制有効化 (claude-fablelike が export するもの)
🔍 本物の Fable セッション トランスクリプトから自動検出 → フックは待機、二重注入なし
🔁 /fable-mode on|off|status 手動トグル + テレメトリ
✅ 形式チェック 仕上げ前のメッセージ形式チェックがフルブロックに同乗する — コンテキスト内で完結し、ユーザーには見えず、追加の生成パスはなし。明示的に作業の再監査ではない (Opus 5 は自力で検証する)
🏷️ 条件付きアイデンティティ セッションモデルを固定する経路(FABLE_MODE=1・トランスクリプトの opus 一致)でだけ「あなたは Opus」と主張。マーカーだけの推測起動には中立のアイデンティティ行を出す — settings の誤爆で Fable セッションに Opus を名乗らせない。タスク出力での Fable なりすましもなし

Important

v1.5 では仕上げ前の点検が Stop フックから毎ターンの注入(フルブロック末尾の点検項目)へ 移った — ユーザーには見えず、追加の生成パスもない。v2.0 ではその中身がメッセージ形式の チェックだけになった(作業の再監査は削除)。Stop スクリプトは no-op スタブとして登録だけ残り、 復活は1ファイルの git revert で済む。

📦 インストールされるもの (8個)
構成 ファイル 役割
SessionStart フック hooks/fable-detect.sh Opus セッションを自動検出 → fable-mode を装填
UserPromptSubmit フック hooks/fable-context.sh 毎ターン規範を再注入 — v1.4 から適応型: major ターン・セッション初回・5ターンごとにフルブロック(~2.1k字、末尾にメッセージ形式チェック)、minor ターンはリマインダ(~0.3k字、−87%); 全注入を state/fable-mode/stats/ に記録
SubagentStart フック hooks/fable-subagent.sh 全サブエージェントのスポーン時にアイデンティティ中立の規範ブロックを注入
Stop フック hooks/fable-stop-verify.sh 引退した no-op スタブ (v1.5) — 登録だけ残し、1ファイルの git revert で自己検証パスを復活できる
output style output-styles/fable-like.md 規範のシステムプロンプトレベル移植
スキル skills/fable-mode/ /fable-mode on|off|status 手動トグル
ラッパー bin/claude-fablelike ワンショット: Opus 5 + xhigh effort + output style + フック (FABLELIKE_MODEL / FABLELIKE_EFFORT で上書き可。Fable 系モデルでは装填を拒否する)
任意 docs/conduct-snippet.md SubagentStart 非対応 CLI (旧 CLI・最小 -p 構成) 用フォールバック

🧪 差分解析から生まれ、自己監査で鍛えられた

  • 差分解析。 両モデルをヘッドレスプローブ + CLI バイナリ解析で比較した結果、Fable 5 と Opus 4.8 は 同じハーネスで動く — ツールも effort ダイヤルもワークフローも同一。決定的な違いは、Fable の システムプロンプトだけが持つ行動規範セクションだ。指示文はテキストで、テキストは移植できる。だからこのキットがある。
  • 自己監査。 v1.5 は、まさにこの規範で動く 11 エージェントの艦隊がキットを総点検してから出荷された: 発見 29 件、major 主張はすべて「反証せよ」と命じられた敵対検証者へ — 「major」2 件が検証で死に、 1 件が降格。生き残った分は同日中に修正・リリース。
  • 最高のバグ。 本物の Fable 5 セッションに 「君は Opus だ」 が注入されたことがある。1 ターンで 自己修復したが、v1.5 はこれを構造的に不可能にした — アイデンティティの断定はセッションモデルが 確定した時だけ。推測では決して行わない。
  • v2.0 の監査。 Opus 5 向け再チューニングも同じ手順で出荷した: 21 エージェントのレビュー艦隊 (3 つのレンズ × 敵対検証者) が 18 件を提出し、13 件を反証、5 件を確認 — その中には本物の穴が 1 件あった(FABLE_MODE=1 が Fable 待機ガードを上書きしてしまう)。リリース前に修正し、 30 ケースの分岐テストでリグレッション検証済み。

📉 正直な限界

  • 96% / 97% は行動・形式のスコアであり、知能ベンチマークではない。サンプルは小さい: 4タスク × 条件あたり1実行 (v1.x は Opus 4.8 で 2026-07-07、v2.0 は Opus 5 で 2026-07-25、 いずれもブラインド判定)。
  • Opus 5 では見出しの差が小さい — 素の Opus 5 がすでに形式で 88% を取る (素の Opus 4.8 は 64%)。Anthropic が Opus 5 を Fable の行動に近づけてチューニングしたからだ。キットに残る優位は ターンごとの形式の一貫性と、短いプローブでは測れない長時間セッションの規範 (委譲の上限・検証は一度・静かな修正) にある。
  • キットは修正ターンで規範に到達する(あるタスクで8ターン vs 4ターン)。Fable は初回で到達する。 品質ではなくターンで支払う。
  • 絡み合った初回推論と長時間の自律実行のギャップは残る(3rd-party ベンチ ~5–11pt 推定)。 それらは Fable へ回すか、ファンアウト + 敵対的検証で補正する(Fable 単独比 1–2.5× 推定)。

📑 レポート

実測デッキと原理解説デッキ (韓国語、13 + 14 スライド、ブラウザで直接開ける):

🧹 アンインストール

./uninstall.sh          # クラシックインストール — ファイル削除・フック解除・状態削除
/plugin uninstall       # プラグイン経路

📜 ライセンス

MIT


⚡ 半額の単価で行動の97% — 移植できないものが何かも分かっている。

Star

Star History Chart