<?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: Gulshan Yadav</title>
    <description>The latest articles on DEV Community by Gulshan Yadav (@mryadavgulshan).</description>
    <link>https://dev.to/mryadavgulshan</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%2F2134389%2Fc9521ffc-977a-4dd5-8b72-0d7af84408c4.jpg</url>
      <title>DEV Community: Gulshan Yadav</title>
      <link>https://dev.to/mryadavgulshan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mryadavgulshan"/>
    <language>en</language>
    <item>
      <title>What are AI Agents? The Practitioner's Guide to Autonomous Systems</title>
      <dc:creator>Gulshan Yadav</dc:creator>
      <pubDate>Tue, 11 Aug 2026 02:30:00 +0000</pubDate>
      <link>https://dev.to/mryadavgulshan/what-are-ai-agents-the-practitioners-guide-to-autonomous-systems-4kml</link>
      <guid>https://dev.to/mryadavgulshan/what-are-ai-agents-the-practitioners-guide-to-autonomous-systems-4kml</guid>
      <description>&lt;p&gt;&lt;em&gt;A practical deep dive into how AI agents perceive, reason, and act autonomously — from classical architectures to modern LLM-based systems.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Two months ago, I was sitting in a co-working space in Dubai, debugging a customer-service pipeline for a fintech client. The system was straightforward: an LLM received a user query, generated a response, and returned it. Simple request-response. The client looked over my shoulder and asked, "Can it check the user's account balance, verify their KYC status, and then decide whether to escalate to a human agent — all on its own, without a separate rule for each step?"&lt;/p&gt;

&lt;p&gt;I paused. What he was describing was not a chatbot. It was not a retrieval-augmented generation pipeline. It was not a fine-tuned language model. He was describing an AI agent — a system that perceives its environment, reasons about what to do, and takes autonomous action to achieve a goal.&lt;/p&gt;

&lt;p&gt;That question consumed the better part of six weeks. I rebuilt his entire pipeline from scratch. In this guide, I will walk you through everything I learned — not the marketing version, but the working version: what agents actually are, how they are built, where they fail, and when you should not use one at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three-Letter Definition That Cuts Through the Noise
&lt;/h2&gt;

&lt;p&gt;Every article about AI agents starts with a different definition, and it is exhausting. Here is the one I use when a client asks me to explain it in one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An AI agent is a system that perceives an environment, reasons about a goal, and takes actions to change that environment — iteratively, without a human authoring each step in advance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three words carry the whole idea: &lt;strong&gt;perceive, reason, act.&lt;/strong&gt; A chatbot perceives text and reasons about a reply — but it never acts on the world. A script acts on the world — but never perceives or reasons. An agent does all three, in a loop, until the goal is met or it gives up.&lt;/p&gt;

&lt;p&gt;This loop is the single most important mental model in the entire field right now. Keep it in your head and every framework, every paper, every "agentic" product suddenly makes sense:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────┐     ┌─────────┐     ┌─────────┐
│ Observe │ ──▶ │  Reason │ ──▶ │   Act   │
└─────────┘     └─────────┘     └─────────┘
     ▲                               │
     └──────────── loop ─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Quick History: Agents Were Not Invented by LLMs
&lt;/h2&gt;

&lt;p&gt;Before we talk about modern systems, you need to know that agents are an old idea. The field has been fighting over this concept since the 1980s, and the classical taxonomy is still the cleanest way to understand what you are building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reactive agents.&lt;/strong&gt; The simplest kind. They map current state directly to an action — no internal model, no memory. Think of a thermostat, or a robot vacuum that turns when it hits a wall. Fast, robust, stupid. They cannot plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deliberative agents.&lt;/strong&gt; They build an internal model of the world and reason over it before acting. Classic AI planning systems used search algorithms over state spaces. More expressive, far more expensive, and notoriously fragile when the model is wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hybrid agents.&lt;/strong&gt; The practical compromise: a reactive layer for fast reflexes, a deliberative layer for slow thinking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BDI (Belief-Desire-Intention) agents.&lt;/strong&gt; The academic favorite. An agent keeps &lt;em&gt;beliefs&lt;/em&gt; (what it knows about the world), &lt;em&gt;desires&lt;/em&gt; (goals), and &lt;em&gt;intentions&lt;/em&gt; (plans it has committed to). You will recognize BDI wearing a new coat in modern frameworks: beliefs are the system prompt and memory, desires are the goal, intentions are the tool calls in the loop.&lt;/p&gt;

&lt;p&gt;The reason this history matters: every "revolutionary" agent framework in 2026 is a hybrid agent with an LLM as the deliberative layer and tools as the reactive layer. The architecture is thirty years old. What changed is the reasoning engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Modern Stack: What Actually Makes an LLM an Agent
&lt;/h2&gt;

&lt;p&gt;An LLM by itself is not an agent — it is a very clever text generator. To turn it into one, you add five things. Get these right and the agent works. Get any one wrong and it will fail in a new and interesting way every week.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Goal (and the System Prompt)
&lt;/h3&gt;

&lt;p&gt;Everything starts with a goal. Not a vague one — a specific, testable one. "Help users with their accounts" is not a goal; "resolve the user's request, or escalate to a human with a summary of what was tried" is.&lt;/p&gt;

&lt;p&gt;The system prompt is where the goal lives, and it is also where the agent's personality, constraints, and self-knowledge live. The single biggest mistake I see in production systems is a system prompt that reads like a job description instead of an operating manual. A good one specifies: the goal, the boundaries (what the agent must &lt;em&gt;not&lt;/em&gt; do), the tool inventory, the escalation path, and the tone. It is a contract, not a wish.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Memory (Two Kinds, Both Non-Negotiable)
&lt;/h3&gt;

&lt;p&gt;Your agent needs two kinds of memory, and they are almost never the same thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Working memory&lt;/strong&gt; — the conversation history in the context window; the agent's "train of thought." The hard constraint is the context window: you cannot stuff an entire customer's history into it. Be surgical about what goes in — recent turns, the current task state, and retrieval results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-term memory&lt;/strong&gt; — everything the agent knows beyond the current conversation. This is where vector databases come in. Embed the relevant knowledge (product docs, past tickets, policy manuals), retrieve the top-k chunks at the start of each turn, and inject them into the prompt. I have written at length about why retrieval quality matters more than model choice, and it is doubly true inside an agent loop: every bad retrieval is a wrong belief, and wrong beliefs produce confident wrong actions.&lt;/p&gt;

&lt;p&gt;There is a third kind people forget: &lt;strong&gt;episodic memory&lt;/strong&gt; — what this agent did last time. In serious deployments you log every run and use past runs to inform future ones. It sounds fancy. It is just a database with good querying.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tools (The Agent's Hands)
&lt;/h3&gt;

&lt;p&gt;This is the part that makes it an agent instead of a chatbot. Tools are functions the LLM can invoke: look up a balance, check KYC status, send an email, call an API, run SQL, search the web.&lt;/p&gt;

&lt;p&gt;The critical technical detail: you are not calling these functions yourself — the LLM &lt;em&gt;decides&lt;/em&gt; to call them and generates the arguments as structured output. In practice this means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You declare each tool with a name, description, and JSON schema for its inputs.&lt;/li&gt;
&lt;li&gt;The LLM emits a tool call (e.g., &lt;code&gt;look_up_balance(user_id=123)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Your runtime executes it, captures the result, and feeds the result back into the loop.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The description field is where the magic lives. A tool with a lazy description ("gets balance") will be misused constantly. A tool with a precise description ("look up the current available balance for a verified user; returns error if KYC is incomplete") gets used correctly. Treat tool descriptions as product documentation for the model — that is literally what they are.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Loop (Orchestration)
&lt;/h3&gt;

&lt;p&gt;The agent loop is embarrassingly simple in pseudocode:&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="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;goal_not_met&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;budget_remaining&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;observation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;current_state&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;          &lt;span class="c1"&gt;# conversation, retrieved docs, tool results
&lt;/span&gt;    &lt;span class="n"&gt;decision&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;act&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;observation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# reason → choose action
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_final_answer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;decision&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;to_context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything you will ever read about agent frameworks — LangChain, CrewAI, AutoGen, custom loops — is a wrapper around this loop, with different opinions about how to structure memory, when to stop, and how many agents to spawn. The loop itself is universal.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Guardrails (Budget and Stop Conditions)
&lt;/h3&gt;

&lt;p&gt;Agents can loop forever, spend your API budget, and take actions you never authorized. Every production agent needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A step budget&lt;/strong&gt; — "at most 12 tool calls per task."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A cost budget&lt;/strong&gt; — "fail soft once spend exceeds $0.10 per conversation."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A time budget&lt;/strong&gt; — "escalate after 90 seconds."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A permission layer&lt;/strong&gt; — read-only actions are free; mutating actions (sending email, transferring money, deleting records) require human approval or a stricter policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An escape hatch&lt;/strong&gt; — when the agent is uncertain, it must know how to hand off to a human with a readable summary of what it tried.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know a startup that deployed an agent with none of these. It was supposed to draft refund decisions for review. Within a week, a prompt-injection in a customer message made the agent approve a refund the company never should have given. The refund itself was small. The trust damage was not. Guardrails are the product, not a nice-to-have.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Minimal Working Example (Python)
&lt;/h2&gt;

&lt;p&gt;Let me make this concrete with the smallest agent I would ship to a client. No framework — just an LLM call, one tool, and a loop. This is deliberately minimal so you can see every moving part.&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# or any OpenAI-compatible endpoint
&lt;/span&gt;
&lt;span class="n"&gt;TOOLS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_balance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get the current available balance for a verified account.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;account_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;account_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_balance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# In production this queries a database with authz checks.
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;account_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;balance&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1240.50&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a customer support agent. Your goal: resolve the request, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;or escalate with a summary of what was tried. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You may call tools when you need data. Be concise and honest.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;msgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;msgs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TOOLS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;  &lt;span class="c1"&gt;# final answer
&lt;/span&gt;        &lt;span class="n"&gt;msgs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tc&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_call_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="n"&gt;tc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;
                          &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;))}&lt;/span&gt;
            &lt;span class="n"&gt;msgs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ESCALATE: step budget exhausted. Tried: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;repr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msgs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:])&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;run_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is the balance on account ACC-1042?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;[],&lt;/span&gt;
&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this and you will see the loop in action: the model asks for the balance, your code executes the tool, the result goes back in, and the model answers. That is the entire skeleton of an agent. Everything else is scale and polish.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-Agent Systems: When One Agent Isn't Enough
&lt;/h2&gt;

&lt;p&gt;A natural question follows: if one agent is good, is a team of agents better? Sometimes yes, often no.Multi-agent systems work when the task genuinely decomposes into roles with different expertise, different tools, and different constraints: a researcher agent, a writer agent, a reviewer agent. They shine in complex workflows like due-diligence reports or code review pipelines. They fail when you cannot split the task cleanly, because every agent boundary is a handoff — and every handoff is a place where information is lost, tokens are burned, and latency accumulates. A single agent with good tools will beat a five-agent team on a linear task every time.&lt;/p&gt;

&lt;p&gt;The rule I now follow: &lt;strong&gt;start with one agent. Split only when a single agent's context, tool surface, or permission boundary becomes the bottleneck.&lt;/strong&gt; Split for security (read-only researcher vs. write-capable operator), not for fashion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Agents Fail in Production (I Have the Scars)
&lt;/h2&gt;

&lt;p&gt;Let me save you six weeks. These are the failure modes I hit, in order of how much they hurt:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hallucinated tool calls.&lt;/strong&gt; The model invents arguments that do not exist, or calls a tool that is not appropriate. Fix: strict JSON schema enforcement, tool descriptions written like contracts, and validation before execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Greedy loops.&lt;/strong&gt; The agent retries the same failing action with slight variations, burning budget. Fix: track repeated failures and force escalation after N identical attempts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context poisoning.&lt;/strong&gt; A retrieval result or a tool output injects instructions ("ignore previous instructions..."). Fix: treat all tool/retrieval content as untrusted data; never let it override the system prompt; sanitize and quote it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent degradation.&lt;/strong&gt; The agent stops using tools and starts guessing from its training data, quietly producing plausible wrong answers. Fix: instrument every run and alert when tool-call rate drops below a threshold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost creep.&lt;/strong&gt; Complex tasks average 3–8 tool calls; at production volume that is real money. Fix: measure cost per resolved task, cache retrievals, and use cheaper models for the loop with a stronger model for final synthesis.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Honest Cost-Benefit: When NOT to Build an Agent
&lt;/h2&gt;

&lt;p&gt;This is the part most articles skip, because "agent" sells. Here is the truth:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build an agent when:&lt;/strong&gt; the task is goal-directed, multi-step, requires tools or data lookups, and changes enough that hand-written rules would be a maintenance nightmare.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not build an agent when:&lt;/strong&gt; the task is a single step, the inputs are predictable, or the cost of a wrong autonomous action is high and the approval latency is acceptable. For a fixed, well-understood flow, a deterministic script or a good prompt template beats an agent on cost, latency, and reliability — every single time.&lt;/p&gt;

&lt;p&gt;I told this to a client who wanted to "agentify" a form-filling flow. We timed it: the deterministic version resolved requests in 1.4 seconds at $0.0001 each. The agent version took 6 seconds and $0.02 each, and occasionally misread a field. The client saved a lot of money by not building what he asked for. That is what a good consultant is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Practitioner's Checklist
&lt;/h2&gt;

&lt;p&gt;When you ship an agent, go through this list before you call it done:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Goal is specific and testable (not "be helpful")&lt;/li&gt;
&lt;li&gt;[ ] System prompt is an operating manual: goal, boundaries, tools, escalation, tone&lt;/li&gt;
&lt;li&gt;[ ] Working memory respects context-window limits&lt;/li&gt;
&lt;li&gt;[ ] Long-term memory uses retrieval that is measured, not assumed&lt;/li&gt;
&lt;li&gt;[ ] Tool descriptions read like contracts, inputs validated before execution&lt;/li&gt;
&lt;li&gt;[ ] Step, cost, and time budgets exist&lt;/li&gt;
&lt;li&gt;[ ] Mutating actions have a permission layer&lt;/li&gt;
&lt;li&gt;[ ] Escalation path produces a human-readable summary&lt;/li&gt;
&lt;li&gt;[ ] Observability: every run logged, tool-call rate monitored&lt;/li&gt;
&lt;li&gt;[ ] You have written the test that proves a wrong action cannot silently happen&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Would Tell That Client in Dubai, Six Weeks Later
&lt;/h2&gt;

&lt;p&gt;The fintech pipeline I rebuilt now checks balances, verifies KYC, drafts refund decisions for human approval, and escalates with a readable summary when it is unsure. It does not run on magic: a goal, a good system prompt, a vector store for memory, four well-described tools, strict budgets, and a loop that knows when to stop.&lt;/p&gt;

&lt;p&gt;The next time someone tells you an AI agent "does things on its own," you now know what that sentence actually means: a loop, some tools, a goal, and a lot of guardrails. Start with the minimal example above. Run it. Break it. Fix it. Then and only then add memory, more tools, and finally — maybe — a second agent.&lt;/p&gt;




&lt;p&gt;*Gulshan Yad&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Introducing Misar.Blog MCP Server: Publish Blog Posts with AI Agents</title>
      <dc:creator>Gulshan Yadav</dc:creator>
      <pubDate>Thu, 14 May 2026 12:51:25 +0000</pubDate>
      <link>https://dev.to/mryadavgulshan/introducing-misarblog-mcp-server-publish-blog-posts-with-ai-agents-lge</link>
      <guid>https://dev.to/mryadavgulshan/introducing-misarblog-mcp-server-publish-blog-posts-with-ai-agents-lge</guid>
      <description>&lt;p&gt;We just launched the &lt;strong&gt;Misar.Blog MCP Server&lt;/strong&gt; — a Model Context Protocol server that lets AI agents publish and manage blog content on &lt;a href="https://www.misar.blog" rel="noopener noreferrer"&gt;Misar.Blog&lt;/a&gt; directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;The Misar.Blog MCP Server exposes 20 tools that AI agents (Claude, Cursor, Cline, etc.) can use to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Publish articles&lt;/strong&gt; — create drafts, publish posts, schedule content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manage series&lt;/strong&gt; — create and organize multi-part article series&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics&lt;/strong&gt; — query article views, engagement, and performance data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comments &amp;amp; Reactions&lt;/strong&gt; — moderate comments, fetch reactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Newsletter&lt;/strong&gt; — manage subscriber lists and campaigns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI content generation&lt;/strong&gt; — generate article content with AI assistance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag management&lt;/strong&gt; — organize content with tags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Media uploads&lt;/strong&gt; — attach images and files to posts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;Connect via Smithery (no setup needed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://smithery.ai/servers/misar/misarblog-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; misarblog-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add to &lt;code&gt;claude_desktop_config.json&lt;/code&gt;:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"misarblog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"misarblog-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MISARBLOG_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your_api_key_here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your API key from &lt;a href="https://www.misar.blog/settings/api" rel="noopener noreferrer"&gt;misar.blog/settings/api&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote MCP URL
&lt;/h2&gt;

&lt;p&gt;You can also connect directly via streamable HTTP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.misar.blog/api/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With header: &lt;code&gt;Authorization: Bearer &amp;lt;your_api_key&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/mrgulshanyadav/misarblog-mcp" rel="noopener noreferrer"&gt;https://github.com/mrgulshanyadav/misarblog-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smithery listing&lt;/strong&gt;: &lt;a href="https://smithery.ai/servers/misar/misarblog-mcp" rel="noopener noreferrer"&gt;https://smithery.ai/servers/misar/misarblog-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform&lt;/strong&gt;: &lt;a href="https://www.misar.blog" rel="noopener noreferrer"&gt;https://www.misar.blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API key&lt;/strong&gt;: &lt;a href="https://www.misar.blog/settings/api" rel="noopener noreferrer"&gt;https://www.misar.blog/settings/api&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;License: MIT | Free with a Misar.Blog account&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Show DEV: MisarMail — Self-Hosted Email Infrastructure (Transactional, Marketing, Bulk)</title>
      <dc:creator>Gulshan Yadav</dc:creator>
      <pubDate>Sat, 28 Mar 2026 12:33:01 +0000</pubDate>
      <link>https://dev.to/mryadavgulshan/show-dev-misarmail-self-hosted-email-infrastructure-transactional-marketing-bulk-4oca</link>
      <guid>https://dev.to/mryadavgulshan/show-dev-misarmail-self-hosted-email-infrastructure-transactional-marketing-bulk-4oca</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;MisarMail is a self-hosted email infrastructure platform for sending transactional, marketing, and bulk email — without paying SendGrid, Mailgun, or Resend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL:&lt;/strong&gt; &lt;a href="https://mail.misar.io" rel="noopener noreferrer"&gt;https://mail.misar.io&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;Every product I ship needs email — welcome emails, password resets, newsletters, bulk campaigns. Third-party email services add up fast. I wanted full control, zero per-email cost, and a simple API I own.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;REST API&lt;/strong&gt; — &lt;code&gt;POST /api/v1/send&lt;/code&gt; with your payload, done&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMTP relay&lt;/strong&gt; — drop-in replacement for any SMTP config&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bounce handling&lt;/strong&gt; — automatic bounce and complaint processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery tracking&lt;/strong&gt; — opens, clicks, delivery status&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-domain&lt;/strong&gt; — send from multiple domains and identities&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;Self-hosted on a Hetzner VPS via Coolify. Mailcow under the hood for SMTP, custom API layer on top.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mail.misar.io" rel="noopener noreferrer"&gt;https://mail.misar.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No third-party email spend. Full delivery control. API-first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>email</category>
    </item>
    <item>
      <title>Show DEV: Free AI Cost Calculators for Developers — LLM Costs, Evaluations, Tokens, RAG</title>
      <dc:creator>Gulshan Yadav</dc:creator>
      <pubDate>Fri, 27 Mar 2026 21:07:16 +0000</pubDate>
      <link>https://dev.to/mryadavgulshan/show-dev-free-ai-cost-calculators-for-developers-llm-costs-evaluations-tokens-rag-7b6</link>
      <guid>https://dev.to/mryadavgulshan/show-dev-free-ai-cost-calculators-for-developers-llm-costs-evaluations-tokens-rag-7b6</guid>
      <description>&lt;p&gt;I built a set of &lt;strong&gt;4 free AI calculators&lt;/strong&gt; that run entirely in the browser — no signup, no API keys, no backend.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://tools.misar.io" rel="noopener noreferrer"&gt;tools.misar.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's included
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. LLM Cost Calculator
&lt;/h3&gt;

&lt;p&gt;Compare pricing across &lt;strong&gt;14 models&lt;/strong&gt; from OpenAI, Anthropic, Google, Mistral, Groq, and DeepSeek. Enter your token usage and get real-time daily, monthly, and annual cost projections. See all providers side-by-side sorted by cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. AI Evaluation Scorecard
&lt;/h3&gt;

&lt;p&gt;Assess AI system quality across multiple dimensions — accuracy, latency, cost efficiency, safety, and more. Get a weighted composite score to compare different AI approaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Prompt Token Estimator
&lt;/h3&gt;

&lt;p&gt;Count tokens before making API calls so you know exactly what you'll pay. Supports multiple tokenizer models.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. RAG Cost Estimator
&lt;/h3&gt;

&lt;p&gt;Calculate the true cost of running retrieval-augmented generation pipelines — embedding costs, vector DB storage, retrieval queries, and generation costs combined.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;Every AI team I've worked with wastes time on spreadsheets trying to estimate costs. These tools solve that with zero friction — open the URL, use the calculator, done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pure HTML/CSS/JavaScript — no frameworks, no dependencies&lt;/li&gt;
&lt;li&gt;Runs entirely client-side in your browser&lt;/li&gt;
&lt;li&gt;Mobile responsive&lt;/li&gt;
&lt;li&gt;Free forever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would love feedback from the community. What other AI calculators would be useful?&lt;/p&gt;




&lt;p&gt;Built by &lt;a href="https://linkedin.com/in/mrgulshanyadav" rel="noopener noreferrer"&gt;Gulshan Yadav&lt;/a&gt; at &lt;a href="https://misar.io" rel="noopener noreferrer"&gt;Misar AI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
