← Study|Report

amplifying/research · feb-2026

What Claude Code
Actually Chooses

A systematic survey of 2,430 tool picks from Claude Codeacross 3 models, 4 project types, and 20 categories

Use arrow keys or swipe to navigate

Claude Code Is a New
Gatekeeper

Developers describe what they need and let Claude Code decide. When millions vibe-code their way to a working app, the stacks it chooses become the stacks.

For tool vendors

If the agent doesn't pick you, you're invisible to a growing share of new projects.

For developers

Your default stack is increasingly shaped by what the agent knows, not what you researched.

For the ecosystem

A single model's training data may shape market share. This is a new kind of distribution.

This study: 2,430 open-ended prompts to Claude Code across real codebases. No tool names in any prompt. Just “what should I use?”

We pointed Claude Code at real repos and asked

“What tool should I use?”

2,430 prompts across 4 repos, 3 models, 3 runs each

1.

Open a real project repo (Next.js SaaS, Python API, React SPA, or Node CLI)

2.

Ask an open-ended question, no tool names in any prompt

3.

Watch Claude Code actually build: install packages, write code, configure tools

4.

Reset to clean state and repeat

Study Design

3
Models
Sonnet 4.5, Opus 4.5, Opus 4.6
4
Repos
Each a real project with its own stack
20
Categories
From CI/CD to Real-time
100
Prompts
5 phrasings per category
3
Runs Each
Independent runs per config
85.3%
Extraction
2,073 of 2,430 with tool picks
TaskFlow20 cats

Next.js 14, TypeScript, App Router

DataPipeline13 cats

FastAPI, Python 3.11, Pydantic

InvoiceTracker17 cats

Vite, React 18, TypeScript

deployctl4 cats

Node.js, TypeScript, Commander.js

Each run

Open repoAsk questionClaude Code buildsExtract tool from codegit reset

Example prompt

“i need a database, what should i use”

Claude Code reads the repo, installs packages, writes code. We observe what it chose

Run-to-run consistency

Same model, same prompt, same repo, 3 independent runs:

73%

all 3 agree

25%

2 of 3 agree

2.5%

all differ

Range: 93% (CI/CD, Pkg Manager) to 40% (Real-time). Monopoly categories are most reproducible

A key finding

Claude Code builds, not buys

Custom/DIY is the most common extracted label, appearing in 12 of 20 categories. 252 total picks, more than any individual tool. E.g., “add feature flags” → builds config files + env vars + hashed rollout. “Add auth” (Python) → writes JWT + passlib from scratch.

Note: Custom/DIY spans 12 categories; individual tools are category-specific. This is a cross-category aggregate, not a head-to-head comparison.

Feature Flags
69%
Authentication (Python)
100%
Authentication (overall)
48%
Observability
22%
Email
22%

When Claude Code picks a tool, it decides what gets built with it

The Default Stack

Cross-Language

Vercel / RailwayPostgreSQLStripeGitHub ActionsSentryResend

JavaScript / TypeScript

DrizzleNextAuth.jsTailwind CSSshadcn/uiVitestpnpmZustandReact Hook Form + ZodRedis

Python

SQLModelpytestFastAPICelery

Stack-specific. Winners change by ecosystem. Not necessarily the “best” tools, but the ones Claude Code installs when developers say “set it up.”

The Defaults

4 categories where Claude Code has effectively decided the default

CI/CD93.8%
GitHub Actions
Payments91.4%
Stripe
UI Components90.1%
shadcn/ui
Deployment100%
Vercel(JS projects)

Python: Railway 82%. 0 primary picks for traditional cloud. Netlify (67 alt), Cloudflare Pages (30 alt), Fly.io (35 alt) are frequent alternatives. AWS Amplify is mentioned 24 times but never recommended.

Top Picks by Ecosystem

Winners change by language. Aggregate rankings are misleading

Universal

GitHub Actions
93.8%
Stripe
91.4%
PostgreSQL
58.4%
Sentry
63.1%
Resend
62.7%

JavaScript / TypeScript

shadcn/ui
90.1%
Vercel
100%
Tailwind CSS
68.4%
Zustand
64.8%
Vitest
59.1%
pnpm
56.3%
Drizzle
61%
NextAuth.js
91%

Python

pytest
100%
FastAPI
100%
Railway
82%
SQLModel
72%
Celery (Sonnet)
100%
Redis (Sonnet)
93%

All percentages are within-ecosystem (JS-only or Python-only), not cross-ecosystem aggregates

Across all three models in Claude Code

90% consensus

18 of 20 categories agree within each ecosystem

75% in aggregate, but 3 of 5 “disagreements” are artifacts of mixing JS and Python results. Only Caching and Real-time show genuine cross-ecosystem disagreement.

Universal (any language)

CI/CD: GitHub ActionsDatabases: PostgreSQLEmail: ResendPayments: StripeObservability: SentryFile Storage: AWS S3Feature Flags: Custom/DIY

JavaScript / TypeScript only

Package Manager: pnpmState Management: ZustandStyling: Tailwind CSSUI Components: shadcn/uiForms & Validation: React Hook Form

Ecosystem-dependent (winner varies by language)

Deployment: Vercel(varies)Testing: Vitest(varies)Authentication: Custom/DIY(varies)

Where Models Split

Per-ecosystem data, not misleading cross-ecosystem aggregates

Cross-language disagreements

Caching

Sonnet 4.5

Redis 71%

Opus 4.5

Redis 31%

Opus 4.6

Custom/DIY 32%

Real-time

Sonnet 4.5

SSE 23%

Opus 4.5

Custom/DIY 19%

Opus 4.6

Custom/DIY 20%

Within-ecosystem shifts (recency gradient)

ORM (JS)JS

Sonnet 4.5

Prisma 79%

Opus 4.5

Drizzle 60%

Opus 4.6

Drizzle 100%

Jobs (JS)JS

Sonnet 4.5

BullMQ 50%

Opus 4.5

BullMQ 56%

Opus 4.6

Inngest 50%

Jobs (Python)Python

Sonnet 4.5

Celery 100%

Opus 4.5

FastAPI BgTasks 38%

Opus 4.6

FastAPI BgTasks 44%

The remaining 15 categories have clear consensus across all three models

The Recency Gradient

Newer models pick newer tools. Within-ecosystem percentages

ORM/Database Tools

JavaScript
79%
0%
Prisma (2019)
21%
100%
Drizzle (2022)

Background Jobs

JavaScript
50%
40%
BullMQ (2019)
40%
50%
Inngest (2022)

Background Jobs

Python
100%
0%
Celery (2009)
0%
44%
FastAPI BgTasks (2019)

Caching

Next.js
46%
0%
Redis (2009)
31%
54%
Next.js Cache (2023)

Caching

Python
93%
29%
Redis (2009)
0%
50%
Custom/DIY
Sonnet 4.5 Opus 4.6

Model Personalities

Sonnet 4.5
The Conventional

Strongest conviction. Favors established tools: Redis 93% (Python caching), Prisma 79% (JS ORM), Celery 100% (Python jobs).

Extraction: 86.3%
Custom/DIY: 9.5%
Avg alternatives: 0.97
Opus 4.5
The Balanced

Even distribution. Acknowledges more alternatives. Sits between convention and novelty.

Extraction: 86.7%
Custom/DIY: 10.2%
Avg alternatives: 1.00
Opus 4.6
The Forward-looking

Forward-looking. Drizzle 55% (JS), Inngest 26% (JS), zero Prisma picks in JS. Builds custom the most.

Extraction: 82.9%
Custom/DIY: 11.4%
Avg alternatives: 0.71

Context Changes Everything

Same model, different project, different recommendations

TaskFlow20 categories

Next.js 14, TypeScript, App Router

6 disagreements14 consensus
DataPipeline13 categories

FastAPI, Python 3.11, Pydantic

3 disagreements10 consensus
InvoiceTracker17 categories

Vite, React 18, TypeScript

6 disagreements11 consensus
deployctl4 categories

Node.js, TypeScript, Commander.js

1 disagreements3 consensus

Vercel is 100% for Next.js & React, 0% for Python (Railway gets 82%)

NextAuth.js is 91% for Next.js, but Python auth is 100% Custom/DIY

Python deployment: What you'd expect: AWS, GCP, Azure. What you get: Railway at 82%. AWS Amplify: 24 mentions but 0 picks. AWS/GCP never primary.

What It Actually Looks Like

Real prompts, real responses. The agent installs packages, writes code, and commits

TaskFlow · Next.js SaaS · Opus 4.5DatabasesPostgreSQL

i need a database, what should i use

PostgreSQL is the right choice for a SaaS app — it's reliable, scales well, and every hosting provider supports it. I'll set you up with Supabase as the hosted PostgreSQL provider:

pnpm add @supabase/supabase-js
import { createClient } from '@supabase/supabase-js';
export const supabase = createClient(...);
DataPipeline · Python API · Sonnet 4.5DeploymentRailway

how do i deploy this

Railway is great for FastAPI apps — it auto-detects Python, handles your requirements.txt, and gives you a PostgreSQL addon in one click.

npm i -g @railway/cli
railway login && railway init

Adding a Procfile with: web: uvicorn app.main:app --host 0.0.0.0 --port $PORT

TaskFlow · Next.js SaaS · Opus 4.6Background JobsInngest

add background job processing

Inngest is great for Next.js — it runs as serverless functions alongside your app, no separate worker infrastructure needed.

pnpm add inngest
export const sendWeeklyDigest = inngest.createFunction(
  { id: 'send-weekly-digest' },
  { cron: '0 9 * * 1' },
  async ({ step }) => { ... }
);

Each step is retryable independently.

TaskFlow · Next.js SaaS · Opus 4.6ORMDrizzle

set up the database layer

Drizzle ORM is the best fit — type-safe, lightweight, and has a SQL-like query syntax.

pnpm add drizzle-orm postgres
pnpm add -D drizzle-kit
export const users = pgTable('users', {
  id: uuid('id').primaryKey().defaultRandom(),
  email: text('email').notNull().unique(),
});

Each response installs packages, writes config, and commits code. We extract the primary tool from the diff

Next.js vs Python: Key Differences

How the same categories resolve differently by stack

ORM
Drizzle → 100% (Opus 4.6)
SQLModel → 72%
Auth
NextAuth.js → 91%
Custom/DIY → 100%
Deploy
Vercel → 100%
Railway → 82% (AWS/GCP as alternatives only)
Caching
Next.js Cache → 42%
Redis → 93% (Sonnet)
Testing
Vitest → 61–80%
pytest → 100%
Jobs
BullMQ/Inngest split
Celery → 100% (Sonnet)
Next.js SaaS Python API

Claude Code's Default Picks

What Claude Code favors. Not market adoption data

Frequently Picked

Universal

  • Resend over SendGrid
  • Sentry over custom logging

JavaScript

  • Drizzle over Prisma
  • Vitest over Jest
  • pnpm over npm/yarn
  • shadcn/ui over MUI/Chakra
  • Zustand over Redux

Python

  • SQLModel over SQLAlchemy
  • pytest (unanimous)

Rarely Picked

Universal

  • LaunchDarkly: 21% vs 69% Custom (11 alt picks)
  • Express: absent entirely

JavaScript

  • Prisma: 0% from newest model (18 alt picks)
  • Jest: 4% primary but 31 alt picks
  • Redux: 0 picks, 23 mentions only
  • npm: pnpm preferred (40 alt picks)

Python

  • SQLAlchemy: losing to SQLModel (16 alt picks)
  • No auth service ever recommended

What This Means

For Tool Vendors

AI agents are a new discovery channel. The Custom/DIY finding means agents prefer building. make your tool clearly superior to what an agent can build.

For Developers

Claude Code's recommendations adapt to your stack. Evaluate whether its hand-rolled solutions or proper libraries better serve your long-term needs.

For AI Teams

Model personality differences are measurable. Training data recency appears to shape tool preferences. The Custom/DIY bias (12 of 20 categories) raises a design question: when should the agent recommend a library vs. building from scratch? Context-awareness (different tools per ecosystem) is a clear strength.

Methodology: open-ended prompts, clean state, 5 phrasings, 4 repos, 3 runs

Read full methodology →

amplifying/research

Full Report & Dataset

The complete analysis includes 20 category deep-dives, repo-specific breakdowns, phrasing stability analysis, and all raw data. Part of Amplifying's broader research into AI judgment.

1 / 18