Building a CLI for all of Cloudflare

327 points - last Monday at 3:44 PM

Source

Comments

8cvor6j844qw_d6 last Monday at 4:16 PM
> Tell us your hopes and dreams for a Cloudflare-wide CLI

It'd be great if the Wrangler CLI could display the required API token permissions upfront during local dev, so you know exactly what to provision before deploying. Even better if there were something like a `cf permissions check` command that tells you what's missing or unneeded perms with an API key.

dcre last Monday at 4:54 PM
Wonderful post and I will be taking inspiration from it. Surprised not to see TypeSpec https://typespec.io/ mentioned, which is a TypeScript-like schema language that I like to describe as "what if OpenAPI was good". I'm guessing they considered it and decided building their own would be both simpler and more flexible. The cost of BYO has come down a lot thanks to agents.
aetherspawn yesterday at 12:21 AM
Please add resource groups and the ability to enforce permissions per resource group before you do this so that we don’t have agents (or people) blowing up prod from their command line. Thank you.

Currently you can only enforce zone-based permissions (domain based) BUT plenty of resources, such as workers, don’t belong to zones so essentially their code can be replaced or deleted with the lowest level permission. And there’s no way to block it…

Alternatively if you could please allow us to create multiple accounts that share a single super account (for SSO and such), similar to GitHub Enterprise which has Enterprises and Organisations. Then we could have ACME Corp. and ACME Corp (Prod) and segregate the two and resource groups wouldn’t be strictly required.

cleverdash last Monday at 8:55 PM
The trend of CLI-first design because AI agents need it is interesting. We ended up in the same place building developer tools, the CLI and API came first because that's what agents actually consume. The dashboard came after.

The cf permissions check idea from the top comment is great. One thing I've found is that agents are surprisingly good at using CLIs but terrible at diagnosing why a command failed. Clear error messages with the exact fix ("missing scope X, run cf token add --scope X") matter way more for agent usability than the happy path.

kodablah last Monday at 4:18 PM
> You can try the technical preview today by running npx cf. Or you can install it globally by running npm install -g cf.

A couple of obvious questions - Is it open source (npmjs side doesn't point to repo)? And in general will it be available as a single binary instead of requiring nodejs tooling to install/use? If so, using recently-acquired Bun or another product/approach?

oncensher last Monday at 8:48 PM
I found that agents can already figure out how to do everything in CloudFlare as long as they have an API token with the right privileges. They are smart enough to figure out how to use the API. But the friction spot is that I need to make the API token by hand and basically add permission to do everything they might ever need to do. It would be nice to have a smoother way to handle the permissions so I can let them do everything they need to do frequently without asking for permission yet still make it easy to approve actions that are only needed occasionally, without having to guess in advance which permissions fall into which category
amluto last Monday at 8:41 PM
> Tell us your hopes and dreams for a Cloudflare-wide CLI

No long lived tokens, or at least a very straightforward configuration to avoid them.

One option: an easy tool to make narrowly scoped, very short lived tokens, in a file, and maybe even a way to live-update the file (so you can bind mount it).

Another option: a proxy mode that can narrow the scope. So I set it up on a host, then if I want to give a container access to one domain or one bucket or whatever, I ask the host CLI to become a proxy that gives the relevant subset of its permissions to the proxied client, and I connect the container to it.

porphyra last Monday at 5:13 PM
Ironically, with the advent of AI agents and stuff, we're going back from "checkbox engineering" in GUI webpages to CLI tools. Every time I need to clear cache in cloudflare when I upload a new version of an asset, I have to click through a bunch of things. Would be nice to just message my openclaw agent to do it.
amingilani last Monday at 6:35 PM
> So we introduced a new TypeScript schema that can define the full scope of APIs, CLI commands and arguments, and context needed to generate any interface. The schema format is “just” a set of TypeScript types with conventions, linting, and guardrails to ensure consistency.

I'm confused though, why isn't that tool/framework being shown here. What is it and how does it work? It is similar to the TypeSpec tool someone else posted?

joshka last Monday at 8:25 PM
> Tell us your hopes and dreams for a Cloudflare-wide CLI

Initial impression:

-h and --help should follow the short / long standard of providing more / less info. The approach currently used is -h and --help show command lists and point at a --help-full flag. The --help-full output seems to give what I'd expect on -h. This needs to be much better - it should give enough information that a user / coding agen doesn't have to read websites / docs to understand how the feature works.

Completions are broken by default compared to the actual list of commands - i.e. dns didn't show up in the list.

When I ran cf start -h it prompted to install completions (this was odd because completions were already installed / detected). But either way, -h should never do anything interactive

Some parts of the cli seem very different to the others (e.g. cf domains -h is very different to cf dns -h). Color / lack of color, options, etc.

RobIsIT yesterday at 1:28 PM
Wrangler currently has two auth modes: OAuth, full user permissions and static tokens that are manually created in the dashboard. Neither is designed for the pattern where a human operator and one or more AI agents need different permission boundaries.

I'd like the ability to create scoped, short-lived tokens from the CLI itself. There's an open GitHub issue (13042) for this.

But, there needs to be a twist: Tokens should be sociable not just by resource type, but by specific resource ID and action.

abhinav061 yesterday at 1:01 PM
The consistency enforcement at the schema layer is the part I'd want to steal. Enforcing get vs info, standardizing --json across commands, these sound obvious but they're the things that break agent pipelines silently.

One thing I'm curious about: Cloudflare uses TypeScript for Workers and now this CLI, but Rust for the actual edge runtime. Is there a rough heuristic the team uses internally for when TS wins vs when you reach for something else?

jFriedensreich last Monday at 9:16 PM
I really dislike wrangler, though i understand the need to make something for mainstream appeal (agent cli tools + npx execution) It would be really nice if the cli was a layer on top of a git ops enabled declarative layer that was usable directly. (The terraform provider does not count...)
nzoschke last Monday at 5:45 PM
I have been experimenting with Open API spect -> CLI too. I have Go and specs auto-generated either with Huma or Fuego

https://github.com/danielgtaylor/huma https://github.com/go-fuego/fuego

The restish tool by the author of Huma is functionally correct, but I'm finding the models are not doing a great job at inferring the syntax. Admittedly I am having a hard time following the syntax too.

https://github.com/rest-sh/restish

I need to do proper evals, but it makes me wonder if `curl` or a CLI with more standard args / opts parsing will work better.

Thanks to Cloudflare for sharing their notes, anyone else figure this out?

ks2048 last Monday at 7:20 PM
Kind of ironic that AI and Agents seems to be leading to more CLI/API stuff, when AI actually allows human-like computer use for the first time.

A very welcome development - much better for machines to the APIs - but it always would have been welcome without AI.

cordwainersmith last Monday at 4:59 PM
Finally. Jumping between wrangler, the dashboard, and raw API calls has been annoying for a while. I'm keen on the local explorer most, debugging Workers locally has always been clunky. Anyone know how this plays with Terraform-managed infra?
f-serif last Monday at 5:37 PM
I wish there were CLI preview command when making changes in Cloudflare.

I have few domains on Cloudflare and when making some changes, I wish there were a way to apply the same changes to multiple domains for consistency.

CLI preview for UI action will make it possible.

iainmerrick last Monday at 10:36 PM
Tell us your hopes and dreams for a Cloudflare-wide CLI

This is only partly about the CLI and mostly about the API itself, but a straightforward and consistent way to manage environments would be nice.

I have a project using CF workers and Astro, with an ugly but working wrangler.toml defining multiple environments. When Cloudflare acquired Astro, I assumed that would be a good thing, but the latest version of the Cloudflare plugin (mandatory if you want to use the latest Astro) seems to manage environments in its own special incompatible way.

abhinav061 yesterday at 4:18 PM
On first of April, Cloudflare released EmDash with x402 support and now going big on CLI.

Cloudflare is quietly rebuilding their entire developer surface with agents as the primary consumer, not humans?

dandaka yesterday at 9:13 AM
API tokens are complete mess on CF. There are 2 or 3 types of them. Agents constantly confuse, which one does what. Documentation is not referring to them correctly. I still don't understand the difference myself and can't explain clearly to an agent. Why we need to bother at all?
amirhirsch yesterday at 12:06 AM
Please have an endpoint for up-to-minute billing with hooks for notifications and setting limits, importantly have it correlate-with/be the endpoint that shows usage analytics.

Previous-co could never get argo billing to match argo analytics, and with no support from CF over months we backed away from CF completely in fear that scale-up would present new surprise unknown/untraceable costs

Previous-previous-co is probably the largest user of web worker

chaosprint yesterday at 11:23 AM
Wrangler is a disaster. Since it's a Node.js environment, why use TOML for configuration? Can't you use TypeScript?

If you like Rust so much, I think you should just completely refactor it.

jorl17 yesterday at 5:27 AM
Fantastic. I recently automated a bunch of operations across ~50 domains with an agent, an API key, and a bunch of HTTP requests. I kept thinking that surely cloudflare had to be working on better ergonomics for this -- glad to see they were :D
upcoming-sesame last Monday at 7:41 PM
I recently let LLM deploy a service for me in gcp using gcloud cli without going to gcp dashboard even once.

it was magical

kodama-lens last Monday at 4:18 PM
I'm happy that there will be more tooling, but the reason for that (and the target audience) should not be ai agents. It should be a good experience for humans!

Tools should be tested and quality assured. Something that was utterly missing for cloudflare's unusable v5 terraform provider. Quality over quantity with a ux that has humans in mind!

bensmoif last Monday at 4:20 PM
Oh yes to this! I spent yesterday morning working this out when it smacked me in the face
acedTrex last Monday at 5:30 PM
Its so depressing that it took widespread LLM psychosis to finally get company leadership to invest in actual CLI tooling.

No, the customers never mattered but the mythical "LLM agent" is vitally important to cater too.

AbstractH24 yesterday at 5:26 PM
Love it how suddenly MS-DOS is cool again

Clearly everything is retro

0xbadcafebee yesterday at 6:50 AM
Am I the only engineer that thinks it is a bad idea to shove the entire functionality of a gigantic company into one program? Just me? Yeah, having one single gigantic interface for an entire tech company's technology products couldn't possibly be complicated...

Nobody else here ever spent years begging in pull requests for some basic functionality or bug to be fixed, and it never could be, because someone in the company decided they didn't have the time, or didn't think your feature was needed, or decided it wasn't a bug?

How about, has anyone ever had to pin multiple versions of a tool and run the different versions to get around something broken, get back something obsoleted, or fix a backwards-incompatibility?

> you can install it globally by running npm install -g cf

...I'm gonna vibe-code my own version as independent CLI tools in Go, I hope ya'll realize. Besides the security issues, besides the complexity, besides the slowness, I just don't want to be smothered by the weight of a monolith that isn't controlled by a community of users. Please keep a stable/backward-compatible HTTP API so this less difficult? And if Terraform providers have taught us anything, it's that we need copious technical and service documentation to cover the trillion little edge cases that break things. If you can expose this documentation over your API, that will solve a ton of issues.

jbethune yesterday at 5:50 AM
Great work. I like the approach of creating a schema to work with the OpenAPI spec.
raviatluri yesterday at 3:59 AM
CLIs are the new programming language. I think we should design them like a language
risyachka last Monday at 4:48 PM
> Tell us your hopes and dreams for a Cloudflare-wide CLI

Please call it flare.

K0IN last Monday at 9:24 PM
i love the idea but sad to see that we needed ai to give companies incentives to build better dx.
hybirdss last Monday at 10:32 PM
-h vs --help is one of those small things that gets very loud when it's broken
deleted last Monday at 5:30 PM
ks2048 last Monday at 7:27 PM
> TypeScript is "the lingua franca of software engineering."

Seems odd to me. I guess we all live in our bubbles.

If there is some fancy tool out there, "does it have binding for language X"? X seems to be much more commonly Python than Typescript.

colesantiago last Monday at 9:59 PM
Building CLIs don't make any sense and in fact it is the wrong way.

I wish we would stop building CLIs and instead use something like this:

https://executor.sh/

https://github.com/RhysSullivan/executor

renewiltord yesterday at 6:00 AM
Build using ecosystem with a better standard library. Too little in node so you have to install lots of deps. I have to encapsulate your tool in docker to prevent node supply chain attack. If you use a better ecosystem with larger standard library you will be installing fewer rando deps. You can do it. You are very AI forward organization. Fewer dependencies and write all code yourself. You have LLM.

Node, Python etc. allow arbitrary footgun tech to lose all local data. You have to use better tech.

anju-kushwaha last Monday at 7:03 PM
waiting this feature from long time
jeffrallen last Monday at 5:40 PM
This, but for Bunny DNS, so I can get closer to 100% European clouds. :)
j45 last Monday at 5:21 PM
Complete CLI coverage is so great to see.
latchkey last Monday at 4:21 PM
I just wish they'd fix billing notifications. The ux makes it impossible to set it up. Been complaining about that on X, got a couple people saying they would look into it, even one that gave me his email address. Pure silence.
nla last Monday at 5:46 PM
Excellente!
5701652400 last Monday at 6:53 PM
> First Principles

am I the only one put off with such language? they talk as if they invented compilers or assembly or Newton's law of gravity.

benatkin last Monday at 4:24 PM
> Right now, cf provides commands for just a small subset of Cloudflare products.

Why didn't they vibe code support for more? With this on the heels of EmDash, and this being a technical preview, it feels inconsistent.

mfbx9da4 last Monday at 5:52 PM
[flagged]
xnacly last Monday at 4:11 PM
> We write a lot of TypeScript at Cloudflare. It’s the lingua franca of software engineering.

This scares me more than Im able to admit, typescript sucks and in my opinion its way worse than the more commonly used lingua franca of computing, which I would attribute to C. At least C can be used to create shared objects i guess?