{"slug": "fable-5-vs-gpt-5-6-sol-on-an-np-hard-problem-does-goal-help", "title": "Fable 5 vs. GPT-5.6 Sol on an NP-Hard Problem: Does /goal help?", "summary": "Claude Fable 5 outperformed GPT-5.6 Sol on an NP-hard fiber-network optimization problem, achieving the best solution overall with superior consistency. The native /goal mode showed mixed results, improving performance in four of six trials but increasing variance, with Fable 5's best /goal run reaching 31,934 versus its plain best of 32,197.", "body_md": "[Blog](/blog)\n\n# Fable 5 vs. GPT-5.6 Sol on an NP-Hard Problem: Does /goal Help?\n\n**TL;DR:** I gave Claude Fable 5 and GPT-5.6 Sol the same unpublished NP-hard\noptimization problem, with and without their native `/goal`\n\nmode. Fable 5 is an absolute beast;\n`/goal`\n\nis not a game changer.\n\n**Context:** This is an operations research problem originally submitted to students at a\nhackathon. I spent a week years\nago writing C++ to solve it, so I have a useful human baseline.\n\nFable 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.\n\nThe other result is that `/goal`\n\nis not a generic “try harder” switch. It changes the control\nloop and the search path. Sometimes that finds a better basin. Sometimes it gives a bad idea\nmore time to mature.\n\nAll code, prompts, result tables, exclusions, and trajectory notes are in\n[CLIArena](https://github.com/charles-azam/CLIArena). This is a follow-up to my\n[first article about this benchmark](https://charlesazam.com/blog/kiro-benchmark/).\n\n## The problem\n\nKIRO 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.\n\nA 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.\n\n### How large is the search space?\n\nThere 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.\n\nEven if we ignore ordering and branches and only assign each of the 532 terminals to one of\n11 distribution hubs, there are `11^532`\n\npossible assignments.\n\nA stronger lower bound comes from one deliberately restricted family of valid solutions:\nexactly 19 loops of 28 terminals each, with no branches. This covers all 532 terminals because\n`19 x 28 = 532`\n\n, while staying below the 30-terminal limit for a loop. Order the 532 terminals,\nsplit that ordering into 19 consecutive groups, divide by `19!`\n\nbecause the set of loops is\nunordered, and choose one of the 11 hubs for each loop:\n\n`(532! / 19!) x 11^19 ~= 10^1223`\n\n## What I tested\n\nThe primary experiment was intentionally narrow:\n\n| Setting | Value |\n|---|---|\n| Models | Claude Fable 5, Opus 4.8, Sonnet 5; GPT-5.6 Sol, Terra, Luna |\n| Modes | Plain; native `/goal` |\n| Optimization budget | 30 minutes |\n| Outer agent timeout | 1,900 seconds |\n| Reasoning | Maximum available setting for every model |\n| Execution | Harbor 0.1.43, Docker, subscription authentication |\n\n## Results\n\nBefore 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.\n\nI then repeated the flagship comparison until I had three matched runs for Fable 5 and three for Sol.\n\n| Model | Run | Plain | `/goal` | Goal minus plain |\n|---|---|---|---|---|\n| Fable 5 | 1 | 32,197 | 31,934 | -263 |\n| Fable 5 | 2 | 32,516 | 32,324 | -192 |\n| Fable 5 | 3 | 32,446 | 35,178 | +2,732 |\n| GPT-5.6 Sol | 1 | 33,581 | 39,371 | +5,790 |\n| GPT-5.6 Sol | 2 | 35,539 | 32,703 | -2,836 |\n| GPT-5.6 Sol | 3 | 33,663 | 33,313 | -350 |\n\nNegative means `/goal`\n\nwas better. Goal won four of six trials, so win rate alone makes the\nfeature look useful. The means tell the other half:\n\n| Model | Plain mean | `/goal` mean | Mean effect | Median effect |\n|---|---|---|---|---|\n| Fable 5 | 32,386 | 33,145 | +759 worse | -192 better |\n| GPT-5.6 Sol | 34,261 | 35,129 | +868 worse | -350 better |\n\nBoth models usually got a small benefit and occasionally suffered a large regression. That is\nwhy `/goal`\n\nwon most runs but made both means worse.\n\nFable 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.\n\n## Deep dive into the goal command\n\n## The same command hides two different systems\n\nClaude Code and Codex both expose `/goal`\n\n, but the implementations are fundamentally different.\n\n### Claude Code: a separate evaluator\n\nClaude Code implements `/goal`\n\nas a session-scoped Stop hook. After each main-model turn, a\nsmall evaluator model, Haiku by default, reads the condition and conversation. It returns yes\nor no with a reason. A no starts another turn; a yes clears the goal.\n\nThe evaluator cannot use tools or inspect files. It can only judge evidence that appeared in\nthe transcript. That can catch an early exit, but it cannot know whether another ten million\nsolver iterations are worthwhile. [Anthropic’s goal documentation](https://code.claude.com/docs/en/goal)\n\nKeep in mind that claude code is not open source, so we rely solely on what Anthropic tells us.\n\n### Codex: persisted state and lifecycle tools\n\nI also read the source for the benchmarked release,\n[Codex CLI 0.144.4](https://github.com/openai/codex/tree/rust-v0.144.4). Codex treats a goal as\npersisted thread state:\n\n- The TUI saves the objective for the active thread, and SQLite stores its status and budget\naccounting.\n[TUI](https://github.com/openai/codex/blob/rust-v0.144.4/codex-rs/tui/src/app/thread_goal_actions.rs#L128-L227),[schema](https://github.com/openai/codex/blob/rust-v0.144.4/codex-rs/state/goals_migrations/0001_thread_goals.sql) - The working model receives\n`create_goal`\n\n,`get_goal`\n\n, and`update_goal`\n\ntools.[Tool specification](https://github.com/openai/codex/blob/rust-v0.144.4/codex-rs/ext/goal/src/spec.rs) - If the thread becomes idle while the goal is active, Codex injects a continuation turn with\nthe objective and a completion audit.\n[Runtime](https://github.com/openai/codex/blob/rust-v0.144.4/codex-rs/ext/goal/src/runtime.rs#L359-L414),[prompt](https://github.com/openai/codex/blob/rust-v0.144.4/codex-rs/ext/goal/templates/goals/continuation.md)\n\nClaude 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.\n\n## Why `/goal`\n\ncan win most runs and still be a bad default\n\nOn 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.\n\nThat 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.\n\n## Limitations\n\nThis 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.\n\nThe 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.\n\n## Reproducing this\n\nThe benchmark task, wrappers, analysis scripts, figure generator, and full evidence memo are in\n[CLIArena](https://github.com/charles-azam/CLIArena). Raw job directories are excluded from Git\nbecause of their size, but the memo records every publishable score, city breakdown, elapsed\ntime, strategy, exclusion, and run ID.\n\nThe primary commands are:\n\n```\nRUN_ID=article-kiro-YYYYMMDD-clean \\\nPHASE=nohint-all \\\n./scripts/run_subscription_article_matrix.sh\n\nuv run python scripts/summarize_subscription_article_results.py RUN_ID...\nuv run python scripts/analyze_subscription_article_results.py RUN_ID...\n```\n\nThe 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.", "url": "https://wpnews.pro/news/fable-5-vs-gpt-5-6-sol-on-an-np-hard-problem-does-goal-help", "canonical_source": "https://charlesazam.com/blog/fable-5-gpt-5-6-sol-goal/", "published_at": "2026-07-18 11:00:29+00:00", "updated_at": "2026-07-18 11:21:23.072357+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-research"], "entities": ["Claude Fable 5", "GPT-5.6 Sol", "Anthropic", "OpenAI", "CLIArena", "KIRO"], "alternates": {"html": "https://wpnews.pro/news/fable-5-vs-gpt-5-6-sol-on-an-np-hard-problem-does-goal-help", "markdown": "https://wpnews.pro/news/fable-5-vs-gpt-5-6-sol-on-an-np-hard-problem-does-goal-help.md", "text": "https://wpnews.pro/news/fable-5-vs-gpt-5-6-sol-on-an-np-hard-problem-does-goal-help.txt", "jsonld": "https://wpnews.pro/news/fable-5-vs-gpt-5-6-sol-on-an-np-hard-problem-does-goal-help.jsonld"}}