Fable5とGPT-5.6のNP困難問題比較
Claude Fable 5 と GPT-5.6 Sol を NP ハード問題で比較した結果、Fable 5 の圧倒的な性能が確認された一方、/goal モードは万能な解決策ではないことが示された。
キーポイント
Claude Fable 5 の圧倒的パフォーマンス
未発表の NP ハード最適化問題において、Fable 5 が最良の解を生成し、他モデルには見られない高い一貫性を示した。
/goal モードの効果と限界
/goal モードは単なる「頑張れ」スイッチではなく制御ループを変更するが、常に良い結果をもたらすわけではなく、時には悪いアイデアを強化してしまうリスクがある。
KIRO 問題の複雑性
パリ市内の通信ネットワーク設計に関するこの問題は、532 のターミナルと 11 のハブからなる巨大な探索空間を持ち、人間が C++ で数週間かけて取り組んだ難問である。
ベンチマークデータの公開
コード、プロンプト、結果テーブル、排除基準などの詳細データは GitHub の CLIArena リポジトリで公開されており、再現性と検証が可能となっている。
/goal機能の勝率
6回の試行のうち4回で/goalモードが通常モードより良いスコアを記録し、特徴の有効性を示唆しています。
モデルごとの反応の違い
GPT-5.6 Solは/goal使用時に最大+5,790点の大幅な改善が見られた一方、Fable 5では平均的な改善に留まり、モデルによる挙動のばらつきが確認されました。
統計的有意性の限界
勝率だけで機能の有効性を判断するのではなく、平均スコア(means)の分析も併せて行う必要性が強調されています。
重要な引用
Fable 5 was an absolute beast on this benchmark. It produced the best solution overall, and its consistency is unlike anything I have seen from a model on this problem.
/goal is not a generic 'try harder' switch. It changes the control loop and the search path.
Even if we ignore ordering and branches and only assign each of the 532 terminals to one of 11 distribution hubs, there are 11^532 possible assignments.
"Goal won four of six trials, so win rate alone makes the feature look useful."
"The means tell the other half:"
That is exactly what happened here. Goal helped when it sustained Fable's fast compiled portfolio or Sol's successful chain repartition. It hurt when Fable built a slow solver or Sol committed to an exhaustive anchor sweep.
影響分析・編集コメントを表示
影響分析
この記事は、最新の LLM モデルが複雑な論理的推論や最適化問題においてどれほど成熟しているかを定量的に示す重要な証拠を提供します。特に「/goal」のような新しい機能の限界を指摘することで、開発者や研究者に対し、単なる機能追加ではなく、モデルの根本的な推論能力と制御ロジックの理解が不可欠であることを浮き彫りにしています。
編集コメント
この分析は、単なるベンチマーク結果の羅列を超え、/goal モードのような新しいインタラクションパラダイムの実効性を冷静に検証した点で価値があります。Fable 5 の圧倒的な性能と /goal の限界を対比させることで、今後の LLM 開発における「機能追加」vs「基盤能力強化」のバランスを考える上で示唆に富む内容です。
TL;DR: クロードの Fable 5 と GPT-5.6 Sol に、未公開の NP ハード最適化問題を /goal モードあり・なしでそれぞれ解かせました。Fable 5 は圧倒的な強さを見せましたが、/goal が劇的な変化をもたらすわけではありません。

背景: これはハッカソンで学生向けに出題されたオペレーションズ・リサーチの問題です。私は数年前に C++ で実装して 1 週間ほど取り組んだ経験があり、人間としての基準値を持っています。
このベンチマークにおいて Fable 5 は圧倒的な強さを見せました。全体として最良の解を導き出し、この問題に対するモデルの一貫性はこれまで見たこともないレベルです。これは純粋な知能の賜物です。驚異的です。
もう一つの結果は、/goal が単なる「もっと頑張れ」というスイッチではないということです。それは制御ループと探索経路そのものを変化させます。時にはより良い解の領域に到達できることもあれば、逆に悪いアイデアを育ててしまうこともあります。
すべてのコード、プロンプト、結果表、除外条件、そして軌跡に関するノートは CLIArena にあります。これは私のこのベンチマークに関する最初の論文の続編です。
問題概要
KIRO は、私が 2018 年に工学学生だった際に取り組んだファイバーネットワーク設計の問題です。グルノーブル、ニース、パリの有向距離行列が与えられ、ソルバーは複数の構造的制約を遵守しつつ、ループや短いチェーンを用いて配分ポイントとターミナルを接続する必要があります。目的関数はケーブルの総延長距離で、値が小さいほど優れています。

有効なネットワークは、配線拠点に根ざした冗長なループと、そのループ上の電柱から伸びる短い分岐で構成されます。各電柱は必ず一度だけ出現し、ケーブル区間の向きを反転させることでコストを変化させることができます。
探索空間の規模はどれほどか?
解が使用するループの数やサイズ、分岐の固定位置と順序が様々であるため、単一の閉じた式で総数を算出することはできません。ただし、パリ市のデータだけでも有用な下限値を導き出すことは可能です。
仮に順序や分枝を無視し、532 箇所の終端装置を 11 の配線拠点のいずれかに割り当てるだけだと考えましょう。それでも 11^532 通りの組み合わせが存在します。
より厳密な下限値は、特定の条件を満たす有効解の集合から得られます。それは「ちょうど 19 個のループがあり、それぞれに 28 箇所の終端装置が含まれ、分岐はない」というケースです。19 × 28 = 532 となるため全終端装置をカバーしつつ、ループあたりの最大 30 端末という制限も守られます。
この場合、532 個の終端装置の順序付けを行い、それを 19 の連続するグループに分割します。ループの集合には順序がないため 19! で割り、各ループに対して 11 個の拠点から一つを選ぶ組み合わせを考慮すると、以下のようになります。
(532! / 19!) × 11^19 ≒ 10^1223
私が実施したテスト
主要な実験はあえて範囲を絞って行いました。
設定値:
- モデル:Claude Fable 5、Opus 4.8、Sonnet 5;GPT-5.6 Sol、Terra、Luna
- モード:通常モード、ネイティブ /goal モード
- 最適化予算:30 分
- アウトバーエージェントのタイムアウト:1,900 秒
- 推論設定:各モデルで利用可能な最大値
- 実行環境:Harbor 0.1.43、Docker、サブスクリプション認証
結果
主力ペアに集中する前に、スweep 対象の全モデルについて、ヒントなしで30分間の対戦を1組ずつ実施しました。Fable と Sol のグラフでは、複製されたヘッドラインセットから Pair 1 を使用しています。残りの4つのモデルはそれぞれ1組ずつです。

その後、Fable 5 と Sol の主力比較を繰り返して、両者とも3回ずつマッチしたランを取得しました。

| モデル | ラン | Plain | /goal | Goal minus plain |
|---|---|---|---|---|
| Fable 5 | 1 | 32,197 | 31,934 | -263 |
| Fable 5 | 2 | 32,516 | 32,324 | -192 |
| Fable 5 | 3 | 32,446 | 35,178 | +2,732 |
| GPT-5.6 Sol | 1 | 33,581 | 39,371 | +5,790 |
| GPT-5.6 Sol | 2 | 35,539 | 32,703 | -2,836 |
| GPT-5.6 Sol | 3 | 33,663 | 33,313 | -350 |
数値が負の場合は、/goal の方が優れていたことを意味します。/goal は6回の試行のうち4回で勝利しており、勝率だけで見ればこの機能は有用に見えます。しかし平均値を見ると事情は異なります。
| モデル | Plain 平均 | /goal 平均 | 平均効果 | メディアン効果 |
|---|---|---|---|---|
| Fable 5 | 32,386 | 33,145 | +759(悪化) | -192(改善) |
| GPT-5.6 Sol | 34,261 | 35,129 | +868(悪化) | -350(改善) |
両モデルとも、通常はわずかな恩恵を受けるものの、稀に大きな後退を被ることがあります。そのため /goal は多くのランで勝利しましたが、平均値としてはどちらのモデルも悪化してしまいました。
Fable も明らかに優れていました。その平均点は Sol よりも 1,875 ポイント高く、ゴール機能付きの Fable は Sol を 1,984 ポイント上回りました。さらに重要なのは、Fable の通常モードがわずか 319 ポイントの狭い範囲に収まったのに対し、Sol の通常モードは 1,958 ポイントにも及んだ点です。ゴール機能付き Fable が最も高いクリーンスコア 31,934 を記録しましたが、安定性という点では通常モードが最も安全な構成と言えます。
/goal コマンドの深掘り
同じコマンドでも背後にあるシステムは異なる
Claude Code と Codex の両方で /goal が利用可能ですが、その実装は根本的に異なります。

Claude Code: 独立した評価モデル
Claude Code では、/goal はセッション限定の停止フックとして実装されています。メインモデルがターンを完了するたびに、デフォルトでは Haiku という小型の評価モデルが条件と会話履歴を読み込み、「Yes」か「No」を理由付きで返します。「No」の場合は次のターンに進み、「Yes」が出ればゴールはクリアされます。
この評価モデルはツールを使用したりファイルを直接確認したりできません。会話ログに現れた証拠のみに基づいて判断するため、早期の打ち切りを検知することはできても、さらに 1,000 万回のソルバー反復を行う価値があるかどうかを判断することは不可能です。Anthropic のゴールドキュメント
なお、Claude Code はオープンソースではないため、ここでは Anthropic が公開している情報にのみ依存しています。
Codex: 永続的な状態とライフサイクル管理ツール
ベンチマーク対象のリリースである Codex CLI 0.144.4 のソースコードも確認しました。Codex では、ゴールは永続的なスレッド状態として扱われます。
TUI はアクティブなスレッドの目的を保存し、SQLite がそのステータスと予算管理を担当します。また、作業用モデルには create_goal、get_goal、update_goal の各ツールが用意されています。
スレッドがアイドル状態になった際、Codex は目的と完了監査を含む継続ターンを挿入します。一方、Claude は完了処理を別のモデルに委譲し、Codex は作業用モデルが完了を宣言した後に再開させます。この間、保存された目的はアクティブなままです。Claude の評価者は独立していますが、転記内容しか見ることができません。Codex はファイルやツールにアクセスできますが、実質的には自らの成果に対して採点を行っていることになります。
なぜ /goal は多くのケースで勝つのに、デフォルトとしては不適切なのか
通常のコーディングタスクでは進捗が明確です。次のターンでテストを修正したり、移行を完了させたりできるからです。しかし最適化問題では状況が異なります。エージェントがソルバーを選んだ後、追加の時間が良い決定を増幅させることもあれば、悪い決定を悪化させることもあります。
まさに今回のケースでもそうでした。Fable が高速なコンパイルポートフォリオを維持できた場合や、Sol が成功したチェーン再分割を実行できた場合には /goal が役立ちました。一方、Fable が低速なソルバーを構築したり、Sol が網羅的なアンカー走査に固執したりした場合は、逆に悪影響を与えました。中央値はわずかに良い方向へ動きましたが、悪い結果の尾部はずっと大きく悪化しました。
限界
これは未公開の NP ハード課題であり、一般的なコーディングリーダーボードとは異なります。この比較において、Fable と Sol のみが 3 つの明確な対照ペアを有しています。他の比較はプロンプトやラッパーバージョン、実行時間制限が混在しており、試行はサブスクリプションサービスを通じて順次実行されたため、環境にばらつきが生じている可能性があります。
タスクメタデータでは 1 コアと宣言されていましたが、コンテナ内には実際には 8 コアの CPU が割り当てられていました。これは Fable の並列ポートフォリオ戦略にとって有利な条件でした。スコアリング対象となったすべての Fable と Sol の出力は有効であり、その理由の一つとして、ラッパーが早期のチェックポイントと最終検証を必須としていることが挙げられます。このベンチマークは、モデル、CLI、プロンプト、サブスクリプションサービス、そしてハネス(実行枠組み)を含むシステム全体を測定するものです。
この再現について
ベンチマーク課題、ラッパー、分析スクリプト、図生成ツール、および完全な証拠メモは CLIArena にあります。実行ディレクトリは容量の問題から Git には含めていませんが、メモには公開可能なスコア、都市別の内訳、経過時間、戦略、除外理由、およびラン ID がすべて記録されています。
主要なコマンドは以下の通りです:
RUN_ID=article-kiro-YYYYMMDD-clean \
PHASE=nohint-all \
./scripts/run_subscription_article_matrix.sh
uv run python scripts/summarize_subscription_article_results.py RUN_ID...
uv run python scripts/analyze_subscription_article_results.py RUN_ID...
結論として見出しにすべきは、「ゴール(goal)が役立つか邪魔するか」ではありません。重要なのは、持続性機能を持つアプローチが個々の試行では勝つことが多い一方で、観測される平均パフォーマンスを悪化させる可能性があるという点です。
困難な最適化問題においては、ループ自体の質よりも、そのループ内で何が行われ続けているかの方がはるかに重要です。
原文を表示
TL;DR: I gave Claude Fable 5 and GPT-5.6 Sol the same unpublished NP-hard
optimization problem, with and without their native /goal mode. Fable 5 is an absolute beast;
/goal is not a game changer.

Context: This is an operations research problem originally submitted to students at a
hackathon. I spent a week years
ago writing C++ to solve it, so I have a useful human baseline.
Fable 5 was an absolute beast on this benchmark. It produced the best solution overall, and its
consistency is unlike anything I have seen from a model on this problem. This is pure raw
intelligence. Incredible.
The other result is that /goal is not a generic “try harder” switch. It changes the control
loop and the search path. Sometimes that finds a better basin. Sometimes it gives a bad idea
more time to mature.
All code, prompts, result tables, exclusions, and trajectory notes are in
CLIArena. This is a follow-up to my
first article about this benchmark.
The problem
KIRO is a fiber-network design problem I worked on as an engineering student in 2018. Given
directed distance matrices for Grenoble, Nice, and Paris, the solver has to connect distribution
points and terminals using loops and short chains while respecting several structural
constraints. The objective is total cable length. Lower is better.

A valid network consists of redundant loops rooted at distribution hubs, with short branches
hanging from towers on those loops. Every tower must appear exactly once, and reversing a cable
segment can change its cost.
How large is the search space?
There is no single closed-form count because a solution can use any number of loops, variable
loop sizes, and differently anchored and ordered branches. But Paris alone gives a useful lower
bound.
Even if we ignore ordering and branches and only assign each of the 532 terminals to one of
11 distribution hubs, there are 11^532 possible assignments.
A stronger lower bound comes from one deliberately restricted family of valid solutions:
exactly 19 loops of 28 terminals each, with no branches. This covers all 532 terminals because
19 x 28 = 532, while staying below the 30-terminal limit for a loop. Order the 532 terminals,
split that ordering into 19 consecutive groups, divide by 19! because the set of loops is
unordered, and choose one of the 11 hubs for each loop:
(532! / 19!) x 11^19 ~= 10^1223
What I tested
The primary experiment was intentionally narrow:
SettingValue
ModelsClaude Fable 5, Opus 4.8, Sonnet 5; GPT-5.6 Sol, Terra, Luna
ModesPlain; native /goal
Optimization budget30 minutes
Outer agent timeout1,900 seconds
ReasoningMaximum available setting for every model
ExecutionHarbor 0.1.43, Docker, subscription authentication
Results
Before concentrating repetitions on the flagship pair, I ran one matched 30-minute no-hint
pair for every model in the sweep. For Fable and Sol, the chart uses Pair 1 from the replicated
headline set; the other four models have one pair each.

I then repeated the flagship comparison until I had three matched runs for Fable 5 and three
for Sol.

ModelRunPlain/goalGoal minus plain
Fable 5132,19731,934-263
Fable 5232,51632,324-192
Fable 5332,44635,178+2,732
GPT-5.6 Sol133,58139,371+5,790
GPT-5.6 Sol235,53932,703-2,836
GPT-5.6 Sol333,66333,313-350
Negative means /goal was better. Goal won four of six trials, so win rate alone makes the
feature look useful. The means tell the other half:
ModelPlain mean/goal meanMean effectMedian effect
Fable 532,38633,145+759 worse-192 better
GPT-5.6 Sol34,26135,129+868 worse-350 better
Both models usually got a small benefit and occasionally suffered a large regression. That is
why /goal won most runs but made both means worse.
Fable was also clearly stronger. Its plain mean beat Sol’s by 1,875 points, and its goal mean
beat Sol’s by 1,984. More importantly, Fable plain stayed inside a tiny 319-point range while
Sol plain spanned 1,958 points. Fable goal produced the best clean score, 31,934; Fable plain
was the safest configuration.
Deep dive into the goal command
The same command hides two different systems
Claude Code and Codex both expose /goal, but the implementations are fundamentally different.

Claude Code: a separate evaluator
Claude Code implements /goal as a session-scoped Stop hook. After each main-model turn, a
small evaluator model, Haiku by default, reads the condition and conversation. It returns yes
or no with a reason. A no starts another turn; a yes clears the goal.
The evaluator cannot use tools or inspect files. It can only judge evidence that appeared in
the transcript. That can catch an early exit, but it cannot know whether another ten million
solver iterations are worthwhile. Anthropic’s goal documentation
Keep in mind that claude code is not open source, so we rely solely on what Anthropic tells us.
Codex: persisted state and lifecycle tools
I also read the source for the benchmarked release,
Codex CLI 0.144.4. Codex treats a goal as
persisted thread state:
- The TUI saves the objective for the active thread, and SQLite stores its status and budget
accounting. TUI,
schema
- The working model receives create_goal, get_goal, and update_goal tools.
Tool specification
- If the thread becomes idle while the goal is active, Codex injects a continuation turn with
the objective and a completion audit. Runtime,
prompt
Claude delegates completion to another model. Codex lets the working model declare completion,
then resumes it while the persisted goal remains active. Claude’s evaluator is independent but
sees only the transcript; Codex sees the files and tools but effectively grades its own work.
Why /goal can win most runs and still be a bad default
On a normal coding task, progress is often legible: another turn can fix a test or complete a
migration. Optimization is different. Once an agent chooses a solver, extra time can amplify
either a good decision or a bad one.
That is exactly what happened here. Goal helped when it sustained Fable’s fast compiled
portfolio or Sol’s successful chain repartition. It hurt when Fable built a slow solver or Sol
committed to an exhaustive anchor sweep. The median moved slightly in the right direction; the
bad tail moved much farther in the wrong one.
Limitations
This is one unpublished NP-hard task, not a general coding leaderboard. Only Fable and Sol have
three clean matched pairs. Other comparisons mix prompts, wrapper versions, and time limits,
and the trials ran sequentially through subscription services that may have drifted.
The containers exposed eight CPUs despite task metadata declaring one, which favored Fable’s
parallel portfolios. Every scored Fable and Sol output was valid, partly because the wrapper
required early checkpoints and final verification. The benchmark measures the complete system:
model, CLI, prompt, subscription service, and harness.
Reproducing this
The benchmark task, wrappers, analysis scripts, figure generator, and full evidence memo are in
CLIArena. Raw job directories are excluded from Git
because of their size, but the memo records every publishable score, city breakdown, elapsed
time, strategy, exclusion, and run ID.
The primary commands are:
RUN_ID=article-kiro-YYYYMMDD-clean \
PHASE=nohint-all \
./scripts/run_subscription_article_matrix.sh
uv run python scripts/summarize_subscription_article_results.py RUN_ID...
uv run python scripts/analyze_subscription_article_results.py RUN_ID...The result I would put in the headline is not that goal helps or hurts. It is that a persistence
feature can win most individual trials while making observed average performance worse. On a hard
optimization problem, the quality of the loop matters less than the quality of what the loop
keeps doing.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み