<?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: Ashish Thete</title>
    <description>The latest articles on DEV Community by Ashish Thete (@ashish_thete_802b7cd9e8fa).</description>
    <link>https://dev.to/ashish_thete_802b7cd9e8fa</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4182358%2Ff5ea9fa7-9476-4624-a7a3-af3346428e37.jpg</url>
      <title>DEV Community: Ashish Thete</title>
      <link>https://dev.to/ashish_thete_802b7cd9e8fa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashish_thete_802b7cd9e8fa"/>
    <language>en</language>
    <item>
      <title>Kaiju: an agent bake-off for your repo</title>
      <dc:creator>Ashish Thete</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:56:50 +0000</pubDate>
      <link>https://dev.to/ashish_thete_802b7cd9e8fa/kaiju-an-agent-bake-off-for-your-repo-eg7</link>
      <guid>https://dev.to/ashish_thete_802b7cd9e8fa/kaiju-an-agent-bake-off-for-your-repo-eg7</guid>
      <description>&lt;p&gt;Every few weeks someone tells me a different coding agent is the best one now. They might be right, for their codebase. I wanted to know which one is best at &lt;em&gt;mine&lt;/em&gt;, and the only honest way to find out is to give them all the same task and check the results.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Kaiju&lt;/strong&gt;: a small Rust daemon that runs one coding task across several AI CLIs at once (Claude Code, Codex, Gemini), each in its own isolated git worktree, then lets &lt;strong&gt;my tests&lt;/strong&gt; decide the winner and merges that run back into my branch.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/ashishthete/kaiju" rel="noopener noreferrer"&gt;github.com/ashishthete/kaiju&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop: compare, judge, promote
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Compare
&lt;/h3&gt;

&lt;p&gt;One prompt goes to N agents. Each one runs in its own tmux session, on its own &lt;code&gt;kaiju/&amp;lt;id&amp;gt;&lt;/code&gt; branch in a separate git worktree. They share no state, so they can't clobber each other, and the dashboard shows the runs side by side with live diffs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Judge
&lt;/h3&gt;

&lt;p&gt;Hit &lt;strong&gt;Judge&lt;/strong&gt; and a local &lt;code&gt;claude -p&lt;/code&gt; ranks the runs. Two things keep it honest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The runs are &lt;strong&gt;anonymized&lt;/strong&gt; as A/B/C, so the judge can't favor a brand.&lt;/li&gt;
&lt;li&gt;If you give it a &lt;strong&gt;test command&lt;/strong&gt; (say, &lt;code&gt;cargo test&lt;/code&gt;), Kaiju runs it in each worktree and the judge weighs pass/fail over how nice the diff looks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No API key is needed, because it uses the CLI you already have signed in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Promote
&lt;/h3&gt;

&lt;p&gt;One click commits the winning run's changes and merges its branch into your workspace. It refuses if your workspace is dirty or the run is still active, and it aborts cleanly on a conflict and tells you which branch to merge by hand.&lt;/p&gt;

&lt;p&gt;Every judged bake-off is recorded per repo, so over time the &lt;strong&gt;leaderboard&lt;/strong&gt; shows which model wins most often, and whose tests pass most often, for that codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  It is also a fleet manager
&lt;/h2&gt;

&lt;p&gt;The bake-off sits on top of a general tool for running many terminal agents at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live dashboard with a real terminal per agent&lt;/strong&gt; (xterm.js over a WebSocket). You can type, send Ctrl-C and answer approval prompts from the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reachable from your phone.&lt;/strong&gt; Bind to your LAN, pair a device with a QR code, and each device gets its own revocable token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A monitor that tells you when an agent needs you.&lt;/strong&gt; It flags &lt;code&gt;waiting-for-input&lt;/code&gt;, &lt;code&gt;stuck&lt;/code&gt; and &lt;code&gt;error&lt;/code&gt;, and can alert by console bell, desktop notification or Slack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A task queue with a bounded pool&lt;/strong&gt;, so you can enqueue a backlog and let it work through a few at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adopt an existing Claude Code session&lt;/strong&gt; by id and bring it under management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget caps.&lt;/strong&gt; Set &lt;code&gt;max_tokens&lt;/code&gt; or &lt;code&gt;max_cost_usd&lt;/code&gt; and the monitor stops an agent that reaches either.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any other CLI.&lt;/strong&gt; An agent type that isn't built in is treated as the executable to run, so &lt;code&gt;kaiju start -t aider ...&lt;/code&gt; works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is local-first: a single daemon binary, no external services, bound to &lt;code&gt;127.0.0.1&lt;/code&gt; by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  And a desktop pet
&lt;/h2&gt;

&lt;p&gt;Kaiju also ships an optional desktop companion for macOS: a small animated blob that floats in the corner of your screen, above every Space and above full-screen apps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It reflects the fleet.&lt;/strong&gt; The blob's motion and tint change with what your agents are doing, so you can tell at a glance whether things are running, stuck or broken.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It tells you when an agent needs you.&lt;/strong&gt; An unread badge appears on the blob. Click it to see what the agent is asking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can answer from the pet.&lt;/strong&gt; Send a one-line reply without opening the dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pet is a separate process and is left out of the default build, so the daemon, CLI and dashboard work without it. Quitting or crashing it never affects the daemon or your agents. It is experimental and macOS only.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo build &lt;span class="nt"&gt;-p&lt;/span&gt; kaiju-pet-shell
kaiju pet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quickstart
&lt;/h2&gt;

&lt;p&gt;You need Rust, &lt;code&gt;tmux&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;, and whichever agent CLIs you want to drive on your &lt;code&gt;PATH&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install the CLI&lt;/span&gt;
cargo &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; crates/kaiju-cli

&lt;span class="c"&gt;# Start the daemon (defaults to 127.0.0.1:7800)&lt;/span&gt;
cargo run &lt;span class="nt"&gt;-p&lt;/span&gt; kaiju-daemon

&lt;span class="c"&gt;# Open the dashboard&lt;/span&gt;
open http://127.0.0.1:7800/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a bake-off, click &lt;strong&gt;Compare task&lt;/strong&gt; in the dashboard, enter a workspace and a prompt, and tick the CLIs to run.&lt;/p&gt;

&lt;p&gt;For a single agent from the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kaiju start &lt;span class="nt"&gt;--agent-type&lt;/span&gt; claude &lt;span class="nt"&gt;--workspace&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--isolate&lt;/span&gt; &lt;span class="nt"&gt;--prompt&lt;/span&gt; &lt;span class="s2"&gt;"fix the failing test"&lt;/span&gt;

kaiju list
kaiju logs &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
kaiju send &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"yes, apply that"&lt;/span&gt;
kaiju diff &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;A client (the CLI, the dashboard, or any HTTP caller) asks the daemon to create an agent.&lt;/li&gt;
&lt;li&gt;The daemon picks the matching adapter and launches the agent as the &lt;strong&gt;main process of a detached tmux session&lt;/strong&gt;. When the agent exits, the session ends, which gives a clean "completed" signal.&lt;/li&gt;
&lt;li&gt;A monitor polls each running session every 2 seconds, parses the pane through the adapter, and updates status and metrics.&lt;/li&gt;
&lt;li&gt;You read status, logs and diffs, reply with &lt;code&gt;send&lt;/code&gt;, open the live terminal, or attach to tmux directly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The workspace is layered so the domain never depends on the messy parts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Crate&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kaiju-core&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Domain types and the &lt;code&gt;Adapter&lt;/code&gt; trait. No IO.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kaiju-adapters&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-CLI adapters (Claude, Codex, Gemini) that build commands and parse output.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kaiju-daemon&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP API, dashboard, store, tmux integration, task scheduler and monitor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kaiju-cli&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;kaiju&lt;/code&gt; command-line client.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Adding a new CLI means writing one &lt;code&gt;Adapter&lt;/code&gt; and registering it. Nothing in the daemon or the CLI changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does not do well yet
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Status and metrics are partly heuristic.&lt;/strong&gt; For interactive sessions they come from parsing terminal output, which depends on the CLI version. Use &lt;code&gt;--batch&lt;/code&gt; when you need exact, machine-readable numbers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost is blank unless you supply pricing.&lt;/strong&gt; Kaiju ships no rates, because they change. You provide a small JSON file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bake-off runs are unattended by default.&lt;/strong&gt; Each run launches with its CLI's auto-approve flag so it can finish without prompting. The runs are isolated in their own worktrees, but you should know that is what "auto-approve" means before you tick it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session adoption is Claude only&lt;/strong&gt; for now.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--isolate&lt;/code&gt; needs a git workspace.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;If you already pay for more than one coding agent, a bake-off on a real task from your own backlog will tell you more than any benchmark will. Pick a task with a test that currently fails, run it across the CLIs you have, and see which one turns it green.&lt;/p&gt;

&lt;p&gt;The code is at &lt;a href="https://github.com/ashishthete/kaiju" rel="noopener noreferrer"&gt;github.com/ashishthete/kaiju&lt;/a&gt;. Issues and adapter PRs are welcome.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
