<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>LLM Tools on RockB</title><link>https://baeseokjae.github.io/tags/llm-tools/</link><description>Recent content in LLM Tools on RockB</description><image><title>RockB</title><url>https://baeseokjae.github.io/images/og-default.png</url><link>https://baeseokjae.github.io/images/og-default.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Aug 2026 04:05:51 +0000</lastBuildDate><atom:link href="https://baeseokjae.github.io/tags/llm-tools/index.xml" rel="self" type="application/rss+xml"/><item><title>Clai Command Line AI: Stdin to LLM to Stdout — A Unix-Philosophy Review</title><link>https://baeseokjae.github.io/posts/clai-ai-command-line-stdin-llm/</link><pubDate>Thu, 06 Aug 2026 04:05:51 +0000</pubDate><guid>https://baeseokjae.github.io/posts/clai-ai-command-line-stdin-llm/</guid><description>Clai is a minimalist Go CLI tool that pipes stdin through an LLM to stdout — no sessions, no REPL, no lock-in. Here is how it compares to llm, fabric, aichat, and mods.</description><content:encoded><![CDATA[<h2 id="what-is-clai--stdin-to-llm-to-stdout">What Is Clai? — Stdin to LLM to Stdout</h2>
<p>Clai is a command-line AI tool that reads text from standard input, sends it to a large language model, and writes the response to standard output. That is it. No interactive REPL, no session state, no chat history, no plugin ecosystem, no GUI. Written in Go and released as a single binary, Clai embodies the Unix philosophy: do one thing well and compose with other tools via pipes. At version 0.3.0 as of July 2026, it is an early-stage project with a clear philosophical stance that sets it apart from every other AI CLI tool on the market.</p>
<h2 id="why-does-the-unix-philosophy-matter-for-ai-tools">Why Does the Unix Philosophy Matter for AI Tools?</h2>
<p>Doug McIlroy, the inventor of Unix pipes, famously said: &ldquo;Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.&rdquo; Clai is the first AI CLI tool to take this principle literally. Every other tool in the space has drifted toward platforms — adding sessions, plugins, chat modes, RAG pipelines, and agent frameworks. Clai refuses all of that by design.</p>
<p>The practical consequence is composability. Because Clai reads stdin and writes stdout, it fits into any existing shell pipeline:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git diff --cached | clai <span style="color:#e6db74">&#34;Write a concise commit message&#34;</span> | pbcopy
</span></span><span style="display:flex;"><span>curl https://example.com/article | clai <span style="color:#e6db74">&#34;Summarize in 3 bullet points&#34;</span>
</span></span><span style="display:flex;"><span>cat server.log | grep ERROR | clai <span style="color:#e6db74">&#34;Explain what went wrong&#34;</span>
</span></span></code></pre></div><p>No other AI CLI tool integrates this cleanly because none of them are pure stdin/stdout tools. They all introduce some form of state, formatting, or interactive mode that breaks the pipe contract.</p>
<h3 id="the-anti-platform-bet">The Anti-Platform Bet</h3>
<p>The AI industry is racing to build platforms that capture users inside ecosystems. Clai makes the opposite bet: the terminal is already the platform. By refusing to add session state, Clai ensures that no user workflow becomes dependent on Clai itself. You can replace Clai with any other stdin/stdout tool tomorrow without changing your pipelines. This is a radical idea in 2026, when most AI tools are designed to maximize switching costs.</p>
<h2 id="what-are-the-key-features-of-clai">What Are the Key Features of Clai?</h2>
<p>Despite its minimalist philosophy, Clai packs meaningful functionality into its small surface area.</p>
<h3 id="built-in-prompt-system">Built-in Prompt System</h3>
<p>Clai ships with a collection of curated prompts stored as Markdown files. Users can invoke them by name:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat code.py | clai --prompt explain-code
</span></span><span style="display:flex;"><span>cat README.md | clai --prompt improve-writing
</span></span></code></pre></div><p>Prompts are plain Markdown files with a simple frontmatter format. The community can contribute prompts without a package manager — just open a pull request. This is the Unix way: prompts are text files, not plugins.</p>
<h3 id="multi-provider-support">Multi-Provider Support</h3>
<p>Clai supports six LLM providers out of the box:</p>
<table>
  <thead>
      <tr>
          <th>Provider</th>
          <th>Type</th>
          <th>Notes</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>OpenAI</td>
          <td>Cloud</td>
          <td>GPT-4o, GPT-4o-mini</td>
      </tr>
      <tr>
          <td>Anthropic</td>
          <td>Cloud</td>
          <td>Claude 3.5 Sonnet, Claude 3 Opus</td>
      </tr>
      <tr>
          <td>Google Gemini</td>
          <td>Cloud</td>
          <td>Gemini 1.5 Pro, Gemini 1.5 Flash</td>
      </tr>
      <tr>
          <td>Vertex AI</td>
          <td>Cloud</td>
          <td>Enterprise GCP deployment</td>
      </tr>
      <tr>
          <td>AWS Bedrock</td>
          <td>Cloud</td>
          <td>Enterprise AWS deployment</td>
      </tr>
      <tr>
          <td>Ollama</td>
          <td>Local</td>
          <td>Fully offline, no data leaves your machine</td>
      </tr>
  </tbody>
</table>
<p>Any OpenAI-compatible endpoint also works, which covers hundreds of self-hosted and proxy options. This provider flexibility means Clai can be the single interface to every LLM you use, whether local or cloud.</p>
<h3 id="reasoning-strategies">Reasoning Strategies</h3>
<p>Clai supports four reasoning strategies that control how the LLM processes input:</p>
<ol>
<li><strong>Chain-of-Thought (CoT)</strong> — The model reasons step by step before answering. Best for math, logic, and multi-step problems.</li>
<li><strong>Tree-of-Thought (ToT)</strong> — The model explores multiple reasoning paths simultaneously. Better for open-ended creative tasks.</li>
<li><strong>Chain-of-Draft (CoD)</strong> — The model produces concise intermediate reasoning. Faster and cheaper than full CoT.</li>
<li><strong>Self-Refine</strong> — The model generates an answer, critiques it, and refines it. Best for writing and code review.</li>
</ol>
<p>These strategies are applied via prompt engineering at the CLI level, not through model-specific APIs, which means they work across all supported providers.</p>
<h3 id="structured-output">Structured Output</h3>
<p>Clai can return structured data (JSON, YAML, CSV) by specifying an output format flag. This makes it usable in automated pipelines where the output feeds into another program:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat changelog.md | clai --format json <span style="color:#e6db74">&#34;Extract version numbers and dates&#34;</span>
</span></span></code></pre></div><p>The structured output mode is critical for Clai&rsquo;s pipeline-native design — it turns the LLM into a data transformation tool, not just a text generator.</p>
<h2 id="how-does-clai-compare-to-alternatives">How Does Clai Compare to Alternatives?</h2>
<p>The AI CLI tool landscape has several established players. Here is how Clai stacks up against the four main competitors.</p>
<h3 id="feature-comparison-table">Feature Comparison Table</h3>
<table>
  <thead>
      <tr>
          <th>Feature</th>
          <th>Clai</th>
          <th>llm (simonw)</th>
          <th>fabric</th>
          <th>aichat</th>
          <th>mods (Charm)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Language</strong></td>
          <td>Go</td>
          <td>Python</td>
          <td>Go</td>
          <td>Rust</td>
          <td>Go</td>
      </tr>
      <tr>
          <td><strong>GitHub Stars</strong></td>
          <td>~3</td>
          <td>12,316</td>
          <td>43,329</td>
          <td>10,329</td>
          <td>4,531</td>
      </tr>
      <tr>
          <td><strong>Stdin/Stdout Only</strong></td>
          <td>Yes</td>
          <td>No</td>
          <td>No</td>
          <td>No</td>
          <td>No</td>
      </tr>
      <tr>
          <td><strong>Session/Chat Mode</strong></td>
          <td>No</td>
          <td>Yes</td>
          <td>No</td>
          <td>Yes</td>
          <td>Yes</td>
      </tr>
      <tr>
          <td><strong>Plugin System</strong></td>
          <td>No</td>
          <td>Yes</td>
          <td>Yes (patterns)</td>
          <td>Yes</td>
          <td>No</td>
      </tr>
      <tr>
          <td><strong>Local LLM Support</strong></td>
          <td>Yes (Ollama)</td>
          <td>Yes</td>
          <td>Yes</td>
          <td>Yes</td>
          <td>Yes</td>
      </tr>
      <tr>
          <td><strong>Reasoning Strategies</strong></td>
          <td>4 (CoT, ToT, CoD, Self-Refine)</td>
          <td>No</td>
          <td>No</td>
          <td>No</td>
          <td>No</td>
      </tr>
      <tr>
          <td><strong>Structured Output</strong></td>
          <td>Yes</td>
          <td>Yes</td>
          <td>Partial</td>
          <td>Yes</td>
          <td>No</td>
      </tr>
      <tr>
          <td><strong>Pre-built Binaries</strong></td>
          <td>Yes</td>
          <td>Yes</td>
          <td>Yes</td>
          <td>Yes</td>
          <td>Yes</td>
      </tr>
      <tr>
          <td><strong>License</strong></td>
          <td>MIT</td>
          <td>Apache 2.0</td>
          <td>MIT</td>
          <td>MIT</td>
          <td>MIT</td>
      </tr>
      <tr>
          <td><strong>Release Stage</strong></td>
          <td>v0.3.0 (early)</td>
          <td>v1.x (mature)</td>
          <td>v1.x (mature)</td>
          <td>v1.x (mature)</td>
          <td>Deprecated</td>
      </tr>
  </tbody>
</table>
<h3 id="when-to-choose-each-tool">When to Choose Each Tool</h3>
<p><strong>Choose Clai if</strong> you want a pure pipeline tool that composes with grep, jq, curl, and git. You value the Unix philosophy and want zero lock-in. You are comfortable with an early-stage project (v0.3.0) and willing to watch it grow.</p>
<p><strong>Choose llm (simonw/llm) if</strong> you want a mature Python tool with a rich plugin ecosystem. Simon Willison&rsquo;s llm has 12,316 GitHub stars, supports dozens of models through plugins, and has session/chat mode. It is the most popular general-purpose CLI LLM tool for good reason.</p>
<p><strong>Choose fabric (danielmiessler/fabric) if</strong> you want a curated ecosystem of AI patterns and prompts. With 43,329 GitHub stars, fabric is the most starred AI CLI framework. Its pattern system is more opinionated and comprehensive than Clai&rsquo;s prompt collection, but it is also a heavier dependency.</p>
<p><strong>Choose aichat (sigoden/aichat) if</strong> you want an all-in-one tool with RAG, function calling, and agent capabilities. Aichat supports 10+ LLM providers and has the richest feature set. It is the opposite of Clai&rsquo;s minimalism — which is exactly what some users want.</p>
<p><strong>Do not choose mods (charmbracelet/mods)</strong> — it has been deprecated in favor of other Charm tools. Its 4,531 stars reflect past popularity, but the project is no longer maintained.</p>
<h3 id="the-minimalism-spectrum">The Minimalism Spectrum</h3>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 496 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>←</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>·</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>·</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>·</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>→</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='472' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='480' y='4' fill='currentColor' style='font-size:1em'>m</text>
</g>

    </svg>
  
</div>
<p>Clai sits at the far left of this spectrum. Every other tool has drifted rightward by adding features that break the pipe contract. This is not inherently good or bad — it is a design trade-off. But it means Clai occupies a niche that no other actively maintained tool fills.</p>
<h2 id="how-do-you-get-started-with-clai">How Do You Get Started with Clai?</h2>
<p>Installation is straightforward. Clai provides pre-built binaries for macOS (both Intel and Apple Silicon) and Linux (both amd64 and arm64). You can also install via Homebrew tap or <code>go install</code>.</p>
<h3 id="quick-install">Quick Install</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Homebrew</span>
</span></span><span style="display:flex;"><span>brew install maxrodrigo/tap/clai
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Go install</span>
</span></span><span style="display:flex;"><span>go install github.com/maxrodrigo/clai@latest
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Or download a binary from GitHub Releases</span>
</span></span></code></pre></div><h3 id="basic-configuration">Basic Configuration</h3>
<p>Clai needs at least one LLM provider configured. The simplest path is Ollama for fully local operation:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Set up Ollama provider</span>
</span></span><span style="display:flex;"><span>clai config set provider ollama
</span></span><span style="display:flex;"><span>clai config set model llama3.1
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Or use OpenAI</span>
</span></span><span style="display:flex;"><span>clai config set provider openai
</span></span><span style="display:flex;"><span>clai config set model gpt-4o-mini
</span></span><span style="display:flex;"><span>clai config set openai-api-key sk-...
</span></span></code></pre></div><h3 id="your-first-pipeline">Your First Pipeline</h3>
<p>Once configured, Clai works in any shell pipeline:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#75715e"># Summarize a web page</span>
</span></span><span style="display:flex;"><span>curl -s https://example.com/long-article | clai <span style="color:#e6db74">&#34;Summarize this in 3 sentences&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Explain an error</span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;TypeError: Cannot read properties of undefined (reading &#39;map&#39;)&#34;</span> | clai <span style="color:#e6db74">&#34;Explain this error and suggest a fix&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Translate text</span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;Bonjour le monde&#34;</span> | clai --prompt translate-to-english
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Extract structured data</span>
</span></span><span style="display:flex;"><span>ps aux | clai --format json <span style="color:#e6db74">&#34;List the top 5 memory-consuming processes&#34;</span>
</span></span></code></pre></div><p>Each command reads from stdin, processes through the LLM, and writes to stdout. You can pipe the output into anything: <code>pbcopy</code>, <code>&gt; file.md</code>, <code>| grep</code>, <code>| jq</code>, or another <code>clai</code> invocation.</p>
<h2 id="who-is-clai-for">Who Is Clai For?</h2>
<p>Clai is not for everyone. Its design makes deliberate trade-offs that serve specific users well.</p>
<h3 id="ideal-clai-users">Ideal Clai Users</h3>
<p><strong>Unix enthusiasts</strong> who believe in the pipe philosophy and want AI tools that respect it. If you reach for <code>grep</code>, <code>awk</code>, and <code>jq</code> before opening a GUI, Clai will feel natural.</p>
<p><strong>Pipeline builders</strong> who need AI as a composable step in automated workflows. CI/CD scripts, data processing pipelines, and code review automation benefit from a tool that never blocks on interactive input.</p>
<p><strong>Privacy-conscious developers</strong> who run local models via Ollama. Clai&rsquo;s provider-agnostic design means you can use it entirely offline with no data leaving your machine.</p>
<p><strong>Terminal power users</strong> who want a single AI interface across multiple providers. Clai&rsquo;s provider abstraction lets you switch between OpenAI, Anthropic, Gemini, and local models with a config change — no tool switching.</p>
<h3 id="who-should-look-elsewhere">Who Should Look Elsewhere</h3>
<p><strong>Chat-oriented users</strong> who want an interactive AI conversation in the terminal. Clai has no session mode. Use <code>aichat</code> or <code>llm</code> with its <code>chat</code> subcommand instead.</p>
<p><strong>Plugin seekers</strong> who want to extend the tool with custom functionality. Clai has no plugin system. Prompts are the only extension point.</p>
<p><strong>Enterprise teams</strong> who need a mature, battle-tested tool with a large community. Clai is v0.3.0 with approximately 3 GitHub stars. It is a promising project, not a production-grade platform.</p>
<h2 id="verdict-early-but-promising">Verdict: Early but Promising</h2>
<p>Clai is the most philosophically consistent AI CLI tool available in 2026. It is the only tool that fully commits to the Unix pipe model — stdin to LLM to stdout, nothing else. This purity is both its greatest strength and its most significant limitation.</p>
<h3 id="strengths">Strengths</h3>
<ul>
<li><strong>True pipe composability</strong> — works with any Unix tool in any pipeline</li>
<li><strong>Zero lock-in</strong> — no session state, no proprietary format, no switching costs</li>
<li><strong>Multi-provider</strong> — one interface for local and cloud LLMs</li>
<li><strong>Reasoning strategies</strong> — unique feature not found in any competitor</li>
<li><strong>Structured output</strong> — JSON, YAML, CSV for automated consumption</li>
<li><strong>Single binary</strong> — written in Go, no runtime dependencies</li>
</ul>
<h3 id="limitations">Limitations</h3>
<ul>
<li><strong>Very early stage</strong> — v0.3.0 with minimal community adoption</li>
<li><strong>No session/chat</strong> — intentional, but limits use cases</li>
<li><strong>No plugin system</strong> — prompts only, no code extensions</li>
<li><strong>Small community</strong> — approximately 3 GitHub stars at launch</li>
<li><strong>Limited documentation</strong> — early-stage project documentation</li>
</ul>
<h3 id="the-bottom-line">The Bottom Line</h3>
<p>Clai is worth your attention if you value the Unix philosophy and want an AI tool that amplifies your existing workflow instead of replacing it. It is not ready to replace <code>llm</code> or <code>fabric</code> for most users today, but its design direction is the right one for a specific and underserved niche. Watch this project — if it gains community traction, it could become the <code>jq</code> of AI tools: small, focused, and indispensable.</p>
<h2 id="frequently-asked-questions">Frequently Asked Questions</h2>
<h3 id="is-clai-free-to-use">Is Clai free to use?</h3>
<p>Yes, Clai is open source under the MIT License. The tool itself costs nothing. You pay only for the LLM API calls you make through your chosen provider, or nothing at all if you use a local model via Ollama.</p>
<h3 id="does-clai-work-with-local-llms">Does Clai work with local LLMs?</h3>
<p>Yes. Clai supports Ollama out of the box, which lets you run models like Llama 3.1, Mistral, and Gemma entirely on your own machine. No data ever leaves your computer when using local models.</p>
<h3 id="how-is-clai-different-from-simonwllm">How is Clai different from simonw/llm?</h3>
<p>Clai is a pure stdin/stdout pipeline tool with no session state, no chat mode, and no plugin system. Simon Willison&rsquo;s llm has sessions, plugins, and a chat REPL. Clai is minimalist by design; llm is a platform. They serve different philosophies and different use cases.</p>
<h3 id="can-i-use-clai-in-cicd-pipelines">Can I use Clai in CI/CD pipelines?</h3>
<p>Yes. Because Clai reads stdin and writes stdout with no interactive mode, it is ideal for automated pipelines. The structured output flag (&ndash;format json) makes it easy to parse results programmatically in scripts.</p>
<h3 id="what-reasoning-strategies-does-clai-support">What reasoning strategies does Clai support?</h3>
<p>Clai supports four reasoning strategies: Chain-of-Thought (step-by-step reasoning), Tree-of-Thought (multiple parallel reasoning paths), Chain-of-Draft (concise intermediate reasoning), and Self-Refine (generate, critique, refine). These are applied via prompt engineering and work across all supported LLM providers.</p>
]]></content:encoded></item></channel></rss>