<?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>Continue CLI on RockB</title><link>https://baeseokjae.github.io/tags/continue-cli/</link><description>Recent content in Continue CLI 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>Sat, 09 May 2026 21:04:44 +0000</lastBuildDate><atom:link href="https://baeseokjae.github.io/tags/continue-cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Continue CLI Guide: Async Cloud Agents for Developers (2026)</title><link>https://baeseokjae.github.io/posts/continue-cli-cloud-agents-guide-2026/</link><pubDate>Sat, 09 May 2026 21:04:44 +0000</pubDate><guid>https://baeseokjae.github.io/posts/continue-cli-cloud-agents-guide-2026/</guid><description>Complete guide to Continue CLI (cn) for async cloud agents — install, config.yaml, headless mode, GitHub Actions, and parallel agent execution.</description><content:encoded><![CDATA[<p>Continue CLI (<code>cn</code>) is a headless, model-agnostic AI coding agent that runs tasks asynchronously in the cloud or background — without blocking your terminal. Unlike interactive tools such as Cursor or GitHub Copilot Chat, <code>cn</code> executes entire workflows (PR reviews, code migrations, issue triage) as background jobs you can trigger from a shell, a GitHub Actions YAML, or a cron schedule. With 10M+ VS Code extension installs and a growing open-source CLI in Alpha as of 2026, Continue is positioning itself as the automation layer for AI-assisted development at team scale.</p>
<h2 id="what-is-continue-cli-cn-and-why-async-cloud-agents-matter">What Is Continue CLI (cn) and Why Async Cloud Agents Matter</h2>
<p>Continue CLI (<code>cn</code>) is the command-line interface for Continue.dev — a fully open-source, model-agnostic AI coding platform. The <code>cn</code> binary lets you invoke AI agents from the terminal, in CI pipelines, and inside cloud automation workflows without any graphical IDE. The &ldquo;async cloud agent&rdquo; model means the agent picks up a task, runs it to completion in the background (or in Continue&rsquo;s hosted cloud), and delivers results asynchronously — you don&rsquo;t need to sit and watch a spinner. This is a fundamentally different interaction model from interactive tools like Cursor, where the developer and AI collaborate in real time.</p>
<p>Why does async matter in 2026? Because 84–92% of developers now use or plan to use AI coding tools, and 41% of all code written this year is AI-generated (up from 27% in 2024). The bottleneck has shifted from &ldquo;can AI help me code?&rdquo; to &ldquo;how do I run AI at scale across dozens of PRs and repositories without babysitting every run?&rdquo; Continue CLI answers that directly: trigger once, get results asynchronously, and plug the output into your existing Git-based review workflow. Compared to Claude Code (which scores 80.8% on SWE-bench Verified as an interactive CLI) or Cursor&rsquo;s agent mode, Continue CLI is the only major option that is simultaneously free/open-source, model-agnostic across 20+ providers, and designed from the ground up for headless, unattended execution.</p>
<h2 id="installing-and-setting-up-continue-cli">Installing and Setting Up Continue CLI</h2>
<p>Installing Continue CLI takes under two minutes on macOS, Linux, or Windows (WSL2). The binary is named <code>cn</code> and distributed via npm, Homebrew, and direct download.</p>
<p><strong>npm (recommended for CI environments):</strong></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>npm install -g @continue/cn
</span></span><span style="display:flex;"><span>cn --version
</span></span></code></pre></div><p><strong>Homebrew (macOS/Linux):</strong></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>brew install continuedev/tap/cn
</span></span></code></pre></div><p><strong>Verify installation:</strong></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>cn --help
</span></span></code></pre></div><p>After installation, authenticate by setting your <code>CONTINUE_API_KEY</code> environment variable. You can generate a key from the Continue Mission Control dashboard at <code>app.continue.dev</code>. For local use without a cloud account, you can skip this and supply a model API key (e.g., <code>ANTHROPIC_API_KEY</code> or <code>OPENAI_API_KEY</code>) directly in <code>config.yaml</code>.</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>export CONTINUE_API_KEY<span style="color:#f92672">=</span>your-key-here
</span></span><span style="display:flex;"><span><span style="color:#75715e"># or add to ~/.bashrc / ~/.zshrc for persistence</span>
</span></span></code></pre></div><p>Run <code>cn auth</code> to confirm your credentials are valid:</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>cn auth status
</span></span><span style="display:flex;"><span><span style="color:#75715e"># → Authenticated as user@example.com</span>
</span></span></code></pre></div><p>Once authenticated, initialize a project config:</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>cd your-project
</span></span><span style="display:flex;"><span>cn init
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Creates .continue/config.yaml in the current directory</span>
</span></span></code></pre></div><p>The init command scaffolds a minimal <code>config.yaml</code> and a <code>.continue/rules/</code> directory. From here you can start running agents interactively or switch to headless mode for automation.</p>
<h2 id="interactive-vs-headless-mode--when-to-use-each">Interactive vs Headless Mode — When to Use Each</h2>
<p>Continue CLI supports two execution modes: interactive and headless. Choosing between them is one of the first decisions developers face when adopting <code>cn</code> at scale.</p>
<p><strong>Interactive mode</strong> launches a terminal UI (TUI) where you type prompts and the agent responds in a conversational loop — similar to running Claude Code or Aider. Use interactive mode when you&rsquo;re exploring a codebase, debugging a tricky problem, or prototyping a new prompt before automating it. Launch it with:</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>cn  <span style="color:#75715e"># or: cn --interactive</span>
</span></span></code></pre></div><p><strong>Headless mode</strong> is the async-first path. Pass a prompt with the <code>-p</code> flag and the agent executes without waiting for user input. This is what powers CI/CD automation:</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>cn -p <span style="color:#e6db74">&#34;Review the diff in this PR for security vulnerabilities. Output a JSON array of findings.&#34;</span>
</span></span></code></pre></div><p>When to use each:</p>
<table>
  <thead>
      <tr>
          <th>Scenario</th>
          <th>Mode</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Exploring a new codebase</td>
          <td>Interactive</td>
      </tr>
      <tr>
          <td>Writing code with step-by-step guidance</td>
          <td>Interactive</td>
      </tr>
      <tr>
          <td>PR review bot in GitHub Actions</td>
          <td>Headless</td>
      </tr>
      <tr>
          <td>Nightly code quality report</td>
          <td>Headless</td>
      </tr>
      <tr>
          <td>Issue triage on every new GitHub issue</td>
          <td>Headless</td>
      </tr>
      <tr>
          <td>Migration guide generation for a new API version</td>
          <td>Headless</td>
      </tr>
      <tr>
          <td>Pair programming session</td>
          <td>Interactive</td>
      </tr>
  </tbody>
</table>
<p>Headless mode also supports the <code>--allow</code> flag to pre-authorize file write operations — essential when the agent needs to actually modify code rather than just report:</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>cn -p <span style="color:#e6db74">&#34;Fix all ESLint errors in src/&#34;</span> --allow Write<span style="color:#f92672">()</span>
</span></span></code></pre></div><p>Without <code>--allow Write()</code>, Continue CLI defaults to read-only mode for all file system operations, which is the safe default for auditing and reporting tasks.</p>
<h2 id="configuring-continue-cli-configyaml-models-and-rules">Configuring Continue CLI: config.yaml, Models, and Rules</h2>
<p>The <code>config.yaml</code> file in <code>.continue/</code> is the central configuration for Continue CLI. It defines which LLM models to use, what rules govern agent behavior, and which prompt shortcuts are available. Getting this right is what separates a throwaway demo from a reliable team-wide automation.</p>
<p>A typical <code>config.yaml</code> for a TypeScript project using Claude Sonnet:</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-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">models</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">provider</span>: <span style="color:#ae81ff">anthropic</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">model</span>: <span style="color:#ae81ff">claude-sonnet-4-6</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">apiKey</span>: <span style="color:#ae81ff">${ANTHROPIC_API_KEY}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">contextLength</span>: <span style="color:#ae81ff">200000</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">rules</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">TypeScript Best Practices</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">path</span>: <span style="color:#ae81ff">.continue/rules/typescript.md</span>
</span></span><span style="display:flex;"><span>  - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Security Policy</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">path</span>: <span style="color:#ae81ff">.continue/rules/security.md</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">prompts</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">pr-review</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">description</span>: <span style="color:#e6db74">&#34;Full security and quality PR review&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">prompt</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">      Review the following git diff for:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">      1. Security vulnerabilities (OWASP Top 10)
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">      2. Performance regressions
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">      3. Type safety issues
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">      Output findings as a markdown list grouped by severity.</span>
</span></span></code></pre></div><p><strong>Model providers supported include:</strong> Anthropic (Claude), OpenAI (GPT-4o), Google (Gemini), Mistral, local Ollama models, Azure OpenAI, Cohere, and 15+ others. This model-agnosticism is a key differentiator — you&rsquo;re not locked into a single vendor, and you can swap models per task type (e.g., use a fast Haiku model for triage, Opus for deep reviews).</p>
<p><strong>Rules files</strong> (<code>.continue/rules/*.md</code>) let you encode team conventions as instructions the agent always follows. Think of them as a persistent system prompt baked into every agent run. A rules file might include:</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-markdown" data-lang="markdown"><span style="display:flex;"><span># TypeScript Rules
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> Always use strict null checks
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> Prefer functional array methods over for loops
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> All async functions must handle errors with try/catch
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">-</span> Never use <span style="color:#e6db74">`any`</span> — use <span style="color:#e6db74">`unknown`</span> and narrow the type
</span></span></code></pre></div><p>Rules are version-controlled alongside your code, making them reviewable, diffable, and enforceable across the whole team — a feature most competing tools lack.</p>
<h2 id="building-your-first-async-cloud-agent">Building Your First Async Cloud Agent</h2>
<p>An async cloud agent in Continue is a headless <code>cn</code> invocation that runs to completion without human intervention and delivers its output as structured data or a Git action. Here&rsquo;s a minimal end-to-end example: a PR code review agent.</p>
<p><strong>Step 1: Write the agent prompt</strong></p>
<p>Create <code>.continue/prompts/pr-review.md</code>:</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-markdown" data-lang="markdown"><span style="display:flex;"><span>You are a senior software engineer reviewing a pull request.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Review the provided git diff for:
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">1.</span> Bugs and logic errors
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">2.</span> Security vulnerabilities
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">3.</span> Missing test coverage
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">4.</span> Code style violations against our rules
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Output a JSON object with this structure:
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  &#34;summary&#34;: &#34;one-sentence summary&#34;,
</span></span><span style="display:flex;"><span>  &#34;severity&#34;: &#34;low|medium|high|critical&#34;,
</span></span><span style="display:flex;"><span>  &#34;findings&#34;: [{&#34;type&#34;: &#34;...&#34;, &#34;file&#34;: &#34;...&#34;, &#34;line&#34;: 0, &#34;description&#34;: &#34;...&#34;}],
</span></span><span style="display:flex;"><span>  &#34;approved&#34;: true|false
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p><strong>Step 2: Run it headlessly against a diff</strong></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 main..feature/my-branch &gt; /tmp/diff.txt
</span></span><span style="display:flex;"><span>cn -p <span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>cat .continue/prompts/pr-review.md<span style="color:#66d9ef">)</span><span style="color:#e6db74">\n\nDiff:\n</span><span style="color:#66d9ef">$(</span>cat /tmp/diff.txt<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>   --output json <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>   &gt; /tmp/review.json
</span></span><span style="display:flex;"><span>cat /tmp/review.json
</span></span></code></pre></div><p><strong>Step 3: Act on the output</strong></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>APPROVED<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>python3 -c <span style="color:#e6db74">&#34;import json; d=json.load(open(&#39;/tmp/review.json&#39;)); print(d[&#39;approved&#39;])&#34;</span><span style="color:#66d9ef">)</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> <span style="color:#e6db74">&#34;</span>$APPROVED<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;False&#34;</span> <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>  echo <span style="color:#e6db74">&#34;Agent flagged issues — blocking merge&#34;</span>
</span></span><span style="display:flex;"><span>  exit <span style="color:#ae81ff">1</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span></code></pre></div><p>This three-step pattern — prompt, run headlessly, parse output — is the foundation of every Continue cloud agent. More complex agents add tool use (reading files, running tests, posting to GitHub), but the core loop stays the same. For cloud execution (running the agent on Continue&rsquo;s hosted infrastructure rather than locally), you deploy the agent through Mission Control and trigger it via webhook or the Continue API.</p>
<h2 id="integrating-continue-cli-into-github-actions-cicd">Integrating Continue CLI into GitHub Actions (CI/CD)</h2>
<p>GitHub Actions is the most common deployment target for Continue CLI cloud agents. The combination lets you run AI-powered PR reviews, issue triage, and automated documentation on every push — with zero infrastructure to manage. Here&rsquo;s a production-ready GitHub Actions workflow for a PR review agent:</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-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">name</span>: <span style="color:#ae81ff">AI PR Review</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">on</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">pull_request</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">types</span>: [<span style="color:#ae81ff">opened, synchronize]</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">jobs</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">ai-review</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">runs-on</span>: <span style="color:#ae81ff">ubuntu-latest</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">permissions</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">pull-requests</span>: <span style="color:#ae81ff">write</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">contents</span>: <span style="color:#ae81ff">read</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">steps</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">uses</span>: <span style="color:#ae81ff">actions/checkout@v4</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">with</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">fetch-depth</span>: <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Install Continue CLI</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: <span style="color:#ae81ff">npm install -g @continue/cn</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Generate git diff</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: <span style="color:#ae81ff">git diff origin/main..HEAD &gt; /tmp/pr_diff.txt</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Run AI review</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">env</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">ANTHROPIC_API_KEY</span>: <span style="color:#ae81ff">${{ secrets.ANTHROPIC_API_KEY }}</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">CONTINUE_API_KEY</span>: <span style="color:#ae81ff">${{ secrets.CONTINUE_API_KEY }}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          cn -p &#34;Review this PR diff for bugs, security issues, and code quality. 
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          Output findings as a markdown report suitable for a GitHub PR comment.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          Diff:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          $(cat /tmp/pr_diff.txt)&#34; \
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          &gt; /tmp/review_output.md</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Post review as PR comment</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">uses</span>: <span style="color:#ae81ff">actions/github-script@v7</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">with</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">script</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            const fs = require(&#39;fs&#39;);
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            const review = fs.readFileSync(&#39;/tmp/review_output.md&#39;, &#39;utf8&#39;);
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            await github.rest.issues.createComment({
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">              owner: context.repo.owner,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">              repo: context.repo.repo,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">              issue_number: context.issue.number,
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">              body: `## AI Code Review\n\n${review}`
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            });</span>
</span></span></code></pre></div><p><strong>Key points for production GitHub Actions integration:</strong></p>
<ul>
<li>Store <code>ANTHROPIC_API_KEY</code> and <code>CONTINUE_API_KEY</code> as GitHub Actions secrets, never in the YAML</li>
<li>Use <code>fetch-depth: 0</code> on checkout to ensure the full Git history is available for diffing</li>
<li>The <code>--allow Write()</code> flag is not needed here since the agent is only reading code and writing to stdout; keep the default read-only posture</li>
<li>For large PRs (&gt;500 changed lines), consider chunking the diff to stay within model context limits</li>
</ul>
<p>You can extend this pattern for issue triage (<code>on: issues: types: [opened]</code>), nightly security scans (<code>on: schedule: - cron: '0 2 * * *'</code>), and release note generation (<code>on: release: types: [created]</code>).</p>
<h2 id="running-parallel-agents-for-faster-automation">Running Parallel Agents for Faster Automation</h2>
<p>One of Continue CLI&rsquo;s most powerful but underused features is parallel agent execution. Because <code>cn</code> is a CLI, you can run multiple agents simultaneously using standard shell background jobs — no special orchestration layer needed. This is dramatically faster than running agents sequentially when the tasks are independent.</p>
<p><strong>Example: Parallel analysis on a codebase</strong></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">#!/bin/bash
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#75715e"># Run three agents in parallel</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>cn -p <span style="color:#e6db74">&#34;Analyze src/ for security vulnerabilities. Output JSON.&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>   &gt; /tmp/security_report.json &amp;
</span></span><span style="display:flex;"><span>SECURITY_PID<span style="color:#f92672">=</span>$!
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>cn -p <span style="color:#e6db74">&#34;Find performance bottlenecks in src/api/. Output JSON.&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>   &gt; /tmp/perf_report.json &amp;
</span></span><span style="display:flex;"><span>PERF_PID<span style="color:#f92672">=</span>$!
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>cn -p <span style="color:#e6db74">&#34;Generate a migration guide from v1 to v2 API changes in CHANGELOG.md.&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>   &gt; /tmp/migration_guide.md &amp;
</span></span><span style="display:flex;"><span>MIGRATION_PID<span style="color:#f92672">=</span>$!
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Wait for all three to complete</span>
</span></span><span style="display:flex;"><span>wait $SECURITY_PID $PERF_PID $MIGRATION_PID
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;All agents complete.&#34;</span>
</span></span><span style="display:flex;"><span>echo <span style="color:#e6db74">&#34;Security findings: </span><span style="color:#66d9ef">$(</span>python3 -c <span style="color:#e6db74">&#34;import json; d=json.load(open(&#39;/tmp/security_report.json&#39;)); print(len(d.get(&#39;findings&#39;, [])))&#34;</span><span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span></code></pre></div><p><strong>Parallel agents in GitHub Actions</strong> use a matrix strategy:</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-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">jobs</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">ai-analysis</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">strategy</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">matrix</span>:
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">task</span>: [<span style="color:#ae81ff">security, performance, documentation]</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">runs-on</span>: <span style="color:#ae81ff">ubuntu-latest</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">steps</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">uses</span>: <span style="color:#ae81ff">actions/checkout@v4</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">run</span>: <span style="color:#ae81ff">npm install -g @continue/cn</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Run ${{ matrix.task }} agent</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">env</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">ANTHROPIC_API_KEY</span>: <span style="color:#ae81ff">${{ secrets.ANTHROPIC_API_KEY }}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          case &#34;${{ matrix.task }}&#34; in
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            security)   cn -p &#34;Security audit of src/&#34; &gt; output.md ;;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            performance) cn -p &#34;Performance analysis of src/&#34; &gt; output.md ;;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">            documentation) cn -p &#34;Generate API docs from src/&#34; &gt; output.md ;;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">          esac</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#f92672">uses</span>: <span style="color:#ae81ff">actions/upload-artifact@v4</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">with</span>:
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">name</span>: <span style="color:#ae81ff">${{ matrix.task }}-report</span>
</span></span><span style="display:flex;"><span>          <span style="color:#f92672">path</span>: <span style="color:#ae81ff">output.md</span>
</span></span></code></pre></div><p>Running three agents in parallel on a medium-sized codebase typically completes in 90–120 seconds versus 4–6 minutes sequentially. For teams running these analyses on every PR, the time saving compounds quickly. Developers already save approximately 3.6 hours per week using AI coding tools — parallel agent execution pushes that number higher for automation-heavy workflows.</p>
<h2 id="mission-control-managing-cloud-agents-at-team-scale">Mission Control: Managing Cloud Agents at Team Scale</h2>
<p>Mission Control is Continue&rsquo;s hosted control plane at <code>app.continue.dev</code>. It&rsquo;s the team-facing UI for deploying, monitoring, and governing cloud agents — especially important once you move beyond individual developer use to team-wide or organization-wide automation. Mission Control lets you share agents, set access controls, monitor run history, and trigger agents via webhook without anyone needing to install the CLI locally.</p>
<p><strong>Core Mission Control features:</strong></p>
<table>
  <thead>
      <tr>
          <th>Feature</th>
          <th>What It Does</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Agent Library</td>
          <td>Share and version agent definitions across the team</td>
      </tr>
      <tr>
          <td>Run History</td>
          <td>View inputs, outputs, and logs for every agent execution</td>
      </tr>
      <tr>
          <td>Webhooks</td>
          <td>Trigger agents from GitHub, Linear, Slack, or any HTTP event</td>
      </tr>
      <tr>
          <td>Access Controls</td>
          <td>Restrict which agents team members can trigger or modify</td>
      </tr>
      <tr>
          <td>Usage Analytics</td>
          <td>Track model costs and token consumption per agent</td>
      </tr>
      <tr>
          <td>Secrets Management</td>
          <td>Store API keys centrally, injected at run time</td>
      </tr>
  </tbody>
</table>
<p><strong>Deploying an agent to Mission Control:</strong></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"># From your project root</span>
</span></span><span style="display:flex;"><span>cn deploy --name <span style="color:#e6db74">&#34;pr-reviewer&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>          --prompt .continue/prompts/pr-review.md <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>          --model claude-sonnet-4-6 <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>          --allow ReadFile<span style="color:#f92672">()</span>
</span></span></code></pre></div><p>This registers the agent in your team&rsquo;s Mission Control workspace. Other team members can trigger it via:</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>cn run pr-reviewer --input <span style="color:#e6db74">&#34;</span><span style="color:#66d9ef">$(</span>git diff main..HEAD<span style="color:#66d9ef">)</span><span style="color:#e6db74">&#34;</span>
</span></span></code></pre></div><p>Or via the Mission Control webhook URL (suitable for GitHub Actions or Zapier integrations). For enterprise teams — 78% of Fortune 500 companies have AI-assisted development in production in 2026 — Mission Control&rsquo;s centralized governance and audit trail are often prerequisites before rolling out AI automation to the broader engineering organization.</p>
<h2 id="continue-cli-vs-claude-code-vs-cursor-cli--which-should-you-use">Continue CLI vs Claude Code vs Cursor CLI — Which Should You Use?</h2>
<p>All three tools can run AI coding agents from the command line, but they&rsquo;re optimized for different workflows. Here&rsquo;s an honest comparison for developers choosing in 2026.</p>
<p><strong>Continue CLI (<code>cn</code>)</strong> is the right choice if: you need full async/headless automation, you want model flexibility (avoid vendor lock-in), you&rsquo;re building CI/CD pipelines, or you work in an open-source project that can&rsquo;t pay for per-seat licenses. The trade-off is maturity — it&rsquo;s in Alpha, documentation gaps exist, and some enterprise features are still coming.</p>
<p><strong>Claude Code</strong> is the right choice if: you want the highest benchmark performance (80.8% SWE-bench), you&rsquo;re doing intensive single-developer sessions, or you value Anthropic&rsquo;s safety-focused approach to agentic behavior. The trade-off is cost (Claude API pricing, no free tier) and model lock-in (Anthropic only).</p>
<p><strong>Cursor CLI / Cursor Agent</strong> is the right choice if: you&rsquo;re already in the Cursor IDE ecosystem and want to extend your editor workflow to the terminal. The trade-off is that it&rsquo;s primarily designed for the interactive desktop experience — headless CI/CD use is secondary.</p>
<table>
  <thead>
      <tr>
          <th>Dimension</th>
          <th>Continue CLI</th>
          <th>Claude Code</th>
          <th>Cursor CLI</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>License</td>
          <td>Open source (free)</td>
          <td>Proprietary (paid API)</td>
          <td>Proprietary (paid)</td>
      </tr>
      <tr>
          <td>Model support</td>
          <td>20+ providers</td>
          <td>Anthropic only</td>
          <td>Multiple (IDE-centric)</td>
      </tr>
      <tr>
          <td>Headless/CI mode</td>
          <td>First-class</td>
          <td>Good</td>
          <td>Limited</td>
      </tr>
      <tr>
          <td>Interactive TUI</td>
          <td>Yes (improving)</td>
          <td>Excellent</td>
          <td>Via IDE</td>
      </tr>
      <tr>
          <td>SWE-bench score</td>
          <td>Model-dependent</td>
          <td>80.8% (Opus)</td>
          <td>N/A</td>
      </tr>
      <tr>
          <td>Team governance</td>
          <td>Mission Control</td>
          <td>Limited</td>
          <td>Team plan</td>
      </tr>
      <tr>
          <td>Config as code</td>
          <td>config.yaml + rules</td>
          <td>CLAUDE.md</td>
          <td>.cursorrules</td>
      </tr>
      <tr>
          <td>Parallel agents</td>
          <td>Shell background</td>
          <td>Worktrees</td>
          <td>No native support</td>
      </tr>
      <tr>
          <td>Alpha/Beta status</td>
          <td>Alpha (2026)</td>
          <td>GA</td>
          <td>GA</td>
      </tr>
  </tbody>
</table>
<p>The most common real-world pattern: teams use Claude Code or Cursor for interactive development sessions and Continue CLI for automated pipeline tasks. They&rsquo;re not mutually exclusive — they&rsquo;re complementary layers of the AI developer toolkit.</p>
<h2 id="real-world-use-cases-and-practical-examples">Real-World Use Cases and Practical Examples</h2>
<p>Understanding Continue CLI&rsquo;s architecture is useful, but seeing it applied to concrete problems makes the investment click. Here are five real-world patterns that teams are running in production with Continue CLI in 2026.</p>
<p><strong>1. Automated PR Review Bot</strong>
Trigger a security + quality review on every pull request. The agent reads the diff, applies team-specific rules from <code>.continue/rules/</code>, and posts a structured comment to GitHub. Teams report this catches ~30% of issues that slip through manual review, with a typical run time of 45–90 seconds per PR.</p>
<p><strong>2. Nightly Dependency Audit</strong></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"># Runs nightly via cron in GitHub Actions</span>
</span></span><span style="display:flex;"><span>cn -p <span style="color:#e6db74">&#34;Audit package.json and package-lock.json for:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">1. Known CVEs in dependencies
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">2. Outdated major versions with breaking changes
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">3. Unused dependencies that add attack surface
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">Output JSON with fix recommendations.&#34;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>&gt; /tmp/dep_audit.json
</span></span></code></pre></div><p><strong>3. Issue Triage Bot</strong>
On every new GitHub issue, a Continue CLI agent reads the issue body, classifies it (bug/feature/question), assigns severity, and adds appropriate labels — all without human intervention. The GitHub Actions trigger:</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-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">on</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">issues</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">types</span>: [<span style="color:#ae81ff">opened]</span>
</span></span></code></pre></div><p><strong>4. Release Notes Generator</strong>
Before every release, run an agent that reads the git log since the last tag, groups commits by type (feat/fix/chore), and generates a human-readable <code>CHANGELOG.md</code> entry in your project&rsquo;s voice and style.</p>
<p><strong>5. Migration Guide on Dependency Update</strong>
When a PR bumps a major dependency version (e.g., React 18 → 19), trigger an agent that reads the upstream changelog and generates a project-specific migration checklist — highlighting which of your files will be affected and what changes are needed.</p>
<p>Each of these follows the same pattern: headless <code>cn -p &quot;...&quot;</code>, structured output, downstream action. The unlock is that Continue CLI is stateless and composable — it fits into the tools your team already uses (Git, GitHub Actions, Slack webhooks) rather than requiring a new platform.</p>
<hr>
<h2 id="faq">FAQ</h2>
<p><strong>Q: Is Continue CLI free to use?</strong>
A: Yes. The <code>cn</code> CLI and Continue.dev platform are open source. You bring your own API key for whichever LLM you choose (Anthropic, OpenAI, Gemini, etc.) and pay that provider&rsquo;s standard rates. Mission Control has a hosted tier with usage limits; the self-hosted path is entirely free.</p>
<p><strong>Q: Does Continue CLI work with local models (Ollama)?</strong>
A: Yes. Set <code>provider: ollama</code> and <code>model: llama3.2</code> (or any Ollama-supported model) in your <code>config.yaml</code>. Local models are useful for sensitive codebases where you don&rsquo;t want code leaving your network. The trade-off is speed and capability compared to frontier models.</p>
<p><strong>Q: How does Continue CLI handle large codebases with many files?</strong>
A: Continue CLI uses the same context management as the IDE extension — it retrieves relevant file snippets using embeddings rather than loading the entire codebase. For very large repos, the <code>--context</code> flag lets you specify which files or directories to scope to, preventing context window overflow.</p>
<p><strong>Q: Can I run Continue CLI in a Docker container for CI/CD?</strong>
A: Yes. Use the official Node.js base image, install <code>@continue/cn</code> via npm, inject your API keys as environment variables, and run <code>cn -p &quot;...&quot;</code> as a standard step. The CLI has no GUI dependencies and works in any headless Linux environment.</p>
<p><strong>Q: What&rsquo;s the difference between Continue CLI Alpha and the stable VS Code extension?</strong>
A: The VS Code extension (10M+ installs) is the stable, production-ready product used for interactive pair programming. The CLI (<code>cn</code>) is in Alpha — it has the same core capabilities but fewer polish features, less documentation, and the API may change before Beta. For production CI/CD use, pin to a specific version (<code>@continue/cn@x.y.z</code>) to avoid unexpected breaking changes.</p>
]]></content:encoded></item></channel></rss>