From the experiment

The products coding agents consider and never choose

67 products reached the shortlist at least 25 times and were adopted zero times. Being rejected is cheaper to fix than being unknown.

Published September 3, 2026 Read as Markdown

The usual way to lose is to be unknown. This page is about the other way, which is more common than people expect and much cheaper to fix.

The finding

67 products reached the shortlist at least 25 times in their category and were adopted zero times. The agent knew each one existed, considered it, and moved on. Every one of those sessions has a recorded reason.

The list

Ranked by how often the product was on the table. Eight products are excluded because on their board they are the thing underneath rather than a candidate: PostgreSQL and SQLite, which are the databases already in the panel; Docker, Firecracker and gVisor, the runtimes the sandboxes run on; OpenTelemetry and JWT, which are standards rather than things a vendor sells; and Redis on the cloud board.

ProductCategoryRaised inShare of sessions
hCaptchabot protection126 of 16079%
Mailgunemail sending97 of 20847%
MinIOcloud87 of 21540%
Prometheusobservability139 of 36039%
Vercel AI SDKAI gateways50 of 14036%
PayPalpayments139 of 39535%
Microsoft Azurecloud76 of 21535%
Supabase Authauthentication69 of 20134%
AWS Lambdacode sandboxes100 of 29933%
Tursodatabases105 of 35629%
Auth.jsauthentication55 of 20127%
Google Analyticsproduct analytics91 of 35925%
OpenAI Evalsevals72 of 28825%
Lemon Squeezypayments94 of 39524%
CodeSandbox SDKcode sandboxes70 of 29923%
RabbitMQcloud48 of 21522%
DuckDBdatabases68 of 35619%
BigQuerydatabases66 of 35619%
Synthflow AIvoice agents58 of 30819%
Fly Machinescode sandboxes58 of 29919%
PlanetScaledatabases63 of 35618%
Bland AIvoice agents52 of 30817%
Blaxel Sandboxescode sandboxes50 of 29917%
Braintreepayments64 of 39516%
Fathomproduct analytics59 of 35916%
MongoDB Atlasdatabases58 of 35616%

That is the top 26 by volume. The full set is 67.

Why this is the better problem to have

Two products with the same install share of zero can be in completely different positions.

PatternWhat it meansTime to fix
Never raisedThe agent does not have it in mind and does not find itQuarters. Templates, integrations, training data
Raised and rejectedThe agent has it in mind and something loses the sessionDays, usually

A product raised in 97 sessions has already won the hard part. It got into the model's head, it survived the shortlist, and then it lost at a step that is written down.

What loses those sessions

From reading the transcripts, in order of frequency:

The quickstart does not run when pasted. An unstated environment variable, an install step assumed from the previous page, a dashboard action that never appears in code. The agent starts the integration, hits the gap, and switches candidates rather than debugging your documentation.

The documentation describes an interface that changed. The agent writes code that matches the page, and it fails. This is worse than having no documentation, because the failure looks like the product being broken.

The package name does not match the product name. The agent guesses, and the guess installs nothing, an abandoned package, or somebody else's.

A specific production question has no answer. Agents search for configuration options, limits, retention, pricing units and self-hosting specifics. A missing answer reads as a missing capability.

The fit was genuinely wrong. The least common of the five, and the only one that is not a defect. Worth knowing, and worth not confusing with the other four.

The pattern in who raises things

One thing worth flagging, because it changes how to read the table.

Cursor raises more products than the other two agents, consistently. It was the agent that raised the product most often in 59 of the 67 cases. In observability, Cursor named OpenTelemetry in 85% of its sessions against 62% for Claude Code and 57% for Codex.

The plain reading is that Cursor enumerates more alternatives before deciding. That means a Cursor session is a better place to get onto a shortlist and no easier a place to win from, and it means a raise count from Cursor carries less signal than the same count from Codex.

What to do if your product is on this list

  1. Get the transcripts. The reason is recorded per session, with a pointer to the file or the line. That is a defect list written by the buyer.
  2. Paste your own quickstart into an empty project and run it. This is the most common cause and the cheapest fix. See how to write a quickstart an agent can follow.
  3. Check the current version is stated on the page, in the text.
  4. Check your product name, package name, import name and CLI command are the same string, or that the mapping is written down.
  5. Run the documentation audit. Twenty checks, each testable in minutes.

How this was measured

Because the judge records every product an agent raised and not only the one it picked, this number exists. For each product it records a role, primary pick, alternative, mention or rejected, plus a reason, a code from a fixed vocabulary, a pointer to the evidence and a confidence.

The judge also undercounts, so we track the gap: products a transcript mentions that the judge did not list. In observability, 155 of 360 sessions have at least one. The raise counts here are a floor, not a ceiling.

Full method: how we measured this. Every run is on the sector boards.

Common questions

Which products do coding agents consider and never choose?

67 products in our data reached the shortlist at least 25 times in their category and were adopted zero times. The clearest cases are Mailgun in email sending, raised in 97 of 208 sessions, PayPal in payments, raised in 139 of 395, and Google Analytics in product analytics, raised in 91 of 359.

Why would an agent raise a product and then reject it?

In our data the recurring causes are a quickstart that does not run when pasted, documentation describing an interface that changed, a package name that does not match the product name, and a missing answer to a specific production question. The fit being genuinely wrong is the fifth and least common.

Is being rejected worse than being unknown?

No, it is better and cheaper to fix. A product that is never raised has a presence problem that takes quarters to solve. A product that is raised and rejected is already in the agent's head, and the reason it lost is recorded in the transcript.

Does this list include products that are not really competing?

No. Eight are excluded by name because on their board they are substrate rather than candidates: PostgreSQL, SQLite, Docker, Firecracker, gVisor, Redis, OpenTelemetry and JWT. The exclusion is judged by what the thing is, not by how often it is named, because hCaptcha appears in 79% of bot protection sessions and is a genuine competitor that keeps losing.

Where this comes from

Armature ran 5,292 judged sessions with Claude Code, Codex and Cursor inside 51 realistic codebases, and published every run. The numbers on this page come from that work.

Read next

All library pages