<?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: Joaquín Ruiz</title>
    <description>The latest articles on DEV Community by Joaquín Ruiz (@jokiruiz).</description>
    <link>https://dev.to/jokiruiz</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%2F1602716%2F6c91378a-c52c-4efe-9e53-2d697fc07d60.jpeg</url>
      <title>DEV Community: Joaquín Ruiz</title>
      <link>https://dev.to/jokiruiz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jokiruiz"/>
    <language>en</language>
    <item>
      <title>SpecJudge: which AI model is right-sized for your project? Ask your specs</title>
      <dc:creator>Joaquín Ruiz</dc:creator>
      <pubDate>Tue, 21 Jul 2026 12:42:30 +0000</pubDate>
      <link>https://dev.to/jokiruiz/specjudge-which-ai-model-is-right-sized-for-your-project-ask-your-specs-2edp</link>
      <guid>https://dev.to/jokiruiz/specjudge-which-ai-model-is-right-sized-for-your-project-ask-your-specs-2edp</guid>
      <description>&lt;p&gt;When you finish planning a project and it's time to actually build it, there's a small decision that quietly costs money: &lt;strong&gt;which model do you use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pick one that's too powerful for the job and you pay for capability the project never touches. Pick one that's too weak and it can't deliver — so you pay and get nothing.&lt;/p&gt;

&lt;p&gt;I got tired of guessing, so I built a tool that answers it. It's called SpecJudge, it's open source, and it runs entirely on your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;If you work with &lt;strong&gt;Spec-Driven Development&lt;/strong&gt; (SDD), you define your project first — constitution, spec, tasks — and only then start implementing. That moment, right before you write the first AI-assisted line, is when you have the richest possible description of the work and have spent exactly nothing on it.&lt;/p&gt;

&lt;p&gt;SpecJudge uses that description to answer the model question at the cheapest possible moment.&lt;/p&gt;

&lt;p&gt;It reads your SDD artifacts, and a &lt;strong&gt;local model running through Ollama&lt;/strong&gt; estimates how demanding the project actually is. That demand is crossed against a catalog of models, and you get a ranked podium of what fits best — each with its price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I care about most: right-sizing
&lt;/h2&gt;

&lt;p&gt;SpecJudge does not recommend the cheapest model. It doesn't recommend the most powerful one either. It recommends the one that's right-sized for your project.&lt;/p&gt;

&lt;p&gt;The podium ranks by fit. Price is shown for every model, but it only breaks ties between models that fit equally well. A cheaper model never wins over one that does the job better — because recommending something that can't do the job is the most expensive mistake of all.&lt;/p&gt;

&lt;p&gt;Every model gets a rating on a fixed scale:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;good Capable enough — the sweet spot&lt;/li&gt;
&lt;li&gt;overkill Capable, but you're paying for headroom you won't use&lt;/li&gt;
&lt;li&gt;fair Falls somewhat short&lt;/li&gt;
&lt;li&gt;poor Not capable enough&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Local by design
&lt;/h2&gt;

&lt;p&gt;The judge runs on your machine. Your specs — your business logic, your design decisions — never touch a third-party service, and figuring out which model to buy costs you nothing in API calls. The optional browser report (--open) is a self-contained HTML file that loads nothing from the network.&lt;/p&gt;

&lt;p&gt;This isn't a nice-to-have bolted on afterwards; it's the first principle of the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;

&lt;p&gt;You'll need Python 3.11+ and Ollama with at least one local model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull llama3.1:8b        &lt;span class="c"&gt;# a judge to evaluate your project&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;specjudge
specjudge /path/to/your/project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;On first run it lists your local models, asks which one to use as the judge, and remembers your choice. Add --open for a visual matrix in your browser, filterable by model family and by open source.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;specjudge . --open&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  It's honest about what it doesn't know
&lt;/h2&gt;

&lt;p&gt;A spending recommendation built on thin data is worse than none. So SpecJudge is explicit about how much you can trust it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sufficient — constitution, spec and tasks present: reliable recommendation.&lt;/li&gt;
&lt;li&gt;Scarce — artifacts missing or thin: recommendation issued, with a warning.&lt;/li&gt;
&lt;li&gt;Insufficient — nothing to evaluate: no recommendation at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And if no model in the catalog is capable enough for your project, it says so instead of recommending one anyway. Data states and exit codes are distinguishable, so you can wire it into CI.&lt;/p&gt;
&lt;h2&gt;
  
  
  Open source, and built to be maintained by the community
&lt;/h2&gt;

&lt;p&gt;Models and prices change every few weeks. That's the whole reason this project needs contributors.&lt;/p&gt;

&lt;p&gt;The most valuable contribution requires zero Python — the catalog lives in plain YAML, deliberately separate from the code. Adding a model is one block:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;yaml&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-new-model&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;My New Model&lt;/span&gt;
  &lt;span class="na"&gt;family&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;MyFamily&lt;/span&gt;
  &lt;span class="na"&gt;open_source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;SomeAI&lt;/span&gt;
  &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;reasoning&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high&lt;/span&gt;        &lt;span class="c1"&gt;# low | medium | high | top&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high&lt;/span&gt;
    &lt;span class="na"&gt;domain_specialization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;medium&lt;/span&gt;
  &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;input_per_million&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.50&lt;/span&gt;
    &lt;span class="na"&gt;output_per_million&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6.00&lt;/span&gt;
    &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;USD&lt;/span&gt;
    &lt;span class="na"&gt;pricing_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-07-20&lt;/span&gt;   &lt;span class="c1"&gt;# required — makes freshness verifiable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Disagree with a rating? That's a PR, not a complaint — the catalog is opinion made inspectable.&lt;/p&gt;

&lt;p&gt;It's MIT-licensed. Repo here:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/JoaquinRuiz" rel="noopener noreferrer"&gt;
        JoaquinRuiz
      &lt;/a&gt; / &lt;a href="https://github.com/JoaquinRuiz/SpecJudge" rel="noopener noreferrer"&gt;
        SpecJudge
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Local-first CLI that reads your Spec-Driven Development artifacts and recommends the best value-for-money AI model to implement them. Powered by Ollama — your specs never leave your machine.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🧑‍⚖️ SpecJudge&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Stop guessing which AI model to use. Ask your specs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SpecJudge reads your Spec-Driven Development artifacts and tells you which AI model actually
fits the job — before you spend a single token implementing it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/specjudge/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b54c30641e58db8d02a55231642f0f6638088ec91bd52c36af995f2341e6c030/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f737065636a756467652e737667" alt="PyPI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/JoaquinRuiz/SpecJudge/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/JoaquinRuiz/SpecJudge/actions/workflows/ci.yml/badge.svg" alt="CI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/JoaquinRuiz/SpecJudge/./LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.python.org/downloads/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b53facf22983aa2d774dc86c7382e9d08096b26bd96bc2d83e6885a50bacea85/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31312532422d626c75652e737667" alt="Python 3.11+"&gt;&lt;/a&gt;
&lt;a href="https://github.com/JoaquinRuiz/SpecJudge#privacy" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e24901c173e497f8ddeb2d643cf9b17a590fbfdf876b8fc7d9bb2b2616d14c65/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6f63616c2d2d66697273742d796f757225323073706563732532306e657665722532306c656176652d627269676874677265656e2e737667" alt="Local-first"&gt;&lt;/a&gt;
&lt;a href="https://github.com/JoaquinRuiz/SpecJudge#contributing" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd0b24c1e6776719edb2c273548a510d6490d8d25269a043dfabbd38419905da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e2e737667" alt="PRs welcome"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;div class="highlight highlight-text-shell-session notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ &lt;span class="pl-s1"&gt;specjudge &lt;span class="pl-c1"&gt;.&lt;/span&gt;&lt;/span&gt;

&lt;span class="pl-c1"&gt;             Model comparison (SpecJudge) - judge: devstral-small-2&lt;/span&gt;
&lt;span class="pl-c1"&gt;┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓&lt;/span&gt;
&lt;span class="pl-c1"&gt;┃    ┃ Model                    ┃ Rating ┃ Price                  ┃ Priced on  ┃&lt;/span&gt;
&lt;span class="pl-c1"&gt;┡━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩&lt;/span&gt;
&lt;span class="pl-c1"&gt;│ 🥇 │ Gemma 4 31B (local)      │ good   │ open-source/free       │ 2026-07-20 │&lt;/span&gt;
&lt;span class="pl-c1"&gt;│ 🥈 │ Gemma 4 31B              │ good   │ 0.35 out / 0.12 in     │ 2026-07-20 │&lt;/span&gt;
&lt;span class="pl-c1"&gt;│ 🥉 │ Qwen 3.6-35B-A3B (local) │ good   │ open-source/free       │ 2026-07-20 │&lt;/span&gt;
&lt;span class="pl-c1"&gt;│    │ GLM-5.1                  │ good   │ 3.04 out / 0.97 in     │ 2026-07-20 │&lt;/span&gt;
&lt;span class="pl-c1"&gt;│    │ Claude Opus 4.8          │overkill│ 25.00 out / 5.00 in    │ 2026-07-20 │&lt;/span&gt;
&lt;span class="pl-c1"&gt;└────┴──────────────────────────┴────────┴────────────────────────┴────────────┘&lt;/span&gt;

&lt;span class="pl-c1"&gt;🥇 Gold: Gemma 4 31B (local)&lt;/span&gt;
&lt;span class="pl-c1"&gt;   Right-sized: capability matches demand exactly in every dimension.&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Add &lt;code&gt;--open&lt;/code&gt; for a…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/JoaquinRuiz/SpecJudge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
PyPI: &lt;a href="https://pypi.org/project/specjudge/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://pypi.org/project/specjudge/" rel="noopener noreferrer"&gt;https://pypi.org/project/specjudge/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If SpecJudge saves you from overpaying for a model, a ⭐ on GitHub helps it reach more people. And I'd genuinely love feedback on where the judging feels off — that's the part most worth getting right.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>specdrivendevelopment</category>
    </item>
  </channel>
</rss>
