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.
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.
| Product | Category | Raised in | Share of sessions |
|---|---|---|---|
| hCaptcha | bot protection | 126 of 160 | 79% |
| Mailgun | email sending | 97 of 208 | 47% |
| MinIO | cloud | 87 of 215 | 40% |
| Prometheus | observability | 139 of 360 | 39% |
| Vercel AI SDK | AI gateways | 50 of 140 | 36% |
| PayPal | payments | 139 of 395 | 35% |
| Microsoft Azure | cloud | 76 of 215 | 35% |
| Supabase Auth | authentication | 69 of 201 | 34% |
| AWS Lambda | code sandboxes | 100 of 299 | 33% |
| Turso | databases | 105 of 356 | 29% |
| Auth.js | authentication | 55 of 201 | 27% |
| Google Analytics | product analytics | 91 of 359 | 25% |
| OpenAI Evals | evals | 72 of 288 | 25% |
| Lemon Squeezy | payments | 94 of 395 | 24% |
| CodeSandbox SDK | code sandboxes | 70 of 299 | 23% |
| RabbitMQ | cloud | 48 of 215 | 22% |
| DuckDB | databases | 68 of 356 | 19% |
| BigQuery | databases | 66 of 356 | 19% |
| Synthflow AI | voice agents | 58 of 308 | 19% |
| Fly Machines | code sandboxes | 58 of 299 | 19% |
| PlanetScale | databases | 63 of 356 | 18% |
| Bland AI | voice agents | 52 of 308 | 17% |
| Blaxel Sandboxes | code sandboxes | 50 of 299 | 17% |
| Braintree | payments | 64 of 395 | 16% |
| Fathom | product analytics | 59 of 359 | 16% |
| MongoDB Atlas | databases | 58 of 356 | 16% |
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.
| Pattern | What it means | Time to fix |
|---|---|---|
| Never raised | The agent does not have it in mind and does not find it | Quarters. Templates, integrations, training data |
| Raised and rejected | The agent has it in mind and something loses the session | Days, 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
- 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.
- 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.
- Check the current version is stated on the page, in the text.
- Check your product name, package name, import name and CLI command are the same string, or that the mapping is written down.
- 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.