AI Coding Agents Are Here and Your CLI Is Not Ready

By  Raúl Barroso

 2 Jun 2025

command line image

After having worked on three CLIs (Heroku’s, Meroxa’s and Conduit’s) and advised on some others, I can confidently say this: if your CLI cannot fully operate without human intervention, you are screwed.

One of the main things people often tend to forget when it comes to building a CLI that is called out in the CLI developer guidelines is Interactivity. After all, many product-oriented minds want to have a similar experience in the terminal as they would on a web interface. We want to feel that we are still the drivers of machines with a specific set of options while getting things done in a fun way. Isn't that something we all want?

It is time to change the terminal mindset, and approach your CLI product differently. Not only does it need to be functional for scripting purposes; it’s possible that it won't even be a human invoking your commands at all.

Enter example A. Trying out Jules with SvelteKit.

Following a recent announcement of an ex-colleague at Heroku, I wanted to give Jules a try. If you haven’t heard about it, it’s a coding agent recently announced at the latest Google I/O.

You connect it to GitHub, you set up a prompt, and Jules does the job for you. That’s the basic idea. The demos I have watched so far focused on iterating over existing running projects, so I wanted to try something from scratch instead. I went ahead, and after connecting Jules solely to a GitHub repository I created for this purpose, I gave it this prompt:

Hey Jules, I'd like to build a web application that lets me create an event and find the best time to meet for my friends and I. Something like a Doodle. The event will have a dedicated link that I could use to share with my friends so they can submit their preferences and tell me what's the right day to meet based on the number of people who can make it. The coding languages I like are Javascript (Typescript), Ruby and Go. My preferred language for this one is Typescript actually. The web app should be mobile friendly since friends will likely use that device. Some frameworks i'm familiar with is Svelte / React. Maybe use Svelte and for styling things like TailwindCSS. I haven't written a single like of code for this application yet, though I'm fairly familiar with all this. I only want to see how you work on these type of requests. Could you help me with this?

The tasks that I got back were:

  1. Initialize project:

    • Set up a new Svelte project with Typescript support.
    • Integrate TailwindCSS for styling.
  2. Core Data Structures:

    • Define Typescript interfaces for Event (name, description, unique link/ID) and Availability (participant name, selected time slots).
  3. Basic Routing:

    • Set up basic routing for:

      • Home page (to create new events).
      • Event page (to view an event and submit availability - using a unique event ID in the URL).
      • Results page (to view the best times for an event - also using the event ID).

I approved the plan. It sounded reasonable enough to start with. All good so far, right? Well, the issue I shockingly ran into after a few minutes is that Jules couldn’t successfully figure out a nice way to do the first step in one go.

Here are only some of the things it tried

CleanShot 2025-05-28 at 5 .00.23@2x.png

CleanShot 2025-05-28 at 5 .01.00@2x.png

CleanShot 2025-05-28 at 5 .01.29@2x.png

CleanShot 2025-05-28 at 5 .02.00@2x.png

In the end, this message told me it couldn’t initialize the project the way I wanted:

CleanShot 2025-05-28 at 5 .03.10@2x.png

Whether this is a flaw in Jules or Svelte itself, I’ll leave it up to the reader, but something I can already say is that Svelte (replace this with the product you’re developing) could have made it easier for the AI coding agent to resolve.

Make your CLI AI agent ready

As of the time of writing, you can initialize a SvelteKit application in one go, unless you want to add some specifications such as the ones I mentioned on my prompt, in particular TailwindCSS.

In order to do that, you’d need to combine both, sv create with sv add. The right commands would have been:

  1. sv create doodle-app --template minimal --types ts
  2. sv add tailwindcss

The problem is that even the first command presents a prompt!:

sv create doodle-app --template minimal --types ts
┌  Welcome to the Svelte CLI! (v0.8.7)
│
◆  Project created
│
◆  What would you like to add to your project? (use arrow keys / space bar)
│  ◻ prettier (formatter - https://prettier.io)
│  ◻ eslint
│  ◻ vitest
│  ◻ playwright
│  ◻ tailwindcss
│  ◻ sveltekit-adapter
│  ◻ drizzle
│  ◻ lucia
│  ◻ mdsvex
│  ◻ paraglide
│  ◻ storybook

What if this could be done in a simpler way, including a flag to ensure there won’t be a prompt?

sv create doodle-app --type ts --addon tailwindcss --no-input

This use case made me think about those users who would use an AI coding agent like this one without having any coding knowledge. Isn’t that what AI coding agents are for, after all?

Would they be able to successfully initiate such a simple project like this if they needed to? Probably not.

Conclusion

This is not a critique of Jules or Svelte particularly. Svelte is a great front-end framework and the one that powers my personal site https://raulb.dev. What I wanted to illustrate with this post is that you need to start thinking about a different paradigms when designing and building your CLIs.

Over time, AI coding agents will become more sophisticated, and they will manage to overcome flaws like the one I highlighted here. However, you need to reconsider the current status of your CLI. If you want your product to stay relevant in the new AI ecosystem we all live in now, it needs to be documented, installed, and able to be used in a way that any coding agent could fully operate with it. Now, or it’ll be too late.

     AI Agents, CLI, Ai

Raúl Barroso

Raúl Barroso

Raúl Barroso is a coffee nerd who joined Meroxa in 2021 as a Principal Software Engineer. He was born in Tenerife and lived in San Francisco, but you can find him in Madrid these days.