<?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: Vivek Shetye</title>
    <description>The latest articles on DEV Community by Vivek Shetye (@vivek_shetye).</description>
    <link>https://dev.to/vivek_shetye</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%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg</url>
      <title>DEV Community: Vivek Shetye</title>
      <link>https://dev.to/vivek_shetye</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vivek_shetye"/>
    <language>en</language>
    <item>
      <title>How I Built a Fully Local AI Coding Agent with Qwen 3.8, LM Studio, and Pi (No Paid APIs)</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 13 Oct 2026 15:33:47 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/how-i-built-a-fully-local-ai-coding-agent-with-qwen-38-lm-studio-and-pi-no-paid-apis-5bp7</link>
      <guid>https://dev.to/vivek_shetye/how-i-built-a-fully-local-ai-coding-agent-with-qwen-38-lm-studio-and-pi-no-paid-apis-5bp7</guid>
      <description>&lt;p&gt;What if you could have an AI coding agent that reads your files, writes code, executes commands, and fixes errors without sending a single model request to the cloud?&lt;/p&gt;

&lt;p&gt;No OpenAI API. No Anthropic API. No per-token billing.&lt;/p&gt;

&lt;p&gt;Just an open-weight AI model running on your own hardware.&lt;/p&gt;

&lt;p&gt;I recently decided to test exactly how practical this setup has become.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Qwen 3.8 27B, LM Studio, and Pi Coding Agent&lt;/strong&gt;, I built a fully local AI coding workflow and challenged it to create an entire web application from scratch.&lt;/p&gt;

&lt;p&gt;And the results were surprisingly good.&lt;/p&gt;

&lt;p&gt;The agent built a React + TypeScript application, executed commands, tested its work, identified errors, and fixed them without requiring my intervention.&lt;/p&gt;

&lt;p&gt;All while running a 27-billion-parameter model locally on my MacBook Pro.&lt;/p&gt;

&lt;p&gt;But there were some interesting trade-offs, especially around inference speed, hardware requirements, and context management.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk through the complete setup, explain why I chose these tools, and share what actually happened when I put the agent to work.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎥 Full video walkthrough
&lt;/h2&gt;

&lt;p&gt;In the video, I cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Installing LM Studio and downloading Qwen 3.8 27B.&lt;/li&gt;
&lt;li&gt;Understanding 4-bit quantization.&lt;/li&gt;
&lt;li&gt;Starting the local inference server.&lt;/li&gt;
&lt;li&gt;Installing Pi Coding Agent.&lt;/li&gt;
&lt;li&gt;Connecting Pi to LM Studio.&lt;/li&gt;
&lt;li&gt;Testing local tool calling.&lt;/li&gt;
&lt;li&gt;Building the Mission Control dashboard.&lt;/li&gt;
&lt;li&gt;Reviewing the results, performance, and limitations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/zgb_MkrxpRs" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What Did I Build?
&lt;/h2&gt;

&lt;p&gt;Before getting into the setup, here’s what I asked my local AI coding agent to create.&lt;/p&gt;

&lt;p&gt;An AI Agent Mission Control dashboard for monitoring and managing a team of autonomous AI agents.&lt;/p&gt;

&lt;p&gt;The application needed several features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent Overview: Monitor active agents, running tasks, completed tasks, and failures.&lt;/li&gt;
&lt;li&gt;Agent Management: View agents, their roles, current tasks, and statuses.&lt;/li&gt;
&lt;li&gt;Kanban Task Board: Organize tasks across Backlog, In Progress, Review, and Completed.&lt;/li&gt;
&lt;li&gt;Live Activity Feed: Track agent activity and task execution.&lt;/li&gt;
&lt;li&gt;Analytics Dashboard: Visualize token usage, estimated costs, success rates, and task performance.&lt;/li&gt;
&lt;li&gt;Modern UI: A responsive dark-themed interface with charts, animations, and polished interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And I didn’t want a static HTML mockup.&lt;/p&gt;

&lt;p&gt;I wanted a working React application with realistic sample data.&lt;/p&gt;

&lt;p&gt;The interesting part?&lt;/p&gt;

&lt;p&gt;The entire coding workflow ran locally.&lt;/p&gt;

&lt;p&gt;The AI model wasn’t hosted by OpenAI, Anthropic, or another cloud inference provider.&lt;/p&gt;

&lt;p&gt;It was running directly on my computer.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 The Architecture: Three Tools, One Local AI Coding Agent
&lt;/h2&gt;

&lt;p&gt;The architecture is relatively simple.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;           Developer
               |
               v
       +----------------+
       | Pi Coding Agent|
       |                |
       | Read Files     |
       | Write Code     |
       | Execute Bash   |
       | Edit Files     |
       +----------------+
               |
               | OpenAI-Compatible API
               v
       +----------------+
       |   LM Studio    |
       |                |
       | Local Inference|
       | Server         |
       +----------------+
               |
               v
       +----------------+
       |  Qwen 3.8 27B  |
       |                |
       | 4-bit Quantized|
       | Local AI Model |
       +----------------+
               |
               v
        Your Computer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each component has a specific responsibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Qwen3.8 27B — The Brain
&lt;/h3&gt;

&lt;p&gt;Qwen 3.8 27B is the language model responsible for understanding instructions, reasoning about coding tasks, and generating code.&lt;/p&gt;

&lt;p&gt;For this experiment, I used a 4-bit quantized version of the model, approximately 16GB in size.&lt;/p&gt;

&lt;p&gt;This makes it much more practical to run a large model on consumer hardware.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. LM Studio — The Local Inference Server
&lt;/h3&gt;

&lt;p&gt;LM Studio makes running open-weight AI models locally much easier.&lt;/p&gt;

&lt;p&gt;Instead of manually setting up inference frameworks, Python environments, or model-serving infrastructure, you get a desktop application where you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discover and download models.&lt;/li&gt;
&lt;li&gt;Load models into memory.&lt;/li&gt;
&lt;li&gt;Chat with models directly.&lt;/li&gt;
&lt;li&gt;Configure inference settings.&lt;/li&gt;
&lt;li&gt;Expose models through an OpenAI-compatible API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last feature is particularly important because it allows external applications to communicate with your locally running model.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Pi Coding Agent — The Hands
&lt;/h3&gt;

&lt;p&gt;A language model alone cannot automatically inspect your project files, modify code, or execute terminal commands.&lt;/p&gt;

&lt;p&gt;That’s where Pi comes in.&lt;/p&gt;

&lt;p&gt;Pi is a lightweight, extensible terminal-based AI coding agent.&lt;/p&gt;

&lt;p&gt;It provides the tools and agent loop needed to interact with your development environment.&lt;/p&gt;

&lt;p&gt;Instead of simply generating code in a chat window, Pi can use the model to work through actual coding tasks.&lt;/p&gt;

&lt;p&gt;And because Pi is relatively minimal, it’s particularly interesting for local model experiments.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 1: Install LM Studio and Download Qwen 3.8 27B
&lt;/h2&gt;

&lt;p&gt;First, download LM Studio from its official website:&lt;/p&gt;

&lt;p&gt;LM Studio: &lt;a href="https://lmstudio.ai/" rel="noopener noreferrer"&gt;https://lmstudio.ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install the application for your operating system and hardware.&lt;/p&gt;

&lt;p&gt;Once installed, open LM Studio and navigate to the model search section.&lt;/p&gt;

&lt;p&gt;Search for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwen 3.8 27B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll notice that multiple versions of the same model may be available.&lt;/p&gt;

&lt;p&gt;For this experiment, I selected a 4-bit quantized version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why 4-bit Quantization?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Running a 27-billion-parameter model at full precision can require substantial memory.&lt;/p&gt;

&lt;p&gt;Quantization reduces the precision used to store model weights.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Precision&lt;/th&gt;
&lt;th&gt;Approximate Raw Weight Storage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FP16 (16-bit)&lt;/td&gt;
&lt;td&gt;54 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INT8 (8-bit)&lt;/td&gt;
&lt;td&gt;27 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4-bit&lt;/td&gt;
&lt;td&gt;13.5 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are theoretical weight-storage estimates. Actual model files and runtime memory requirements can be higher because of quantization metadata, model architecture, KV cache, and other overhead.&lt;/p&gt;

&lt;p&gt;The 4-bit model I downloaded was approximately 16GB.&lt;/p&gt;

&lt;p&gt;That’s a significant reduction compared with FP16.&lt;/p&gt;

&lt;p&gt;Of course, quantization comes with trade-offs.&lt;/p&gt;

&lt;p&gt;Reducing precision can affect model accuracy, especially on tasks involving complex reasoning or code generation.&lt;/p&gt;

&lt;p&gt;However, modern quantization techniques can often preserve much of the original model’s capabilities while substantially reducing memory requirements.&lt;/p&gt;

&lt;p&gt;For running larger models locally, this is extremely useful.&lt;/p&gt;

&lt;p&gt;Load the Model&lt;/p&gt;

&lt;p&gt;After downloading:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open My Models in LM Studio.&lt;/li&gt;
&lt;li&gt;Select your downloaded Qwen model.&lt;/li&gt;
&lt;li&gt;Click Load Model.&lt;/li&gt;
&lt;li&gt;Configure the context length according to your available memory.&lt;/li&gt;
&lt;li&gt;Load the model.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For my experiment, I configured a context length of 200,000 tokens.&lt;/p&gt;

&lt;p&gt;Keep in mind that configuring a large context window doesn’t mean your hardware can efficiently process that entire context. Actual memory usage and performance depend on the model, runtime, and KV-cache configuration.&lt;/p&gt;

&lt;p&gt;Once the model is loaded, you can test it using LM Studio’s built-in chat interface.&lt;/p&gt;

&lt;p&gt;Try sending a simple message to verify that inference is working.&lt;/p&gt;

&lt;p&gt;Now we need to make this model accessible to our coding agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔌 Step 2: Enable LM Studio’s Local API Server
&lt;/h2&gt;

&lt;p&gt;LM Studio can expose your local model through an OpenAI-compatible API.&lt;/p&gt;

&lt;p&gt;This is what allows Pi Coding Agent to communicate with Qwen.&lt;/p&gt;

&lt;p&gt;Inside LM Studio:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the Developer tab.&lt;/li&gt;
&lt;li&gt;Enable the local server.&lt;/li&gt;
&lt;li&gt;Verify that your model is available.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By default, LM Studio uses port 1234.&lt;/p&gt;

&lt;p&gt;The local API endpoint is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:1234/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can verify that the server is responding by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:1234/v1/models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This should return information about the models exposed by your LM Studio server.&lt;/p&gt;

&lt;p&gt;At this point, your computer is acting as its own AI inference server.&lt;/p&gt;

&lt;p&gt;And the best part is that you don’t need to send inference requests to an external model provider.&lt;/p&gt;

&lt;p&gt;Note: Keep the server bound to localhost unless you intentionally need remote access. Exposing an inference endpoint to your network introduces additional security considerations.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Step 3: Install Pi Coding Agent
&lt;/h2&gt;

&lt;p&gt;Now that Qwen is running locally, we need an agent that can actually work with our codebase.&lt;/p&gt;

&lt;p&gt;For this, I’m using Pi Coding Agent.&lt;/p&gt;

&lt;p&gt;Official project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pi.dev/" rel="noopener noreferrer"&gt;https://pi.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pi is designed around a relatively small set of core capabilities.&lt;/p&gt;

&lt;p&gt;Out of the box, it provides four essential tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read files from your project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;write&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create files and write content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;edit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modify existing files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Execute terminal commands&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;And these four tools are enough to handle a surprising amount of coding work.&lt;/p&gt;

&lt;p&gt;Pi also supports extensions, allowing you to add functionality when needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Pi
&lt;/h3&gt;

&lt;p&gt;Follow the installation instructions on Pi’s official website.&lt;/p&gt;

&lt;p&gt;After installation, open your terminal and run:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;If a new Pi session opens, the installation is working.&lt;/p&gt;

&lt;p&gt;Now let’s connect it to our local model.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Step 4: Connect Pi to LM Studio
&lt;/h2&gt;

&lt;p&gt;There are multiple ways to configure Pi to use a locally hosted model.&lt;/p&gt;

&lt;p&gt;You can manually configure a custom provider, but I used a community extension called pi-lmstudio.&lt;/p&gt;

&lt;p&gt;The extension discovers models exposed by LM Studio and makes them available inside Pi.&lt;/p&gt;

&lt;p&gt;You can find it through Pi’s package directory.&lt;/p&gt;

&lt;p&gt;Install the extension using the command provided on its package page.&lt;/p&gt;

&lt;p&gt;Once installed, restart Pi:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Then open the model selector:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You should see the model currently exposed by LM Studio.&lt;/p&gt;

&lt;p&gt;Select your Qwen 3.8 27B model.&lt;/p&gt;

&lt;p&gt;And that’s it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pi is now using your locally running Qwen model instead of a hosted inference API.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The workflow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Prompt
    |
    v
Pi Coding Agent
    |
    | Sends model request
    v
LM Studio API (localhost:1234)
    |
    v
Qwen 3.8 27B
    |
    | Returns response / tool calls
    v
Pi Coding Agent
    |
    | Executes tools
    v
Your Local Project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One important distinction: Pi executes tools locally, while LM Studio handles model inference.&lt;/p&gt;

&lt;p&gt;The model generates the instructions and tool calls, but Pi is responsible for carrying them out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verify That Tool Calling Works
&lt;/h3&gt;

&lt;p&gt;Before assigning a complicated task, I recommend testing the setup with something simple.&lt;/p&gt;

&lt;p&gt;For example, create a Python file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello, World!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask Pi:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Read the Python file in this directory, explain what it does, and create a document containing the explanation.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This tests whether the model can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the instruction.&lt;/li&gt;
&lt;li&gt;Select the appropriate tools.&lt;/li&gt;
&lt;li&gt;Read a local file.&lt;/li&gt;
&lt;li&gt;Generate a summary.&lt;/li&gt;
&lt;li&gt;Write a new file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my experiment, Pi successfully completed this test.&lt;/p&gt;

&lt;p&gt;Now it was time for something more challenging.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 Step 5: Can a Local 27B Model Build an Entire Web Application?
&lt;/h2&gt;

&lt;p&gt;This was the part I was most interested in.&lt;/p&gt;

&lt;p&gt;Getting a model to answer questions is one thing.&lt;/p&gt;

&lt;p&gt;Getting it to work through a multi-step software development task is something else entirely.&lt;/p&gt;

&lt;p&gt;I started with an empty project directory.&lt;/p&gt;

&lt;p&gt;Then I asked Pi to build an AI Agent Mission Control dashboard.&lt;/p&gt;

&lt;p&gt;Here’s a condensed version of the prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a modern, polished AI Agent Mission Control dashboard for managing and monitoring a team of autonomous AI agents.

The dashboard should include:

* Overview cards for Active Agents, Running Tasks, Completed Tasks, and Failed Tasks
* A list/grid of AI agents with names, roles, status, current task, and model being used
* A Kanban-style task board with Backlog, In Progress, Review, and Completed columns
* A Live Activity Feed showing agents starting tasks, using tools, completing work, and handing tasks to other agents
* System metrics such as token usage, estimated cost, success rate, and average task duration
* A sidebar with Overview, Agents, Tasks, Activity, Analytics, and Settings

Use realistic mock data for a small AI-agent team such as Research Agent, Coding Agent, Browser Agent, Content Agent, and QA Agent.

Make it feel like a premium SaaS mission-control product: clean dark theme, excellent typography, subtle animations, status indicators, charts, responsive layout, and polished interactions.

Build the complete working website, not just a static mockup.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I let the agent work.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Happened?
&lt;/h3&gt;

&lt;p&gt;The agent created a React + TypeScript project and started implementing the application.&lt;/p&gt;

&lt;p&gt;It performed multiple tool calls, created files, wrote components, and executed terminal commands.&lt;/p&gt;

&lt;p&gt;But what impressed me most wasn’t just the generated code.&lt;/p&gt;

&lt;p&gt;It actually attempted to test and fix its own work.&lt;/p&gt;

&lt;p&gt;During the process, the agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created the application structure.&lt;/li&gt;
&lt;li&gt;Generated React components.&lt;/li&gt;
&lt;li&gt;Implemented the dashboard interface.&lt;/li&gt;
&lt;li&gt;Ran the application locally.&lt;/li&gt;
&lt;li&gt;Encountered errors.&lt;/li&gt;
&lt;li&gt;Inspected the results using screenshots.&lt;/li&gt;
&lt;li&gt;Made additional changes to address issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it completed this workflow without requiring me to manually fix the errors it encountered.&lt;/p&gt;

&lt;p&gt;The final result included the agent overview, task board, activity feed, analytics dashboard, and settings interface.&lt;/p&gt;

&lt;p&gt;To be clear, this was a demonstration application using sample data, not a production-ready autonomous agent management platform.&lt;/p&gt;

&lt;p&gt;But as an experiment in local AI-assisted software development, it was encouraging.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 The Results: Performance, Hardware, and Cost
&lt;/h2&gt;

&lt;p&gt;Here’s the actual setup I used.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Configuration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Computer&lt;/td&gt;
&lt;td&gt;MacBook Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chip&lt;/td&gt;
&lt;td&gt;Apple M5 Max&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;48GB unified memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Model&lt;/td&gt;
&lt;td&gt;Qwen3.8 27B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quantization&lt;/td&gt;
&lt;td&gt;4-bit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model Size&lt;/td&gt;
&lt;td&gt;Approximately 16GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inference Runtime&lt;/td&gt;
&lt;td&gt;LM Studio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding Agent&lt;/td&gt;
&lt;td&gt;Pi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observed Speed&lt;/td&gt;
&lt;td&gt;10–15 tokens/second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task Duration&lt;/td&gt;
&lt;td&gt;A few hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid Model API Cost&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The agent managed to build the application, but it wasn’t particularly fast.&lt;/p&gt;

&lt;p&gt;At approximately 10–15 tokens per second, complex coding tasks can take quite a while.&lt;/p&gt;

&lt;p&gt;And when the agent needs to perform multiple rounds of reasoning, tool execution, and error correction, that time adds up.&lt;/p&gt;

&lt;p&gt;Still, the fact that this entire workflow ran on consumer hardware is interesting.&lt;/p&gt;

&lt;p&gt;There was no per-token API bill.&lt;/p&gt;

&lt;p&gt;However, zero API cost doesn’t mean zero cost.&lt;/p&gt;

&lt;p&gt;You still need suitable hardware, electricity, and time.&lt;/p&gt;

&lt;p&gt;And depending on your workload, a hosted model might still be more economical or productive.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Why I Chose Pi Instead of a Larger Coding Agent
&lt;/h2&gt;

&lt;p&gt;This is one of the more interesting technical aspects of the experiment.&lt;/p&gt;

&lt;p&gt;When running AI models locally, context management becomes especially important.&lt;/p&gt;

&lt;p&gt;Every instruction, conversation message, tool definition, and tool result consumes tokens.&lt;/p&gt;

&lt;p&gt;And those tokens aren’t free from a computational perspective.&lt;/p&gt;

&lt;p&gt;Even when you’re not paying an API provider, your hardware still needs to process them.&lt;/p&gt;

&lt;p&gt;For local models, large contexts can increase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory consumption.&lt;/li&gt;
&lt;li&gt;Time to process prompts.&lt;/li&gt;
&lt;li&gt;KV-cache requirements.&lt;/li&gt;
&lt;li&gt;Overall task execution time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Pi’s design becomes interesting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Minimal Agent Harness&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pi starts with four core tools:&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="nb"&gt;read
&lt;/span&gt;write
edit
bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rather than beginning with a large collection of built-in capabilities, you can extend Pi as needed.&lt;/p&gt;

&lt;p&gt;This gives you more control over the tools and functionality available to your local model.&lt;/p&gt;

&lt;p&gt;For example, you might eventually add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser automation.&lt;/li&gt;
&lt;li&gt;Web search.&lt;/li&gt;
&lt;li&gt;Custom development tools.&lt;/li&gt;
&lt;li&gt;Project-specific workflows.&lt;/li&gt;
&lt;li&gt;Additional integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But you don’t necessarily need all of those capabilities loaded from the beginning.&lt;/p&gt;

&lt;p&gt;A smaller tool surface can help keep the setup simpler.&lt;/p&gt;

&lt;p&gt;Important: This doesn’t automatically mean Pi uses fewer tokens or performs better than Claude Code, Codex, or other coding agents in every scenario.&lt;/p&gt;

&lt;p&gt;That would require a controlled benchmark using the same model, tasks, and evaluation criteria.&lt;/p&gt;

&lt;p&gt;For my experiment, Pi was simply a good fit because I wanted a lightweight, extensible agent environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ What Are the Limitations of Running AI Coding Agents Locally?
&lt;/h2&gt;

&lt;p&gt;As promising as the results were, there are some important limitations.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Hardware Requirements
&lt;/h3&gt;

&lt;p&gt;A 27B model, even when quantized, requires a significant amount of memory.&lt;/p&gt;

&lt;p&gt;And the model weights are only part of the equation.&lt;/p&gt;

&lt;p&gt;You also need memory for inference overhead, context processing, and the operating system.&lt;/p&gt;

&lt;p&gt;Not everyone has a machine capable of comfortably running models this large.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Inference Can Be Slow
&lt;/h3&gt;

&lt;p&gt;My setup generated approximately 10–15 tokens per second.&lt;/p&gt;

&lt;p&gt;That’s usable, but considerably slower than many hosted inference services.&lt;/p&gt;

&lt;p&gt;For complicated tasks involving hundreds of tool calls or repeated debugging cycles, performance becomes a major consideration.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tool-Calling Reliability Varies
&lt;/h3&gt;

&lt;p&gt;An AI coding agent needs more than good code generation.&lt;/p&gt;

&lt;p&gt;It must reliably decide when to use tools, generate valid tool calls, interpret results, and continue working.&lt;/p&gt;

&lt;p&gt;A model might perform well on a single coding prompt but struggle with a long sequence of tool interactions.&lt;/p&gt;

&lt;p&gt;This is something I want to evaluate more systematically in future experiments.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Local Models Aren’t Always Competitive With Frontier Models
&lt;/h3&gt;

&lt;p&gt;Strong hosted models still have advantages on many complex software engineering tasks.&lt;/p&gt;

&lt;p&gt;Smaller local models may struggle with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large codebases.&lt;/li&gt;
&lt;li&gt;Complex architectural changes.&lt;/li&gt;
&lt;li&gt;Long debugging sessions.&lt;/li&gt;
&lt;li&gt;Multi-step reasoning.&lt;/li&gt;
&lt;li&gt;Maintaining consistency across many files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And quantization can introduce additional accuracy trade-offs.&lt;/p&gt;

&lt;p&gt;So I wouldn’t consider this a universal replacement for cloud-based coding agents just yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Local Inference Doesn’t Automatically Make an Agent Safe
&lt;/h3&gt;

&lt;p&gt;Running the model locally helps keep inference data under your control.&lt;/p&gt;

&lt;p&gt;But an agent that can execute shell commands and modify files still has significant permissions.&lt;/p&gt;

&lt;p&gt;A local model can make mistakes, delete files, or execute unintended commands.&lt;/p&gt;

&lt;p&gt;For sensitive projects, consider using isolated development environments, restricted permissions, version control, and approval mechanisms.&lt;/p&gt;

&lt;p&gt;Also remember that extensions or tools with network access may still communicate externally.&lt;/p&gt;

&lt;p&gt;A fully local inference endpoint is not, by itself, a guarantee that every part of an agent workflow stays offline.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔮 Are Fully Local AI Coding Agents Becoming Practical?
&lt;/h2&gt;

&lt;p&gt;I think we’re getting closer.&lt;/p&gt;

&lt;p&gt;Not because local models have suddenly become better than every cloud model.&lt;/p&gt;

&lt;p&gt;But because the overall ecosystem has improved significantly.&lt;/p&gt;

&lt;p&gt;We now have:&lt;/p&gt;

&lt;p&gt;Open-weight models capable of increasingly sophisticated coding tasks.&lt;/p&gt;

&lt;p&gt;Local inference tools like LM Studio that make downloading and running models accessible.&lt;/p&gt;

&lt;p&gt;Lightweight agent frameworks like Pi that can turn those models into useful coding assistants.&lt;/p&gt;

&lt;p&gt;And hardware capable of running models that would have been impractical for many developers just a few years ago.&lt;/p&gt;

&lt;p&gt;What’s particularly interesting is that these components are independent.&lt;/p&gt;

&lt;p&gt;You can swap the model without necessarily replacing your coding agent.&lt;/p&gt;

&lt;p&gt;You can experiment with different quantization levels.&lt;/p&gt;

&lt;p&gt;You can add or remove agent capabilities.&lt;/p&gt;

&lt;p&gt;And you can choose how much of your development workflow runs locally.&lt;/p&gt;

&lt;p&gt;For developers who care about privacy, experimentation, offline workflows, or avoiding recurring API costs, that’s a compelling direction.&lt;/p&gt;

&lt;p&gt;The next challenge isn’t just making local models generate better code.&lt;/p&gt;

&lt;p&gt;It’s making them reliable enough to complete long-running software engineering tasks with minimal human intervention.&lt;/p&gt;

&lt;p&gt;And that requires evaluating the entire agent workflow, not just the model’s benchmark scores.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;My biggest takeaway from this experiment wasn’t that a local 27B model could replace Claude Code or Codex.&lt;/p&gt;

&lt;p&gt;It was that a complete AI coding workflow can now run on a personal computer without relying on paid model APIs.&lt;/p&gt;

&lt;p&gt;And that opens up some interesting possibilities.&lt;/p&gt;

&lt;p&gt;Local-first development environments.&lt;/p&gt;

&lt;p&gt;Private AI coding assistants.&lt;/p&gt;

&lt;p&gt;Offline software development workflows.&lt;/p&gt;

&lt;p&gt;And customizable agents that developers can adapt to their own hardware and requirements.&lt;/p&gt;

&lt;p&gt;There’s still plenty of room for improvement, particularly around speed, reliability, and long-context performance.&lt;/p&gt;

&lt;p&gt;But I’m excited to see how far this ecosystem progresses.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>What if you could use Claude Code for FREE? 👀

I connected Claude Code OmniRoute free AI models from OpenRouter &amp; NVIDIA.

Here’s the full setup, trade-offs, and how it works 👇</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 06 Oct 2026 15:22:18 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/what-if-you-could-use-claude-code-for-free-i-connected-claude-code-omniroute-free-ai-204e</link>
      <guid>https://dev.to/vivek_shetye/what-if-you-could-use-claude-code-for-free-i-connected-claude-code-omniroute-free-ai-204e</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/vivek_shetye/how-to-use-claude-code-for-free-with-omniroute-maa" class="crayons-story__hidden-navigation-link"&gt;How to Use Claude Code for Free with OmniRoute&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/vivek_shetye" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" alt="vivek_shetye profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/vivek_shetye" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vivek Shetye
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vivek Shetye
                
                
              
              &lt;div id="story-author-preview-content-4807553" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/vivek_shetye" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vivek Shetye&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/vivek_shetye/how-to-use-claude-code-for-free-with-omniroute-maa" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/vivek_shetye/how-to-use-claude-code-for-free-with-omniroute-maa" id="article-link-4807553"&gt;
          How to Use Claude Code for Free with OmniRoute
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/claude"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;claude&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/vivek_shetye/how-to-use-claude-code-for-free-with-omniroute-maa" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/vivek_shetye/how-to-use-claude-code-for-free-with-omniroute-maa#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>llm</category>
      <category>tools</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Use Claude Code for Free with OmniRoute</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 06 Oct 2026 15:01:32 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/how-to-use-claude-code-for-free-with-omniroute-maa</link>
      <guid>https://dev.to/vivek_shetye/how-to-use-claude-code-for-free-with-omniroute-maa</guid>
      <description>&lt;p&gt;Claude Code is one of my favorite AI coding agents.&lt;/p&gt;

&lt;p&gt;It can inspect your codebase, edit files, execute terminal commands, use tools, and work through multi-step coding tasks directly from the terminal.&lt;/p&gt;

&lt;p&gt;But normally, the intelligence behind that experience comes from Anthropic’s Claude models.&lt;/p&gt;

&lt;p&gt;What if we kept Claude Code as the coding agent harness, but replaced the model underneath it?&lt;/p&gt;

&lt;p&gt;That’s what I wanted to test.&lt;/p&gt;

&lt;p&gt;The result looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code
     ↓
 OmniRoute
     ↓
Free AI Models
     ↓
OpenRouter / NVIDIA / Other Providers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of sending model requests directly to Anthropic, Claude Code sends them to OmniRoute, which acts as an AI gateway and routes them to the models and providers you configure.&lt;/p&gt;

&lt;p&gt;And yes — that means you can run Claude Code using free AI models. 🆓&lt;/p&gt;

&lt;p&gt;But there’s an important distinction.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;We are NOT getting Claude Sonnet or Claude Opus for free.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’re using Claude Code as the agent harness while replacing the underlying model with free models from other providers.&lt;/p&gt;

&lt;p&gt;Let’s set it up.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎥 Full video walkthrough
&lt;/h2&gt;

&lt;p&gt;I recorded the entire process step-by-step, including:&lt;/p&gt;

&lt;p&gt;✅ Installing OmniRoute locally&lt;br&gt;
✅ Connecting OpenRouter&lt;br&gt;
✅ Connecting NVIDIA&lt;br&gt;
✅ Importing free AI models&lt;br&gt;
✅ Configuring Claude Code&lt;br&gt;
✅ Fixing the authentication issue I encountered&lt;br&gt;
✅ Launching Claude Code through OmniRoute&lt;br&gt;
✅ Running Claude Code with free models&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/oGCqTnu1YHk" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Claude Code Is More Than the Model
&lt;/h2&gt;

&lt;p&gt;An important idea behind this experiment is separating the agent harness from the LLM powering it.&lt;/p&gt;

&lt;p&gt;Claude Code provides the agent experience around the model.&lt;/p&gt;

&lt;p&gt;It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inspect files&lt;/li&gt;
&lt;li&gt;understand your project&lt;/li&gt;
&lt;li&gt;modify code&lt;/li&gt;
&lt;li&gt;execute terminal commands&lt;/li&gt;
&lt;li&gt;use tools&lt;/li&gt;
&lt;li&gt;iterate through coding tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Normally, Claude Code communicates with Anthropic’s models.&lt;/p&gt;

&lt;p&gt;But if we place an AI gateway between Claude Code and the model, the architecture becomes much more flexible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────┐
│   Claude Code   │
│  Coding Agent   │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│    OmniRoute    │
│   AI Gateway    │
└────────┬────────┘
         │
         ▼
┌─────────────────────────┐
│ OpenRouter │ NVIDIA │ … │
└─────────────────────────┘
         │
         ▼
┌─────────────────┐
│ Free AI Models  │
└─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code remains the interface and coding agent.&lt;/p&gt;

&lt;p&gt;OmniRoute controls where the model requests go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔀 That separation is what makes this experiment interesting.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 1: Install OmniRoute
&lt;/h2&gt;

&lt;p&gt;The first thing we need is OmniRoute.&lt;/p&gt;

&lt;p&gt;OmniRoute is an open-source AI gateway that can sit between applications such as Claude Code and different AI model providers.&lt;/p&gt;

&lt;p&gt;Install OmniRoute using the installation instructions for your operating system.&lt;/p&gt;

&lt;p&gt;Once installed, start it:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;After a few seconds, the OmniRoute server should start.&lt;/p&gt;

&lt;p&gt;Open the dashboard URL shown in your terminal.&lt;/p&gt;

&lt;p&gt;You now have a local AI gateway running on your machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔌 Step 2: Connect an AI Provider
&lt;/h2&gt;

&lt;p&gt;Next, we need models.&lt;/p&gt;

&lt;p&gt;For my setup, I connected two providers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenRouter&lt;/li&gt;
&lt;li&gt;NVIDIA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s start with OpenRouter.&lt;/p&gt;

&lt;p&gt;Inside the OmniRoute dashboard, navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Providers → OpenRouter → Add Connection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate an API key from your OpenRouter account and add it to the connection.&lt;/p&gt;

&lt;p&gt;If you only want free models, enable the option to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Only import free models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the connection.&lt;/p&gt;

&lt;p&gt;OmniRoute will import the available free models associated with that provider.&lt;/p&gt;

&lt;p&gt;You can also run health checks from the dashboard to see which models are currently available. 🩺&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Step 3: Add NVIDIA Models
&lt;/h2&gt;

&lt;p&gt;I also connected NVIDIA to give OmniRoute another source of models.&lt;/p&gt;

&lt;p&gt;The process is similar.&lt;/p&gt;

&lt;p&gt;Navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Providers → NVIDIA → Add Connection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate an NVIDIA API key, paste it into OmniRoute, validate it, and save the connection.&lt;/p&gt;

&lt;p&gt;Again, I configured the connection to import the free models available through the provider.&lt;/p&gt;

&lt;p&gt;Now the architecture starts becoming more interesting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──→ OpenRouter → Free Models
Claude Code → OmniRoute
                    └──→ NVIDIA ───→ Free Models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of Claude Code being tied directly to one model provider, the gateway can expose models from multiple providers.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 Step 4: Connect Claude Code to OmniRoute
&lt;/h2&gt;

&lt;p&gt;Now for the important part.&lt;/p&gt;

&lt;p&gt;If you don’t already have Claude Code installed, install it using Anthropic’s official installation instructions.&lt;/p&gt;

&lt;p&gt;Once Claude Code is available, OmniRoute can configure it automatically.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;omniroute setup-claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OmniRoute creates profiles that allow Claude Code to communicate through the gateway.&lt;/p&gt;

&lt;p&gt;However, I ran into an issue here.&lt;/p&gt;




&lt;h3&gt;
  
  
  🐛 The Authentication Problem I Encountered
&lt;/h3&gt;

&lt;p&gt;My OmniRoute API was protected with authentication.&lt;/p&gt;

&lt;p&gt;Normally, you should be able to create an access token and pass it while configuring Claude Code.&lt;/p&gt;

&lt;p&gt;In my testing, however, the API key parameter wasn’t being respected correctly and Claude Code continued returning an authentication error.&lt;/p&gt;

&lt;p&gt;So I used a temporary workaround.&lt;/p&gt;

&lt;p&gt;I disabled API authentication in OmniRoute.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ Important Security Warning
&lt;/h3&gt;

&lt;p&gt;I would only consider doing this when OmniRoute is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;running locally&lt;/li&gt;
&lt;li&gt;bound appropriately&lt;/li&gt;
&lt;li&gt;not exposed publicly&lt;/li&gt;
&lt;li&gt;not accessible from an untrusted network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not expose an unauthenticated AI gateway to the internet.&lt;/p&gt;

&lt;p&gt;After disabling authentication locally, I ran the Claude setup again and the connection succeeded.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Step 5: Launch Claude Code with a Free Model
&lt;/h2&gt;

&lt;p&gt;Now we can actually launch Claude Code through OmniRoute.&lt;/p&gt;

&lt;p&gt;I used OmniRoute’s coding profile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;omniroute launch --profile auto-coding
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The auto-coding profile allows OmniRoute to select among the coding models available in the configuration.&lt;/p&gt;

&lt;p&gt;And that’s it.&lt;/p&gt;

&lt;p&gt;Claude Code starts normally.&lt;/p&gt;

&lt;p&gt;Except now the architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code
     ↓
OmniRoute
     ↓
Alternative AI Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code
     ↓
Anthropic Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🎉 Claude Code is now running using the models routed through OmniRoute.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  So… Is Claude Code Actually Free Now?
&lt;/h2&gt;

&lt;p&gt;Kind of.&lt;/p&gt;

&lt;p&gt;And this distinction is important.&lt;/p&gt;

&lt;p&gt;You’re not getting Anthropic’s Claude Sonnet or Opus models for free.&lt;/p&gt;

&lt;p&gt;You’re using the Claude Code agent experience with alternative models that may have free access tiers or free routes.&lt;/p&gt;

&lt;p&gt;Think of it as separating two pieces:&lt;/p&gt;

&lt;p&gt;Claude Code = Agent Harness&lt;br&gt;
Free Model = Intelligence&lt;br&gt;
OmniRoute = Routing Layer&lt;/p&gt;

&lt;p&gt;This means the quality of the experience depends heavily on the model you choose.&lt;/p&gt;

&lt;p&gt;And that brings us to the trade-offs.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚡ Trade-Off #1: Free Models Have Limits
&lt;/h2&gt;

&lt;p&gt;Free doesn’t mean unlimited.&lt;/p&gt;

&lt;p&gt;Free model providers commonly impose things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;request limits&lt;/li&gt;
&lt;li&gt;token quotas&lt;/li&gt;
&lt;li&gt;rate limits&lt;/li&gt;
&lt;li&gt;temporary availability restrictions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A model that works today may also become unavailable or limited later.&lt;/p&gt;

&lt;p&gt;For experimentation and personal projects, this can still be extremely useful.&lt;/p&gt;

&lt;p&gt;For production workloads, you’ll want something more predictable.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 Trade-Off #2: Not Every Model Works Well with Claude Code
&lt;/h2&gt;

&lt;p&gt;This is probably the biggest issue.&lt;/p&gt;

&lt;p&gt;Claude Code isn’t simply sending a prompt and displaying some text.&lt;/p&gt;

&lt;p&gt;The model needs to participate in an agentic coding workflow.&lt;/p&gt;

&lt;p&gt;That means capabilities such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Understand task
      ↓
Inspect files
      ↓
Call tools
      ↓
Modify code
      ↓
Run commands
      ↓
Observe results
      ↓
Continue reasoning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some models handle these workflows surprisingly well.&lt;/p&gt;

&lt;p&gt;Others don’t.&lt;/p&gt;

&lt;p&gt;A model might be excellent at generating code but struggle with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tool calling&lt;/li&gt;
&lt;li&gt;instruction following&lt;/li&gt;
&lt;li&gt;long coding tasks&lt;/li&gt;
&lt;li&gt;maintaining context&lt;/li&gt;
&lt;li&gt;structured outputs&lt;/li&gt;
&lt;li&gt;multi-step agent workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So don’t evaluate a model purely by its coding benchmark score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent compatibility matters too.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Trade-Off #3: Your Code Goes to the Upstream Provider
&lt;/h2&gt;

&lt;p&gt;This one is important.&lt;/p&gt;

&lt;p&gt;When you route Claude Code through another provider, your prompts and potentially parts of your codebase are being sent to that provider.&lt;/p&gt;

&lt;p&gt;Before using this setup with private repositories or sensitive code, check the provider’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;privacy policy&lt;/li&gt;
&lt;li&gt;data retention policy&lt;/li&gt;
&lt;li&gt;model training policy&lt;/li&gt;
&lt;li&gt;API terms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would be particularly careful with proprietary company code, credentials, customer information, and production secrets.&lt;/p&gt;




&lt;h2&gt;
  
  
  📜 Trade-Off #4: Check Provider Terms
&lt;/h2&gt;

&lt;p&gt;You should also check the terms for every provider you connect.&lt;/p&gt;

&lt;p&gt;Some providers may have restrictions around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automation&lt;/li&gt;
&lt;li&gt;proxies&lt;/li&gt;
&lt;li&gt;redistribution&lt;/li&gt;
&lt;li&gt;free API usage&lt;/li&gt;
&lt;li&gt;rate limits&lt;/li&gt;
&lt;li&gt;agent workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few minutes reading the provider’s terms can save you from account problems later.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Why This Is More Interesting Than Just “Claude Code for Free”
&lt;/h2&gt;

&lt;p&gt;The cost savings are interesting.&lt;/p&gt;

&lt;p&gt;But I think the architecture is the bigger story.&lt;/p&gt;

&lt;p&gt;We’re increasingly separating the AI application from the AI model.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Application
      ↓
One Model
      ↓
One Provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we can build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──→ Model A
                    │
AI Agent → Gateway ─┼──→ Model B
                    │
                    ├──→ Model C
                    │
                    └──→ Model D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the gateway becomes an abstraction layer between the agent and the models.&lt;/p&gt;

&lt;p&gt;That opens up some interesting possibilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Use Different Models for Different Coding Tasks
&lt;/h2&gt;

&lt;p&gt;Imagine routing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Simple code edits
      ↓
Small / Free Model
Complex debugging
      ↓
Powerful Reasoning Model
Documentation
      ↓
Fast Cheap Model
Large Refactor
      ↓
Frontier Coding Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Which AI model should power my coding agent?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the better question may eventually become:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Which model should handle this particular task?”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s a very different architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Claude Code doesn’t necessarily have to be coupled to a single model provider.&lt;/p&gt;

&lt;p&gt;By introducing an AI gateway like OmniRoute, you can separate the coding agent experience from the model powering it.&lt;/p&gt;

&lt;p&gt;That gives you room to experiment with:&lt;/p&gt;

&lt;p&gt;🔀 multiple providers&lt;br&gt;
🆓 free models&lt;br&gt;
💰 cheaper models&lt;br&gt;
🧠 stronger reasoning models&lt;br&gt;
⚡ faster models&lt;br&gt;
🛠️ models optimized for specific tasks&lt;/p&gt;

&lt;p&gt;Free models won’t replace Claude Sonnet or Opus for every coding task.&lt;/p&gt;

&lt;p&gt;But that’s not really the point.&lt;/p&gt;

&lt;p&gt;The interesting part is being able to choose.&lt;/p&gt;

&lt;p&gt;And as AI coding agents become more capable, I suspect the question will increasingly shift from:&lt;/p&gt;

&lt;p&gt;“Which coding agent has the best model?”&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;“Which models should my coding agent use for each task?”&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>claude</category>
    </item>
    <item>
      <title>JEV Explained: Why It Could Matter for AI Agents</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Wed, 30 Sep 2026 19:20:27 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/jev-explained-why-it-could-matter-for-ai-agents-51om</link>
      <guid>https://dev.to/vivek_shetye/jev-explained-why-it-could-matter-for-ai-agents-51om</guid>
      <description>&lt;p&gt;What if one of the most interesting new AI models doesn’t generate text at all?&lt;/p&gt;

&lt;p&gt;No chatbot responses.&lt;/p&gt;

&lt;p&gt;No code generation.&lt;/p&gt;

&lt;p&gt;No essays.&lt;/p&gt;

&lt;p&gt;Instead, it is designed to do something much narrower:&lt;/p&gt;

&lt;p&gt;Make decisions for software.&lt;/p&gt;

&lt;p&gt;That’s the idea behind JEV, a new model from TypeSafe AI.&lt;/p&gt;

&lt;p&gt;And the numbers TypeSafe AI is reporting immediately caught my attention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ Decisions in milliseconds&lt;/li&gt;
&lt;li&gt;💰 Around $0.042 per million input tokens&lt;/li&gt;
&lt;li&gt;📤 No charge for output tokens&lt;/li&gt;
&lt;li&gt;📊 On selected workflows, TypeSafe reports nearly 200× faster and 400× cheaper performance compared with the LLMs it tested&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are TypeSafe AI’s own workflow comparisons, not universal benchmarks. Different workloads could produce very different results.&lt;/p&gt;

&lt;p&gt;But the more interesting question isn’t whether JEV can beat an LLM on every benchmark.&lt;/p&gt;

&lt;p&gt;It’s:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Why are we using generative LLMs for decisions that don’t require generating anything?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question becomes especially interesting when you start building AI agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎥 Full video walkthrough
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/N-tZTJOvSJM" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What Is JEV?
&lt;/h2&gt;

&lt;p&gt;The easiest way to understand JEV is to compare it with a traditional Large Language Model.&lt;/p&gt;

&lt;p&gt;Imagine a customer sends this message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“My package was supposed to arrive yesterday, but tracking hasn’t updated.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You want your system to decide which team should handle it.&lt;/p&gt;

&lt;p&gt;Possible options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;billing
shipping
other
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask an LLM and it might generate something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This request should be routed to the shipping department because
the customer is asking about a delayed package.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That works.&lt;/p&gt;

&lt;p&gt;But your application doesn’t necessarily need an explanation.&lt;/p&gt;

&lt;p&gt;It needs:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Or, even better, probabilities associated with the available decisions.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;shipping:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.94&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;billing:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.02&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;other:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.04&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your software can then decide what happens next.&lt;/p&gt;

&lt;p&gt;That’s the fundamental difference.&lt;/p&gt;

&lt;p&gt;LLMs generate tokens.&lt;/p&gt;

&lt;p&gt;JEV evaluates predefined decisions.&lt;/p&gt;

&lt;p&gt;The output is primarily intended for software to act on, rather than for a human to read as a conversation.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Why Remove Text Generation?
&lt;/h2&gt;

&lt;p&gt;Modern LLMs are incredibly capable.&lt;/p&gt;

&lt;p&gt;They can reason through complex problems, understand large codebases, write software, analyze documents, interact with tools, and orchestrate workflows.&lt;/p&gt;

&lt;p&gt;But that flexibility comes with computational cost.&lt;/p&gt;

&lt;p&gt;Now consider a typical AI agent.&lt;/p&gt;

&lt;p&gt;The agent might need a powerful model to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understand a repository&lt;/li&gt;
&lt;li&gt;debug an application&lt;/li&gt;
&lt;li&gt;reason through a complicated problem&lt;/li&gt;
&lt;li&gt;generate a patch&lt;/li&gt;
&lt;li&gt;plan a multi-step workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But between those large reasoning tasks, agents constantly make smaller decisions.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which model should handle this task?
Did the previous step succeed?
Should I retry?
Does this command require approval?
Which tool should run next?
Should this result be escalated?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Today, we often solve these problems with…&lt;/p&gt;

&lt;p&gt;another LLM call.&lt;/p&gt;

&lt;p&gt;And that works.&lt;/p&gt;

&lt;p&gt;But we’re invoking a generative model when the actual output we need might simply be:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;That is the category of problem TypeSafe AI is targeting with what it calls System One Models.&lt;/p&gt;

&lt;p&gt;JEV is its first public model.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔄 JEV vs LLMs: The Important Difference
&lt;/h2&gt;

&lt;p&gt;Think about the two approaches like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Traditional LLM&lt;/th&gt;
&lt;th&gt;JEV&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generates text&lt;/td&gt;
&lt;td&gt;Evaluates decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Predicts the next token&lt;/td&gt;
&lt;td&gt;Scores predefined options&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Great for reasoning and generation&lt;/td&gt;
&lt;td&gt;Designed for bounded judgments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flexible output&lt;/td&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human-readable responses&lt;/td&gt;
&lt;td&gt;Software-actionable decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Useful for open-ended problems&lt;/td&gt;
&lt;td&gt;Useful for constrained choices&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;JEV isn’t necessarily trying to become the model inside your AI coding agent that understands an entire repository and writes a feature.&lt;/p&gt;

&lt;p&gt;Instead, it could potentially sit beside that model.&lt;/p&gt;

&lt;p&gt;A powerful LLM handles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reasoning
coding
planning
generation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JEV handles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;classification
routing
scoring
triage
bounded decisions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;The LLM generates. JEV decides.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 Why JEV Could Be Interesting for AI Agents
&lt;/h2&gt;

&lt;p&gt;This is where I think things get particularly interesting.&lt;/p&gt;

&lt;p&gt;Consider an agent built using something like Hermes Agent, Claude Code, or another agent framework.&lt;/p&gt;

&lt;p&gt;A simplified architecture today might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
Agent
 ↓
LLM
 ↓
Tools
 ↓
LLM
 ↓
Tools
 ↓
LLM
 ↓
Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The LLM becomes responsible for almost everything.&lt;/p&gt;

&lt;p&gt;But imagine separating different responsibilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             ┌── Retrieval / Memory
             │
User → Agent ├── JEV → Fast decisions
             │
             ├── Powerful LLM → Reasoning + Coding
             │
             └── Tools → Actions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now different components handle different types of work.&lt;/p&gt;

&lt;p&gt;That’s closer to the architecture I would want to experiment with.&lt;/p&gt;

&lt;p&gt;Here are three workflows I’d test first.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. 🔀 Intelligent Model Routing
&lt;/h3&gt;

&lt;p&gt;This might be the most obvious use case.&lt;/p&gt;

&lt;p&gt;Suppose your AI agent has access to multiple models.&lt;/p&gt;

&lt;p&gt;Maybe you have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fast/Cheap Model
        +
Powerful/Expensive Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simple task arrives:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Rename this variable across these files.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Do you really need your most expensive reasoning model?&lt;/p&gt;

&lt;p&gt;Probably not.&lt;/p&gt;

&lt;p&gt;But then another task arrives:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Debug this race condition across multiple distributed services.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s a very different problem.&lt;/p&gt;

&lt;p&gt;Instead of sending everything to the strongest model, JEV could potentially classify the incoming task.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task
 ↓
JEV
 ↓
┌─────────────────┐
│ SIMPLE          │ → Fast/Cheap Model
│ COMPLEX         │ → Powerful Model
│ UNCERTAIN       │ → Powerful Model
└─────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This could make model routing much more deliberate.&lt;/p&gt;

&lt;p&gt;And importantly, you’d want to measure whether the routing mistakes cost more than the model savings.&lt;/p&gt;

&lt;p&gt;Cheap routing isn’t useful if important tasks constantly go to the wrong model.&lt;/p&gt;

&lt;p&gt;That’s why I’d want to test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cost
Latency
Routing accuracy
Escalation rate
Task success rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;rather than looking only at token pricing.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. 🛡️ Risk Detection Before Tool Execution
&lt;/h3&gt;

&lt;p&gt;This one gets even more interesting.&lt;/p&gt;

&lt;p&gt;AI agents increasingly interact with real tools.&lt;/p&gt;

&lt;p&gt;They can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;execute shell commands&lt;/li&gt;
&lt;li&gt;modify files&lt;/li&gt;
&lt;li&gt;interact with APIs&lt;/li&gt;
&lt;li&gt;deploy applications&lt;/li&gt;
&lt;li&gt;access databases&lt;/li&gt;
&lt;li&gt;manage infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before executing an action, you might want another layer that evaluates what kind of action is being attempted.&lt;/p&gt;

&lt;p&gt;Imagine an agent generates:&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="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ./build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;versus:&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="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those commands clearly shouldn’t be treated the same way.&lt;/p&gt;

&lt;p&gt;A decision model could evaluate questions such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Does this affect production?
Does this modify sensitive files?
Could this expose credentials?
Is this destructive?
Should a human approve this?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The architecture might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent
   ↓
Proposed Tool Action
   ↓
JEV
   ↓
Risk Classification
   ↓
Policy Engine
   ↓
ALLOW / BLOCK / REQUIRE APPROVAL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There’s an important distinction here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JEV shouldn’t necessarily control permissions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your application policy should.&lt;/p&gt;

&lt;p&gt;JEV could provide a classification or score, while deterministic code decides what actually happens.&lt;/p&gt;

&lt;p&gt;That keeps the security boundary outside the model.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. 🔎 Agent Output Triage
&lt;/h3&gt;

&lt;p&gt;Imagine you have an autonomous agent processing hundreds or thousands of tasks.&lt;/p&gt;

&lt;p&gt;Most results might be perfectly normal.&lt;/p&gt;

&lt;p&gt;Some won’t be.&lt;/p&gt;

&lt;p&gt;Today, you could send every result through another powerful LLM for verification.&lt;/p&gt;

&lt;p&gt;But that potentially means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1000 tasks
+
1000 verification LLM calls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead, a smaller decision model could potentially triage those outputs.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent Result
     ↓
    JEV
     ↓
 ┌───────────────┐
 │ Looks Normal  │ → Finish
 │ Uncertain     │ → Stronger LLM
 │ Suspicious    │ → Human Review
 └───────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your expensive reasoning model only gets involved when necessary.&lt;/p&gt;

&lt;p&gt;Again, whether this actually improves the system depends on the accuracy of that triage.&lt;/p&gt;

&lt;p&gt;But architecturally, it’s an interesting pattern.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ What Could the Future AI Agent Stack Look Like?
&lt;/h2&gt;

&lt;p&gt;This leads to the bigger idea behind JEV.&lt;/p&gt;

&lt;p&gt;Over the last few years, we’ve increasingly treated the LLM as the center of everything.&lt;/p&gt;

&lt;p&gt;Need classification?&lt;/p&gt;

&lt;p&gt;Use an LLM.&lt;/p&gt;

&lt;p&gt;Need routing?&lt;/p&gt;

&lt;p&gt;Use an LLM.&lt;/p&gt;

&lt;p&gt;Need scoring?&lt;/p&gt;

&lt;p&gt;Use an LLM.&lt;/p&gt;

&lt;p&gt;Need validation?&lt;/p&gt;

&lt;p&gt;Use another LLM.&lt;/p&gt;

&lt;p&gt;Need to judge that LLM?&lt;/p&gt;

&lt;p&gt;Use another LLM. 😅&lt;/p&gt;

&lt;p&gt;That architecture works because modern models are incredibly flexible.&lt;/p&gt;

&lt;p&gt;But flexibility doesn’t necessarily mean every task should use the same model.&lt;/p&gt;

&lt;p&gt;A future AI agent stack could instead look something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────┐
│      Agent Orchestration    │
├─────────────────────────────┤
│                             │
│ Retrieval → Context         │
│                             │
│ JEV → Fast Decisions        │
│                             │
│ LLM → Reasoning + Coding    │
│                             │
│ Tools → Actions             │
│                             │
├─────────────────────────────┤
│       Policy / Control      │
└─────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each component has a more specialized responsibility.&lt;/p&gt;

&lt;p&gt;The reasoning model doesn’t need to make every tiny routing decision.&lt;/p&gt;

&lt;p&gt;The decision model doesn’t need to understand and rewrite an entire codebase.&lt;/p&gt;

&lt;p&gt;And tools remain responsible for actually interacting with the outside world.&lt;/p&gt;




&lt;h2&gt;
  
  
  💰 What About JEV’s Cost and Speed Claims?
&lt;/h2&gt;

&lt;p&gt;This is where it’s important to separate an interesting architecture from benchmark hype.&lt;/p&gt;

&lt;p&gt;TypeSafe AI reports pricing around:&lt;/p&gt;

&lt;p&gt;$0.042 per million input tokens, with no output-token charge.&lt;/p&gt;

&lt;p&gt;It also reports latency in the millisecond range.&lt;/p&gt;

&lt;p&gt;And on selected company workflows, TypeSafe says JEV achieved results approaching:&lt;/p&gt;

&lt;p&gt;200× faster&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;400× cheaper&lt;/p&gt;

&lt;p&gt;than the LLM approaches it compared against.&lt;/p&gt;

&lt;p&gt;Those numbers sound impressive.&lt;/p&gt;

&lt;p&gt;But they should be interpreted in context.&lt;/p&gt;

&lt;p&gt;These aren’t universal statements that JEV is “400× better than LLMs.”&lt;/p&gt;

&lt;p&gt;They’re results from specific workflows and comparisons.&lt;/p&gt;

&lt;p&gt;The test I’d really like to see is much simpler.&lt;/p&gt;

&lt;p&gt;Take the same real-world decision workload and run it through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;JEV
vs.
Small LLM
vs.
Frontier LLM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then compare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Accuracy
False positives
False negatives
Latency
Cost
Reliability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because if JEV costs almost nothing but makes significantly more bad routing decisions, the token savings don’t matter.&lt;/p&gt;

&lt;p&gt;On the other hand, if it can handle those decisions reliably at a fraction of the latency and cost…&lt;/p&gt;

&lt;p&gt;then things get interesting very quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Specialized Models vs One Giant Model
&lt;/h2&gt;

&lt;p&gt;And this is the part of JEV that interests me most.&lt;/p&gt;

&lt;p&gt;Not whether JEV itself becomes the dominant solution.&lt;/p&gt;

&lt;p&gt;Not whether every AI agent suddenly needs it.&lt;/p&gt;

&lt;p&gt;And definitely not whether it “replaces LLMs.”&lt;/p&gt;

&lt;p&gt;It probably shouldn’t.&lt;/p&gt;

&lt;p&gt;The interesting idea is that not every problem inside an AI agent needs to become another LLM generation.&lt;/p&gt;

&lt;p&gt;We might eventually build agent systems where:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Retrieval handles context.
Decision models handle bounded judgments.
Reasoning models handle difficult problems.
Coding models handle software development.
Tools handle actions.
Policy code controls permissions.
Agents orchestrate everything.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of asking one increasingly powerful model to do absolutely everything, we could build systems from specialized intelligence components.&lt;/p&gt;

&lt;p&gt;And JEV is an interesting early example of what that architecture could look like.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>learning</category>
    </item>
    <item>
      <title>Run Hermes Agent Inside Docker: A Safer Setup for Autonomous AI Agents 🐳</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 22 Sep 2026 16:35:22 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/run-hermes-agent-inside-docker-a-safer-setup-for-autonomous-ai-agents-2992</link>
      <guid>https://dev.to/vivek_shetye/run-hermes-agent-inside-docker-a-safer-setup-for-autonomous-ai-agents-2992</guid>
      <description>&lt;p&gt;Giving an AI agent unrestricted access to your entire computer is probably not a great idea.&lt;/p&gt;

&lt;p&gt;Especially when that agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run terminal commands&lt;/li&gt;
&lt;li&gt;Install packages&lt;/li&gt;
&lt;li&gt;Create and modify files&lt;/li&gt;
&lt;li&gt;Access external services&lt;/li&gt;
&lt;li&gt;Work autonomously through multi-step tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those capabilities are exactly what make Hermes Agent powerful.&lt;/p&gt;

&lt;p&gt;But they also raise an important question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Where should all of those actions actually run?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of running Hermes Agent directly on my host machine, I decided to run it inside a Docker container and explicitly control what the agent can access.&lt;/p&gt;

&lt;p&gt;The goal isn’t to make Hermes magically “secure” by putting it inside Docker.&lt;/p&gt;

&lt;p&gt;The goal is much simpler:&lt;/p&gt;

&lt;p&gt;Give the agent access to what it needs, not your entire computer.&lt;/p&gt;

&lt;p&gt;In this tutorial, I’ll walk through the complete setup.&lt;/p&gt;

&lt;p&gt;We’ll configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hermes Agent inside Docker&lt;/li&gt;
&lt;li&gt;Persistent storage for memory, sessions, and configuration&lt;/li&gt;
&lt;li&gt;A limited filesystem boundary&lt;/li&gt;
&lt;li&gt;Hermes Gateway&lt;/li&gt;
&lt;li&gt;Hermes Dashboard&lt;/li&gt;
&lt;li&gt;Dashboard authentication&lt;/li&gt;
&lt;li&gt;Hermes Desktop connected to the container&lt;/li&gt;
&lt;li&gt;Some important security considerations when containerizing autonomous AI agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎥 Prefer watching instead?&lt;/p&gt;

&lt;p&gt;I walk through the complete setup step-by-step in the video:&lt;/p&gt;

&lt;p&gt;Watch the full Hermes Agent Docker tutorial on YouTube →&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/inzB_q34QCA" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 Why Run Hermes Agent Inside Docker?
&lt;/h2&gt;

&lt;p&gt;Hermes isn’t just a chatbot.&lt;/p&gt;

&lt;p&gt;It can interact with your environment and perform actions on your behalf.&lt;/p&gt;

&lt;p&gt;For example, depending on the tools you enable, Hermes can work with files, execute terminal commands, install dependencies, use external services, and autonomously work through tasks.&lt;/p&gt;

&lt;p&gt;That’s incredibly useful.&lt;/p&gt;

&lt;p&gt;But if the agent runs directly on your main machine, you need to think carefully about what files, credentials, and system resources it can reach.&lt;/p&gt;

&lt;p&gt;That’s where Docker becomes useful.&lt;/p&gt;

&lt;p&gt;Instead of letting Hermes operate directly across my host environment, I can put it inside a container and explicitly decide what crosses that boundary.&lt;/p&gt;

&lt;p&gt;The architecture we’ll build looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────── HOST MACHINE ────────────────────┐
│                                                      │
│  Docker                                              │
│                                                      │
│  ~/.hermes-docker  ───────────────┐                  │
│                                   │                  │
│                    ┌──────────────▼──────────────┐   │
│                    │      Docker Container       │   │
│                    │                             │   │
│                    │      Hermes Agent           │   │
│                    │                             │   │
│                    │  /opt/data                  │   │
│                    │  Gateway                    │   │
│                    │  Dashboard                  │   │
│                    └─────────────────────────────┘   │
│                                                      │
│  Personal files / SSH keys / other directories       │
│              NOT mounted into container              │
│                                                      │
└──────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes gets a dedicated environment and a directory for its persistent data.&lt;/p&gt;

&lt;p&gt;The rest of the machine stays outside that boundary unless I explicitly expose something.&lt;/p&gt;




&lt;h2&gt;
  
  
  🐳 Step 1: Install Docker
&lt;/h2&gt;

&lt;p&gt;On macOS or Windows, install Docker Desktop and make sure the Docker engine is running.&lt;/p&gt;

&lt;p&gt;On Linux, you can install Docker Engine using the instructions for your distribution.&lt;/p&gt;

&lt;p&gt;You can verify Docker is available with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once Docker is working, we can create an isolated environment for Hermes.&lt;/p&gt;




&lt;h2&gt;
  
  
  📁 Step 2: Create a Dedicated Directory for Hermes
&lt;/h2&gt;

&lt;p&gt;First, create a directory specifically for the Dockerized Hermes instance:&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="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.hermes-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This directory is important for two reasons.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Persistence
&lt;/h3&gt;

&lt;p&gt;Docker containers are disposable.&lt;/p&gt;

&lt;p&gt;If we remove and recreate the Hermes container, we don’t want to lose things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Skills&lt;/li&gt;
&lt;li&gt;Profiles&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;li&gt;Other persistent agent data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ll store those outside the container in ~/.hermes-docker.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. It becomes part of our trust boundary
&lt;/h3&gt;

&lt;p&gt;Anything inside this directory is intentionally available to Hermes.&lt;/p&gt;

&lt;p&gt;Instead of mounting my entire home directory, I’m giving the agent one dedicated location.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 3: Run the Hermes Setup Inside Docker
&lt;/h2&gt;

&lt;p&gt;Now we can start the official Hermes Agent image and launch the setup process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.hermes-docker:/opt/data &lt;span class="se"&gt;\&lt;/span&gt;
  nousresearch/hermes-agent setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most important part here is:&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="nt"&gt;-v&lt;/span&gt; ~/.hermes-docker:/opt/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The -v option creates a bind mount between a directory on the host and a directory inside the container.&lt;/p&gt;

&lt;p&gt;Think of it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HOST                           CONTAINER
~/.hermes-docker   ───────▶   /opt/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The left side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.hermes-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is the directory we just created on the host.&lt;/p&gt;

&lt;p&gt;The right side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is where that directory appears inside the Docker container.&lt;/p&gt;

&lt;p&gt;So when Hermes saves configuration, sessions, memory, skills, or other persistent data under &lt;strong&gt;&lt;em&gt;/opt/data&lt;/em&gt;&lt;/strong&gt;, those files are actually stored in &lt;strong&gt;&lt;em&gt;~/.hermes-docker&lt;/em&gt;&lt;/strong&gt; on the host.&lt;/p&gt;

&lt;p&gt;That means we can destroy and recreate the container without losing the Hermes environment.&lt;/p&gt;

&lt;p&gt;More importantly, we’re sharing one dedicated directory instead of the entire host filesystem.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Step 4: Configure Hermes Agent
&lt;/h2&gt;

&lt;p&gt;The first run downloads the required Docker image and launches the Hermes setup wizard.&lt;/p&gt;

&lt;p&gt;From there, follow the normal Hermes configuration process.&lt;/p&gt;

&lt;p&gt;In my setup, I:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use the quick setup&lt;/li&gt;
&lt;li&gt;Authenticate with Nous Portal&lt;/li&gt;
&lt;li&gt;Select a model&lt;/li&gt;
&lt;li&gt;Keep the terminal backend local&lt;/li&gt;
&lt;li&gt;Skip messaging platform configuration for now&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once setup finishes, the configuration is stored in our persistent directory.&lt;/p&gt;

&lt;p&gt;That means future containers using the same mount can reuse it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌐 Step 5: Start the Hermes Gateway and Dashboard
&lt;/h2&gt;

&lt;p&gt;Now we can start Hermes as a background container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; hermes-docker &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--restart&lt;/span&gt; unless-stopped &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.hermes-docker:/opt/data &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 18642:8642 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 19119:9119 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;HERMES_DASHBOARD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="se"&gt;\&lt;/span&gt;
  nousresearch/hermes-agent gateway run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are a few important things happening here.&lt;/p&gt;

&lt;p&gt;Run in the background&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="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;starts the container in detached mode.&lt;/p&gt;

&lt;p&gt;Give the container a name&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="nt"&gt;--name&lt;/span&gt; hermes-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;makes it easier to manage later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs hermes-docker
docker stop hermes-docker
docker start hermes-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the persistent directory&lt;/p&gt;

&lt;p&gt;We’re mounting the same directory again:&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="nt"&gt;-v&lt;/span&gt; ~/.hermes-docker:/opt/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So Hermes sees the configuration we created during setup.&lt;/p&gt;

&lt;p&gt;Enable the dashboard&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="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;HERMES_DASHBOARD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;enables the Hermes Dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔌 Understanding the Port Mapping
&lt;/h2&gt;

&lt;p&gt;You’ll notice I’m using:&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="nt"&gt;-p&lt;/span&gt; 18642:8642
&lt;span class="nt"&gt;-p&lt;/span&gt; 19119:9119
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docker port mappings follow this pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HOST_PORT:CONTAINER_PORT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;18642 → 8642
19119 → 9119
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ports on the right are the ones Hermes uses inside the container.&lt;/p&gt;

&lt;p&gt;The ports on the left are the ones exposed on my Mac.&lt;/p&gt;

&lt;p&gt;I’m deliberately using different host ports because I already have another Hermes instance running locally and don’t want the ports to clash.&lt;/p&gt;

&lt;p&gt;If you’re running only the Docker instance, you can use the default ports 8642 and 9119 instead of 18642 and 19119.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Step 6: Verify the Container Is Running
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the hermes-docker container running.&lt;/p&gt;

&lt;p&gt;If something isn’t working, one of the first places to look is the container logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs hermes-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This becomes particularly useful when configuring the dashboard.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Step 7: Configure Dashboard Authentication
&lt;/h2&gt;

&lt;p&gt;When I initially opened the dashboard, it didn’t start correctly.&lt;/p&gt;

&lt;p&gt;Instead of hiding that part from the tutorial, I kept it in because it’s a useful troubleshooting example.&lt;/p&gt;

&lt;p&gt;Checking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs hermes-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;showed that the dashboard needed an authentication provider.&lt;/p&gt;

&lt;p&gt;Hermes provides authentication options for securing dashboard access.&lt;/p&gt;

&lt;p&gt;I configured mine using Nous Portal authentication.&lt;/p&gt;

&lt;p&gt;Once authentication was configured, the dashboard started successfully.&lt;/p&gt;

&lt;p&gt;With my port mapping, I can access it at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;localhost:19119
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And now the Hermes Dashboard is running while Hermes itself remains inside the container.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Step 8: Chat With Hermes Inside the Container
&lt;/h2&gt;

&lt;p&gt;You can also enter the running container directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; hermes-docker bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then start Hermes:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;At this point you’re interacting with Hermes from a terminal inside the Docker container, rather than running Hermes directly on the host.&lt;/p&gt;

&lt;p&gt;That’s useful for testing.&lt;/p&gt;

&lt;p&gt;But I don’t necessarily want to enter the container every time I want to use the agent.&lt;/p&gt;

&lt;p&gt;There’s a better option.&lt;/p&gt;




&lt;h2&gt;
  
  
  🖥️ Step 9: Connect Hermes Desktop to the Docker Instance
&lt;/h2&gt;

&lt;p&gt;Hermes Desktop can connect to the Gateway running inside our container.&lt;/p&gt;

&lt;p&gt;Open Hermes Desktop and navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings → Gateway → Remote Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then configure it to use the Gateway exposed by your Docker container.&lt;/p&gt;

&lt;p&gt;In my setup, that’s my url:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;http://localhost:19119
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After authenticating, save the configuration and reconnect.&lt;/p&gt;

&lt;p&gt;Now Hermes Desktop communicates with the Dockerized Hermes instance.&lt;/p&gt;

&lt;p&gt;So from the user’s perspective, I still get the convenient desktop interface.&lt;/p&gt;

&lt;p&gt;But the agent itself is operating inside the container.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ What Does Docker Actually Protect?
&lt;/h2&gt;

&lt;p&gt;This is probably the most important part of the tutorial.&lt;/p&gt;

&lt;p&gt;Running an AI agent inside Docker does not automatically make it safe.&lt;/p&gt;

&lt;p&gt;Docker gives us a useful isolation boundary, but that boundary depends heavily on how the container is configured.&lt;/p&gt;

&lt;p&gt;For example, imagine doing this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host machine
      │
      ▼
Entire home directory
      │
      ▼
Docker container
      │
      ▼
Hermes Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ve technically containerized Hermes.&lt;/p&gt;

&lt;p&gt;But you’ve also exposed a huge portion of your machine to it.&lt;/p&gt;

&lt;p&gt;That’s not the setup I want.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host machine
      │
      ├── Personal files       ❌
      ├── SSH keys             ❌
      ├── Other projects       ❌
      ├── Docker socket        ❌
      │
      └── ~/.hermes-docker     ✅
                │
                ▼
          Hermes Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The container should get access only to the resources required for the task.&lt;/p&gt;




&lt;h3&gt;
  
  
  🚫 1. Don’t Mount Your Entire Home Directory
&lt;/h3&gt;

&lt;p&gt;If you mount your complete home directory into the container, Hermes could potentially access whatever the container’s permissions allow within that mount.&lt;/p&gt;

&lt;p&gt;That might include personal files, source code, configuration files, credentials, or other sensitive data.&lt;/p&gt;

&lt;p&gt;That’s why I’m using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.hermes-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as a dedicated location instead.&lt;/p&gt;

&lt;p&gt;If Hermes doesn’t need something, don’t expose it.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔑 2. Be Careful With Credentials
&lt;/h3&gt;

&lt;p&gt;The same principle applies to API keys and tokens.&lt;/p&gt;

&lt;p&gt;Only provide the credentials Hermes actually needs.&lt;/p&gt;

&lt;p&gt;Avoid unnecessarily exposing things such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or unrelated cloud credentials and secrets.&lt;/p&gt;

&lt;p&gt;Containerization doesn’t help much if you put every sensitive credential inside the container anyway.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚠️ 3. Don’t Expose the Docker Socket Without a Very Good Reason
&lt;/h3&gt;

&lt;p&gt;Another thing I’m deliberately not mounting is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var/run/docker.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Giving a container access to the host Docker daemon can dramatically expand what that container is capable of doing.&lt;/p&gt;

&lt;p&gt;For an autonomous agent, that’s an especially important boundary to think about.&lt;/p&gt;

&lt;p&gt;If Hermes doesn’t need to control Docker on the host, don’t give it that capability.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 4. Docker Doesn’t Solve Prompt Injection
&lt;/h3&gt;

&lt;p&gt;There’s another important limitation.&lt;/p&gt;

&lt;p&gt;An AI agent can still encounter malicious or adversarial content.&lt;/p&gt;

&lt;p&gt;For example, content from a webpage, repository, document, or other external source could attempt to manipulate the agent into performing unintended actions.&lt;/p&gt;

&lt;p&gt;Putting the agent inside Docker doesn’t eliminate that problem.&lt;/p&gt;

&lt;p&gt;The difference is what happens after the agent attempts the action.&lt;/p&gt;

&lt;p&gt;If Hermes only has access to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then we’ve limited the environment available to it.&lt;/p&gt;

&lt;p&gt;If we’ve mounted our entire computer, exposed sensitive credentials, and given it access to the Docker daemon, the potential impact is very different.&lt;/p&gt;

&lt;p&gt;That’s why I think containerization is better understood as blast-radius reduction, not a magic AI security solution.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 The Principle: Least Privilege for AI Agents
&lt;/h2&gt;

&lt;p&gt;As AI agents become increasingly capable, I think one traditional security principle becomes even more important:&lt;/p&gt;

&lt;p&gt;Least privilege.&lt;/p&gt;

&lt;p&gt;An agent should receive the minimum access required to complete its task.&lt;/p&gt;

&lt;p&gt;Not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
  │
  └── Everything on my computer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
  │
  ├── Required files
  ├── Required credentials
  ├── Required network services
  └── Required tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing more.&lt;/p&gt;

&lt;p&gt;This becomes increasingly important as agents gain longer-running autonomy, terminal access, browser access, external integrations, scheduled execution, and the ability to coordinate multiple tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Docker vs VM for AI Agents
&lt;/h2&gt;

&lt;p&gt;Docker is not the only way to isolate an autonomous agent.&lt;/p&gt;

&lt;p&gt;You could also use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A virtual machine&lt;/li&gt;
&lt;li&gt;A dedicated VPS&lt;/li&gt;
&lt;li&gt;A sandboxed execution environment&lt;/li&gt;
&lt;li&gt;A separate physical machine&lt;/li&gt;
&lt;li&gt;More restrictive container runtimes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A VM generally provides a stronger isolation boundary than a standard application container because it virtualizes a larger portion of the environment.&lt;/p&gt;

&lt;p&gt;Docker, however, is lightweight and convenient for local development.&lt;/p&gt;

&lt;p&gt;For my Hermes setup, it gives me a useful middle ground:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Direct Host Execution
        ↓
Docker Container
        ↓
Virtual Machine / Dedicated Environment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The appropriate boundary ultimately depends on what capabilities you’re giving the agent and what resources it can access.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Architecture
&lt;/h2&gt;

&lt;p&gt;After everything is configured, my setup looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   ┌─────────────────────────────┐
                   │        Host Machine         │
                   │                             │
                   │      Hermes Desktop         │
                   └──────────────┬──────────────┘
                                  │
                           Remote Gateway
                                  │
                                  ▼
              ┌─────────────────────────────────┐
              │       Docker Container          │
              │                                 │
              │       Hermes Gateway            │
              │       Hermes Dashboard          │
              │       Hermes Agent              │
              │                                 │
              │       /opt/data                 │
              └───────────────┬─────────────────┘
                              │
                         Bind Mount
                              │
                              ▼
                    ~/.hermes-docker
                              │
              ┌───────────────┴──────────────┐
              │ Config • Memory • Sessions   │
              │ Skills • Profiles • Logs     │
              └──────────────────────────────┘
       Rest of host filesystem → NOT MOUNTED
       SSH keys                → NOT EXPOSED
       Docker socket           → NOT EXPOSED
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes still has the environment it needs to work.&lt;/p&gt;

&lt;p&gt;But we’re being much more deliberate about what crosses the boundary.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Autonomous AI agents are becoming capable of doing much more than generating text.&lt;/p&gt;

&lt;p&gt;They’re increasingly able to:&lt;/p&gt;

&lt;p&gt;⚡ Execute commands&lt;br&gt;
🗂️ Manipulate files&lt;br&gt;
🌍 Interact with external systems&lt;br&gt;
🧰 Use specialized tools&lt;br&gt;
🔄 Run multi-step workflows autonomously&lt;/p&gt;

&lt;p&gt;That’s exciting.&lt;/p&gt;

&lt;p&gt;But the more capable the agent becomes, the more important its execution environment becomes.&lt;/p&gt;

&lt;p&gt;Running Hermes Agent inside Docker doesn’t solve every security problem.&lt;/p&gt;

&lt;p&gt;It does, however, give us a practical way to control what the agent can access and reduce the potential blast radius when something unexpected happens.&lt;/p&gt;

&lt;p&gt;The rule I follow is simple:&lt;/p&gt;

&lt;p&gt;Only give an AI agent access to what it actually needs.&lt;/p&gt;

&lt;p&gt;Everything else should stay outside the boundary.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hermes</category>
      <category>agents</category>
      <category>docker</category>
    </item>
    <item>
      <title>🚀 What if your AI agent wasn’t tied to a single model provider?

I connected Hermes Agent to OmniRoute to route across free AI models from multiple providers. Here’s the full setup 👇

#AI #AIAgents #OpenSource</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 15 Sep 2026 15:14:45 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/what-if-your-ai-agent-wasnt-tied-to-a-single-model-provider-i-connected-hermes-agent-to-101n</link>
      <guid>https://dev.to/vivek_shetye/what-if-your-ai-agent-wasnt-tied-to-a-single-model-provider-i-connected-hermes-agent-to-101n</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/vivek_shetye/how-i-run-hermes-agent-on-free-ai-models-with-omniroute-3103" class="crayons-story__hidden-navigation-link"&gt;How I Run Hermes Agent on FREE AI Models with OmniRoute 🚀&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/vivek_shetye" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" alt="vivek_shetye profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/vivek_shetye" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vivek Shetye
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vivek Shetye
                
                
              
              &lt;div id="story-author-preview-content-4660383" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/vivek_shetye" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vivek Shetye&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/vivek_shetye/how-i-run-hermes-agent-on-free-ai-models-with-omniroute-3103" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 15&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/vivek_shetye/how-i-run-hermes-agent-on-free-ai-models-with-omniroute-3103" id="article-link-4660383"&gt;
          How I Run Hermes Agent on FREE AI Models with OmniRoute 🚀
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hermes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hermes&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/vivek_shetye/how-i-run-hermes-agent-on-free-ai-models-with-omniroute-3103" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/vivek_shetye/how-i-run-hermes-agent-on-free-ai-models-with-omniroute-3103#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I Run Hermes Agent on FREE AI Models with OmniRoute 🚀</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 15 Sep 2026 15:05:20 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/how-i-run-hermes-agent-on-free-ai-models-with-omniroute-3103</link>
      <guid>https://dev.to/vivek_shetye/how-i-run-hermes-agent-on-free-ai-models-with-omniroute-3103</guid>
      <description>&lt;p&gt;Free AI models are great.&lt;/p&gt;

&lt;p&gt;Until your agent hits a quota halfway through a task.&lt;/p&gt;

&lt;p&gt;Then suddenly you’re:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searching for another provider&lt;/li&gt;
&lt;li&gt;Generating another API key&lt;/li&gt;
&lt;li&gt;Changing endpoints&lt;/li&gt;
&lt;li&gt;Switching models&lt;/li&gt;
&lt;li&gt;Restarting your workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a simple chat application, that might just be annoying.&lt;/p&gt;

&lt;p&gt;For an AI agent executing multi-step tasks, it becomes a much bigger problem.&lt;/p&gt;

&lt;p&gt;So instead of connecting Hermes Agent directly to a single AI provider, I tried a different architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 ┌── OpenRouter ──→ Free Models
                 │
Hermes Agent ─→ OmniRoute
                 │
                 └── NVIDIA ──────→ Available Models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes talks to one endpoint.&lt;/p&gt;

&lt;p&gt;OmniRoute sits between the agent and the model providers and handles the routing.&lt;/p&gt;

&lt;p&gt;The result is a surprisingly useful setup for experimenting with Hermes Agent on free AI models without tightly coupling the agent to one provider.&lt;/p&gt;

&lt;p&gt;In this tutorial, I’ll walk through exactly how I set it up.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎥 Prefer the Video?
&lt;/h2&gt;

&lt;p&gt;I created a complete step-by-step video showing the setup, configuration, and a real Hermes Agent task running through OmniRoute.&lt;/p&gt;

&lt;p&gt;Watch: How I Run Hermes Agent on FREE AI Models&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/nH9eVRxKuug" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you’d rather understand the architecture and follow the setup at your own pace, keep reading.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With Depending on One Free AI Provider
&lt;/h2&gt;

&lt;p&gt;There are now plenty of ways to experiment with capable AI models without immediately paying for API usage.&lt;/p&gt;

&lt;p&gt;That’s great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning agent development&lt;/li&gt;
&lt;li&gt;Building prototypes&lt;/li&gt;
&lt;li&gt;Testing AI workflows&lt;/li&gt;
&lt;li&gt;Experimenting with different models&lt;/li&gt;
&lt;li&gt;Running personal automation&lt;/li&gt;
&lt;li&gt;Comparing model capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there’s an obvious limitation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Free access is rarely unlimited or guaranteed.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A provider may impose request limits.&lt;/p&gt;

&lt;p&gt;A particular model might become unavailable.&lt;/p&gt;

&lt;p&gt;Traffic might affect access.&lt;/p&gt;

&lt;p&gt;A model could disappear from the free catalog.&lt;/p&gt;

&lt;p&gt;Or you might simply exhaust your quota.&lt;/p&gt;

&lt;p&gt;If your architecture looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hermes Agent
     │
     ▼
Provider A
     │
     ▼
Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;your agent is directly dependent on that provider.&lt;/p&gt;

&lt;p&gt;Once Provider A stops serving your requests, your workflow stops too.&lt;/p&gt;

&lt;p&gt;Instead, I wanted something closer to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                     ┌── Provider A
                     │
                     ├── Provider B
Hermes Agent ──→ Gateway
                     ├── Provider C
                     │
                     └── Provider D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s where OmniRoute comes in.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What Is Hermes Agent?
&lt;/h2&gt;

&lt;p&gt;Hermes Agent is an open-source agent harness from Nous Research for building AI agents capable of doing much more than generating chat responses.&lt;/p&gt;

&lt;p&gt;Depending on the tools and configuration available to it, Hermes can perform tasks involving things like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Request
     ↓
Hermes Agent
     ↓
Reasoning
     ↓
Tool Calls
     ↓
Files / Terminal / Web / Other Tools
     ↓
Tool Results
     ↓
More Reasoning
     ↓
Final Result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes model availability particularly important.&lt;/p&gt;

&lt;p&gt;A multi-step agent workflow might require many model calls before the task is finished.&lt;/p&gt;

&lt;p&gt;If your model becomes unavailable halfway through, that can interrupt the entire workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚦 What Is OmniRoute?
&lt;/h2&gt;

&lt;p&gt;Think of OmniRoute as a traffic director for AI models.&lt;/p&gt;

&lt;p&gt;Rather than forcing your application to manage every model provider individually, OmniRoute provides a gateway between your application and those providers.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application → Provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application → OmniRoute → Providers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this experiment, our application happens to be Hermes Agent.&lt;/p&gt;

&lt;p&gt;So the architecture becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                       ┌──────────────┐
                       │  OpenRouter  │
                       └──────┬───────┘
                              │
┌──────────────┐      ┌───────▼───────┐
│ Hermes Agent │ ───→ │   OmniRoute   │
└──────────────┘      └───────┬───────┘
                              │
                       ┌──────▼──────┐
                       │   NVIDIA    │
                       └─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OmniRoute is open source, can run locally, and supports a large number of AI providers.&lt;/p&gt;

&lt;p&gt;More importantly for this experiment, it allows us to expose a single endpoint to Hermes while managing multiple model/provider connections behind it.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Why Put an AI Gateway Between Hermes and the Models?
&lt;/h2&gt;

&lt;p&gt;You could simply connect Hermes directly to OpenRouter, NVIDIA, or another provider.&lt;/p&gt;

&lt;p&gt;So why add another layer?&lt;/p&gt;

&lt;p&gt;Because it separates two responsibilities.&lt;/p&gt;

&lt;p&gt;Hermes Agent handles the task.&lt;/p&gt;

&lt;p&gt;OmniRoute handles model access and routing.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hermes:
"What should I do next?"

        ↓

OmniRoute:
"Which configured model should serve this request?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That separation becomes increasingly useful as you add more providers.&lt;/p&gt;

&lt;p&gt;Instead of reconfiguring the agent every time your model strategy changes, Hermes continues talking to the same gateway.&lt;/p&gt;

&lt;p&gt;You manage providers behind it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Step 1: Install OmniRoute Locally
&lt;/h2&gt;

&lt;p&gt;The first thing I did was install OmniRoute locally.&lt;/p&gt;

&lt;p&gt;After following the installation instructions, OmniRoute can be started from the terminal.&lt;/p&gt;

&lt;p&gt;Once the server starts, it provides access to its local dashboard.&lt;/p&gt;

&lt;p&gt;From there you can manage things like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Providers
Models
Endpoints
API Keys
Routing
Analytics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This becomes the control plane for our model infrastructure.&lt;/p&gt;

&lt;p&gt;Important security note 🔐&lt;/p&gt;

&lt;p&gt;If you’re running a gateway locally or exposing it beyond your machine, don’t leave default credentials unchanged.&lt;/p&gt;

&lt;p&gt;Create proper API keys and configure authentication appropriate for your environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔌 Step 2: Connect OpenRouter
&lt;/h2&gt;

&lt;p&gt;The first provider I added was OpenRouter.&lt;/p&gt;

&lt;p&gt;Inside OmniRoute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Providers
   ↓
OpenRouter
   ↓
Add Connection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll need an OpenRouter API key.&lt;/p&gt;

&lt;p&gt;Once the connection is configured, OmniRoute can import the models available through that account.&lt;/p&gt;

&lt;p&gt;For this experiment, I enabled the option to import only free models.&lt;/p&gt;

&lt;p&gt;The result looks conceptually like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OpenRouter
     │
     ├── Free Model A
     ├── Free Model B
     ├── Free Model C
     └── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also perform health checks to see whether configured models are currently available.&lt;/p&gt;

&lt;p&gt;That’s already useful but we’re still relying on one provider.&lt;/p&gt;

&lt;p&gt;So let’s add another.&lt;/p&gt;




&lt;h2&gt;
  
  
  🟢 Step 3: Add NVIDIA as Another Provider
&lt;/h2&gt;

&lt;p&gt;I repeated essentially the same process with NVIDIA.&lt;/p&gt;

&lt;p&gt;Generate an API key through NVIDIA’s model/API platform and add the connection inside OmniRoute.&lt;/p&gt;

&lt;p&gt;Now our gateway has multiple provider connections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                OmniRoute
                   │
          ┌────────┴────────┐
          ▼                 ▼
     OpenRouter           NVIDIA
          │                 │
      Free Models      Available Models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is where the architecture starts becoming interesting.&lt;/p&gt;

&lt;p&gt;Hermes doesn’t need separate configurations for both providers.&lt;/p&gt;

&lt;p&gt;As far as Hermes is concerned, there is still only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;One API endpoint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OmniRoute handles what happens behind it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 Step 4: Connect Hermes Agent to OmniRoute
&lt;/h2&gt;

&lt;p&gt;Now we need to point Hermes toward the gateway.&lt;/p&gt;

&lt;p&gt;Hermes supports configuring a custom model endpoint.&lt;/p&gt;

&lt;p&gt;Using the Hermes model configuration flow, I selected the custom endpoint option and provided:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API Base URL → OmniRoute local endpoint

API Key → OmniRoute API key

Compatibility → Auto Detect
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the model configuration, I used OmniRoute’s:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;auto/best-coding
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where the model selection gets abstracted away from Hermes.&lt;/p&gt;

&lt;p&gt;Instead of telling Hermes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Always use Model X
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we’re effectively saying:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Send the request to OmniRoute.

Let the routing layer determine the appropriate
configured model for the request.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that configuration is saved, OmniRoute becomes a model endpoint available to Hermes Agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Step 5: Give Hermes a Real Agent Task
&lt;/h2&gt;

&lt;p&gt;A simple “Hello World” wouldn’t tell us much.&lt;/p&gt;

&lt;p&gt;So I gave Hermes something closer to an actual agent workflow.&lt;/p&gt;

&lt;p&gt;The task was essentially:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Find the latest and most important AI news from reliable sources, summarize the key developments, and create a polished single-page visual report presenting the major stories, trends, and sources.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That means Hermes needs to do much more than answer a single prompt.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Research
   ↓
Collect Information
   ↓
Evaluate Sources
   ↓
Summarize
   ↓
Identify Trends
   ↓
Generate Web Page
   ↓
Write Files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here’s the important part:&lt;/p&gt;

&lt;p&gt;Hermes was sending its model requests through OmniRoute throughout the workflow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hermes Task
    │
    ▼
OmniRoute
    │
    ▼
Best Available Configured Model
    │
    ▼
Response
    │
    ▼
Hermes Continues Task
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a minute or two, Hermes completed the task and generated the visual AI news report.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Step 6: See Which AI Models Actually Handled the Requests
&lt;/h2&gt;

&lt;p&gt;This was one of my favorite parts of the experiment.&lt;/p&gt;

&lt;p&gt;After Hermes finished, I went back into OmniRoute.&lt;/p&gt;

&lt;p&gt;Under its usage analytics, I could inspect information about the requests being sent through the gateway.&lt;/p&gt;

&lt;p&gt;That included things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requests&lt;/li&gt;
&lt;li&gt;Input tokens&lt;/li&gt;
&lt;li&gt;Output tokens&lt;/li&gt;
&lt;li&gt;Model usage&lt;/li&gt;
&lt;li&gt;Which models actually served requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of the model-routing layer being a complete black box, I could inspect what happened after the task.&lt;/p&gt;

&lt;p&gt;The workflow effectively becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             ┌───────────────┐
             │ Hermes Agent  │
             └───────┬───────┘
                     │
                     ▼
             ┌───────────────┐
             │   OmniRoute   │
             └───────┬───────┘
                     │
            Routing Decision
                     │
          ┌──────────┴──────────┐
          ▼                     ▼
      Model A                Model B
          │                     │
          └──────────┬──────────┘
                     ▼
                 Response

                     +

              Usage Analytics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For agent development, that observability is useful.&lt;/p&gt;

&lt;p&gt;It gives you visibility into what your model-routing infrastructure is actually doing rather than only seeing the final agent output.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Why This Architecture Matters Beyond Free Models
&lt;/h2&gt;

&lt;p&gt;The interesting part isn’t actually the word free.&lt;/p&gt;

&lt;p&gt;It’s the abstraction.&lt;/p&gt;

&lt;p&gt;Without a gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent → Specific Provider → Specific Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent → Model Gateway → Routing Strategy → Provider/Model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That means the agent doesn’t necessarily need to care whether the underlying request eventually reaches one provider or another.&lt;/p&gt;

&lt;p&gt;This becomes useful when experimenting with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Multi-provider AI infrastructure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Different providers can sit behind one gateway.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model fallback strategies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your application doesn’t have to own every routing decision.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cost optimization 💰&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Different models can potentially be selected based on your infrastructure strategy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model experimentation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can change the models behind the gateway without redesigning your entire agent integration.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A centralized gateway can give you a better view of model usage across your agent workflows.&lt;/p&gt;

&lt;p&gt;And these patterns aren’t limited to Hermes.&lt;/p&gt;

&lt;p&gt;The broader architecture is applicable to many AI applications:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Application
      ↓
AI Gateway
      ↓
Routing / Policies
      ↓
Multiple Models &amp;amp; Providers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As AI systems become more agentic, this layer becomes increasingly interesting.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ But There’s a Catch: “Free” Doesn’t Mean Unlimited
&lt;/h2&gt;

&lt;p&gt;This is important.&lt;/p&gt;

&lt;p&gt;Using multiple free-model providers does not magically create unlimited free inference.&lt;/p&gt;

&lt;p&gt;Every provider has its own policies and constraints.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;OpenRouter free models have limits.&lt;/p&gt;

&lt;p&gt;NVIDIA access can vary depending on the model, account, availability, and traffic.&lt;/p&gt;

&lt;p&gt;Free models may also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Respond more slowly&lt;/li&gt;
&lt;li&gt;Become temporarily unavailable&lt;/li&gt;
&lt;li&gt;Change their limits&lt;/li&gt;
&lt;li&gt;Disappear from catalogs&lt;/li&gt;
&lt;li&gt;Have different context windows&lt;/li&gt;
&lt;li&gt;Behave differently across tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there’s another important consideration:&lt;/p&gt;

&lt;p&gt;Always read the provider’s terms.&lt;/p&gt;

&lt;p&gt;Some services have specific rules around:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Automation
API usage
Processing
Redistribution
Rate limits
Free-tier usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few minutes checking those requirements before building automation around a provider can save you problems later.&lt;/p&gt;

&lt;p&gt;Think of this architecture as a way to use available resources more flexibly, not as a way to bypass provider limits.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ The Bigger Lesson: Decouple Your Agent From Your Model Provider
&lt;/h2&gt;

&lt;p&gt;This experiment reinforced something I’ve increasingly found useful when working with AI agents:&lt;/p&gt;

&lt;p&gt;The agent and the model infrastructure don’t have to be the same layer.&lt;/p&gt;

&lt;p&gt;Your agent should focus on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reasoning
Tools
Memory
Tasks
Workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your model gateway can focus on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Providers
Models
Routing
Availability
Usage
Policies
Observability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put those together and you get a much cleaner architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────┐
│          AI Agent            │
│                              │
│ Tools • Memory • Workflows   │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│          AI Gateway          │
│                              │
│ Routing • Models • Analytics │
└──────────────┬───────────────┘
               │
       ┌───────┼───────┐
       ▼       ▼       ▼
   Provider Provider Provider
      A        B        C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For small experiments, this might feel like an extra layer.&lt;/p&gt;

&lt;p&gt;But once you’re testing multiple models and providers—or building longer-running agent workflows—the separation starts making much more sense.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you’re learning AI agent development and want to experiment without immediately spending heavily on API calls, Hermes Agent + OmniRoute + free AI model providers is an interesting setup to explore.&lt;/p&gt;

&lt;p&gt;You get:&lt;/p&gt;

&lt;p&gt;✅ One endpoint for Hermes Agent&lt;/p&gt;

&lt;p&gt;🔀 Multiple model/provider options behind the gateway&lt;/p&gt;

&lt;p&gt;🧠 Automatic model selection strategies&lt;/p&gt;

&lt;p&gt;📈 Centralized usage analytics&lt;/p&gt;

&lt;p&gt;🛠️ The flexibility to add or change providers later&lt;/p&gt;

&lt;p&gt;Just remember that the free tiers still have their own quotas, availability constraints, and terms.&lt;/p&gt;

&lt;p&gt;The real value here isn’t “unlimited free AI.”&lt;/p&gt;

&lt;p&gt;It’s building an agent architecture that isn’t unnecessarily coupled to one model provider.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hermes</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hermes Agent goes far beyond basic prompting. 🤖

I broke down /loop, /goal, Cron, Delegation, Bot Mode, Kanban &amp; Mixture of Agents and when each actually makes sense.

A practical mental model for building more autonomous AI agents. 👇</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 08 Sep 2026 15:29:15 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/hermes-agent-goes-far-beyond-basic-prompting-i-broke-down-loop-goal-cron-delegation-bot-f89</link>
      <guid>https://dev.to/vivek_shetye/hermes-agent-goes-far-beyond-basic-prompting-i-broke-down-loop-goal-cron-delegation-bot-f89</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058" class="crayons-story__hidden-navigation-link"&gt;🤖 Hermes Agent Advanced Features Explained: Loop, Goal, Cron, Delegation, Bot Mode, Kanban &amp;amp; Mixture of Agents&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hermes Agent Challenge Submission: Write About Hermes Agent&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/vivek_shetye" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" alt="vivek_shetye profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/vivek_shetye" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vivek Shetye
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vivek Shetye
                
                
              
              &lt;div id="story-author-preview-content-4607605" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/vivek_shetye" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vivek Shetye&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058" id="article-link-4607605"&gt;
          🤖 Hermes Agent Advanced Features Explained: Loop, Goal, Cron, Delegation, Bot Mode, Kanban &amp;amp; Mixture of Agents
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hermesagentchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hermesagentchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;10&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
    </item>
    <item>
      <title>🤖 Hermes Agent Advanced Features Explained: Loop, Goal, Cron, Delegation, Bot Mode, Kanban &amp; Mixture of Agents</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 08 Sep 2026 15:03:20 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058</link>
      <guid>https://dev.to/vivek_shetye/hermes-agent-advanced-features-explained-loop-goal-cron-delegation-bot-mode-kanban--3058</guid>
      <description>&lt;p&gt;Using Hermes Agent as a normal AI assistant is pretty straightforward.&lt;/p&gt;

&lt;p&gt;You give it a task. It reasons about the problem, uses tools when necessary, and gives you a result.&lt;/p&gt;

&lt;p&gt;But Hermes gets much more interesting when you ask a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;How do I get an AI agent to keep working without constantly prompting it?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hermes Agent gives you several ways to do this.&lt;/p&gt;

&lt;p&gt;You can create recurring loops, give the agent a persistent goal, schedule Cron Jobs, delegate work to sub-agents, create persistent specialist bots, coordinate multiple agents through Kanban, or even use multiple LLMs through Mixture of Agents.&lt;/p&gt;

&lt;p&gt;The confusing part?&lt;/p&gt;

&lt;p&gt;These features all increase agent autonomy, but they solve very different problems.&lt;/p&gt;

&lt;p&gt;I recently published a video breaking down how these advanced Hermes Agent features work under the hood and, more importantly, when you should use each one.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎥 Watch the full video:
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/E_tj3VgHAUY" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here’s the mental model I use to distinguish them.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 1. Loop: Repeat Something Inside the Current Session
&lt;/h2&gt;

&lt;p&gt;The easiest way to understand Hermes Agent’s /loop command is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Do this again later while I’m working in this session.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A loop takes a prompt and reruns it on a recurring cadence.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Check my deployment every 5 minutes and tell me when it goes live.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key distinction is that Loop is time-driven and session-scoped.&lt;/p&gt;

&lt;p&gt;Use it for monitoring, repeated checks, polling, or other temporary recurring work associated with your current Hermes session.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 2. Goal: Keep Working Until the Objective Is Complete
&lt;/h2&gt;

&lt;p&gt;/goal solves a completely different problem.&lt;/p&gt;

&lt;p&gt;Instead of saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Do this again later.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You’re saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Keep working until this is actually done.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some tasks can’t reliably be completed in a single agent turn.&lt;/p&gt;

&lt;p&gt;Maybe Hermes needs to modify code, run tests, inspect failures, make another change, and repeat the process.&lt;/p&gt;

&lt;p&gt;That’s where Goal becomes useful.&lt;/p&gt;

&lt;p&gt;After each continuation, the result can be evaluated to determine whether the objective has actually been completed.&lt;/p&gt;

&lt;p&gt;Hermes also supports a completion contract, which can describe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The desired outcome&lt;/li&gt;
&lt;li&gt;How success should be verified&lt;/li&gt;
&lt;li&gt;Constraints that must remain true&lt;/li&gt;
&lt;li&gt;What is inside or outside the task’s scope&lt;/li&gt;
&lt;li&gt;When Hermes should stop and ask for help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fix authentication.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can define something closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fix authentication so all tests pass.

Keep the existing login API response unchanged.

Only modify the authentication service and its tests.

Stop and ask me if a database migration becomes necessary.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now both execution and evaluation have a much clearer definition of “done.”&lt;/p&gt;

&lt;p&gt;One important misconception:&lt;/p&gt;

&lt;p&gt;Goal does not automatically create an agent team, Kanban workflow, or independent background process.&lt;/p&gt;

&lt;p&gt;It keeps the current Hermes session focused on a standing objective.&lt;/p&gt;

&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Loop → Do this again later.

Goal → Keep working until this is done.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⏰ 3. Cron Jobs: Scheduled, Unattended AI Agent Workflows
&lt;/h2&gt;

&lt;p&gt;Both Loop and Goal are connected to an active Hermes session.&lt;/p&gt;

&lt;p&gt;But what if you want Hermes to wake up every morning and perform some work even when you’re not interacting with it?&lt;/p&gt;

&lt;p&gt;That’s where Cron Jobs come in.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Every morning at 9 AM:

- Check my news feeds
- Find important AI developments
- Summarize them
- Send me a report on Telegram
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the scheduled time arrives, Hermes can launch a fresh agent session specifically for that run.&lt;/p&gt;

&lt;p&gt;This makes Cron useful for things like:&lt;/p&gt;

&lt;p&gt;📊 Daily reports&lt;br&gt;
🔍 Recurring research&lt;br&gt;
🛡️ Security audits&lt;br&gt;
🧪 CI health checks&lt;br&gt;
📰 News monitoring&lt;br&gt;
📨 Scheduled summaries&lt;/p&gt;

&lt;p&gt;The fundamental distinction is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Loop
↓
Keep checking while this session is active.

Cron
↓
Wake up independently on a schedule and run the task.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I’m watching a deployment for the next 20 minutes, I’d probably use Loop.&lt;/p&gt;

&lt;p&gt;If I want a report generated every morning whether I’m there or not, I’d use Cron.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 4. Sub-Agent Delegation: Temporary Parallel Workers
&lt;/h2&gt;

&lt;p&gt;Now we move from one autonomous agent to multiple agents working simultaneously.&lt;/p&gt;

&lt;p&gt;Suppose I ask Hermes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compare three approaches for implementing authentication
and recommend the best one.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main agent could investigate each approach sequentially.&lt;/p&gt;

&lt;p&gt;Or it could delegate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Parent Agent
     │
     ├── Sub-Agent A → Research approach A
     ├── Sub-Agent B → Research approach B
     └── Sub-Agent C → Research approach C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The sub-agents can perform those tasks independently and return their findings to the parent.&lt;/p&gt;

&lt;p&gt;This provides two major advantages.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Parallelism
&lt;/h3&gt;

&lt;p&gt;Independent work can happen simultaneously rather than forcing the main agent to perform everything sequentially.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧱 Context Isolation
&lt;/h3&gt;

&lt;p&gt;Large research, coding, refactoring, and analysis tasks can consume significant context.&lt;/p&gt;

&lt;p&gt;Delegating them means much of the intermediate work stays inside the sub-agent’s context rather than flooding the parent’s conversation.&lt;/p&gt;

&lt;p&gt;The important distinction is that delegation is temporary.&lt;/p&gt;

&lt;p&gt;A sub-agent exists to perform a focused task, return its result, and finish.&lt;/p&gt;

&lt;p&gt;If you want a specialist identity that persists over time, you need something else.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 5. Profiles &amp;amp; Bot Mode: Persistent AI Specialists
&lt;/h2&gt;

&lt;p&gt;Imagine having separate Hermes agents for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;👨‍💻 Coding
🔬 Research
✍️ Content
📈 Analysis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You probably don’t want your research agent’s accumulated context and workflows constantly mixed with your coding agent.&lt;/p&gt;

&lt;p&gt;That’s what &lt;strong&gt;Hermes Profiles&lt;/strong&gt; help solve.&lt;/p&gt;

&lt;p&gt;A profile acts like a separate Hermes environment with its own configuration and state.&lt;/p&gt;

&lt;p&gt;This allows specialist agents to develop independently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bot Mode&lt;/strong&gt; builds a more intuitive multi-agent experience on top of these persistent profiles.&lt;/p&gt;

&lt;p&gt;The key distinction from delegation is persistence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sub-Agent
↓
Temporary worker for a task

Bot / Profile
↓
Persistent specialist identity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multiple bots can also communicate with one another, allowing you to create workflows involving specialist agents.&lt;/p&gt;

&lt;p&gt;But once those workflows become complicated, messages alone aren’t enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  📋 6. Kanban: Durable Multi-Agent Orchestration
&lt;/h2&gt;

&lt;p&gt;Suppose you have three persistent Hermes specialists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Researcher
    ↓
Analyst
    ↓
Writer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want the researcher to collect evidence.&lt;/p&gt;

&lt;p&gt;Only after the research is finished should the analyst evaluate it.&lt;/p&gt;

&lt;p&gt;And only after the analysis is complete should the writer produce the final report.&lt;/p&gt;

&lt;p&gt;You could coordinate everything through agent messages.&lt;/p&gt;

&lt;p&gt;But what happens when the workflow introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Failures&lt;/li&gt;
&lt;li&gt;Retries&lt;/li&gt;
&lt;li&gt;Artifacts&lt;/li&gt;
&lt;li&gt;Structured handoffs&lt;/li&gt;
&lt;li&gt;Human review&lt;/li&gt;
&lt;li&gt;Work lasting hours or days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Messages alone become fragile.&lt;/p&gt;

&lt;p&gt;That’s where Hermes Kanban becomes useful.&lt;/p&gt;

&lt;p&gt;Instead of the workflow existing only inside agent conversations, the work becomes structured, persistent task state.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Research Topic
      ↓
Analyze Evidence
      ↓
Human Review
      ↓
Write Final Report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Analyze Evidence depends on Research Topic, it waits.&lt;/p&gt;

&lt;p&gt;Once the research task is completed, the dependent task can proceed.&lt;/p&gt;

&lt;p&gt;This makes Kanban useful for durable, long-running multi-agent workflows.&lt;/p&gt;

&lt;p&gt;And Kanban and delegation aren’t competing ideas.&lt;/p&gt;

&lt;p&gt;A persistent Kanban worker could own a research task and then delegate parts of that research to several temporary sub-agents.&lt;/p&gt;

&lt;p&gt;Think of it this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Delegation → temporary help

Bot Mode → persistent specialists

Kanban → coordination between specialists
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧠 7. Mixture of Agents: Multi-Model Reasoning
&lt;/h2&gt;

&lt;p&gt;This is probably the easiest concept to confuse with multi-agent orchestration.&lt;/p&gt;

&lt;p&gt;Mixture of Agents (MoA) operates at the model layer.&lt;/p&gt;

&lt;p&gt;Imagine you’re solving a difficult software architecture problem.&lt;/p&gt;

&lt;p&gt;Instead of asking one LLM to immediately decide what to do, you could ask several models to independently analyze the problem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Reference Model A ──┐
                    │
Reference Model B ──┼──→ Aggregator Model → Hermes Agent Loop
                    │
Reference Model C ──┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One model might notice a security problem.&lt;/p&gt;

&lt;p&gt;Another might suggest a much simpler architecture.&lt;/p&gt;

&lt;p&gt;Another might identify an assumption everyone else missed.&lt;/p&gt;

&lt;p&gt;Their perspectives are then provided to an aggregator model, which becomes the model responsible for acting.&lt;/p&gt;

&lt;p&gt;This is why Mixture of Agents is better understood as a model strategy rather than a traditional multi-agent workflow.&lt;/p&gt;

&lt;p&gt;You’re not necessarily creating:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Research Agent
+
Coding Agent
+
Review Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead, you’re giving the acting model multiple model perspectives before it makes decisions.&lt;/p&gt;

&lt;p&gt;The Hermes session, tools, and underlying agent loop can remain the same.&lt;/p&gt;

&lt;p&gt;What changes is the model strategy powering that loop.&lt;/p&gt;




&lt;h2&gt;
  
  
  🗺️ The Mental Model
&lt;/h2&gt;

&lt;p&gt;If you remember only one thing from this article, make it this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hermes Feature&lt;/th&gt;
&lt;th&gt;Mental Model&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔁 &lt;strong&gt;Loop&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Repetition&lt;/td&gt;
&lt;td&gt;Repeated checks in the current session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎯 &lt;strong&gt;Goal&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Completion&lt;/td&gt;
&lt;td&gt;Working toward a clearly defined outcome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⏰ &lt;strong&gt;Cron&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Scheduling&lt;/td&gt;
&lt;td&gt;Unattended scheduled workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧩 &lt;strong&gt;Delegation&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Temporary parallelism&lt;/td&gt;
&lt;td&gt;Independent subtasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🤖 &lt;strong&gt;Profiles / Bot Mode&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Persistent identity&lt;/td&gt;
&lt;td&gt;Long-lived specialist agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📋 &lt;strong&gt;Kanban&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Durable orchestration&lt;/td&gt;
&lt;td&gt;Dependencies, handoffs, retries, and review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 &lt;strong&gt;Mixture of Agents&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Multi-model reasoning&lt;/td&gt;
&lt;td&gt;Multiple LLM perspectives on difficult problems&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The features become much easier to reason about once you stop grouping all of them under “autonomous AI agents.”&lt;/p&gt;

&lt;p&gt;They’re different primitives for controlling different dimensions of autonomy.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Putting It All Together
&lt;/h2&gt;

&lt;p&gt;The interesting part is that these concepts can be combined.&lt;/p&gt;

&lt;p&gt;Imagine a software development workflow where:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cron
  ↓
Starts scheduled workflow
  ↓
Kanban coordinates persistent specialist profiles
  ↓
Research Agent delegates work to temporary sub-agents
  ↓
Architecture Agent uses Mixture of Agents
  ↓
Goal keeps implementation focused until verification passes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you’re moving beyond a chatbot that happens to call tools.&lt;/p&gt;

&lt;p&gt;You’re designing an agentic system where scheduling, persistence, parallelism, identity, orchestration, and model reasoning are separate architectural decisions.&lt;/p&gt;

&lt;p&gt;And that distinction becomes increasingly important as AI agents become more autonomous.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>hermesagentchallenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Choosing an enterprise MCP gateway isn’t about the longest feature list. 👀

I compared Bifrost, Docker, Kong, Lunar MCPX &amp; Microsoft MCP Gateway across identity, security, tool governance, deployment, and failure handling.

Here’s what I found 👇</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Mon, 31 Aug 2026 15:05:34 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/choosing-an-enterprise-mcp-gateway-isnt-about-the-longest-feature-list-i-compared-bifrost-38p</link>
      <guid>https://dev.to/vivek_shetye/choosing-an-enterprise-mcp-gateway-isnt-about-the-longest-feature-list-i-compared-bifrost-38p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl" class="crayons-story__hidden-navigation-link"&gt;Best Enterprise MCP Gateway for Your AI Agents in 2026&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Compares Bifrost to LiteLLM&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/vivek_shetye" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" alt="vivek_shetye profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/vivek_shetye" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vivek Shetye
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vivek Shetye
                
                
              
              &lt;div id="story-author-preview-content-4532590" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/vivek_shetye" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vivek Shetye&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 31&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl" id="article-link-4532590"&gt;
          Best Enterprise MCP Gateway for Your AI Agents in 2026
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;15&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              7&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            10 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>security</category>
    </item>
    <item>
      <title>Best Enterprise MCP Gateway for Your AI Agents in 2026</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Mon, 31 Aug 2026 15:00:32 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl</link>
      <guid>https://dev.to/vivek_shetye/best-enterprise-mcp-gateway-for-your-ai-agents-in-2026-43hl</guid>
      <description>&lt;p&gt;The best enterprise MCP gateway is not the product with the longest feature list. It is the one whose identity, policy, deployment, and failure model match your agents. After reviewing the current MCP specification and the leading gateway options, &lt;a href="https://www.getmaxim.ai/bifrost" rel="noopener noreferrer"&gt;Bifrost&lt;/a&gt; is one of my strongest shortlist choices for application teams that want model routing and MCP tool access in the same self-hostable gateway, an embeddable Go SDK, and an explicit application-controlled tool-execution step. Its &lt;a href="https://github.com/maximhq/bifrost" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; codebase also gives platform teams an inspectable starting point.&lt;/p&gt;

&lt;p&gt;That recommendation has boundaries. Bifrost Enterprise, not the open-source edition alone, is the relevant tier if you require high-availability clustering, enterprise identity federation, admin RBAC, and audit-grade logs. And if your main problem is container isolation, Kubernetes lifecycle management, or extending an existing API gateway, another product may fit better.&lt;/p&gt;




&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bifrost is a strong enterprise MCP gateway for teams that want one Go-based, self-hosted data plane for LLM provider traffic and MCP tools.&lt;/strong&gt; It connects to multiple MCP servers, exposes their tools through one endpoint, supports &lt;a href="https://docs.getbifrost.ai/mcp/connecting-to-servers" rel="noopener noreferrer"&gt;shared and per-user upstream authentication&lt;/a&gt;, applies layered tool allow-lists, and keeps tool execution explicit by default.&lt;/p&gt;

&lt;p&gt;It is not universally “the best.” Docker MCP Gateway is compelling for isolated local server runtimes; Kong is a natural extension of an existing Kong estate; Microsoft MCP Gateway targets Kubernetes-managed server lifecycle; and Lunar MCPX focuses on dedicated MCP aggregation and tool controls.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is an enterprise MCP gateway?
&lt;/h2&gt;

&lt;p&gt;An enterprise MCP gateway is an infrastructure layer between AI agents and Model Context Protocol servers. It gives agents one governed entry point for discovering and calling tools while centralizing identity, credential handling, authorization, routing, logging, and policy enforcement.&lt;/p&gt;

&lt;p&gt;Without a gateway, every agent must connect to every server independently:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Direct connections

Agent A ─┬─ GitHub MCP server
         ├─ database MCP server
         └─ internal API MCP server
Agent B ─┬─ GitHub MCP server
         └─ database MCP server

With a gateway

Agents ── MCP gateway ─┬─ GitHub MCP server
                       ├─ database MCP server
                       └─ internal API MCP server
             │
             └─ identity, tool policy, credentials,
                approvals, traces, limits, audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The direct model is fine for one developer and a few trusted tools. At enterprise scale, it duplicates configuration and secrets, scatters logs, and makes it difficult to answer a basic incident question: &lt;em&gt;which user, through which agent, called which tool with what authority?&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  “MCP gateway” describes several different products
&lt;/h2&gt;

&lt;p&gt;Flat comparison tables are misleading because the category contains at least four architectures:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Combined LLM and MCP gateways&lt;/strong&gt;, such as Bifrost, govern model requests and MCP tool access in one gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated MCP aggregation and control layers&lt;/strong&gt;, such as Lunar MCPX, emphasize MCP federation, tool policy, and observability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API gateways with MCP support&lt;/strong&gt;, such as Kong, apply an established gateway and plugin ecosystem to MCP traffic and API-to-tool conversion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime and lifecycle gateways&lt;/strong&gt;, such as Docker and Microsoft MCP Gateway, focus on where MCP servers run and how they are isolated or managed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before picking a vendor, decide which problem you actually have. A platform team replacing separate model and tool proxies has a different requirement from a security team placing policy in front of existing remote MCP servers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Six tests for an enterprise MCP gateway
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Whose identity reaches the tool?
&lt;/h3&gt;

&lt;p&gt;Ask whether every caller collapses into one shared service account or whether the gateway preserves end-user identity. Shared credentials are simpler, but per-user OAuth lets the downstream system retain its own permission model and audit trail. Bifrost documents the available patterns in its &lt;a href="https://docs.getbifrost.ai/mcp/connecting-to-servers" rel="noopener noreferrer"&gt;MCP connection and authentication guide&lt;/a&gt; and lets operators &lt;a href="https://docs.getbifrost.ai/mcp/sessions" rel="noopener noreferrer"&gt;inspect and revoke per-user MCP sessions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The current &lt;a href="https://modelcontextprotocol.io/specification/draft/basic/authorization" rel="noopener noreferrer"&gt;MCP authorization specification&lt;/a&gt; requires each access token to be used only for its intended service. An MCP gateway must not reuse a client’s token to call another API; it should use a separate token with only the permissions that API requires.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Where is tool policy enforced?
&lt;/h3&gt;

&lt;p&gt;Filtering &lt;code&gt;tools/list&lt;/code&gt; reduces what the model sees, but discovery-time filtering alone is not authorization. Re-check access when &lt;code&gt;tools/call&lt;/code&gt; executes. For destructive operations, the gateway or application should also support approval, argument validation, or a hardened read-only variant. Bifrost’s &lt;a href="https://docs.getbifrost.ai/features/governance/mcp-tools" rel="noopener noreferrer"&gt;virtual-key MCP controls&lt;/a&gt; enforce an allow-list at inference and again at tool execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. How are credentials stored and refreshed?
&lt;/h3&gt;

&lt;p&gt;Verify shared OAuth, per-user OAuth, workload identities, static-key storage, token refresh, revocation, and secret redaction. Also check whether request headers are forwarded automatically. Bifrost’s &lt;a href="https://docs.getbifrost.ai/mcp/connecting-to-servers#forwarding-request-headers-to-mcp-servers" rel="noopener noreferrer"&gt;connection documentation&lt;/a&gt; says incoming headers are not forwarded by default and describes per-client allow-lists. Safe defaults matter because a convenience feature can become a credential-exfiltration path.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Are logs actually audit evidence?
&lt;/h3&gt;

&lt;p&gt;Operational logs, OpenTelemetry traces, and immutable administrative audit trails solve different problems. You normally need all three: traces for latency and failures, request logs for debugging, and retained audit events for security investigations and change accountability. Bifrost documents &lt;a href="https://docs.getbifrost.ai/features/observability/default" rel="noopener noreferrer"&gt;built-in observability and request logging&lt;/a&gt;, &lt;a href="https://docs.getbifrost.ai/features/observability/otel" rel="noopener noreferrer"&gt;OpenTelemetry export&lt;/a&gt;, and separate &lt;a href="https://docs.getbifrost.ai/enterprise/audit-logs" rel="noopener noreferrer"&gt;Enterprise audit logs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. What fails, and how?
&lt;/h3&gt;

&lt;p&gt;Test a dead upstream server, expired OAuth token, changed tool schema, slow tool, gateway-node loss, and duplicate call. “Retries supported” is not enough; retrying a read is different from retrying &lt;code&gt;create_invoice&lt;/code&gt; after a timeout. Bifrost documents its &lt;a href="https://docs.getbifrost.ai/mcp/connecting-to-servers#connection-resilience-and-retry-logic" rel="noopener noreferrer"&gt;MCP connection states, health checks, and retry behavior&lt;/a&gt;, but your proof of concept should still validate the failure semantics of each tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Which MCP specification does it implement?
&lt;/h3&gt;

&lt;p&gt;The finalized &lt;a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/" rel="noopener noreferrer"&gt;MCP &lt;code&gt;2026-07-28&lt;/code&gt; release&lt;/a&gt; made the HTTP protocol core stateless and added &lt;code&gt;Mcp-Method&lt;/code&gt; and &lt;code&gt;Mcp-Name&lt;/code&gt; routing headers. Many product pages still describe legacy SSE or session-affinity behavior. Require a version-compatibility matrix for your actual clients and servers rather than accepting “MCP compatible” as a complete answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Bifrost’s MCP gateway works
&lt;/h2&gt;

&lt;p&gt;Bifrost occupies a useful position because it is both an AI model gateway and an MCP gateway. According to its &lt;a href="https://docs.getbifrost.ai/architecture/core/mcp" rel="noopener noreferrer"&gt;MCP architecture documentation&lt;/a&gt;, it acts as an MCP client to external tool servers and can act as an MCP server to clients such as Claude Desktop.&lt;/p&gt;

&lt;p&gt;The verified request path looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bifrost connects to upstream MCP servers and discovers their tools. Its &lt;a href="https://docs.getbifrost.ai/mcp/connecting-to-servers" rel="noopener noreferrer"&gt;connection guide&lt;/a&gt; documents STDIO, HTTP, and SSE connections.&lt;/li&gt;
&lt;li&gt;Remote connections can use static headers, shared OAuth, or per-user OAuth. The &lt;a href="https://docs.getbifrost.ai/mcp/connecting-to-servers" rel="noopener noreferrer"&gt;connection and authentication documentation&lt;/a&gt; explains when each option applies.&lt;/li&gt;
&lt;li&gt;Bifrost applies &lt;a href="https://docs.getbifrost.ai/mcp/filtering" rel="noopener noreferrer"&gt;stacked tool filtering&lt;/a&gt; at client configuration, request, and virtual-key levels. Empty client tool lists deny access by default.&lt;/li&gt;
&lt;li&gt;The model receives only the allowed tool definitions. Tool names are prefixed by client, avoiding collisions between servers.&lt;/li&gt;
&lt;li&gt;By default, the model only proposes a tool call. Your application reviews it and invokes the separate &lt;a href="https://docs.getbifrost.ai/mcp/tool-execution" rel="noopener noreferrer"&gt;tool-execution endpoint&lt;/a&gt;. &lt;a href="https://docs.getbifrost.ai/mcp/agent-mode" rel="noopener noreferrer"&gt;Agent Mode&lt;/a&gt; can opt selected tools into automatic execution.&lt;/li&gt;
&lt;li&gt;Requests and model operations can be exported through Bifrost’s &lt;a href="https://docs.getbifrost.ai/features/observability/otel" rel="noopener noreferrer"&gt;OpenTelemetry integration&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That separation between proposal and execution is valuable. It creates a clean approval and validation point without claiming that a human is automatically in the loop. Your application still has to implement the approval policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open source versus Enterprise
&lt;/h3&gt;

&lt;p&gt;Bifrost’s open-source gateway is Apache 2.0 and includes the MCP connection/aggregation path, &lt;a href="https://docs.getbifrost.ai/features/governance/virtual-keys" rel="noopener noreferrer"&gt;virtual-key governance&lt;/a&gt;, tool filtering, &lt;a href="https://docs.getbifrost.ai/features/governance/budget-and-limits" rel="noopener noreferrer"&gt;rate and budget controls&lt;/a&gt;, and observability plugins. The &lt;a href="https://docs.getbifrost.ai/enterprise/overview" rel="noopener noreferrer"&gt;Enterprise overview&lt;/a&gt; describes a strict superset that adds high-availability clustering, identity-provider integrations, &lt;a href="https://docs.getbifrost.ai/enterprise/rbac" rel="noopener noreferrer"&gt;RBAC&lt;/a&gt;, audit-grade logging, and private deployment options. The &lt;a href="https://docs.getbifrost.ai/enterprise/clustering" rel="noopener noreferrer"&gt;clustering documentation&lt;/a&gt; covers peer discovery, state synchronization, and node failover.&lt;/p&gt;

&lt;p&gt;Keep that boundary in your evaluation sheet. “Open source” does not mean every enterprise control is in the community edition. For deployment planning, Bifrost also provides an &lt;a href="https://docs.getbifrost.ai/deployment-guides/helm" rel="noopener noreferrer"&gt;official Helm guide&lt;/a&gt; for OSS and Enterprise installations on Kubernetes.&lt;/p&gt;

&lt;p&gt;Bifrost publishes impressive gateway-overhead figures, but I would treat them as vendor benchmarks. They measure Bifrost’s gateway path, not your end-to-end MCP tool latency, and there is no common independent benchmark here for ranking all six products.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bifrost compared with enterprise MCP gateway alternatives
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gateway&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;th&gt;Verified differentiator&lt;/th&gt;
&lt;th&gt;Watch before choosing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bifrost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One self-hosted LLM + MCP gateway&lt;/td&gt;
&lt;td&gt;Layered tool filtering, explicit execution, per-user upstream auth, Go gateway&lt;/td&gt;
&lt;td&gt;Enterprise-only HA/identity/audit features; verify &lt;code&gt;2026-07-28&lt;/code&gt; compatibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Docker MCP Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker-native development and server isolation&lt;/td&gt;
&lt;td&gt;Runs MCP servers in restricted containers and manages lifecycle/credentials&lt;/td&gt;
&lt;td&gt;Enterprise governance is a separate, invite-only offering in &lt;a href="https://docs.docker.com/ai/mcp-catalog-and-toolkit/mcp-gateway/" rel="noopener noreferrer"&gt;current docs&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kong AI Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Existing Kong/API platform estates&lt;/td&gt;
&lt;td&gt;MCP passthrough, API-to-MCP conversion, ACLs, rate limits, metrics&lt;/td&gt;
&lt;td&gt;The &lt;a href="https://developer.konghq.com/plugins/ai-mcp-proxy/" rel="noopener noreferrer"&gt;AI MCP Proxy&lt;/a&gt; requires an AI Gateway Enterprise license&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lunar MCPX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dedicated MCP aggregation and tool hardening&lt;/td&gt;
&lt;td&gt;Tool groups, hardened tool variants, agent access control&lt;/td&gt;
&lt;td&gt;Confirm which identity, audit, and secret capabilities require the Lunar platform beyond &lt;a href="https://docs.lunar.dev/mcpx/features/" rel="noopener noreferrer"&gt;MCPX core&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft MCP Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Azure/Kubernetes server lifecycle&lt;/td&gt;
&lt;td&gt;Reverse proxy plus adapter deployment, session-aware routing, Entra integration&lt;/td&gt;
&lt;td&gt;A heavier, Kubernetes-oriented control plane; review the &lt;a href="https://github.com/microsoft/mcp-gateway" rel="noopener noreferrer"&gt;repository architecture&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Why Bifrost belongs on the shortlist
&lt;/h3&gt;

&lt;p&gt;Bifrost's case is strongest when the same application needs governed model routing and MCP tool access. Three documented design choices support that fit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bifrost &lt;a href="https://docs.getbifrost.ai/mcp/tool-execution" rel="noopener noreferrer"&gt;returns proposed tool calls for review&lt;/a&gt; before the application invokes a separate execution API, creating an explicit point for approvals and argument validation.&lt;/li&gt;
&lt;li&gt;Teams can deploy it as a gateway or &lt;a href="https://docs.getbifrost.ai/quickstart/go-sdk/setting-up" rel="noopener noreferrer"&gt;integrate it directly through the Go SDK&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Its &lt;a href="https://docs.getbifrost.ai/mcp/sessions" rel="noopener noreferrer"&gt;MCP Sessions UI&lt;/a&gt; supports inspection, re-authentication, editing, and revocation of per-user OAuth and header credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those capabilities do not make Bifrost the automatic winner for every deployment. They explain why it is a credible proof-of-concept candidate for the buyer profile in this article.&lt;/p&gt;

&lt;p&gt;Kong’s configuration surface is an advantage if you already run Kong and overhead if you do not. Docker’s container isolation is excellent for local STDIO servers but does not automatically answer enterprise identity governance. Microsoft’s lifecycle manager is useful when the gateway should deploy servers, which Bifrost does not position as its primary job.&lt;/p&gt;




&lt;h2&gt;
  
  
  When I would choose Bifrost
&lt;/h2&gt;

&lt;p&gt;I would put Bifrost on the proof-of-concept shortlist when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the platform already needs multi-provider model routing as well as MCP;&lt;/li&gt;
&lt;li&gt;the team prefers an inspectable, self-hosted Go service or wants to &lt;a href="https://docs.getbifrost.ai/quickstart/go-sdk/setting-up" rel="noopener noreferrer"&gt;embed the gateway through its Go SDK&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;explicit tool execution fits the approval design;&lt;/li&gt;
&lt;li&gt;virtual-key and per-request tool allow-lists are sufficient for application-level access;&lt;/li&gt;
&lt;li&gt;OpenTelemetry and private deployment are operational requirements; and&lt;/li&gt;
&lt;li&gt;there is a clear path to Enterprise if clustering, SSO/SCIM, RBAC, and audit logs become mandatory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would look elsewhere first when the primary requirement is a curated connector catalog, container-per-server isolation, Kubernetes-managed MCP server deployment, or deep integration with an existing API gateway.&lt;/p&gt;




&lt;h2&gt;
  
  
  A proof-of-concept checklist
&lt;/h2&gt;

&lt;p&gt;Do not evaluate an MCP security gateway from a demo dashboard alone. Run these tests with one read tool and one destructive tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;two users with different upstream permissions;&lt;/li&gt;
&lt;li&gt;discovery and execution denial for the restricted user;&lt;/li&gt;
&lt;li&gt;OAuth expiry, refresh, and revocation;&lt;/li&gt;
&lt;li&gt;attempted forwarding of an unapproved authorization header;&lt;/li&gt;
&lt;li&gt;a tool description/schema change after approval;&lt;/li&gt;
&lt;li&gt;gateway restart and upstream-server failure during a call;&lt;/li&gt;
&lt;li&gt;trace correlation from agent through gateway to server;&lt;/li&gt;
&lt;li&gt;audit export and actor attribution;&lt;/li&gt;
&lt;li&gt;concurrent clients using the exact MCP protocol versions you deploy; and&lt;/li&gt;
&lt;li&gt;edition/license mapping for every control in the acceptance criteria.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final recommendation
&lt;/h2&gt;

&lt;p&gt;Bifrost is one of the strongest enterprise MCP gateway options in 2026 &lt;strong&gt;for application teams that want unified LLM and MCP infrastructure, self-hosting or Go embedding, per-user MCP credential operations, layered tool governance, and an explicit execution boundary&lt;/strong&gt;. That is a specific architectural fit, not a universal victory.&lt;/p&gt;

&lt;p&gt;Choose the shape before the brand. Then require primary-source evidence and a failure-oriented proof of concept. For a Bifrost evaluation, compare the OSS and Enterprise editions explicitly and make &lt;code&gt;2026-07-28&lt;/code&gt; protocol conformance part of acceptance testing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do AI agents always need an MCP gateway?
&lt;/h3&gt;

&lt;p&gt;No. A single trusted agent connected to a few local servers may be simpler without one. A gateway becomes valuable when multiple agents, users, credentials, policies, or audit requirements need one enforcement point.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between an MCP gateway and an API gateway?
&lt;/h3&gt;

&lt;p&gt;An API gateway primarily understands routes, services, and HTTP consumers. An MCP gateway understands MCP operations and entities such as tool discovery and execution. Products like Kong add MCP-aware capabilities to an API gateway; Bifrost combines MCP with model-provider routing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Bifrost manage multiple MCP servers?
&lt;/h3&gt;

&lt;p&gt;Yes. Bifrost connects to multiple upstream MCP servers, discovers their tools, filters them, and can expose the allowed aggregate through its &lt;a href="https://docs.getbifrost.ai/mcp/gateway" rel="noopener noreferrer"&gt;&lt;code&gt;/mcp&lt;/code&gt; gateway endpoint&lt;/a&gt;. It calls each upstream connection an MCP client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Bifrost an open-source MCP gateway?
&lt;/h3&gt;

&lt;p&gt;Yes. The &lt;a href="https://github.com/maximhq/bifrost" rel="noopener noreferrer"&gt;Bifrost repository&lt;/a&gt; uses the Apache 2.0 license. Clustering, enterprise identity/RBAC, audit-grade logs, and some private deployment capabilities belong to Bifrost Enterprise, so evaluate the edition as well as the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do you secure MCP servers behind a gateway?
&lt;/h3&gt;

&lt;p&gt;Authenticate users and workloads, use audience-bound tokens, obtain separate upstream credentials, allow-list tools, enforce policy again at execution, require approval for risky calls, restrict header forwarding, trace every call, and retain security-relevant audit events. Also test protocol versions and tool-schema changes rather than treating the gateway as a complete security boundary by itself.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>🤖 Hermes Agent Bot Mode or Kanban which should you use?

I break down the difference, when each makes sense, and build a real workflow combining both for parallel AI agent research + automation. ⚡

Would love to hear how you’re using them! 👇</title>
      <dc:creator>Vivek Shetye</dc:creator>
      <pubDate>Tue, 25 Aug 2026 15:23:17 +0000</pubDate>
      <link>https://dev.to/vivek_shetye/hermes-agent-bot-mode-or-kanban-which-should-you-use-i-break-down-the-difference-when-each-825</link>
      <guid>https://dev.to/vivek_shetye/hermes-agent-bot-mode-or-kanban-which-should-you-use-i-break-down-the-difference-when-each-825</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/vivek_shetye/hermes-agent-bot-mode-vs-kanban-when-to-use-each-and-why-i-use-both-2che" class="crayons-story__hidden-navigation-link"&gt;Hermes Agent Bot Mode vs Kanban: When to Use Each (and Why I Use Both)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/vivek_shetye" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" alt="vivek_shetye profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/vivek_shetye" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vivek Shetye
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vivek Shetye
                
                
              
              &lt;div id="story-author-preview-content-4479836" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/vivek_shetye" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3879444%2F8f338ec8-c7f4-48e9-b8cf-3898bccbb1e8.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vivek Shetye&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/vivek_shetye/hermes-agent-bot-mode-vs-kanban-when-to-use-each-and-why-i-use-both-2che" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/vivek_shetye/hermes-agent-bot-mode-vs-kanban-when-to-use-each-and-why-i-use-both-2che" id="article-link-4479836"&gt;
          Hermes Agent Bot Mode vs Kanban: When to Use Each (and Why I Use Both)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hermes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hermes&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/vivek_shetye/hermes-agent-bot-mode-vs-kanban-when-to-use-each-and-why-i-use-both-2che" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;10&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/vivek_shetye/hermes-agent-bot-mode-vs-kanban-when-to-use-each-and-why-i-use-both-2che#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
