<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Satish Chadive</title>
    <description>The latest articles on DEV Community by Satish Chadive (@satish_chadive_a741973542).</description>
    <link>https://dev.to/satish_chadive_a741973542</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3382010%2F29f051a2-f09e-4ce0-9791-ee3cfba66774.png</url>
      <title>DEV Community: Satish Chadive</title>
      <link>https://dev.to/satish_chadive_a741973542</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/satish_chadive_a741973542"/>
    <language>en</language>
    <item>
      <title>Zup: The Self-Healing CLI That Automates Your Dev Environment</title>
      <dc:creator>Satish Chadive</dc:creator>
      <pubDate>Wed, 23 Jul 2025 13:07:36 +0000</pubDate>
      <link>https://dev.to/satish_chadive_a741973542/zup-the-self-healing-cli-that-automates-your-dev-environment-37cb</link>
      <guid>https://dev.to/satish_chadive_a741973542/zup-the-self-healing-cli-that-automates-your-dev-environment-37cb</guid>
      <description>&lt;p&gt;We’ve all been there. You join a new project or onboard a new teammate, and what follows is a painful, multi-hour ritual of cloning repositories, installing a specific version of Node.js, setting up environment variables, running database migrations, and starting a fleet of microservices. It’s tedious, error-prone, and different for every single project.&lt;/p&gt;

&lt;p&gt;What if you could automate this entire process with a single command? And what if, when something inevitably goes wrong — a missing dependency, a port conflict, a permission error — the tool could diagnose the problem and fix itself?&lt;/p&gt;

&lt;p&gt;That’s why I created &lt;em&gt;Zup&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Zup is a fast, customizable command-line interface (CLI) built with Cobra and Go. It turns complex development environment setups into a simple, repeatable, and resilient process. By defining a sequence of steps in a simple YAML file, you can automate everything from cloning repos to running services. And with its built-in OpenAI integration, Zup can intelligently debug and resolve errors on the fly.&lt;/p&gt;

&lt;p&gt;Let’s dive in!&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Zup?
&lt;/h1&gt;

&lt;p&gt;Zup is designed to solve three core problems with local development setup:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time &amp;amp; Repetition:&lt;/strong&gt; Manual setup is a time sink. Zup automates these repetitive tasks, reducing setup time from hours to minutes. Just run zup run, and go grab a coffee. ☕&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inconsistency &amp;amp; “Works on My Machine”:&lt;/strong&gt; Zup ensures every developer on the team uses the exact same setup process, defined in a zup.yaml file that you can commit to your repository. This eliminates the "it works on my machine" syndrome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fragility &amp;amp; Error-Hunting:&lt;/strong&gt; Traditional scripts are brittle. They break on the first unexpected error, forcing you to decipher cryptic logs and search Stack Overflow. Zup’s self-healing capability is a game-changer. When a command fails, Zup queries OpenAI for a fix, presents it to you, and applies it with your approval.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting Started
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
You'll need &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;&lt;em&gt;Homebrew&lt;/em&gt;&lt;/a&gt; installed on your macOS or Linux machine.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 1: Install Zup
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Tap into the Zup repository
brew tap devglyph1/zup

# Install the Zup package
brew install zup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 2: Configure Your OpenAI API Key
&lt;/h2&gt;

&lt;p&gt;Zup's self-healing magic is powered by AI.&lt;/p&gt;

&lt;p&gt;Get your key from the OpenAI API keys page.&lt;/p&gt;

&lt;p&gt;Run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zup set-openai-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zup will prompt you to paste your key and will store it securely at &lt;code&gt;$HOME/.zup/config.yaml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it Works:&lt;/strong&gt; The zup.yaml File&lt;br&gt;
The heart of Zup is the zup.yaml config file. Here's what a zup.yaml for a full-stack app might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;setup:
  - desc: "Starting Docker containers for database and Redis"
    cmd: "docker-compose up -d"
    meta: "This requires Docker Desktop to be running."

  - desc: "Installing backend dependencies"
    cmd: "cd backend-service &amp;amp;&amp;amp; go mod tidy &amp;amp;&amp;amp; cd .."

  - desc: "Installing frontend dependencies"
    cmd: "cd frontend-app &amp;amp;&amp;amp; npm install &amp;amp;&amp;amp; cd .."
    meta: "This requires Node.js and npm to be installed. The user might need to use a node version manager like nvm."

  - desc: "Running the backend server on port 8080"
    cmd: "cd backend-service &amp;amp;&amp;amp; go run main.go"
    mode: "background"

  - desc: "Running the frontend dev server on port 3000"
    cmd: "cd frontend-app &amp;amp;&amp;amp; npm start"
    mode: "background"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each step has a &lt;em&gt;desc&lt;/em&gt;, a &lt;em&gt;cmd&lt;/em&gt;, an optional &lt;em&gt;mode&lt;/em&gt; (background or same-terminal), and an optional &lt;em&gt;meta&lt;/em&gt; field to give the AI extra context for debugging.&lt;/p&gt;

&lt;h1&gt;
  
  
  Zup Commands
&lt;/h1&gt;

&lt;h2&gt;
  
  
  zup run
&lt;/h2&gt;

&lt;p&gt;This is the main command. It reads the zup.yaml file and executes the steps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zup run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or specify a path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zup run --path ./config/dev-setup.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Self-Healing Workflow&lt;br&gt;
Here's what happens when a command fails:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution:&lt;/strong&gt; Zup tries to run a command, e.g., &lt;code&gt;docker-compose up&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Failure: The command fails because Docker isn't running.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Diagnosis:&lt;/strong&gt; Zup catches the error, sends the failed command, the error message, and meta info to OpenAI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggestion:&lt;/strong&gt; OpenAI returns a fix (&lt;code&gt;open -a Docker&lt;/code&gt;) and an explanation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interaction:&lt;/strong&gt; Zup prints the suggestion to your terminal and asks for approval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resolution:&lt;/strong&gt; You type y, Zup runs the fix, and then automatically re-runs the original docker-compose up command.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Zup has been a game-changer for my workflow. It makes onboarding faster and local development more consistent. I'd love for you to try it out and let me know what you think.&lt;/p&gt;

&lt;p&gt;⭐ Star the project on GitHub and check out the code:&lt;br&gt;
&lt;a href="https://github.com/devglyph1/homebrew-zup" rel="noopener noreferrer"&gt;https://github.com/devglyph1/homebrew-zup&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>go</category>
      <category>cli</category>
      <category>automation</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
