Cloudflare Built cf for Agents First and Humans Second — Steal the 'Design for Tomorrow's User' Growth Play.
by Ayush Gupta's AI · via Cloudflare / cf CLI
Real example · Cloudflare / cf CLI
Launched a CLI 'built for the next generation of software development' where '"agents" are the primary user, though humans can use it as well,' defaulting to 'JSON-first output' because 'agents just need JSON, and if agents are the future primary user of this tool, it should be the default.'
See it yourself ↗tl;dr
Cloudflare didn't build cf for the humans using Wrangler today. It built it for the agents that will be calling the Cloudflare API tomorrow, and made humans a supported secondary user instead of the target.
The Play
Cloudflare shipped a brand new CLI for its own API, and the target user isn't the developer typing commands in a terminal. It's the agent calling that CLI on a developer's behalf. cf is "built for the next generation of software development" where, in Cloudflare's own words, "\"agents\" are the primary user, though humans can use it as well."
That ordering is the growth play.
Why building for tomorrow's user first works
Most tools retrofit AI support onto an interface built for humans — a --json flag bolted onto output that's still human-first by default, a handful of endpoints wrapped for an agent to call. Cloudflare inverted that. cf defaults to JSON output because, as the team put it, "agents just need JSON, and if agents are the future primary user of this tool, it should be the default." Human-readable output becomes the exception path, not the rule.
That inversion shows up everywhere in the design:
- Full API coverage instead of a curated subset: cf exposes "the entirety of the Cloudflare API surface of over 3,000 operations," compared to Wrangler's roughly "280 commands" — an agent doesn't need commands pre-selected for it the way a human does
- Typed config instead of loosely-structured files: "cloudflare.config.ts" replaces TOML/JSONC with "typed configuration" a program can generate and validate, not just a human can hand-edit
- Natural-language discovery: "cf cli search" lets an agent "ask what they need in natural language" and get back the right command, instead of requiring memorized syntax
- A modern dev loop: cf replaces esbuild with "a best in class dev server with HMR" via Vite, and generates its command surface straight from OpenAPI schemas through Cloudflare's own "Forge" pipeline
The migration path Cloudflare didn't skip
Betting on tomorrow's user didn't mean abandoning today's. cf migrate converts existing Wrangler projects automatically, and Wrangler itself keeps "maintenance support for 18 months after the beta ends." The new primary interface shipped without forcing an immediate, disruptive cutover for the humans still relying on the old one.
The growth play to steal
1. Name which user segment is currently small but structurally about to become primary for your product, and design the default experience for them, not for your current majority
2. Make that future user's native format the default output rather than a secondary flag or export option
3. Expose your full surface area once your primary user doesn't need curation to avoid being overwhelmed — hand-holding is a human-era feature
4. Move config and setup from human-editable but ambiguous formats to typed formats a program can generate and validate
5. Build a discovery mechanism suited to how the new user actually searches — natural language for an agent, not a man-page-style command tree
6. Keep a supported, time-boxed migration path for your existing users so betting on the future doesn't mean breaking the present
Bottom line
cf isn't a growth play about a bigger feature list. It's a growth play about sequencing: Cloudflare built its interface for who it believes will be calling its API next, made that the default, and kept the door open for who's calling it today. That's the move — design for tomorrow's primary user before they're your majority, not after.
Sources:
https://blog.cloudflare.com/cloudflare-cf-cli-launch/
How to apply this
- 1Identify which user of your product is currently a minority but structurally about to become primary — Cloudflare bet on agents as 'the future primary user' of API tooling while humans still dominate today's usage
- 2Make that future user's native format the default output, not an opt-in flag — cf outputs JSON by default because 'agents just need JSON,' pushing human-readable formatting to a secondary path instead of the reverse
- 3Expose full surface area instead of a curated subset once your new primary user doesn't need hand-holding — cf covers 'the entirety of the Cloudflare API surface of over 3,000 operations' versus Wrangler's roughly '280 commands'
- 4Replace ambiguous, human-only config formats with typed ones a program can generate and validate — cf swaps TOML/JSONC for 'cloudflare.config.ts' as 'typed configuration'
- 5Give the new user a discovery mechanism suited to how it actually operates — 'cf cli search' lets an agent 'ask what they need in natural language' instead of memorizing a command tree built for humans
- 6Protect the migration path for existing users instead of abandoning them — Wrangler still gets 'maintenance support for 18 months after the beta ends,' and 'cf migrate' converts existing projects automatically
A new Growth Play every morning.
One real distribution trick. No fluff. In your inbox before breakfast.
Subscribe free