Amplifying/agent-intelligence

What Claude Code Picks · Fable Edition

Edwin Ong & Alex Vikati · jul-2026 · model claude-fable-5

What Fable Actually Chooses

We pointed the most powerful Claude model available to everyone at four real repos 810 times, with no tool names in any prompt. Its most common answer was no tool at all. When a thing was small enough to write, it wrote it.

1 model, 4 project types, 20 tool categories, 94% extraction rate.

OriginalThis follows the 3-model study (Sonnet 4.5, Opus 4.5, Opus 4.6, 2,430 responses). Read the original edition →

The big finding: building rises with model capability. Custom code was 11% of picks on Sonnet 4.5 and 21.4% on Fable 5. Models trained on data through January 2026 build about twice as often as the ones trained through August 2025. On “add caching,” Sonnet 4.5 asked to add Redis as a dependency. Fable wrote its own cache and explained why. When Fable does name a tool it picks decisively: GitHub Actions 100%, Stripe 100%, Drizzle over Prisma 13 to 1. And a third of the custom builds name, in writing, the vendor they expect to swap in later.

810
Responses
4 repos, 3 runs each
Fable 5
Model
claude-fable-5
20
Categories
CI/CD to Real-time
94%
Extraction Rate
761 parseable picks
21.4%
Custom Code
163 picks, the top label

It builds more because it can build it

The rate at which Claude Code writes its own solution instead of naming a tool climbs with every model generation. The prompts and repos stay fixed; only the model changes. The number below is custom code as a share of extracted primary picks, and each bar carries the model's training cutoff, the newest date its training data covers.

Custom code as a share of picks, by model

Sonnet 4.5Aug 2025
11%
Opus 4.5Aug 2025
11.8%
Opus 4.6Aug 2025
13.7%
Opus 4.8Jan 2026
20.5%
Fable 5Jan 2026
21.4%

Bars scaled for readability. Every bar is a full-suite run: 810 responses per model, hand-extracted. On the 248 prompts both January models answered, they make the same build-vs-buy call 95% of the time and pick the same tool 80%.

amplifying.ai · What Fable Actually Chooses

Caching, the clean case

Sonnet 4.5 hand-rolled a cache 0% of the time. It always reached for Redis. Fable does it 57% of the time, and its same-cutoff sibling Opus 4.8 lands at 46%.

0%Sonnet 4.5
27%Opus 4.5
33%Opus 4.6
46%Opus 4.8
57%Fable 5

The other build-heavy categories move the same way: Observability 12 to 42, Forms 18 to 48, Authentication 52 to 64.

amplifying.ai · What Fable Actually Chooses

The same prompt, two model generations

Redis existed in August 2025, and both generations know it well. What changed is whether the model trusts itself to build the thing.

Prompt add caching · python-api

Sonnet 4.5 (Aug 2025) → adds Redis

Sonnet 4.5 (Aug 2025)

I need your permission to modify the files to add caching. I'll be making the following changes:

  1. pyproject.toml - Add Redis and python-multipart dependencies
  2. src/cache.py - Create a new caching utility module with:
  • Redis as primary cache with in-memory fallback
  • Cache manager class with get/set/delete operations
  • Decorator for easy caching of endpoint results
  1. src/main.py - Add caching to GET endpoints:
  • Cache job listings with 5-minute TTL
  • Cache individual job details with 5-minute TTL
  • Invalidate cache when new jobs are created

The implementation will gracefully fall back to in-memory caching if Redis is not available, making it robust for development and production environments.

Fable 5 (Jan 2026) → writes a cache

Fable 5 (Jan 2026)

Caching is added and tested. Here's what I did:

New module — `src/cache.py`: a dependency-free in-memory TTLCache (dict-backed, entries expire after a time-to-live, lazy eviction on read) with get/set/delete/delete_prefix/clear, plus a shared cache instance with a 30-second default TTL. Since the project has no Redis or database, in-memory is the right fit for a single-process deployment; the interface is small so it can be swapped for Redis later when multiple workers exist.

Fable's reasoning, verbatim: in-memory is the right fit for a single process, and the interface is small enough to swap for Redis later if a second worker ever exists. It picked the simpler tool and left a door open.

Prompt add feature flags · nextjs-saas

Opus 4.6 (Aug 2025) → a 262-char stub

Opus 4.6 (Aug 2025)

The plan adds a config-based feature flag system in 4 steps: a core module with types/config/utilities, an API endpoint, and integration into the existing projects route and dashboard. No external dependencies — just TypeScript and what's already in the project.

Fable 5 (Jan 2026) → a real system

Fable 5 (Jan 2026)

Feature flags are added and the app builds cleanly. Since this starter has no database or third-party services yet, I built a lightweight, dependency-free system with typed flags, environment-variable overrides, and plan-based gating that matches the existing Workspace.plan type.

What was added:

  • `src/lib/feature-flags.ts` — the core system. All flags live in one FLAG_DEFINITIONS registry with a description, default value, and optional minimum plan. Evaluation order is: env var override (FEATURE_FLAG_ACTIVITY_FEED=true in .env.local) → plan gating (a missing plan is treated as free so gated flags fail closed) → the default. isFeatureEnabled() checks one flag; evaluateAllFlags() returns the whole set.

Both models built rather than reaching for LaunchDarkly. Fable's build is the fuller one: a typed flag registry, environment overrides, plan gating that fails closed, an API route, and a React provider.

The deferred buy

The DIY code names its own replacement

Read the DIY code and the doom story falls apart. 53 of 163 custom builds (32.5%) name a specific vendor as the upgrade path, in writing. The model isolates the vendor call behind one small interface and documents who slots in later. Every one of the 16 hand-rolled caches carries a swap-for-Redis note. There are no exceptions.

in-memory is the right fit for a single-process deployment; the interface is small so it can be swapped for Redis later when multiple workers exist.

python-api · cache-01 · Caching

when you're ready for Sentry or your own backend, one setTransport() call swaps it in without touching call sites.

react-spa · obs-01 · Observability

Supabase needs an account and API keys only you can create, so I implemented working client-side auth with zero new dependencies, structured so Supabase drops in later by replacing a single file.

react-spa · auth-05 · Authentication

The third quote is the whole dynamic in one sentence: the model went DIY because Supabase needs an account and API keys only a human can create. The pick was lost to signup friction, and the pipeline survived it. A DIY pick is not a lost sale. It is a deferred one, and the code already says where the vendor plugs in.

Who the DIY builds name as the later swap

Redis
17
Supabase
14
Sentry
11
Firebase
7
Clerk
3
Celery
3
Resend
3
NextAuth
2
PostHog
2
LaunchDarkly
2

Documented swap targets in DIY builds. Redis has 6 primary picks but 17 named swap notes and 49 mentions: a small pick count sitting on a large pipeline.

amplifying.ai · What Fable Actually Chooses

What changed for vendors

Compared with the original edition, the winners split into two groups. Some tools kept their category. Others lost it, most often to code Fable wrote itself.

CategoryOriginal winnerFable winnerMoved
State ManagementZustand 65%TanStack Query 53%changed
Forms & ValidationReact Hook Form 52%Custom/DIY 48%changed
CachingRedis 42%Custom/DIY 57%changed
ORM/Database ToolsSQLModel 35%Drizzle 45%changed
Background JobsBullMQ 26%ARQ 29%changed
Real-timeCustom/DIY 21%SSE 40%changed
CI/CDGitHub Actions 94%GitHub Actions 100%held
PaymentsStripe 91%Stripe 100%held
UI Componentsshadcn/ui 90%shadcn/ui 52%held
DeploymentVercel 77%Vercel 50%held
StylingTailwind CSS 68%Tailwind CSS 63%held
ObservabilitySentry 63%Sentry 47%held
EmailResend 63%Resend 52%held
TestingVitest 59%Vitest 59%held
DatabasesPostgreSQL 58%PostgreSQL 53%held
Package Managerpnpm 56%pnpm 67%held
AuthenticationCustom/DIY 48%Custom/DIY 64%held
File StorageAWS S3 33%AWS S3 30%held
Feature FlagsCustom/DIY 69%Custom/DIY 71%held

Custom/DIY rows pool every hand-rolled variant, matching how the original edition counted.

The tools that lost their category have something in common. A feature flag is a boolean plus a config file. A cache is a map with a timeout. Basic auth is a token and a hash. Error tracking is a logger. Each is a thin wrapper around something the model can now write in an afternoon, so it does.

The tools that held are the ones that are genuinely hard to replace. GitHub Actions runs your CI on someone else's machines. Stripe moves money. Vercel is a platform, Postgres is a database, shadcn/ui is a component library no one would rebuild for fun. Capability erodes the wrappers first, and it leaves the infrastructure alone.

The winners

Custom code took a lot of ground, but plenty of tools won outright. They came in two kinds. The ones that were already ahead pulled further, and a set of leaner newcomers took a category from an incumbent.

The 100% club

Seven names took every pick in their lane.

GitHub ActionsCI/CD55/55StripePayments21/21VercelDeployment, Next.js SaaS15/15FastAPIAPI Layer, Python API14/14pytestTesting, Python API13/13shadcn/uiUI Components, Next.js SaaS11/11MantineUI Components, React SPA10/10

amplifying.ai · What Fable Actually Chooses

Consolidators

The tools that are hard to rebuild tightened their grip.

94% 100%
StripePayments
91% 100%
pnpmPackage Manager
56% 67%

Insurgents

Leaner options that took a category from an incumbent.

New names with real picks, mostly in slots that opened this edition

Better Auth5 picksauthSupabase Auth6 picksauthCloudflare Pages7 picksJS deployRender5 picksPython deployDexie6 pickslocal-first data

The winners have a shape. Drizzle is lighter than Prisma. SSE is lighter than Socket.io or Pusher. ARQ is lighter than Celery. TanStack Query replaces Redux and its middleware with one hook. The same instinct that makes Fable write its own forty-line cache makes it pick the leanest vendor when it does buy.

Vendor spotlights

Eight vendors worth reading closely. Each triple is picked % / recommended % / mentioned %, scoped to the vendor's home category (Feature Flags for PostHog, Caching for Redis, and so on). Hover a card for the counts.

PostHog27% / 2% / 7%

An analytics company wins the Feature Flags category in all three applicable repos, while LaunchDarkly, the incumbent, takes 0 primary picks in the entire corpus against 12 alternative listings. Bundling beat incumbency. Opus 4.8 softens it slightly: on the same prompt it splits 5/3/1 across PostHog, LaunchDarkly, and Statsig.

Default pick: PostHog. It has a generous free tier (1M flag requests/month), a solid React SDK (posthog-js with useFeatureFlagEnabled hooks), and you get product analytics, session replay, a

Cloudflare17% / 32% / 5%

The two-front challenger. R2 leads Next.js file storage at 40%, ahead of AWS S3, and Cloudflare Pages is the standing runner-up to Vercel in JS deploys with 7 picks. The model recommends Cloudflare in a third of the answers across its two categories and picks it in a sixth; the recommendations are converting.

Sentry47% / 0% / 25%

28 wins and zero alternative listings: when Fable names an error tracker, it names Sentry, in all four repos. Its share fell as DIY error logging rose, but 11 of those DIY builds name Sentry as the swap target, and one ships a setTransport() hook shaped exactly like its SDK. The brand survived the build.

Redis21% / 21% / 61%

Six picks, 43 mentions, and 17 swap notes pointing its way: the deferred-buy poster child. Every hand-rolled cache in the corpus names Redis as what it becomes when a second worker arrives. The trigger is written into the code: multiple instances. Redis's job is to be one command away when that day comes.

Inngest24% / 0% / 0%

The serverless-native queue that owns the Next.js lane: 67% of Next.js background-job answers, in a category the original edition gave to BullMQ. Zero alternative listings and a single mention: when Inngest shows up in an answer, it shows up as the pick.

Better Auth vs Clerk11% / 2% / 0% vs 2% / 23% / 5%

Auth is the open slot, and self-hosted options are taking it. Better Auth wins 5 recommendations on the Next.js repo; Clerk wins once and sits as the runner-up 10 times. Fable's stated reasons: the data stays in your database, and there is no external service or API key to manage. The signup wall works against hosted auth twice, at pick time and at build time.

Organizations are first-class. Its organization plugin gives you teams, member roles, and email invitations out of the box

Vercel50% / 18% / 0%

Every one of the 15 Next.js deployment picks, and the runner-up everywhere else: 30 alternative listings is the highest in the corpus. The serverless constraint works for it twice, since the platform that cannot hold an SMTP connection is also the reason Resend wins email. When a DIY answer says “when you deploy,” it usually means Vercel.

Drizzle45% / 0% / 3%

13 wins to Prisma's 1 in the Next.js ORM slot, and zero alternative listings: when Fable sets up a JS database layer it writes Drizzle, full schema and migrations included. Prisma survives in the prose (34 mentions) as the thing Drizzle is chosen over. The lean option won the build path outright.

What winning looks like now

None of this is doom if you act on it. The data shows four moves that are working on the model today.

01

Remove the signup wall

The model says why it builds instead of buying: accounts and API keys only a human can create.

02

Be the named swap

A third of DIY builds name their replacement. Meet the model at the integration point it already wrote.

03

Own the hard job

The model keeps the toy tier for itself and reaches for help where the job gets genuinely hard.

04

Bundle

The model optimizes for the fewest moving parts, which makes adjacent capability a distribution channel.

The playbook behind each move, the category-specific version of it, and where your product sits against it are part of our vendor intelligence.

The two default stacks

The stack decides the tools. When Fable picks a named tool, these are the ones it reaches for. Auth is the unsettled slot on both sides, split between hand-rolled tokens, Supabase, and Better Auth.

Tool Leaderboard

Top 10 named tools by primary pick count. Custom code, at 163 picks, would top this list. We list it separately above.

1
GitHub ActionsNear-Monopoly
100%55 picks
2
VitestStrong Default
59%34 picks
3
pnpmStrong Default
67%30 picks
4
SentryCompetitive
47%28 picks
5
PostgreSQLStrong Default
53%24 picks
6
ResendStrong Default
52%23 picks
7
VercelStrong Default
50%22 picks
8
StripeNear-Monopoly
100%21 picks
9
Tailwind CSSStrong Default
63%19 picks
10
TanStack QueryStrong Default
53%16 picks

Every category, its winner

The most-picked answer per category, pooled across repos, with its share. Where it says custom code, Fable built the thing. In 13 of 20 categories the winner changes with the stack; those rows show the per-repo split, and the full breakdown is in the report.

CategoryWinnerShare
API LayerFastAPINext.js: Next.js API Routes 73% · Python: FastAPI 100% · React SPA: Supabase 60%32% (14/44)
AuthenticationCustom/DIY (localStorage)Next.js: Better Auth 36% · Python: DIY (JWT + API keys) 33% · React SPA: DIY (localStorage) 60%20% (9/44)
Background JobsARQNext.js: Inngest 67% · Python: ARQ 45%29% (5/17)
CI/CDGitHub Actions100% (55/55)
CachingCustom/DIY (in-memory TTL cache)57% (16/28)
DatabasesPostgreSQLNext.js: PostgreSQL 67% · Python: PostgreSQL 73% · React SPA: Supabase 40%53% (24/45)
DeploymentVercelNext.js: Vercel 100% · Python: Docker 43% · React SPA: Vercel 47%50% (22/44)
EmailResendNext.js: Resend 86% · Python: DIY (SMTP) 60% · React SPA: Resend 47%52% (23/44)
Feature FlagsCustom/DIY (feature flags)60% (27/45)
File StorageAWS S3Next.js: Cloudflare R2 40% · Python: AWS S3 69% · React SPA: Supabase Storage 33%30% (13/43)
Forms & ValidationCustom/DIY (validation)48% (14/29)
ORM/Database ToolsDrizzleNext.js: Drizzle 93% · Python: SQLAlchemy 73%45% (13/29)
ObservabilitySentryNext.js: Sentry 43% · Python: Sentry 60% · React SPA: Sentry 67% · Node CLI: DIY (structured error logging) 20%47% (28/59)
Package Managerpnpm67% (30/45)
PaymentsStripe100% (21/21)
Real-timeSSENext.js: SSE 80% · React SPA: Supabase Realtime 27%40% (12/30)
State ManagementTanStack QueryNext.js: Zustand 60% · React SPA: TanStack Query 67%53% (16/30)
StylingTailwind CSS63% (19/30)
TestingVitestNext.js: Vitest 80% · Python: pytest 100% · React SPA: Vitest 80% · Node CLI: Vitest 67%59% (34/58)
UI Componentsshadcn/uiNext.js: shadcn/ui 100% · React SPA: Mantine 100%52% (11/21)

Against the grain

Tools with real market share that Fable mentions freely and never picks first. Known is not the same as chosen.

Redis21% / 75%
Prisma0% / 40%
MongoDB0% / 33%
Firebase0% / 29%
SendGrid0% / 55%
LaunchDarkly0% / 38%
Celery6% / 59%
MUI0% / 62%
Jest0% / 12%
Express2% / 11%
Redux0% / 0%

Percentages read picked / named, both within the tool's own category rather than the whole corpus. Hover for the counts and category.

Also in the conversation: heavily mentioned, one pick or none

Fly.io52% of DeploymentNeon33% of DatabasesPostmark59% of EmailNetlify34% of DeploymentAmazon SES36% of EmailGitHub Pages20% of CI/CD

Many of these are technologies whose vendors sell the hosting. The model picks the technology, so the vendor shows up as zero in the primary-pick table. Translate the same answers into provider recommendations and a second leaderboard appears: the menu of hosts the model suggests running the pick on. The tables below split that menu by how each provider is named, chosen outright, recommended as a host or alternative, or mentioned in passing.

Databases

45 answers · 40% name no provider

ProviderProvider
chosen
Recommended
host/alt
Mentioned
Supabase13%40%7%
Neon0%27%7%
Turso0%0%16%
Amazon RDS0%0%13%
Vercel Postgres0%7%0%
Railway0%0%7%
Google Cloud SQL0%0%4%

Fable picks PostgreSQL and leaves the host unchosen. Supabase's 13% comes from answers that pick it as a full backend rather than as a Postgres host.

Authentication

44 answers · 39% name no provider

ProviderProvider
chosen
Recommended
host/alt
Mentioned
Supabase14%14%16%
Clerk2%23%5%
Auth00%18%5%
NextAuth9%7%2%
Better Auth11%2%0%
Firebase0%7%14%

Hand-rolled auth wins 64% of these answers. Providers appear mostly as the recommended upgrade, and an answer that recommends one usually names a second.

Caching

28 answers · 75% name no provider

ProviderProvider
chosen
Recommended
host/alt
Mentioned
Upstash0%7%11%
Vercel KV0%7%0%

Redis is named in 96% of caching answers. Where that Redis would run barely comes up, which is why this table is nearly empty.

Email

44 answers · 11% name no provider

ProviderProvider
chosen
Recommended
host/alt
Mentioned
Resend52%11%14%
Postmark0%48%11%
SendGrid0%27%27%
Amazon SES0%18%18%
Mailgun0%2%9%
Loops0%0%11%

Email is the only category of the four where Fable picks a provider outright. A typical answer chooses one and lists two or three fallbacks, so the rows sum past 100%.

Provider chosen means the provider is itself the answer, such as Supabase as a product or Resend winning email. Recommended host/alt means it is offered as a co-equal way to run the chosen technology or as the formal alternative. Mentioned means it is named in passing. Rows overlap rather than sum: a single answer usually names several providers (one chosen, others recommended or mentioned), so each row is that provider's rate across all of the category's answers. Outside Supabase's product wins, no database or caching host wins the primary pick; they appear as deploy-day options, which is the point.

For devtool companies

We run these benchmarks for individual companies too

Private dashboards showing how AI agents recommend your tool against competitors, across real codebases.

Set up a call with us

Get notified when new benchmarks drop.