<?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: Shweta Mishra</title>
    <description>The latest articles on DEV Community by Shweta Mishra (@shweta_mishra_b3c97874de9).</description>
    <link>https://dev.to/shweta_mishra_b3c97874de9</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%2F3970178%2Fc7a4fd49-d616-4f7b-8788-c8149c3f6a54.png</url>
      <title>DEV Community: Shweta Mishra</title>
      <link>https://dev.to/shweta_mishra_b3c97874de9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shweta_mishra_b3c97874de9"/>
    <language>en</language>
    <item>
      <title>Your AI Agent Doesn’t Need an LLM for Every Decision — Meet Jev and the Rise of System One Models</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Thu, 24 Sep 2026 14:12:07 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/your-ai-agent-doesnt-need-an-llm-for-every-decision-meet-jev-and-the-rise-of-system-one-models-4ie2</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/your-ai-agent-doesnt-need-an-llm-for-every-decision-meet-jev-and-the-rise-of-system-one-models-4ie2</guid>
      <description>&lt;p&gt;Most AI applications have a hidden architectural problem:&lt;/p&gt;

&lt;p&gt;We use a language model for decisions that never needed language generation in the first place.&lt;/p&gt;

&lt;p&gt;Classify this ticket.&lt;/p&gt;

&lt;p&gt;Should this request go to billing?&lt;/p&gt;

&lt;p&gt;Is this action safe?&lt;/p&gt;

&lt;p&gt;How urgent is this incident?&lt;/p&gt;

&lt;p&gt;Does this request need human review?&lt;/p&gt;

&lt;p&gt;Which workflow should run next?&lt;/p&gt;

&lt;p&gt;These are not really “write me some text” problems.&lt;/p&gt;

&lt;p&gt;They are decision problems.&lt;/p&gt;

&lt;p&gt;And that distinction is exactly what makes Jev, TypeSafe AI’s first System One model, interesting.&lt;/p&gt;

&lt;p&gt;Instead of asking a model to generate text and then forcing application code to interpret that text, Jev is designed around a different interface:&lt;/p&gt;

&lt;p&gt;State → Typed Question → Decision + Probability&lt;/p&gt;

&lt;p&gt;That sounds like a small API difference.&lt;/p&gt;

&lt;p&gt;Architecturally, it is much bigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Using LLMs for Everything
&lt;/h2&gt;

&lt;p&gt;Imagine a support ticket:&lt;/p&gt;

&lt;p&gt;“I was charged twice. Please refund the extra payment.”&lt;/p&gt;

&lt;p&gt;A traditional AI workflow might look like this:&lt;/p&gt;

&lt;p&gt;User message&lt;br&gt;
↓&lt;br&gt;
LLM&lt;br&gt;
↓&lt;br&gt;
Generate JSON&lt;br&gt;
↓&lt;br&gt;
Parse JSON&lt;br&gt;
↓&lt;br&gt;
Validate schema&lt;br&gt;
↓&lt;br&gt;
Check confidence&lt;br&gt;
↓&lt;br&gt;
Apply business rules&lt;br&gt;
↓&lt;br&gt;
Execute action&lt;/p&gt;

&lt;p&gt;The LLM might return:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "team": "billing",&lt;br&gt;
  "refund": true,&lt;br&gt;
  "urgency": "medium"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;It looks structured.&lt;/p&gt;

&lt;p&gt;But the underlying system still asked a generative model to produce a representation that application code needs to interpret.&lt;/p&gt;

&lt;p&gt;There are more moving pieces than the JSON suggests.&lt;/p&gt;

&lt;p&gt;What happens if the field is missing?&lt;/p&gt;

&lt;p&gt;What happens if the value is outside the expected schema?&lt;/p&gt;

&lt;p&gt;What happens if the model produces an unexpected category?&lt;/p&gt;

&lt;p&gt;What happens when the application needs three independent decisions?&lt;/p&gt;

&lt;p&gt;And what happens when the system needs to distinguish between “probably yes” and “definitely yes”?&lt;/p&gt;

&lt;p&gt;This is where the System One approach becomes interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev Changes the Interface
&lt;/h2&gt;

&lt;p&gt;TypeSafe describes Jev as a model built for “fast, structured decisions that software can use directly.”&lt;/p&gt;

&lt;p&gt;Instead of primarily generating strings, Jev works with typed questions.&lt;/p&gt;

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

&lt;p&gt;Choice:&lt;/p&gt;

&lt;p&gt;Which team should handle this ticket?&lt;/p&gt;

&lt;p&gt;→ billing: 0.97&lt;br&gt;
→ technical: 0.02&lt;br&gt;
→ other: 0.01&lt;/p&gt;

&lt;p&gt;Score:&lt;/p&gt;

&lt;p&gt;How urgent is this ticket?&lt;/p&gt;

&lt;p&gt;→ 0.18 on a defined scale&lt;/p&gt;

&lt;p&gt;Yes/No:&lt;/p&gt;

&lt;p&gt;Does this require human review?&lt;/p&gt;

&lt;p&gt;→ yes: 0.08&lt;br&gt;
→ no: 0.92&lt;/p&gt;

&lt;p&gt;The important part isn't simply that the output is JSON.&lt;/p&gt;

&lt;p&gt;Modern LLMs can already produce structured JSON.&lt;/p&gt;

&lt;p&gt;The architectural difference is that the possible answer space is defined as part of the decision itself.&lt;/p&gt;

&lt;p&gt;Your application defines what a valid answer means.&lt;/p&gt;

&lt;p&gt;The model evaluates the state.&lt;/p&gt;

&lt;p&gt;Your code owns what happens next.&lt;/p&gt;

&lt;p&gt;That separation is powerful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think of Jev as a Decision Layer
&lt;/h2&gt;

&lt;p&gt;A useful production architecture could look like this:&lt;/p&gt;

&lt;p&gt;Input&lt;br&gt;
↓&lt;br&gt;
Jev — decision layer&lt;br&gt;
↓&lt;br&gt;
Business rules&lt;br&gt;
↓&lt;br&gt;
Code / tools&lt;br&gt;
↓&lt;br&gt;
Action&lt;br&gt;
↓&lt;br&gt;
LLM — only when language generation is required&lt;/p&gt;

&lt;p&gt;For a support workflow:&lt;/p&gt;

&lt;p&gt;Support ticket&lt;br&gt;
↓&lt;br&gt;
Jev&lt;br&gt;
├── Classify ticket&lt;br&gt;
├── Score urgency&lt;br&gt;
├── Detect refund intent&lt;br&gt;
└── Decide whether human review is required&lt;br&gt;
↓&lt;br&gt;
Decision orchestration&lt;br&gt;
↓&lt;br&gt;
Business rules&lt;br&gt;
↓&lt;br&gt;
Billing API / CRM / Queue&lt;br&gt;
↓&lt;br&gt;
LLM&lt;br&gt;
↓&lt;br&gt;
Customer-facing response&lt;/p&gt;

&lt;p&gt;Now each component has a clearer responsibility.&lt;/p&gt;

&lt;p&gt;Jev answers bounded questions.&lt;/p&gt;

&lt;p&gt;Code applies deterministic rules.&lt;/p&gt;

&lt;p&gt;Tools execute actions.&lt;/p&gt;

&lt;p&gt;The LLM handles language.&lt;/p&gt;

&lt;p&gt;That is fundamentally different from putting an LLM in the middle of every step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Most Interesting Part: Parallel Decisions
&lt;/h2&gt;

&lt;p&gt;One of the ideas I find particularly interesting is evaluating multiple focused questions against the same application state.&lt;/p&gt;

&lt;p&gt;Consider an incoming incident report.&lt;/p&gt;

&lt;p&gt;Instead of creating a chain like:&lt;/p&gt;

&lt;p&gt;LLM → classify&lt;br&gt;
↓&lt;br&gt;
LLM → determine urgency&lt;br&gt;
↓&lt;br&gt;
LLM → decide escalation&lt;br&gt;
↓&lt;br&gt;
LLM → determine routing&lt;/p&gt;

&lt;p&gt;you can formulate multiple typed questions against the same state.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Which team owns this incident?&lt;/li&gt;
&lt;li&gt;What is its urgency?&lt;/li&gt;
&lt;li&gt;Does it require human review?&lt;/li&gt;
&lt;li&gt;Is the incident related to a production system?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application can then combine those results.&lt;/p&gt;

&lt;p&gt;This matters because real-world automation rarely depends on one decision.&lt;/p&gt;

&lt;p&gt;Production workflows are usually collections of small decisions.&lt;/p&gt;

&lt;p&gt;The architecture should reflect that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev Is Not an LLM Replacement
&lt;/h2&gt;

&lt;p&gt;This is where the discussion needs nuance.&lt;/p&gt;

&lt;p&gt;Jev is not designed to replace language generation.&lt;/p&gt;

&lt;p&gt;If your application needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long-form writing&lt;/li&gt;
&lt;li&gt;Code generation&lt;/li&gt;
&lt;li&gt;Summarization&lt;/li&gt;
&lt;li&gt;Explanation&lt;/li&gt;
&lt;li&gt;Creative content&lt;/li&gt;
&lt;li&gt;Open-ended conversation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you still need a generative model.&lt;/p&gt;

&lt;p&gt;But if your application needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classification&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;li&gt;Scoring&lt;/li&gt;
&lt;li&gt;Intent detection&lt;/li&gt;
&lt;li&gt;Guardrails&lt;/li&gt;
&lt;li&gt;Workflow selection&lt;/li&gt;
&lt;li&gt;Human-review gates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a generative model may not be the only reasonable architectural primitive.&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;p&gt;“What type of intelligence does this step actually require?”&lt;/p&gt;

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

&lt;p&gt;“Which LLM should I call?”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture I Would Use
&lt;/h2&gt;

&lt;p&gt;For an AI agent, I would separate the system into four layers.&lt;/p&gt;

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

&lt;p&gt;The system receives messy real-world information.&lt;/p&gt;

&lt;p&gt;Emails.&lt;/p&gt;

&lt;p&gt;Tickets.&lt;/p&gt;

&lt;p&gt;Documents.&lt;/p&gt;

&lt;p&gt;Events.&lt;/p&gt;

&lt;p&gt;User requests.&lt;/p&gt;

&lt;p&gt;Application state.&lt;/p&gt;

&lt;p&gt;This is where language models, retrieval systems, parsers, and traditional software can help.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Decision
&lt;/h3&gt;

&lt;p&gt;Now the system needs to answer bounded questions.&lt;/p&gt;

&lt;p&gt;Which workflow?&lt;/p&gt;

&lt;p&gt;Which category?&lt;/p&gt;

&lt;p&gt;What priority?&lt;/p&gt;

&lt;p&gt;Human review?&lt;/p&gt;

&lt;p&gt;Allowed action?&lt;/p&gt;

&lt;p&gt;This is where a typed decision model such as Jev can fit.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Execution
&lt;/h3&gt;

&lt;p&gt;The model should not automatically own the entire action.&lt;/p&gt;

&lt;p&gt;Code should.&lt;/p&gt;

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

&lt;p&gt;if billing_probability &amp;gt;= threshold:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;route_to_billing()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;if human_review_probability &amp;gt;= threshold:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create_review_task()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;if refund_request:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;check_payment_records()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The application defines the actual policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Generation
&lt;/h3&gt;

&lt;p&gt;Only after the system knows what happened should an LLM generate the communication.&lt;/p&gt;

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

&lt;p&gt;“We found that the payment was duplicated. The additional charge has been submitted for review.”&lt;/p&gt;

&lt;p&gt;The LLM is now doing what it is naturally good at:&lt;/p&gt;

&lt;p&gt;turning structured outcomes into useful language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Probabilities Change the Architecture Too
&lt;/h2&gt;

&lt;p&gt;Another important idea is that Jev returns probabilities and confidence signals for supported decision types.&lt;/p&gt;

&lt;p&gt;That creates an opportunity for threshold-based automation.&lt;/p&gt;

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

&lt;p&gt;High confidence&lt;br&gt;
→ automate&lt;/p&gt;

&lt;p&gt;Medium confidence&lt;br&gt;
→ additional validation&lt;/p&gt;

&lt;p&gt;Low confidence&lt;br&gt;
→ human review&lt;/p&gt;

&lt;p&gt;But there is an important engineering caveat:&lt;/p&gt;

&lt;p&gt;A probability is not the same thing as business correctness.&lt;/p&gt;

&lt;p&gt;A model saying 0.95 does not magically make an action 95% guaranteed to be correct.&lt;/p&gt;

&lt;p&gt;Thresholds must be validated against real application outcomes.&lt;/p&gt;

&lt;p&gt;For high-impact workflows such as payments, account changes, deletion, security actions, or access control, the surrounding application should still enforce independent validation and human-review policies where appropriate.&lt;/p&gt;

&lt;p&gt;This is where good architecture matters more than model hype.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Shift: From AI That Talks to AI That Operates
&lt;/h2&gt;

&lt;p&gt;For years, the dominant AI interface has been:&lt;/p&gt;

&lt;p&gt;Prompt → Tokens → Response&lt;/p&gt;

&lt;p&gt;That interface is excellent for humans.&lt;/p&gt;

&lt;p&gt;But software often needs something different:&lt;/p&gt;

&lt;p&gt;State → Decision → Action&lt;/p&gt;

&lt;p&gt;That is the interesting architectural idea behind System One models.&lt;/p&gt;

&lt;p&gt;The model doesn't have to write a paragraph.&lt;/p&gt;

&lt;p&gt;It can provide a typed signal that another system consumes.&lt;/p&gt;

&lt;p&gt;This is closer to treating intelligence as a component inside software rather than treating the entire software system as a chatbot.&lt;/p&gt;

&lt;p&gt;And that distinction becomes increasingly important as AI agents move from answering questions to taking actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future Agent Stack May Be Heterogeneous
&lt;/h2&gt;

&lt;p&gt;I don't think the future is:&lt;/p&gt;

&lt;p&gt;“Jev replaces LLMs.”&lt;/p&gt;

&lt;p&gt;I think the more interesting direction is:&lt;/p&gt;

&lt;p&gt;LLMs for generation.&lt;/p&gt;

&lt;p&gt;Decision models for bounded judgments.&lt;/p&gt;

&lt;p&gt;Code for deterministic rules.&lt;/p&gt;

&lt;p&gt;Databases for state.&lt;/p&gt;

&lt;p&gt;Retrieval for knowledge.&lt;/p&gt;

&lt;p&gt;Tools for execution.&lt;/p&gt;

&lt;p&gt;Human review for uncertainty and high-impact decisions.&lt;/p&gt;

&lt;p&gt;The winning architecture may not be one model doing everything.&lt;/p&gt;

&lt;p&gt;It may be a system where every component is given the job it is actually good at.&lt;/p&gt;

&lt;p&gt;That is why Jev is worth watching.&lt;/p&gt;

&lt;p&gt;Not because every AI application needs it.&lt;/p&gt;

&lt;p&gt;But because it challenges one of the assumptions we've quietly accepted:&lt;/p&gt;

&lt;p&gt;that every intelligent step in an AI system should be implemented as text generation.&lt;/p&gt;

&lt;p&gt;Maybe the next generation of AI engineering isn't about making one model do more.&lt;/p&gt;

&lt;p&gt;Maybe it's about giving different models smaller, clearer jobs.&lt;/p&gt;

&lt;p&gt;And that could change how we design AI agents from the ground up.&lt;/p&gt;

&lt;p&gt;What would you change in your current AI architecture if the model making a decision didn't have to generate a single sentence?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>jev</category>
      <category>agents</category>
    </item>
    <item>
      <title>I Built an AI-Powered Excel Analyst Because Spreadsheets Still Take Too Much Manual Work</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Wed, 16 Sep 2026 15:54:32 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/i-built-an-ai-powered-excel-analyst-because-spreadsheets-still-take-too-much-manual-work-egi</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/i-built-an-ai-powered-excel-analyst-because-spreadsheets-still-take-too-much-manual-work-egi</guid>
      <description>&lt;p&gt;An Excel file can contain thousands of rows of useful information.&lt;/p&gt;

&lt;p&gt;But getting from that file to a meaningful answer can still take hours.&lt;/p&gt;

&lt;p&gt;You open the spreadsheet, inspect the columns, look for missing values, clean inconsistent data, calculate KPIs, create charts, investigate trends, and finally turn everything into something another person can actually understand.&lt;/p&gt;

&lt;p&gt;The analysis itself is often not the hardest part.&lt;/p&gt;

&lt;p&gt;The repetitive preparation around it is.&lt;/p&gt;

&lt;p&gt;That was the problem I wanted to explore when I built Excel Auto-Analyst, a Streamlit-based application for analyzing Excel and CSV datasets.&lt;/p&gt;

&lt;p&gt;Live app: &lt;a href="https://excel-auto-analyst-ne9ocshgvqtvqtitbapbjs.streamlit.app/" rel="noopener noreferrer"&gt;https://excel-auto-analyst-ne9ocshgvqtvqtitbapbjs.streamlit.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code: &lt;a href="https://github.com/Shweta-Mishra-ai/excel-auto-analyst" rel="noopener noreferrer"&gt;https://github.com/Shweta-Mishra-ai/excel-auto-analyst&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The problem&lt;/p&gt;

&lt;p&gt;Data analysis workflows often start with something deceptively simple:&lt;/p&gt;

&lt;p&gt;«“Here is the Excel file. Find out what is happening.”»&lt;/p&gt;

&lt;p&gt;In practice, that request expands quickly.&lt;/p&gt;

&lt;p&gt;Before answering a single business question, an analyst may need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the dataset structure&lt;/li&gt;
&lt;li&gt;Identify missing values&lt;/li&gt;
&lt;li&gt;Detect problematic columns&lt;/li&gt;
&lt;li&gt;Check data types&lt;/li&gt;
&lt;li&gt;Clean the dataset&lt;/li&gt;
&lt;li&gt;Calculate descriptive statistics&lt;/li&gt;
&lt;li&gt;Identify useful KPIs&lt;/li&gt;
&lt;li&gt;Explore relationships between variables&lt;/li&gt;
&lt;li&gt;Build visualizations&lt;/li&gt;
&lt;li&gt;Interpret trends&lt;/li&gt;
&lt;li&gt;Prepare a report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these tasks are individually complicated.&lt;/p&gt;

&lt;p&gt;The problem is repetition.&lt;/p&gt;

&lt;p&gt;When the same workflow happens across dozens of spreadsheets, a significant amount of analyst time can disappear into tasks that are necessary but not particularly insightful.&lt;/p&gt;

&lt;p&gt;I wanted to build something that could automate more of that workflow while keeping the analyst in control.&lt;/p&gt;

&lt;p&gt;What Excel Auto-Analyst does&lt;/p&gt;

&lt;p&gt;The application starts with a simple input:&lt;/p&gt;

&lt;p&gt;Upload an Excel or CSV file.&lt;/p&gt;

&lt;p&gt;From there, the workflow moves through several stages.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data profiling&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first step is understanding what was uploaded.&lt;/p&gt;

&lt;p&gt;Instead of immediately generating charts, the application first looks at the structure of the dataset.&lt;/p&gt;

&lt;p&gt;This includes information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of rows&lt;/li&gt;
&lt;li&gt;Number of columns&lt;/li&gt;
&lt;li&gt;Data types&lt;/li&gt;
&lt;li&gt;Missing values&lt;/li&gt;
&lt;li&gt;Duplicate records&lt;/li&gt;
&lt;li&gt;Basic dataset characteristics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters because analysis built on a misunderstood dataset can produce misleading conclusions.&lt;/p&gt;

&lt;p&gt;Profiling should happen before interpretation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data cleaning&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Real-world spreadsheets are rarely perfect.&lt;/p&gt;

&lt;p&gt;Columns may contain missing values, inconsistent formats, duplicated records, or values that require preprocessing before analysis.&lt;/p&gt;

&lt;p&gt;Excel Auto-Analyst includes a cleaning stage so the user can prepare the dataset before moving into deeper analysis.&lt;/p&gt;

&lt;p&gt;An important part of this workflow is maintaining visibility into what happens to the data rather than treating cleaning as an invisible operation.&lt;/p&gt;

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

&lt;p&gt;Automation should not mean:&lt;/p&gt;

&lt;p&gt;«“Trust the black box.”»&lt;/p&gt;

&lt;p&gt;It should mean:&lt;/p&gt;

&lt;p&gt;«“Here is what happened to your data, and here is what you can inspect.”»&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;KPI and statistical analysis&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once the dataset is prepared, the next question becomes:&lt;/p&gt;

&lt;p&gt;What does the data actually tell us?&lt;/p&gt;

&lt;p&gt;The application moves beyond simply displaying rows and columns and provides analytical outputs such as KPIs, statistics, and patterns that can help users understand their dataset.&lt;/p&gt;

&lt;p&gt;This is where spreadsheet analysis starts becoming more useful.&lt;/p&gt;

&lt;p&gt;Instead of manually writing the same calculations every time, the application can provide a starting point for exploration.&lt;/p&gt;

&lt;p&gt;The goal isn't to replace statistical reasoning.&lt;/p&gt;

&lt;p&gt;The goal is to reduce the repetitive work required to reach the point where reasoning becomes useful.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visual exploration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Numbers are useful.&lt;/p&gt;

&lt;p&gt;But patterns often become much easier to see when they are visualized.&lt;/p&gt;

&lt;p&gt;Excel Auto-Analyst generates interactive visualizations to help users explore the dataset from different perspectives.&lt;/p&gt;

&lt;p&gt;Charts can make things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Category differences&lt;/li&gt;
&lt;li&gt;Trends&lt;/li&gt;
&lt;li&gt;Distributions&lt;/li&gt;
&lt;li&gt;Relationships&lt;/li&gt;
&lt;li&gt;Outliers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;much easier to inspect.&lt;/p&gt;

&lt;p&gt;This is particularly useful during the exploratory phase of analysis, where the objective isn't necessarily to prove a hypothesis yet.&lt;/p&gt;

&lt;p&gt;Sometimes you first need to discover what questions the dataset is capable of answering.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI-assisted insights&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the part where the application moves from traditional analytics toward an AI-assisted workflow.&lt;/p&gt;

&lt;p&gt;Instead of requiring the user to manually interpret every visualization, the application can generate AI-assisted observations from the analysis.&lt;/p&gt;

&lt;p&gt;The important distinction is that AI should sit after the data and analytical processing, not blindly replace them.&lt;/p&gt;

&lt;p&gt;A useful architecture is:&lt;/p&gt;

&lt;p&gt;Data → Profiling → Cleaning → Analysis → Visualization → AI interpretation&lt;/p&gt;

&lt;p&gt;rather than:&lt;/p&gt;

&lt;p&gt;Data → LLM → Answer&lt;/p&gt;

&lt;p&gt;That difference is important.&lt;/p&gt;

&lt;p&gt;If an LLM receives raw spreadsheet data and is simply asked to “analyze it,” the system has much less control over how calculations are performed and how conclusions are produced.&lt;/p&gt;

&lt;p&gt;A structured analytical pipeline provides more opportunities for validation and inspection.&lt;/p&gt;

&lt;p&gt;The architecture&lt;/p&gt;

&lt;p&gt;The project is built around a relatively straightforward pipeline:&lt;/p&gt;

&lt;p&gt;Excel / CSV&lt;br&gt;
     ↓&lt;br&gt;
File Upload&lt;br&gt;
     ↓&lt;br&gt;
Data Profiling&lt;br&gt;
     ↓&lt;br&gt;
Data Cleaning&lt;br&gt;
     ↓&lt;br&gt;
Statistical / KPI Analysis&lt;br&gt;
     ↓&lt;br&gt;
Visualization&lt;br&gt;
     ↓&lt;br&gt;
AI-Assisted Insights&lt;br&gt;
     ↓&lt;br&gt;
Report Export&lt;/p&gt;

&lt;p&gt;The interface is implemented with Streamlit, which makes it possible to expose the analytical workflow through a browser without requiring users to build a local dashboard themselves.&lt;/p&gt;

&lt;p&gt;Python handles the underlying data-processing and analytical workflow.&lt;/p&gt;

&lt;p&gt;The architecture is intentionally focused on the workflow rather than creating another generic chatbot around a spreadsheet.&lt;/p&gt;

&lt;p&gt;Why I didn't want another “chat with your CSV” app&lt;/p&gt;

&lt;p&gt;There are already many applications where you can upload a dataset and ask an LLM questions.&lt;/p&gt;

&lt;p&gt;That approach is useful, but I wanted to explore something slightly different.&lt;/p&gt;

&lt;p&gt;A data analyst doesn't only ask questions.&lt;/p&gt;

&lt;p&gt;They also need to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is in the dataset?&lt;/li&gt;
&lt;li&gt;Is the data clean?&lt;/li&gt;
&lt;li&gt;Are there missing values?&lt;/li&gt;
&lt;li&gt;Which variables matter?&lt;/li&gt;
&lt;li&gt;What metrics are meaningful?&lt;/li&gt;
&lt;li&gt;Which patterns are actually present?&lt;/li&gt;
&lt;li&gt;Can the result be visualized?&lt;/li&gt;
&lt;li&gt;Can the analysis be reproduced or communicated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why I approached Excel Auto-Analyst as an analysis workflow, rather than simply a conversational interface.&lt;/p&gt;

&lt;p&gt;The AI layer is one component.&lt;/p&gt;

&lt;p&gt;It isn't the entire system.&lt;/p&gt;

&lt;p&gt;What I learned building it&lt;/p&gt;

&lt;p&gt;One of the biggest lessons was that automating analysis is harder than generating charts.&lt;/p&gt;

&lt;p&gt;A chart can be produced quickly.&lt;/p&gt;

&lt;p&gt;A useful analytical workflow requires much more consideration.&lt;/p&gt;

&lt;p&gt;You need to think about data quality, assumptions, edge cases, user experience, and how the output will be interpreted.&lt;/p&gt;

&lt;p&gt;There is also a fundamental difference between:&lt;/p&gt;

&lt;p&gt;“The system generated an answer.”&lt;/p&gt;

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

&lt;p&gt;“The system generated an answer that an analyst can inspect and reason about.”&lt;/p&gt;

&lt;p&gt;For AI-assisted data analysis, I think the second goal is much more important.&lt;/p&gt;

&lt;p&gt;Where this could go next&lt;/p&gt;

&lt;p&gt;There are several directions I want to explore further.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;More advanced anomaly detection&lt;/li&gt;
&lt;li&gt;Better natural-language data exploration&lt;/li&gt;
&lt;li&gt;Stronger validation of AI-generated insights&lt;/li&gt;
&lt;li&gt;More analytical templates&lt;/li&gt;
&lt;li&gt;Larger dataset support&lt;/li&gt;
&lt;li&gt;Reproducible analysis pipelines&lt;/li&gt;
&lt;li&gt;More export formats&lt;/li&gt;
&lt;li&gt;Better evaluation of generated insights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting problem isn't simply making AI produce more analysis.&lt;/p&gt;

&lt;p&gt;It's making automated analysis more reliable, inspectable, and useful.&lt;/p&gt;

&lt;p&gt;Try it&lt;/p&gt;

&lt;p&gt;If you work with Excel, Python, analytics, or data science, you can try the application here:&lt;/p&gt;

&lt;p&gt;Live app:&lt;br&gt;
&lt;a href="https://excel-auto-analyst-ne9ocshgvqtvqtitbapbjs.streamlit.app/" rel="noopener noreferrer"&gt;https://excel-auto-analyst-ne9ocshgvqtvqtitbapbjs.streamlit.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/Shweta-Mishra-ai/excel-auto-analyst" rel="noopener noreferrer"&gt;https://github.com/Shweta-Mishra-ai/excel-auto-analyst&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source, and I'm interested in feedback from people who work with real datasets rather than only toy examples.&lt;/p&gt;

&lt;p&gt;The question I'm exploring is simple:&lt;/p&gt;

&lt;p&gt;How much of the repetitive spreadsheet analysis workflow can we automate without taking the analyst out of the loop?&lt;/p&gt;

&lt;p&gt;What part of your own data-analysis workflow would you automate first?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>excel</category>
    </item>
    <item>
      <title>RAG Is Not an Architecture: Choosing the Right Retrieval Strategy for GenAI</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Thu, 10 Sep 2026 13:44:01 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/rag-is-not-an-architecture-choosing-the-right-retrieval-strategy-for-genai-4of7</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/rag-is-not-an-architecture-choosing-the-right-retrieval-strategy-for-genai-4of7</guid>
      <description>&lt;p&gt;Retrieval-Augmented Generation (RAG) has become one of the default patterns for building GenAI applications.&lt;/p&gt;

&lt;p&gt;But there is a problem.&lt;/p&gt;

&lt;p&gt;Many systems treat RAG as an architecture rather than a retrieval strategy.&lt;/p&gt;

&lt;p&gt;The typical design looks like this:&lt;/p&gt;

&lt;p&gt;User Query&lt;br&gt;
    ↓&lt;br&gt;
Vector Search&lt;br&gt;
    ↓&lt;br&gt;
Top-K Chunks&lt;br&gt;
    ↓&lt;br&gt;
LLM&lt;br&gt;
    ↓&lt;br&gt;
Answer&lt;/p&gt;

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

&lt;p&gt;It can even look impressive in a demo.&lt;/p&gt;

&lt;p&gt;But production systems are rarely that simple.&lt;/p&gt;

&lt;p&gt;The real question isn't:&lt;/p&gt;

&lt;p&gt;«Should I use RAG?»&lt;/p&gt;

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

&lt;p&gt;«What kind of retrieval does this problem actually require?»&lt;/p&gt;

&lt;p&gt;RAG Is a Pattern, Not a Complete Architecture&lt;/p&gt;

&lt;p&gt;RAG fundamentally means retrieving external information and providing it to a generative model as context.&lt;/p&gt;

&lt;p&gt;That's useful—but it doesn't tell you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how information should be retrieved&lt;/li&gt;
&lt;li&gt;whether one retrieval step is enough&lt;/li&gt;
&lt;li&gt;whether semantic similarity is sufficient&lt;/li&gt;
&lt;li&gt;whether relationships between entities matter&lt;/li&gt;
&lt;li&gt;whether the model should decide what to retrieve&lt;/li&gt;
&lt;li&gt;whether retrieval is even necessary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are architecture decisions.&lt;/p&gt;

&lt;p&gt;And choosing the wrong retrieval strategy can create problems with accuracy, latency, cost, and maintainability.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Naive RAG&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The simplest implementation is semantic vector search.&lt;/p&gt;

&lt;p&gt;Query&lt;br&gt;
  ↓&lt;br&gt;
Embedding&lt;br&gt;
  ↓&lt;br&gt;
Vector Database&lt;br&gt;
  ↓&lt;br&gt;
Top-K Chunks&lt;br&gt;
  ↓&lt;br&gt;
LLM&lt;br&gt;
  ↓&lt;br&gt;
Answer&lt;/p&gt;

&lt;p&gt;This works well when the user's question can be answered from relatively independent pieces of text.&lt;/p&gt;

&lt;p&gt;Typical examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal documentation&lt;/li&gt;
&lt;li&gt;Product manuals&lt;/li&gt;
&lt;li&gt;FAQs&lt;/li&gt;
&lt;li&gt;Knowledge bases&lt;/li&gt;
&lt;li&gt;Simple document Q&amp;amp;A&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But semantic similarity has limitations.&lt;/p&gt;

&lt;p&gt;Suppose a user searches for:&lt;/p&gt;

&lt;p&gt;INC-847291&lt;/p&gt;

&lt;p&gt;A semantically similar result isn't necessarily the correct result.&lt;/p&gt;

&lt;p&gt;Sometimes the exact token matters more than semantic meaning.&lt;/p&gt;

&lt;p&gt;That's where hybrid retrieval becomes useful.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hybrid RAG&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hybrid retrieval combines multiple retrieval mechanisms, commonly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic/vector search&lt;/li&gt;
&lt;li&gt;Keyword or lexical search&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             ┌── Vector Search ──┐
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Query ───────────┤                   ├──→ Candidate Results&lt;br&gt;
                 └── Keyword Search ─┘&lt;br&gt;
                              ↓&lt;br&gt;
                          Reranking&lt;br&gt;
                              ↓&lt;br&gt;
                             LLM&lt;/p&gt;

&lt;p&gt;This is particularly useful when your data contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product IDs&lt;/li&gt;
&lt;li&gt;Error codes&lt;/li&gt;
&lt;li&gt;Names&lt;/li&gt;
&lt;li&gt;Technical terminology&lt;/li&gt;
&lt;li&gt;Exact phrases&lt;/li&gt;
&lt;li&gt;Version numbers&lt;/li&gt;
&lt;li&gt;Structured identifiers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many enterprise applications, hybrid retrieval is a more practical starting point than pure vector search.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GraphRAG&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Some questions aren't really about finding similar text.&lt;/p&gt;

&lt;p&gt;They're about understanding relationships.&lt;/p&gt;

&lt;p&gt;Imagine a knowledge base containing:&lt;/p&gt;

&lt;p&gt;Customer&lt;br&gt;
   ↓&lt;br&gt;
Purchased&lt;br&gt;
   ↓&lt;br&gt;
Product&lt;br&gt;
   ↓&lt;br&gt;
Affected by&lt;br&gt;
   ↓&lt;br&gt;
Incident&lt;br&gt;
   ↓&lt;br&gt;
Caused by&lt;br&gt;
   ↓&lt;br&gt;
Service&lt;/p&gt;

&lt;p&gt;Now consider a question such as:&lt;/p&gt;

&lt;p&gt;«Which customers were affected by incidents caused by a particular service?»&lt;/p&gt;

&lt;p&gt;This isn't simply a semantic similarity problem.&lt;/p&gt;

&lt;p&gt;The answer requires following relationships across multiple entities.&lt;/p&gt;

&lt;p&gt;That's where graph-based retrieval can become valuable.&lt;/p&gt;

&lt;p&gt;GraphRAG can help when the knowledge domain contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong entity relationships&lt;/li&gt;
&lt;li&gt;Multi-hop questions&lt;/li&gt;
&lt;li&gt;Connected knowledge&lt;/li&gt;
&lt;li&gt;Organizational structures&lt;/li&gt;
&lt;li&gt;Dependency networks&lt;/li&gt;
&lt;li&gt;Complex relationships between documents and entities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But GraphRAG also introduces additional complexity.&lt;/p&gt;

&lt;p&gt;A graph isn't automatically better just because it is more sophisticated.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agentic RAG&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now consider a question where one retrieval operation isn't enough.&lt;/p&gt;

&lt;p&gt;An agentic system can decide:&lt;/p&gt;

&lt;p&gt;User Query&lt;br&gt;
     ↓&lt;br&gt;
Reason about task&lt;br&gt;
     ↓&lt;br&gt;
Retrieve information&lt;br&gt;
     ↓&lt;br&gt;
Evaluate results&lt;br&gt;
     ↓&lt;br&gt;
Retrieve again if necessary&lt;br&gt;
     ↓&lt;br&gt;
Use tools&lt;br&gt;
     ↓&lt;br&gt;
Synthesize&lt;br&gt;
     ↓&lt;br&gt;
Verify&lt;br&gt;
     ↓&lt;br&gt;
Answer&lt;/p&gt;

&lt;p&gt;The retrieval process becomes dynamic rather than fixed.&lt;/p&gt;

&lt;p&gt;This can be useful for tasks requiring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple information sources&lt;/li&gt;
&lt;li&gt;Iterative retrieval&lt;/li&gt;
&lt;li&gt;Tool usage&lt;/li&gt;
&lt;li&gt;Complex research&lt;/li&gt;
&lt;li&gt;Dynamic planning&lt;/li&gt;
&lt;li&gt;Multi-step reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there is a trade-off.&lt;/p&gt;

&lt;p&gt;More autonomy means more system complexity.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Latency&lt;/li&gt;
&lt;li&gt;Token usage&lt;/li&gt;
&lt;li&gt;Infrastructure cost&lt;/li&gt;
&lt;li&gt;Failure modes&lt;/li&gt;
&lt;li&gt;Debugging difficulty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agentic RAG should therefore solve a real problem—not simply make the architecture sound more advanced.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Long Context&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is another option that is frequently overlooked:&lt;/p&gt;

&lt;p&gt;Don't retrieve aggressively.&lt;/p&gt;

&lt;p&gt;Modern LLMs can process substantially larger contexts than earlier models.&lt;/p&gt;

&lt;p&gt;For some workloads, it may be better to provide a large, carefully selected context rather than splitting everything into small chunks and hoping retrieval finds the right pieces.&lt;/p&gt;

&lt;p&gt;This can be particularly useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Information is highly interconnected&lt;/li&gt;
&lt;li&gt;Chunk boundaries destroy meaning&lt;/li&gt;
&lt;li&gt;The relevant document set is relatively small&lt;/li&gt;
&lt;li&gt;Retrieval errors are more expensive than additional context&lt;/li&gt;
&lt;li&gt;The model needs broader context to reason correctly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn't mean "long context is better than RAG."&lt;/p&gt;

&lt;p&gt;It means retrieval and context management should be evaluated together.&lt;/p&gt;

&lt;p&gt;The Architecture Should Follow the Problem&lt;/p&gt;

&lt;p&gt;A production GenAI system might look more like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                User Query
                     ↓
              Intent Detection
                     ↓
          Retrieval Strategy Selection
                     ↓
    ┌────────────────┼────────────────┐
    ↓                ↓                ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Hybrid Search      Graph Search     Long Context&lt;br&gt;
        └────────────────┼────────────────┘&lt;br&gt;
                         ↓&lt;br&gt;
                      Reranking&lt;br&gt;
                         ↓&lt;br&gt;
                  Context Assembly&lt;br&gt;
                         ↓&lt;br&gt;
                   LLM Reasoning&lt;br&gt;
                         ↓&lt;br&gt;
                    Verification&lt;br&gt;
                         ↓&lt;br&gt;
                       Answer&lt;/p&gt;

&lt;p&gt;And even this isn't universal.&lt;/p&gt;

&lt;p&gt;Different applications may require completely different architectures.&lt;/p&gt;

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

&lt;p&gt;Document Q&amp;amp;A&lt;/p&gt;

&lt;p&gt;Query → Hybrid Retrieval → Reranking → LLM&lt;/p&gt;

&lt;p&gt;Relationship-heavy enterprise knowledge&lt;/p&gt;

&lt;p&gt;Query → Entity Extraction → Graph Traversal → LLM&lt;/p&gt;

&lt;p&gt;Complex research workflow&lt;/p&gt;

&lt;p&gt;Query → Planning → Retrieval → Tool Use → Retrieval → Synthesis&lt;/p&gt;

&lt;p&gt;Small, highly connected document collection&lt;/p&gt;

&lt;p&gt;Query → Relevant Documents → Long Context → LLM&lt;/p&gt;

&lt;p&gt;Don't Choose Architecture by Trend&lt;/p&gt;

&lt;p&gt;One of the easiest mistakes in GenAI engineering is selecting technology before defining the problem.&lt;/p&gt;

&lt;p&gt;"Let's use GraphRAG."&lt;/p&gt;

&lt;p&gt;"Let's build an agent."&lt;/p&gt;

&lt;p&gt;"Let's add a vector database."&lt;/p&gt;

&lt;p&gt;"Let's use a larger context window."&lt;/p&gt;

&lt;p&gt;These aren't architecture decisions until you understand the workload.&lt;/p&gt;

&lt;p&gt;The better approach is to evaluate:&lt;/p&gt;

&lt;p&gt;Accuracy&lt;/p&gt;

&lt;p&gt;Can the system consistently retrieve and use the information required to answer correctly?&lt;/p&gt;

&lt;p&gt;Latency&lt;/p&gt;

&lt;p&gt;How quickly does the system need to respond?&lt;/p&gt;

&lt;p&gt;Cost&lt;/p&gt;

&lt;p&gt;How much retrieval, inference, storage, and token usage can the application afford?&lt;/p&gt;

&lt;p&gt;Complexity&lt;/p&gt;

&lt;p&gt;How difficult will the system be to build, debug, and operate?&lt;/p&gt;

&lt;p&gt;Maintainability&lt;/p&gt;

&lt;p&gt;Can the architecture evolve as the data, models, and requirements change?&lt;/p&gt;

&lt;p&gt;The best architecture is usually the one that provides the right balance across all five.&lt;/p&gt;

&lt;p&gt;RAG Should Be a Design Decision&lt;/p&gt;

&lt;p&gt;A vector database doesn't automatically make an application well-designed.&lt;/p&gt;

&lt;p&gt;GraphRAG isn't automatically better than traditional RAG.&lt;/p&gt;

&lt;p&gt;Agentic RAG isn't automatically more intelligent.&lt;/p&gt;

&lt;p&gt;And long context isn't automatically cheaper or more accurate.&lt;/p&gt;

&lt;p&gt;These are tools and strategies.&lt;/p&gt;

&lt;p&gt;The architecture comes from the problem.&lt;/p&gt;

&lt;p&gt;Before choosing a retrieval strategy, ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is semantic similarity enough?&lt;/li&gt;
&lt;li&gt;Do exact terms matter?&lt;/li&gt;
&lt;li&gt;Are relationships between entities important?&lt;/li&gt;
&lt;li&gt;Does the system need iterative retrieval?&lt;/li&gt;
&lt;li&gt;Would broader context improve reasoning?&lt;/li&gt;
&lt;li&gt;What are the latency and cost constraints?&lt;/li&gt;
&lt;li&gt;How will retrieval quality be evaluated?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's a much better starting point than simply asking:&lt;/p&gt;

&lt;p&gt;«"Should we use RAG?"»&lt;/p&gt;

&lt;p&gt;**RAG is not the architecture.&lt;/p&gt;

&lt;p&gt;It is one of the building blocks.**&lt;/p&gt;

&lt;p&gt;The engineering challenge is choosing the right combination of retrieval, reasoning, context, tools, and verification for the problem you're actually solving.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>llm</category>
      <category>ai</category>
      <category>genai</category>
    </item>
    <item>
      <title>Can You Replace ChatGPT Plus With Free AI Tools? I Built a 30-Day AI Stack</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Sun, 06 Sep 2026 18:36:58 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/can-you-replace-chatgpt-plus-with-free-ai-tools-i-built-a-30-day-ai-stack-1lpi</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/can-you-replace-chatgpt-plus-with-free-ai-tools-i-built-a-30-day-ai-stack-1lpi</guid>
      <description>&lt;h3&gt;
  
  
  You probably don't need one expensive AI subscription. You need the right AI stack.
&lt;/h3&gt;

&lt;p&gt;AI subscriptions have quietly become another monthly expense.&lt;/p&gt;

&lt;p&gt;One tool for writing.&lt;/p&gt;

&lt;p&gt;Another for research.&lt;/p&gt;

&lt;p&gt;Another for coding.&lt;/p&gt;

&lt;p&gt;Another for image generation.&lt;/p&gt;

&lt;p&gt;Another for PDFs.&lt;/p&gt;

&lt;p&gt;Before you realize it, you're paying for several AI services every month — even though you use only a fraction of their capabilities.&lt;/p&gt;

&lt;p&gt;ChatGPT Plus alone is currently $20/month. That's $240 a year before adding anything else.&lt;/p&gt;

&lt;p&gt;But here's the interesting part:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you actually need to pay for all of it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I decided to approach the problem differently.&lt;/p&gt;

&lt;p&gt;Instead of looking for one “best” free AI tool, I built a &lt;strong&gt;free AI stack&lt;/strong&gt; where different tools handle different jobs.&lt;/p&gt;

&lt;p&gt;The goal isn't to prove that free AI is better than paid AI.&lt;/p&gt;

&lt;p&gt;The goal is much more practical:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much of a paid AI workflow can you realistically replace with free tools?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Biggest Mistake: Looking for One AI to Do Everything
&lt;/h2&gt;

&lt;p&gt;This is how most people use AI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Open ChatGPT → ask everything → hit usage limits → consider upgrading.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But AI tools are increasingly specialized.&lt;/p&gt;

&lt;p&gt;A research engine doesn't need to be your coding assistant.&lt;/p&gt;

&lt;p&gt;A coding model doesn't need to be your web-search engine.&lt;/p&gt;

&lt;p&gt;A writing assistant doesn't need to be your data-analysis environment.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;“Which free AI is the best?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Which free AI is best for this particular task?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That simple change makes the free ecosystem much more powerful.&lt;/p&gt;




&lt;h1&gt;
  
  
  My Free AI Stack
&lt;/h1&gt;

&lt;p&gt;Here's the architecture I would use for a zero-subscription workflow.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Free Option&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;General AI assistant&lt;/td&gt;
&lt;td&gt;ChatGPT Free&lt;/td&gt;
&lt;td&gt;Everyday questions and writing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web research&lt;/td&gt;
&lt;td&gt;Perplexity Free&lt;/td&gt;
&lt;td&gt;Search + citations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;Gemini / free coding tools&lt;/td&gt;
&lt;td&gt;Code generation and debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Research &amp;amp; experimentation&lt;/td&gt;
&lt;td&gt;Google AI Studio&lt;/td&gt;
&lt;td&gt;Model experimentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft workflow&lt;/td&gt;
&lt;td&gt;Copilot Free&lt;/td&gt;
&lt;td&gt;Web-based assistance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private/offline AI&lt;/td&gt;
&lt;td&gt;Ollama / LM Studio&lt;/td&gt;
&lt;td&gt;Local inference&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important point is that these tools don't have identical capabilities or limits.&lt;/p&gt;

&lt;p&gt;For example, Perplexity's current free Standard plan provides basic search capabilities, citations, limited Pro Searches and limited file uploads.&lt;/p&gt;

&lt;p&gt;Microsoft also provides a free Copilot experience for general questions, writing, brainstorming, summarization and web-based tasks.&lt;/p&gt;

&lt;p&gt;Google AI Studio provides access to models under a free tier, subject to model-specific rate limits and current usage policies.&lt;/p&gt;

&lt;p&gt;That's enough to build a surprisingly capable workflow.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. General-Purpose AI: Start With Free Access
&lt;/h1&gt;

&lt;p&gt;You don't necessarily need a paid subscription for every basic AI task.&lt;/p&gt;

&lt;p&gt;A free general-purpose assistant can handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;brainstorming&lt;/li&gt;
&lt;li&gt;rewriting&lt;/li&gt;
&lt;li&gt;summaries&lt;/li&gt;
&lt;li&gt;explanations&lt;/li&gt;
&lt;li&gt;basic coding&lt;/li&gt;
&lt;li&gt;learning&lt;/li&gt;
&lt;li&gt;planning&lt;/li&gt;
&lt;li&gt;everyday questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The limitation is usually &lt;strong&gt;usage and feature access&lt;/strong&gt;, not whether the model can do anything useful.&lt;/p&gt;

&lt;p&gt;ChatGPT itself remains available on a free tier, while Plus provides broader model and tool access for $20/month.&lt;/p&gt;

&lt;p&gt;So don't automatically upgrade just because you've hit one limitation.&lt;/p&gt;

&lt;p&gt;First ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can another free tool handle this task?&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Use Perplexity When the Job Is Research
&lt;/h1&gt;

&lt;p&gt;One of the biggest reasons people pay for premium AI is research.&lt;/p&gt;

&lt;p&gt;But research is a different problem from conversation.&lt;/p&gt;

&lt;p&gt;When I want to investigate a topic, I want:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Search → Sources → Citations → Synthesis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's where a search-oriented AI tool can be more useful than a general chatbot.&lt;/p&gt;

&lt;p&gt;Perplexity's current free tier includes web search and citations, although advanced searches, models and other features have tighter limits than its paid plans.&lt;/p&gt;

&lt;p&gt;So instead of wasting your general AI allowance on web research:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use a research-focused tool for research.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Use Google AI Studio as an AI Playground
&lt;/h1&gt;

&lt;p&gt;If you're an AI developer, this is where things get interesting.&lt;/p&gt;

&lt;p&gt;Google AI Studio can be used to experiment with Gemini models and provides free-tier access subject to current limits.&lt;/p&gt;

&lt;p&gt;That makes it useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompt experiments&lt;/li&gt;
&lt;li&gt;structured output&lt;/li&gt;
&lt;li&gt;prototyping&lt;/li&gt;
&lt;li&gt;model comparisons&lt;/li&gt;
&lt;li&gt;API experiments&lt;/li&gt;
&lt;li&gt;building proof-of-concepts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers, the value isn't simply “free AI.”&lt;/p&gt;

&lt;p&gt;It's &lt;strong&gt;free experimentation capacity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that's a much more useful way to think about these platforms.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Don't Ignore Free Coding Assistance
&lt;/h1&gt;

&lt;p&gt;Coding is one area where people quickly become dependent on a single premium AI tool.&lt;/p&gt;

&lt;p&gt;You don't have to.&lt;/p&gt;

&lt;p&gt;A practical coding workflow can combine:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDE + local models + free cloud models + your own tests&lt;/strong&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Use a free model to generate an initial implementation.&lt;/li&gt;
&lt;li&gt;Run your tests locally.&lt;/li&gt;
&lt;li&gt;Use another model to review the error.&lt;/li&gt;
&lt;li&gt;Fix the implementation.&lt;/li&gt;
&lt;li&gt;Run tests again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The important part is that &lt;strong&gt;the AI isn't the validation layer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your tests are.&lt;/p&gt;

&lt;p&gt;That's especially important when working with production code.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Keep Private Work Local
&lt;/h1&gt;

&lt;p&gt;This is the part most “free AI tools” lists completely miss.&lt;/p&gt;

&lt;p&gt;Not every task should go into a free cloud AI service.&lt;/p&gt;

&lt;p&gt;If you're working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;confidential code&lt;/li&gt;
&lt;li&gt;private documents&lt;/li&gt;
&lt;li&gt;client information&lt;/li&gt;
&lt;li&gt;internal datasets&lt;/li&gt;
&lt;li&gt;sensitive research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;consider using a local model instead.&lt;/p&gt;

&lt;p&gt;Tools such as Ollama and LM Studio can run models directly on your computer.&lt;/p&gt;

&lt;p&gt;That gives you another layer in your AI stack:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud AI for capability.&lt;br&gt;
Local AI for control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And you don't necessarily have to choose one permanently.&lt;/p&gt;




&lt;h1&gt;
  
  
  The 30-Day AI Stack Challenge
&lt;/h1&gt;

&lt;p&gt;Here's the experiment I would recommend before paying for another AI subscription.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 1 — Replace basic usage
&lt;/h3&gt;

&lt;p&gt;Use free tools for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writing&lt;/li&gt;
&lt;li&gt;brainstorming&lt;/li&gt;
&lt;li&gt;summaries&lt;/li&gt;
&lt;li&gt;everyday questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track where you actually hit limitations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 2 — Replace research
&lt;/h3&gt;

&lt;p&gt;Move research-heavy tasks to a search-focused AI.&lt;/p&gt;

&lt;p&gt;Track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;number of searches&lt;/li&gt;
&lt;li&gt;quality of sources&lt;/li&gt;
&lt;li&gt;citation usefulness&lt;/li&gt;
&lt;li&gt;time saved&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Week 3 — Replace coding workflows
&lt;/h3&gt;

&lt;p&gt;Try free models and local AI for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code generation&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;test generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track how often you actually need a premium model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Week 4 — Audit your workflow
&lt;/h3&gt;

&lt;p&gt;Now ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did I genuinely miss?&lt;/strong&gt;&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“Which premium feature looks cool?”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“Which paid capability actually changed my productivity?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the difference between buying AI because it's impressive and buying AI because it's useful.&lt;/p&gt;




&lt;h1&gt;
  
  
  Where Free AI Still Loses
&lt;/h1&gt;

&lt;p&gt;Let's be honest.&lt;/p&gt;

&lt;p&gt;Free tools aren't magic.&lt;/p&gt;

&lt;p&gt;You will encounter:&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage limits
&lt;/h3&gt;

&lt;p&gt;Free plans often restrict advanced models, searches, file uploads, or overall usage. Perplexity's current free plan, for example, has explicit limits on Pro Searches, research queries and file uploads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature restrictions
&lt;/h3&gt;

&lt;p&gt;Some advanced capabilities are reserved for paid plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inconsistent model access
&lt;/h3&gt;

&lt;p&gt;Platforms can change which models are available on free tiers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Context limitations
&lt;/h3&gt;

&lt;p&gt;Long documents and large codebases may require more capable models or larger context windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fragmented workflow
&lt;/h3&gt;

&lt;p&gt;Using five different AI tools can become annoying.&lt;/p&gt;

&lt;p&gt;That's the biggest hidden cost of the free stack:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;complexity.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  So, Should You Cancel ChatGPT Plus?
&lt;/h1&gt;

&lt;p&gt;Not necessarily.&lt;/p&gt;

&lt;p&gt;If a $20 subscription genuinely saves you several hours every month, it can easily justify itself.&lt;/p&gt;

&lt;p&gt;The point isn't:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Paid AI is bad.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The point is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Don't pay for capabilities you don't actually use.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your workload consists mostly of simple questions, writing, occasional research and basic coding, a combination of free tools may be enough.&lt;/p&gt;

&lt;p&gt;If you're doing heavy research, advanced coding, deep reasoning, large-file analysis or frequent AI workflows, a premium subscription may still be worth it.&lt;/p&gt;

&lt;p&gt;The answer depends on your workload.&lt;/p&gt;




&lt;h1&gt;
  
  
  The AI Stack Is More Important Than the AI Subscription
&lt;/h1&gt;

&lt;p&gt;This is the bigger lesson.&lt;/p&gt;

&lt;p&gt;The future of personal AI probably won't be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One company owns your entire AI workflow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It will look more like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;General AI&lt;/strong&gt;&lt;br&gt;
↓&lt;br&gt;
&lt;strong&gt;Research AI&lt;/strong&gt;&lt;br&gt;
↓&lt;br&gt;
&lt;strong&gt;Coding AI&lt;/strong&gt;&lt;br&gt;
↓&lt;br&gt;
&lt;strong&gt;Local AI&lt;/strong&gt;&lt;br&gt;
↓&lt;br&gt;
&lt;strong&gt;Automation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each layer solves a different problem.&lt;/p&gt;

&lt;p&gt;And increasingly, you can mix free, paid and local components depending on what the task requires.&lt;/p&gt;

&lt;p&gt;That's a much more flexible architecture than putting everything behind one subscription.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Verdict
&lt;/h1&gt;

&lt;p&gt;Can you replace ChatGPT Plus with free AI tools?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For some people, absolutely.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For everyone?&lt;/p&gt;

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

&lt;p&gt;The smarter approach is to run the experiment first.&lt;/p&gt;

&lt;p&gt;Use free tools for 30 days.&lt;/p&gt;

&lt;p&gt;Track your actual usage.&lt;/p&gt;

&lt;p&gt;Identify the tasks where free models are sufficient.&lt;/p&gt;

&lt;p&gt;Find the tasks where they aren't.&lt;/p&gt;

&lt;p&gt;Then pay only for the capability that genuinely creates value.&lt;/p&gt;

&lt;p&gt;Because the real question isn't:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“How can I get AI for free?”&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;“Which AI capabilities are actually worth paying for?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that is a much better question to ask before your next subscription renewal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What AI tool would you keep if you were allowed to pay for only one?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>chatgpt</category>
      <category>automation</category>
    </item>
    <item>
      <title>Run AI Locally on Your Laptop: What You Actually Get When You Stop Using the Cloud</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Wed, 02 Sep 2026 14:05:01 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/run-ai-locally-on-your-laptop-what-you-actually-get-when-you-stop-using-the-cloud-271g</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/run-ai-locally-on-your-laptop-what-you-actually-get-when-you-stop-using-the-cloud-271g</guid>
      <description>&lt;h3&gt;
  
  
  Private AI, offline access, no API bills — and a much better understanding of what actually happens when an LLM runs on your own machine.
&lt;/h3&gt;

&lt;p&gt;Your AI assistant doesn't need to know everything about you.&lt;/p&gt;

&lt;p&gt;Sometimes, it shouldn't even have access to the internet.&lt;/p&gt;

&lt;p&gt;Think about the documents you routinely give an AI assistant: private code, business files, contracts, financial spreadsheets, research notes, personal documents, or internal company information.&lt;/p&gt;

&lt;p&gt;With a cloud-based AI service, that information has to leave your computer to be processed.&lt;/p&gt;

&lt;p&gt;But there is another option.&lt;/p&gt;

&lt;p&gt;You can download an AI model, run it directly on your laptop, disconnect from the internet, and continue using it.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;local AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And in 2026, local AI is no longer limited to researchers with expensive GPUs. Tools such as Ollama, LM Studio, and Jan have made running open and open-weight models considerably easier on consumer hardware.&lt;/p&gt;

&lt;p&gt;The important question is no longer &lt;em&gt;“Can I run an LLM locally?”&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;“What should I actually run locally, and when does it make sense?”&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does “Local AI” Actually Mean?
&lt;/h2&gt;

&lt;p&gt;A local AI setup has three basic components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model → Inference engine → Your application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model is downloaded to your computer.&lt;/p&gt;

&lt;p&gt;The inference engine loads that model into your system's available memory and performs the computation locally.&lt;/p&gt;

&lt;p&gt;Your application then provides the interface you interact with — a chat window, coding assistant, document-analysis tool, or API.&lt;/p&gt;

&lt;p&gt;Unlike a traditional cloud AI workflow, your prompt does not have to travel to a remote inference server.&lt;/p&gt;

&lt;p&gt;For example, LM Studio states that downloaded local models can run entirely offline, including chatting with documents and running its local server. Jan similarly describes its local models as running entirely on the user's machine.&lt;/p&gt;

&lt;p&gt;That distinction is the foundation of local AI.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Run an AI Model Locally?
&lt;/h1&gt;

&lt;p&gt;There are three major reasons.&lt;/p&gt;

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

&lt;p&gt;If the model and application are genuinely running locally, your prompts and documents can remain on your machine.&lt;/p&gt;

&lt;p&gt;This is particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;private source code&lt;/li&gt;
&lt;li&gt;internal documentation&lt;/li&gt;
&lt;li&gt;confidential research&lt;/li&gt;
&lt;li&gt;financial spreadsheets&lt;/li&gt;
&lt;li&gt;proprietary datasets&lt;/li&gt;
&lt;li&gt;personal notes&lt;/li&gt;
&lt;li&gt;offline document analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there is an important caveat:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Local” does not automatically mean “nothing ever connects to the internet.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application may still need internet access to download models, check updates, search for models, or access optional cloud features.&lt;/p&gt;

&lt;p&gt;For example, LM Studio's offline documentation distinguishes between local inference, which can work offline, and model discovery/download operations that require connectivity.&lt;/p&gt;

&lt;p&gt;So if privacy is your goal, understand exactly which features are local and which are cloud-connected.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. No Recurring AI API Bill
&lt;/h2&gt;

&lt;p&gt;Local inference doesn't require paying for every prompt through an external API.&lt;/p&gt;

&lt;p&gt;You download the model and use your own hardware for inference.&lt;/p&gt;

&lt;p&gt;That doesn't mean local AI is literally cost-free.&lt;/p&gt;

&lt;p&gt;You still pay for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your laptop&lt;/li&gt;
&lt;li&gt;electricity&lt;/li&gt;
&lt;li&gt;storage&lt;/li&gt;
&lt;li&gt;potentially additional RAM or GPU hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there is no per-request cloud inference bill for the local workload.&lt;/p&gt;

&lt;p&gt;For someone experimenting with AI agents, coding assistants, RAG systems, or automation, this can make local models extremely attractive.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Offline AI
&lt;/h1&gt;

&lt;p&gt;This is one of the most underrated advantages.&lt;/p&gt;

&lt;p&gt;Once the model is already downloaded, you can use it without an active internet connection.&lt;/p&gt;

&lt;p&gt;Imagine being on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an airplane&lt;/li&gt;
&lt;li&gt;a train with unreliable connectivity&lt;/li&gt;
&lt;li&gt;a remote location&lt;/li&gt;
&lt;li&gt;a network-restricted environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can still ask questions, summarize local documents, write code, brainstorm ideas, or work with locally stored information.&lt;/p&gt;

&lt;p&gt;LM Studio explicitly supports offline chat, document interaction, and local inference after the required model files are available.&lt;/p&gt;

&lt;p&gt;That's a very different experience from depending entirely on a web-based AI assistant.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Three Local AI Tools Worth Knowing
&lt;/h1&gt;

&lt;p&gt;You don't need to start with CUDA configuration, model servers, or complicated Python environments.&lt;/p&gt;

&lt;p&gt;Three tools stand out for different types of users.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. LM Studio — Best for Beginners
&lt;/h2&gt;

&lt;p&gt;LM Studio is probably the easiest entry point if you want a ChatGPT-style interface without spending your first afternoon in a terminal.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;browse models&lt;/li&gt;
&lt;li&gt;download models&lt;/li&gt;
&lt;li&gt;load them into memory&lt;/li&gt;
&lt;li&gt;chat with them&lt;/li&gt;
&lt;li&gt;work with documents locally&lt;/li&gt;
&lt;li&gt;expose models through a local API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It supports macOS, Windows, and Linux. Its current documentation also supports local models such as Qwen, Llama, Mistral, Gemma, and gpt-oss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best choice if:&lt;/strong&gt; you want the simplest visual experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Ollama — Best for Developers
&lt;/h2&gt;

&lt;p&gt;Ollama takes a different approach.&lt;/p&gt;

&lt;p&gt;Instead of making the graphical interface the main attraction, it makes local models easy to integrate into developer workflows.&lt;/p&gt;

&lt;p&gt;A simple command can download and run a model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama run qwen3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ollama also exposes local APIs, making it useful for applications, scripts, coding workflows, and AI agents.&lt;/p&gt;

&lt;p&gt;Its 2026 releases have expanded hardware support and improved performance, including Vulkan support for additional GPU hardware.&lt;/p&gt;

&lt;p&gt;It can also integrate with developer tools and coding agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best choice if:&lt;/strong&gt; you're a developer, AI engineer, or automation builder.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Jan — Best Open-Source Desktop Alternative
&lt;/h2&gt;

&lt;p&gt;Jan is another interesting option for people who want a local-first desktop AI environment.&lt;/p&gt;

&lt;p&gt;Its current desktop application supports local models, while its ecosystem also includes local APIs and CLI tooling.&lt;/p&gt;

&lt;p&gt;Jan's documentation describes local models as running on your machine without requiring an API key, while cloud models are an optional separate mode.&lt;/p&gt;

&lt;p&gt;That separation is important.&lt;/p&gt;

&lt;p&gt;Local AI should not mean pretending cloud AI doesn't exist.&lt;/p&gt;

&lt;p&gt;It means &lt;strong&gt;you get to choose where inference happens.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best choice if:&lt;/strong&gt; you want an open-source, local-first AI desktop environment.&lt;/p&gt;




&lt;h1&gt;
  
  
  Which Model Should You Run?
&lt;/h1&gt;

&lt;p&gt;This is where many beginner guides oversimplify things.&lt;/p&gt;

&lt;p&gt;There is no universal “best local model.”&lt;/p&gt;

&lt;p&gt;The right model depends on:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model size + quantization + context length + RAM/VRAM + workload&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A smaller model can be much faster on a laptop.&lt;/p&gt;

&lt;p&gt;A larger model may produce better reasoning or coding results, but can become painfully slow if your hardware cannot keep up.&lt;/p&gt;

&lt;p&gt;For example, current Qwen3 variants range from very small models to models requiring substantially more memory.&lt;/p&gt;

&lt;p&gt;OpenAI's gpt-oss models are another interesting current option. The smaller gpt-oss-20b model is designed for local use and has a published memory target around 16 GB, while the 120b version is far more demanding.&lt;/p&gt;

&lt;p&gt;A practical starting point looks like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hardware&lt;/th&gt;
&lt;th&gt;Practical Starting Point&lt;/th&gt;
&lt;th&gt;Good For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8 GB RAM&lt;/td&gt;
&lt;td&gt;Small 1B–4B models&lt;/td&gt;
&lt;td&gt;Summaries, simple Q&amp;amp;A, lightweight writing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16 GB RAM&lt;/td&gt;
&lt;td&gt;7B–14B class models&lt;/td&gt;
&lt;td&gt;Coding, writing, analysis, RAG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32 GB+ RAM&lt;/td&gt;
&lt;td&gt;Larger 20B–30B+ models&lt;/td&gt;
&lt;td&gt;More demanding reasoning and development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dedicated high-memory GPU&lt;/td&gt;
&lt;td&gt;Large quantized models&lt;/td&gt;
&lt;td&gt;Advanced local experimentation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are &lt;strong&gt;starting points, not hard limits&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Model quantization, GPU memory, CPU performance, context length, and operating system all affect the actual experience.&lt;/p&gt;




&lt;h1&gt;
  
  
  A Better 5-Minute Local AI Experiment
&lt;/h1&gt;

&lt;p&gt;Don't begin by downloading five different models.&lt;/p&gt;

&lt;p&gt;Start with one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install a local AI runner
&lt;/h3&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LM Studio&lt;/strong&gt; if you want a graphical interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ollama&lt;/strong&gt; if you want developer/API integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jan&lt;/strong&gt; if you want an open-source desktop experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Download one model
&lt;/h3&gt;

&lt;p&gt;Choose a model that actually fits your hardware.&lt;/p&gt;

&lt;p&gt;Don't download a 60+ GB model just because its benchmark score looks impressive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Run a simple test
&lt;/h3&gt;

&lt;p&gt;Ask the model to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;summarize a document&lt;/li&gt;
&lt;li&gt;explain a Python function&lt;/li&gt;
&lt;li&gt;rewrite a paragraph&lt;/li&gt;
&lt;li&gt;analyze a small dataset&lt;/li&gt;
&lt;li&gt;generate a SQL query&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Disconnect your internet
&lt;/h3&gt;

&lt;p&gt;Now test the same workflow offline.&lt;/p&gt;

&lt;p&gt;This is the moment when local AI becomes more than a concept.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Compare it with your normal cloud workflow
&lt;/h3&gt;

&lt;p&gt;Measure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;response speed&lt;/li&gt;
&lt;li&gt;answer quality&lt;/li&gt;
&lt;li&gt;memory usage&lt;/li&gt;
&lt;li&gt;context handling&lt;/li&gt;
&lt;li&gt;coding ability&lt;/li&gt;
&lt;li&gt;document analysis&lt;/li&gt;
&lt;li&gt;ease of use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't assume local AI is automatically better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measure it.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  What Can You Actually Do With Local AI?
&lt;/h1&gt;

&lt;p&gt;The most interesting applications aren't just chatting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Private RAG
&lt;/h3&gt;

&lt;p&gt;Store documents locally and let the model retrieve information from them without uploading the documents to a cloud AI service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Coding Assistant
&lt;/h3&gt;

&lt;p&gt;Connect a local model to your development environment and use it for code explanation, generation, debugging, or repository analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Offline Research Assistant
&lt;/h3&gt;

&lt;p&gt;Keep a collection of papers, notes, and technical documentation on your machine and query them locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Analysis
&lt;/h3&gt;

&lt;p&gt;Combine a local LLM with Python, pandas, or a local application to create private analytical workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local AI Agents
&lt;/h3&gt;

&lt;p&gt;Develop agents that interact with files, APIs, databases, or developer tools while keeping the core inference on your own hardware.&lt;/p&gt;

&lt;p&gt;Ollama and Jan now provide local API and developer-oriented workflows, while LM Studio offers OpenAI-compatible local endpoints.&lt;/p&gt;

&lt;p&gt;This is where local AI becomes particularly interesting for AI engineers.&lt;/p&gt;

&lt;p&gt;You're no longer simply &lt;strong&gt;using an AI application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You're building your own AI infrastructure.&lt;/p&gt;




&lt;h1&gt;
  
  
  But Local AI Has Real Limitations
&lt;/h1&gt;

&lt;p&gt;This is the part many “run AI locally for free” articles skip.&lt;/p&gt;

&lt;p&gt;Local AI isn't magic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smaller models can be weaker
&lt;/h3&gt;

&lt;p&gt;A laptop-friendly model may not match the strongest cloud models on difficult reasoning, coding, multimodal tasks, or long-context workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed depends on hardware
&lt;/h3&gt;

&lt;p&gt;A model that feels instant on a powerful GPU can feel painfully slow on a CPU-only laptop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storage matters
&lt;/h3&gt;

&lt;p&gt;Models can consume several gigabytes each, and larger models can consume tens of gigabytes.&lt;/p&gt;

&lt;h3&gt;
  
  
  You don't automatically get live information
&lt;/h3&gt;

&lt;p&gt;A fully offline model doesn't know what's happening on the internet right now.&lt;/p&gt;

&lt;p&gt;If you enable web search or other external tools, you've introduced an online component again.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model licenses differ
&lt;/h3&gt;

&lt;p&gt;“Open,” “open-source,” and “open-weight” are not interchangeable terms.&lt;/p&gt;

&lt;p&gt;Always check the license for the specific model before using it commercially.&lt;/p&gt;

&lt;p&gt;Even LM Studio's documentation explicitly points out that different models can have different degrees of openness and different licenses.&lt;/p&gt;




&lt;h1&gt;
  
  
  So, Should You Switch to Local AI?
&lt;/h1&gt;

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

&lt;p&gt;The better approach is &lt;strong&gt;hybrid AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Use local models when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;privacy matters&lt;/li&gt;
&lt;li&gt;the task is routine&lt;/li&gt;
&lt;li&gt;you are offline&lt;/li&gt;
&lt;li&gt;you want predictable local costs&lt;/li&gt;
&lt;li&gt;you're experimenting with AI infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use cloud models when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you need frontier-level capability&lt;/li&gt;
&lt;li&gt;you need live web information&lt;/li&gt;
&lt;li&gt;the task requires substantial compute&lt;/li&gt;
&lt;li&gt;you need advanced multimodal capabilities&lt;/li&gt;
&lt;li&gt;local hardware isn't sufficient&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future isn't necessarily:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud vs. Local.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Cloud when you need scale.&lt;br&gt;
Local when you need control.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Takeaway
&lt;/h1&gt;

&lt;p&gt;Running an AI model on your laptop changes your relationship with AI.&lt;/p&gt;

&lt;p&gt;Instead of thinking of AI as a website you visit, you can start thinking of it as &lt;strong&gt;software you own, operate, and integrate into your own environment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The technology has also become significantly more accessible.&lt;/p&gt;

&lt;p&gt;LM Studio gives beginners a polished interface.&lt;/p&gt;

&lt;p&gt;Ollama gives developers a lightweight local model layer.&lt;/p&gt;

&lt;p&gt;Jan provides another open-source, local-first option.&lt;/p&gt;

&lt;p&gt;And newer open-weight models are making increasingly capable local inference possible on consumer hardware.&lt;/p&gt;

&lt;p&gt;But don't fall for the “everything is free and unlimited” narrative.&lt;/p&gt;

&lt;p&gt;Local AI has trade-offs.&lt;/p&gt;

&lt;p&gt;The real advantage is something more valuable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Control over your data.&lt;/p&gt;

&lt;p&gt;Control over where inference happens.&lt;/p&gt;

&lt;p&gt;Control over your AI stack.&lt;/p&gt;

&lt;p&gt;And, increasingly, control over how much you depend on someone else's API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The interesting question isn't whether local AI can replace cloud AI. It's where you should stop sending your data to the cloud in the first place.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What would you run locally first — a private RAG system, coding assistant, data-analysis agent, or something else?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>privacy</category>
      <category>aiengineering</category>
    </item>
    <item>
      <title>MCP + Plugins: Stop Connecting Tools. Start Building Developer Workflows.</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Wed, 19 Aug 2026 17:25:39 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/mcp-plugins-stop-connecting-tools-start-building-developer-workflows-5mk</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/mcp-plugins-stop-connecting-tools-start-building-developer-workflows-5mk</guid>
      <description>&lt;p&gt;Your AI coding assistant does not become powerful because you connected more tools.&lt;/p&gt;

&lt;p&gt;It becomes powerful when those tools are connected to the right workflow, with the right permissions, and enough context to make useful decisions.&lt;/p&gt;

&lt;p&gt;That distinction matters as AI moves beyond generating code and starts interacting with repositories, databases, documentation, APIs, CI systems, and other development infrastructure.&lt;/p&gt;

&lt;p&gt;This is where MCP and agent plugins become genuinely useful.&lt;/p&gt;

&lt;p&gt;But there is a problem: developers can easily turn integrations into a shopping list.&lt;/p&gt;

&lt;p&gt;GitHub. Database. Browser. Slack. Documentation. Another MCP server. Another plugin.&lt;/p&gt;

&lt;p&gt;More connections can look impressive while making the actual system harder to control.&lt;/p&gt;

&lt;p&gt;The goal should not be maximum connectivity.&lt;/p&gt;

&lt;p&gt;It should be useful connectivity.&lt;/p&gt;

&lt;p&gt;MCP is a connection layer&lt;/p&gt;

&lt;p&gt;The Model Context Protocol (MCP) provides a standardized way for AI applications to interact with external tools and data.&lt;/p&gt;

&lt;p&gt;An MCP server can expose capabilities such as repository access, documentation retrieval, database operations, APIs, or other development tools.&lt;/p&gt;

&lt;p&gt;The important separation is:&lt;/p&gt;

&lt;p&gt;The model reasons. The tool performs the operation.&lt;/p&gt;

&lt;p&gt;Instead of copying information from five different systems into a prompt, the AI application can interact with those systems through defined interfaces.&lt;/p&gt;

&lt;p&gt;That makes tool use more structured and reusable.&lt;/p&gt;

&lt;p&gt;But MCP itself does not magically create an intelligent developer agent.&lt;/p&gt;

&lt;p&gt;The workflow around those tools still matters.&lt;/p&gt;

&lt;p&gt;Plugins solve a different problem&lt;/p&gt;

&lt;p&gt;MCP and plugins should not be treated as the same thing.&lt;/p&gt;

&lt;p&gt;MCP is primarily a protocol for connecting AI applications with capabilities.&lt;/p&gt;

&lt;p&gt;A plugin can package a broader capability or workflow, potentially combining skills, instructions, and MCP-based tools into something easier to distribute and reuse.&lt;/p&gt;

&lt;p&gt;Think about a developer task such as:&lt;/p&gt;

&lt;p&gt;«“Investigate why the production deployment failed.”»&lt;/p&gt;

&lt;p&gt;That is rarely a single-tool operation.&lt;/p&gt;

&lt;p&gt;The agent may need repository information, CI status, logs, recent commits, changed files, documentation, and issue history.&lt;/p&gt;

&lt;p&gt;The useful capability comes from combining these pieces into a workflow.&lt;/p&gt;

&lt;p&gt;Stop asking “Which tools should I install?”&lt;/p&gt;

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

&lt;p&gt;Don't start with:&lt;/p&gt;

&lt;p&gt;«“Which MCP servers are available?”»&lt;/p&gt;

&lt;p&gt;Start with:&lt;/p&gt;

&lt;p&gt;«“Which developer workflow am I trying to improve?”»&lt;/p&gt;

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

&lt;p&gt;CI debugging&lt;/p&gt;

&lt;p&gt;GitHub → failed workflow → logs → recent commits → changed files → project context&lt;/p&gt;

&lt;p&gt;Database investigation&lt;/p&gt;

&lt;p&gt;Database → schema → relevant tables → query → result analysis&lt;/p&gt;

&lt;p&gt;Documentation-aware development&lt;/p&gt;

&lt;p&gt;Repository → official documentation → API reference → implementation → tests&lt;/p&gt;

&lt;p&gt;Release preparation&lt;/p&gt;

&lt;p&gt;Git → issues → pull requests → CI → changelog → release&lt;/p&gt;

&lt;p&gt;Now every integration has a reason to exist.&lt;/p&gt;

&lt;p&gt;What “using MCP like a pro” actually looks like&lt;/p&gt;

&lt;p&gt;Imagine asking:&lt;/p&gt;

&lt;p&gt;«“Why did my latest CI pipeline fail?”»&lt;/p&gt;

&lt;p&gt;A basic AI workflow might ask you to paste the error.&lt;/p&gt;

&lt;p&gt;A connected workflow can inspect the failed run, identify the failing job, retrieve relevant logs, inspect the latest commit, examine changed files, and compare the failure with the existing test structure.&lt;/p&gt;

&lt;p&gt;The agent can then explain the likely root cause and propose the smallest safe fix.&lt;/p&gt;

&lt;p&gt;If a modification is required, it should not automatically change production code simply because it has access to the repository.&lt;/p&gt;

&lt;p&gt;It should propose the change, show the impact, run appropriate validation, and request approval when the action has meaningful consequences.&lt;/p&gt;

&lt;p&gt;Automation should not mean unrestricted autonomy.&lt;/p&gt;

&lt;p&gt;More tools can make agents worse&lt;/p&gt;

&lt;p&gt;There is a common assumption that an agent becomes better as you give it more tools.&lt;/p&gt;

&lt;p&gt;That is not necessarily true.&lt;/p&gt;

&lt;p&gt;If an agent has access to 30 tools but needs only three for a specific task, the remaining capabilities add decision complexity and potentially irrelevant context.&lt;/p&gt;

&lt;p&gt;There is also a security problem.&lt;/p&gt;

&lt;p&gt;A tool that reads documentation is fundamentally different from one that can modify infrastructure or execute destructive database operations.&lt;/p&gt;

&lt;p&gt;A production system should therefore use:&lt;/p&gt;

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

&lt;p&gt;Give each workflow only the permissions it actually needs.&lt;/p&gt;

&lt;p&gt;Read before write&lt;/p&gt;

&lt;p&gt;Inspect and understand the system before modifying it.&lt;/p&gt;

&lt;p&gt;Approval gates&lt;/p&gt;

&lt;p&gt;Require appropriate confirmation for high-impact actions.&lt;/p&gt;

&lt;p&gt;Traceability&lt;/p&gt;

&lt;p&gt;Record important tool calls so developers can understand what the system did.&lt;/p&gt;

&lt;p&gt;Build around workflows&lt;/p&gt;

&lt;p&gt;A mature developer platform might eventually support dozens of integrations.&lt;/p&gt;

&lt;p&gt;The developer should not have to manually manage all of them for every task.&lt;/p&gt;

&lt;p&gt;Instead, the platform can activate capabilities according to the workflow.&lt;/p&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;p&gt;Debug CI&lt;/p&gt;

&lt;p&gt;and expose the tools needed for CI investigation.&lt;/p&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;p&gt;Investigate a database issue&lt;/p&gt;

&lt;p&gt;and expose database-related capabilities.&lt;/p&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;p&gt;Prepare a release&lt;/p&gt;

&lt;p&gt;and activate the relevant Git, issue, CI, and documentation capabilities.&lt;/p&gt;

&lt;p&gt;This creates a much cleaner architecture:&lt;/p&gt;

&lt;p&gt;Intent → Workflow → Required capabilities → Context → Action → Verification&lt;/p&gt;

&lt;p&gt;That is far more useful than:&lt;/p&gt;

&lt;p&gt;User → giant toolbox → hope the agent chooses correctly&lt;/p&gt;

&lt;p&gt;Treat every integration as a security boundary&lt;/p&gt;

&lt;p&gt;Before connecting a new MCP server or plugin, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What data can it access?&lt;/li&gt;
&lt;li&gt;What actions can it perform?&lt;/li&gt;
&lt;li&gt;Does it really need write permission?&lt;/li&gt;
&lt;li&gt;What happens if the model chooses it incorrectly?&lt;/li&gt;
&lt;li&gt;Can its actions be audited?&lt;/li&gt;
&lt;li&gt;Can access be revoked?&lt;/li&gt;
&lt;li&gt;What happens when the external service fails?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The question is not:&lt;/p&gt;

&lt;p&gt;«“Can my AI agent access this?”»&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;p&gt;«“Should my AI agent access this, for this workflow, with this level of permission?”»&lt;/p&gt;

&lt;p&gt;The bigger shift&lt;/p&gt;

&lt;p&gt;MCP and plugins are interesting because they move AI development systems beyond isolated chat interfaces.&lt;/p&gt;

&lt;p&gt;The next generation of developer tools will increasingly combine:&lt;/p&gt;

&lt;p&gt;Models + context + tools + memory + verification + human control.&lt;/p&gt;

&lt;p&gt;MCP can provide an important connection layer.&lt;/p&gt;

&lt;p&gt;Plugins can make capabilities easier to package and reuse.&lt;/p&gt;

&lt;p&gt;But neither automatically creates a reliable AI developer.&lt;/p&gt;

&lt;p&gt;The difficult engineering work is designing the workflow around them.&lt;/p&gt;

&lt;p&gt;Connect fewer capabilities.&lt;/p&gt;

&lt;p&gt;Give them clear responsibilities.&lt;/p&gt;

&lt;p&gt;Control their permissions.&lt;/p&gt;

&lt;p&gt;Verify their outputs.&lt;/p&gt;

&lt;p&gt;Measure whether they actually reduce developer effort.&lt;/p&gt;

&lt;p&gt;The real question is no longer whether AI can use your tools.&lt;/p&gt;

&lt;p&gt;If your AI coding agent could access every tool in your development stack tomorrow, which capability would you trust it to use autonomously—and which one would you still require it to ask permission for?&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>developers</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built an Open-Source Fraud Detection API That Scores Transactions in Under 10ms</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Tue, 18 Aug 2026 13:06:00 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/i-built-an-open-source-fraud-detection-api-that-scores-transactions-in-under-10ms-3pin</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/i-built-an-open-source-fraud-detection-api-that-scores-transactions-in-under-10ms-3pin</guid>
      <description>&lt;p&gt;Most fraud detection stacks make you pick a lane.&lt;/p&gt;

&lt;p&gt;Rule engines are fast and predictable, but rigid — they miss anything that doesn't match a pattern someone already wrote down. ML models catch the unknown stuff, but they're slow to run at scale and impossible to explain to a compliance team ("the model said 0.87, trust me"). And almost nobody looks at the &lt;em&gt;relationships&lt;/em&gt; between transactions — so a fraud ring using ten stolen cards from the same device just looks like ten unrelated flagged purchases.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;FraudShield&lt;/strong&gt; to stop treating these as separate problems. It's an open-source, real-time fraud detection platform that runs a rule engine, an ML ensemble, and graph analytics together, on every transaction, in under 10ms.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 Live demo: &lt;a href="https://fraudshield-blue-seven.vercel.app/" rel="noopener noreferrer"&gt;https://fraudshield-blue-seven.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔗 Source: &lt;a href="https://github.com/Shweta-Mishra-ai/fraudshield" rel="noopener noreferrer"&gt;https://github.com/Shweta-Mishra-ai/fraudshield&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📜 License: MIT&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The architecture: three detection layers, one decision
&lt;/h2&gt;

&lt;p&gt;Instead of picking rules &lt;em&gt;or&lt;/em&gt; ML &lt;em&gt;or&lt;/em&gt; graph analysis, FraudShield runs all three in parallel and combines them into a single weighted decision:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rule engine&lt;/strong&gt; — 9 behavioral fraud rules covering things like transaction velocity, geographic anomalies, and device/IP mismatches. Fast, deterministic, and easy to audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ML ensemble&lt;/strong&gt; — XGBoost + Isolation Forest working together. XGBoost handles supervised classification on labeled fraud patterns; Isolation Forest catches anomalies that don't look like anything the model has seen before.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph analytics&lt;/strong&gt; — built on NetworkX, this layer looks for fraud &lt;em&gt;rings&lt;/em&gt;: shared devices, shared IPs, and connection patterns across otherwise-unrelated transactions. This is the layer that catches coordinated fraud, not just one-off bad actors.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every transaction gets scored by all three, and the result is one of three decisions: &lt;strong&gt;ALLOW&lt;/strong&gt;, &lt;strong&gt;REVIEW&lt;/strong&gt;, or &lt;strong&gt;BLOCK&lt;/strong&gt; — along with a risk score and a plain-language reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-time streaming, not batch scoring
&lt;/h2&gt;

&lt;p&gt;The detection engine runs on &lt;strong&gt;Pathway&lt;/strong&gt;, a Rust-based streaming framework, which is what gets latency down to sub-10ms per transaction while handling 100k+ transactions/second. There's also a polling-based fallback engine for environments where the native streaming mode isn't available (Windows/WSL), so it doesn't fall over outside a Linux box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explainability isn't an afterthought
&lt;/h2&gt;

&lt;p&gt;Every flagged transaction ships with SHAP-based explanations, so "why was this blocked" has an actual, inspectable answer instead of a confidence score nobody can act on. For a live example, the demo shows real output like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Merchant category 'electronics' is elevated risk
Card-not-present on 'electronics' (risk 0.65)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the kind of reasoning an analyst — or a compliance auditor — can actually work with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security, because it's handling transaction data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PII is SHA-256 hashed before it ever touches the database&lt;/li&gt;
&lt;li&gt;API key auth via &lt;code&gt;X-API-Key&lt;/code&gt; header&lt;/li&gt;
&lt;li&gt;Rate limiting (HTTP 429 on abuse)&lt;/li&gt;
&lt;li&gt;SQL injection prevention&lt;/li&gt;
&lt;li&gt;Standard security headers (CSP, X-Frame-Options, X-Content-Type-Options)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Python 3.10+, FastAPI, Uvicorn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming&lt;/td&gt;
&lt;td&gt;Pathway (Rust engine)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ML&lt;/td&gt;
&lt;td&gt;XGBoost, Isolation Forest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph analytics&lt;/td&gt;
&lt;td&gt;NetworkX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;PostgreSQL / SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web dashboard&lt;/td&gt;
&lt;td&gt;Next.js 14, Tailwind CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analyst console&lt;/td&gt;
&lt;td&gt;Streamlit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Calling the API
&lt;/h2&gt;

&lt;p&gt;Integration is one POST request. JSON in, decision out:&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;requests&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://fraudshield-api.onrender.com/api/v2/transactions/analyze&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&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;X-API-Key&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;your-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&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;user_id&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_001&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;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;299.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;currency&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;USD&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;merchant_id&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;SHOP_001&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;merchant_category&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;electronics&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;location&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;US&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;device_id&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;DEVICE_001&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;ip_address&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;192.168.1.1&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;channel&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;online&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="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&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="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;decision&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;     &lt;span class="c1"&gt;# ALLOW / REVIEW / BLOCK
&lt;/span&gt;&lt;span class="nf"&gt;print&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;        &lt;span class="c1"&gt;# 0.0 - 1.0
&lt;/span&gt;&lt;span class="nf"&gt;print&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reasons&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;      &lt;span class="c1"&gt;# Why it was flagged
&lt;/span&gt;&lt;span class="nf"&gt;print&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;latency_ms&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;   &lt;span class="c1"&gt;# &amp;lt; 10ms
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other endpoints worth knowing about:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Endpoint&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;POST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/v2/evaluate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Real-time transaction evaluation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/v2/alerts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retrieve flagged transactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/v2/alerts/{id}/review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Submit analyst review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/v2/stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;System throughput metrics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/api/v2/health&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Health check (no auth)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Repo structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fraudshield/
├── apps/api/          # FastAPI backend, detection engine, streaming
├── apps/web/          # Next.js 14 web dashboard
├── dashboard/         # Streamlit command center
├── docs/              # Architecture documentation and diagrams
├── requirements.txt   # Python dependencies
└── ...                # setup &amp;amp; contribution guides
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;Self-hosting is free, forever, under MIT license:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Shweta-Mishra-ai/fraudshield.git
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
streamlit run app.py   &lt;span class="c"&gt;# dashboard on localhost:8501&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or skip setup entirely and hit the &lt;a href="https://fraudshield-blue-seven.vercel.app/" rel="noopener noreferrer"&gt;cloud API&lt;/a&gt; — sign up, get a free API key instantly, no credit card, and you can send your first transaction in about 5 minutes. There's also an "Instant Demo Key" option if you just want to poke at it without creating an account.&lt;/p&gt;

&lt;p&gt;Currently sitting at 180 passing tests, with the analyst dashboard, review queue, and fraud ring visualization built in — no extra tooling required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this is headed
&lt;/h2&gt;

&lt;p&gt;Right now this is a solo open-source project — rule engine, ML layer, and graph layer are all working together, but there's plenty on the roadmap: more fraud rule coverage, expanded graph ring detection, and (eventually) paid tiers for higher transaction volumes on the cloud API, while the self-hosted version stays free forever.&lt;/p&gt;

&lt;p&gt;If you're working on anything in fraud, risk, or trust &amp;amp; safety, I'd genuinely like to hear how you're approaching the rules-vs-ML-vs-graph trade-off — drop a comment or open an issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/Shweta-Mishra-ai/fraudshield" rel="noopener noreferrer"&gt;https://github.com/Shweta-Mishra-ai/fraudshield&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://fraudshield-blue-seven.vercel.app/" rel="noopener noreferrer"&gt;https://fraudshield-blue-seven.vercel.app/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with FastAPI, Pathway, XGBoost, and NetworkX. MIT licensed — self-host it, fork it, break it, tell me what's missing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>machinelearning</category>
      <category>python</category>
      <category>fintech</category>
    </item>
    <item>
      <title>The Next AI Engineering Shift: From Prompts to Loops to Graphs</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Sun, 16 Aug 2026 14:54:00 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/the-next-ai-engineering-shift-from-prompts-to-loops-to-graphs-4g4j</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/the-next-ai-engineering-shift-from-prompts-to-loops-to-graphs-4g4j</guid>
      <description>&lt;p&gt;For years, AI engineering revolved around one question:&lt;/p&gt;

&lt;p&gt;“How do I write a better prompt?”&lt;/p&gt;

&lt;p&gt;That question is changing.&lt;/p&gt;

&lt;p&gt;The evolution of modern AI engineering is moving through three increasingly powerful abstractions:&lt;/p&gt;

&lt;p&gt;Prompt Engineering → Loop Engineering → Graph Engineering&lt;/p&gt;

&lt;p&gt;Not because the previous layer suddenly becomes useless, but because the complexity of AI systems keeps moving upward.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Prompt Engineering: Optimizing the Instruction&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The early LLM application architecture was relatively simple:&lt;/p&gt;

&lt;p&gt;Input → Prompt → LLM → Response&lt;/p&gt;

&lt;p&gt;The engineering challenge was to make the model produce a better answer.&lt;/p&gt;

&lt;p&gt;We optimized:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System instructions&lt;/li&gt;
&lt;li&gt;Few-shot examples&lt;/li&gt;
&lt;li&gt;Context&lt;/li&gt;
&lt;li&gt;Output formats&lt;/li&gt;
&lt;li&gt;Reasoning strategies&lt;/li&gt;
&lt;li&gt;Constraints&lt;/li&gt;
&lt;li&gt;Prompt templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This worked extremely well for summarization, classification, extraction, generation and question answering.&lt;/p&gt;

&lt;p&gt;But there was a limitation:&lt;/p&gt;

&lt;p&gt;The model answered and stopped.&lt;/p&gt;

&lt;p&gt;That is fine for:&lt;/p&gt;

&lt;p&gt;«“Summarize this document.”»&lt;/p&gt;

&lt;p&gt;It is much harder for:&lt;/p&gt;

&lt;p&gt;«“Investigate this production bug, inspect the repository, modify the code, run tests, analyze failures, fix the implementation and verify the result.”»&lt;/p&gt;

&lt;p&gt;That is no longer primarily a prompting problem.&lt;/p&gt;

&lt;p&gt;It is an execution problem.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Loop Engineering: Optimizing the Execution Cycle&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As AI agents became capable of using tools and performing multi-step tasks, the engineering abstraction changed.&lt;/p&gt;

&lt;p&gt;Instead of manually providing every next instruction, we started designing systems that could continue working toward a goal.&lt;/p&gt;

&lt;p&gt;The fundamental pattern became:&lt;/p&gt;

&lt;p&gt;Plan → Act → Observe → Evaluate → Retry&lt;/p&gt;

&lt;p&gt;This is the core idea behind Loop Engineering.&lt;/p&gt;

&lt;p&gt;The engineer now has to design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool usage&lt;/li&gt;
&lt;li&gt;State management&lt;/li&gt;
&lt;li&gt;Verification&lt;/li&gt;
&lt;li&gt;Retry policies&lt;/li&gt;
&lt;li&gt;Stop conditions&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Resource budgets&lt;/li&gt;
&lt;li&gt;Human escalation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The unit of work changed.&lt;/p&gt;

&lt;p&gt;Prompt Engineering: one interaction.&lt;/p&gt;

&lt;p&gt;Loop Engineering: one autonomous execution.&lt;/p&gt;

&lt;p&gt;Consider a coding agent.&lt;/p&gt;

&lt;p&gt;Instead of manually telling it:&lt;/p&gt;

&lt;p&gt;«Inspect the code.»&lt;/p&gt;

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

&lt;p&gt;«Run the tests.»&lt;/p&gt;

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

&lt;p&gt;«Fix the failure.»&lt;/p&gt;

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

&lt;p&gt;«Try again.»&lt;/p&gt;

&lt;p&gt;The system can execute the cycle itself:&lt;/p&gt;

&lt;p&gt;Understand → Modify → Test → Observe → Repair → Test → Stop&lt;/p&gt;

&lt;p&gt;The human becomes less of a runtime operator and more of a system designer and reviewer.&lt;/p&gt;

&lt;p&gt;But there is another problem.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Why Loops Start Becoming Graphs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Real production workflows rarely look like:&lt;/p&gt;

&lt;p&gt;A → B → C → A&lt;/p&gt;

&lt;p&gt;They branch.&lt;/p&gt;

&lt;p&gt;Consider an AI research system.&lt;/p&gt;

&lt;p&gt;It might need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search multiple sources&lt;/li&gt;
&lt;li&gt;Retrieve internal documents&lt;/li&gt;
&lt;li&gt;Run data analysis&lt;/li&gt;
&lt;li&gt;Ask specialized agents for investigation&lt;/li&gt;
&lt;li&gt;Combine results&lt;/li&gt;
&lt;li&gt;Validate evidence&lt;/li&gt;
&lt;li&gt;Repair unsupported conclusions&lt;/li&gt;
&lt;li&gt;Request human approval&lt;/li&gt;
&lt;li&gt;Publish the final output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some operations can happen in parallel.&lt;/p&gt;

&lt;p&gt;Some depend on previous results.&lt;/p&gt;

&lt;p&gt;Some failures need different recovery strategies.&lt;/p&gt;

&lt;p&gt;Some decisions require a human.&lt;/p&gt;

&lt;p&gt;At this point, putting everything into one giant loop becomes difficult to reason about.&lt;/p&gt;

&lt;p&gt;The loop starts becoming a graph.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Graph Engineering: Optimizing the Execution Topology&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Graph Engineering is an emerging way of thinking about complex AI workflows as explicit execution graphs.&lt;/p&gt;

&lt;p&gt;The graph can contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;li&gt;LLM calls&lt;/li&gt;
&lt;li&gt;Tools&lt;/li&gt;
&lt;li&gt;Retrievers&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Deterministic functions&lt;/li&gt;
&lt;li&gt;Validators&lt;/li&gt;
&lt;li&gt;Evaluators&lt;/li&gt;
&lt;li&gt;Human approval points&lt;/li&gt;
&lt;li&gt;Recovery handlers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important abstractions become:&lt;/p&gt;

&lt;p&gt;Nodes + Edges + State + Routing + Recovery&lt;/p&gt;

&lt;p&gt;A node performs work.&lt;/p&gt;

&lt;p&gt;An edge defines what can happen next.&lt;/p&gt;

&lt;p&gt;State carries information across execution.&lt;/p&gt;

&lt;p&gt;Routing determines which path should execute.&lt;/p&gt;

&lt;p&gt;Recovery defines what happens when something fails.&lt;/p&gt;

&lt;p&gt;Now we're not simply engineering an agent.&lt;/p&gt;

&lt;p&gt;We're engineering the topology through which intelligence moves.&lt;/p&gt;

&lt;p&gt;This is particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-agent systems&lt;/li&gt;
&lt;li&gt;AI coding platforms&lt;/li&gt;
&lt;li&gt;Research agents&lt;/li&gt;
&lt;li&gt;Complex data pipelines&lt;/li&gt;
&lt;li&gt;Enterprise automation&lt;/li&gt;
&lt;li&gt;Long-running workflows&lt;/li&gt;
&lt;li&gt;Human-in-the-loop systems&lt;/li&gt;
&lt;li&gt;Production agent orchestration&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Prompt vs Loop vs Graph Engineering&lt;/p&gt;

&lt;p&gt;| Prompt Engineering| Loop Engineering| Graph Engineering&lt;br&gt;
Primary focus| Instructions| Iteration| Orchestration&lt;br&gt;
Unit of work| Interaction| Autonomous run| Workflow&lt;br&gt;
Main abstraction| Prompt| Agent loop| Execution graph&lt;br&gt;
State| Limited| Within execution| Across workflow&lt;br&gt;
Branching| Minimal| Limited| Explicit&lt;br&gt;
Recovery| Manual| Retry| Recovery paths&lt;br&gt;
Parallelism| Limited| Limited| Explicit&lt;br&gt;
Human control| Direct| Optional| Explicit&lt;/p&gt;

&lt;p&gt;The simplest mental model is:&lt;/p&gt;

&lt;p&gt;Prompt Engineering&lt;br&gt;
→ controls the instruction&lt;/p&gt;

&lt;p&gt;Loop Engineering&lt;br&gt;
→ controls the execution cycle&lt;/p&gt;

&lt;p&gt;Graph Engineering&lt;br&gt;
→ controls the execution topology&lt;/p&gt;




&lt;p&gt;Is Prompt Engineering Dead?&lt;/p&gt;

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

&lt;p&gt;That would be an oversimplification.&lt;/p&gt;

&lt;p&gt;Prompt engineering is becoming less dominant, not irrelevant.&lt;/p&gt;

&lt;p&gt;A graph node can still have a sophisticated system prompt.&lt;/p&gt;

&lt;p&gt;An agent still needs behavioral instructions.&lt;/p&gt;

&lt;p&gt;Retrieval still requires good query construction.&lt;/p&gt;

&lt;p&gt;Structured outputs still depend partly on careful prompting.&lt;/p&gt;

&lt;p&gt;The change is architectural.&lt;/p&gt;

&lt;p&gt;In the earlier LLM era, the prompt was often the primary interface to intelligence.&lt;/p&gt;

&lt;p&gt;In modern agentic systems, the prompt is increasingly one component inside a larger execution architecture.&lt;/p&gt;

&lt;p&gt;That's the important shift.&lt;/p&gt;




&lt;p&gt;The Real Evolution&lt;/p&gt;

&lt;p&gt;I think the progression is better understood as:&lt;/p&gt;

&lt;p&gt;Prompt Engineering&lt;/p&gt;

&lt;p&gt;Prompt → Response&lt;/p&gt;

&lt;p&gt;Optimize what the model says.&lt;/p&gt;

&lt;p&gt;Loop Engineering&lt;/p&gt;

&lt;p&gt;Goal → Loop → Outcome&lt;/p&gt;

&lt;p&gt;Optimize how the agent works.&lt;/p&gt;

&lt;p&gt;Graph Engineering&lt;/p&gt;

&lt;p&gt;Goal → Graph → Verified Outcome&lt;/p&gt;

&lt;p&gt;Optimize how multiple processes coordinate.&lt;/p&gt;

&lt;p&gt;So the future isn't necessarily:&lt;/p&gt;

&lt;p&gt;Prompt OR Loop OR Graph.&lt;/p&gt;

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

&lt;p&gt;Prompt inside Loop inside Graph.&lt;/p&gt;

&lt;p&gt;A graph can contain loops.&lt;/p&gt;

&lt;p&gt;Loops can contain prompts.&lt;/p&gt;

&lt;p&gt;Prompts can control individual agents.&lt;/p&gt;

&lt;p&gt;The abstraction is simply moving upward.&lt;/p&gt;




&lt;p&gt;What Changes for AI Engineers?&lt;/p&gt;

&lt;p&gt;The interesting engineering questions are no longer limited to:&lt;/p&gt;

&lt;p&gt;«“What prompt should I use?”»&lt;/p&gt;

&lt;p&gt;They increasingly become:&lt;/p&gt;

&lt;p&gt;State: What information should persist?&lt;/p&gt;

&lt;p&gt;Routing: Which agent or tool should execute next?&lt;/p&gt;

&lt;p&gt;Evaluation: How do we know the output is correct?&lt;/p&gt;

&lt;p&gt;Recovery: What happens when a component fails?&lt;/p&gt;

&lt;p&gt;Observability: Why did the system take this path?&lt;/p&gt;

&lt;p&gt;Governance: Where should humans retain control?&lt;/p&gt;

&lt;p&gt;Cost: How do we prevent runaway agent execution?&lt;/p&gt;

&lt;p&gt;These are systems engineering problems, not just prompt-design problems.&lt;/p&gt;

&lt;p&gt;And that is why I believe the next generation of AI engineering will be increasingly focused on architecture.&lt;/p&gt;




&lt;p&gt;The Bigger Shift&lt;/p&gt;

&lt;p&gt;The evolution is not really:&lt;/p&gt;

&lt;p&gt;Prompt → Loop → Graph&lt;/p&gt;

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

&lt;p&gt;Response → Execution → System&lt;/p&gt;

&lt;p&gt;We started by optimizing the answer.&lt;/p&gt;

&lt;p&gt;Then we started optimizing the agent's behavior.&lt;/p&gt;

&lt;p&gt;Now we're increasingly optimizing the system through which intelligence flows.&lt;/p&gt;

&lt;p&gt;The prompt didn't disappear.&lt;/p&gt;

&lt;p&gt;It became a component.&lt;/p&gt;

&lt;p&gt;And perhaps the most valuable AI engineering skill of the next few years won't be writing the cleverest prompt.&lt;/p&gt;

&lt;p&gt;It will be designing the most reliable path from:&lt;/p&gt;

&lt;p&gt;Intent → Reasoning → Action → Verification → Outcome&lt;/p&gt;

&lt;p&gt;Prompt Engineering → Loop Engineering → Graph Engineering.&lt;/p&gt;

&lt;p&gt;The next question is:&lt;/p&gt;

&lt;p&gt;What comes after Graph Engineering?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>promptengineering</category>
      <category>loopengineering</category>
      <category>graphengineering</category>
    </item>
    <item>
      <title>What Auditing My AI Content Engine Taught Me About Building Production AI Systems</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Fri, 07 Aug 2026 20:56:48 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/what-auditing-my-ai-content-engine-taught-me-about-building-production-ai-systems-5eld</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/what-auditing-my-ai-content-engine-taught-me-about-building-production-ai-systems-5eld</guid>
      <description>&lt;p&gt;Everyone loves building AI applications. Connect an LLM, write a prompt, add a clean UI, and within a few hours you have something impressive to share on LinkedIn. I've built several AI projects myself, and like many developers, I was initially focused on adding features quickly.&lt;/p&gt;

&lt;p&gt;Recently, I decided to do something different.&lt;/p&gt;

&lt;p&gt;Instead of building another feature, I audited one of my own projects—&lt;strong&gt;Healthy Gut AI&lt;/strong&gt;, an AI-powered medical content generation platform. The goal wasn't to find bugs for the sake of fixing them. I wanted to answer a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If someone used this application in production today, would I trust it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question completely changed how I looked at my own code.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Project
&lt;/h2&gt;

&lt;p&gt;Healthy Gut AI isn't just an article generator. It's designed as a complete AI content pipeline.&lt;/p&gt;

&lt;p&gt;The application includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI backend&lt;/li&gt;
&lt;li&gt;Multi-LLM provider support&lt;/li&gt;
&lt;li&gt;Retrieval-Augmented Generation (RAG)&lt;/li&gt;
&lt;li&gt;SEO-focused article generation&lt;/li&gt;
&lt;li&gt;Batch content generation&lt;/li&gt;
&lt;li&gt;Human review workflow&lt;/li&gt;
&lt;li&gt;Quality scoring&lt;/li&gt;
&lt;li&gt;Analytics dashboard&lt;/li&gt;
&lt;li&gt;DOCX export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On paper, everything looked good. The application generated articles successfully, the dashboard displayed useful metrics, and the review workflow functioned exactly as expected.&lt;/p&gt;

&lt;p&gt;From a feature perspective, I could have considered the project "finished."&lt;/p&gt;

&lt;p&gt;But production software isn't judged by feature count.&lt;/p&gt;

&lt;p&gt;It's judged by reliability.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Difference Between Working and Production Ready
&lt;/h2&gt;

&lt;p&gt;One lesson became obvious almost immediately.&lt;/p&gt;

&lt;p&gt;A project can work perfectly during development and still not be ready for production.&lt;/p&gt;

&lt;p&gt;For example, every article generated successfully.&lt;/p&gt;

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

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

&lt;p&gt;No failed requests.&lt;/p&gt;

&lt;p&gt;Yet during testing, one multilingual article unexpectedly contained a Chinese character inside a Hindi sentence.&lt;/p&gt;

&lt;p&gt;Technically, nothing had failed.&lt;/p&gt;

&lt;p&gt;The API returned a successful response.&lt;/p&gt;

&lt;p&gt;The database stored the article.&lt;/p&gt;

&lt;p&gt;The dashboard showed another successful generation.&lt;/p&gt;

&lt;p&gt;But no real user would want to publish that content.&lt;/p&gt;

&lt;p&gt;That was my first reminder that &lt;strong&gt;successful execution is not the same as successful output.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture Matters
&lt;/h2&gt;

&lt;p&gt;One thing I was genuinely happy with during the audit was the project structure.&lt;/p&gt;

&lt;p&gt;Instead of putting every feature into one large application file, the project was organized into small modules responsible for specific tasks.&lt;/p&gt;

&lt;p&gt;The backend separated routing, configuration, database access, caching, quality evaluation, metrics, and LLM providers.&lt;/p&gt;

&lt;p&gt;That decision made the code much easier to understand and maintain.&lt;/p&gt;

&lt;p&gt;Adding new features required changing only one or two modules instead of touching the entire application.&lt;/p&gt;

&lt;p&gt;Clean architecture doesn't make screenshots more impressive, but it makes future development significantly easier.&lt;/p&gt;




&lt;h2&gt;
  
  
  Multi-LLM Support Was Worth It
&lt;/h2&gt;

&lt;p&gt;One design decision I don't regret is supporting multiple AI providers.&lt;/p&gt;

&lt;p&gt;Instead of relying on a single API, the application can switch between providers whenever one becomes unavailable.&lt;/p&gt;

&lt;p&gt;Anyone building AI applications eventually experiences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rate limits&lt;/li&gt;
&lt;li&gt;temporary outages&lt;/li&gt;
&lt;li&gt;provider instability&lt;/li&gt;
&lt;li&gt;API changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building redundancy into the system makes it much more reliable.&lt;/p&gt;

&lt;p&gt;Production systems should never depend entirely on a single external service.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quality Is Harder Than Generation
&lt;/h2&gt;

&lt;p&gt;Initially, I thought article generation would be the difficult part.&lt;/p&gt;

&lt;p&gt;It wasn't.&lt;/p&gt;

&lt;p&gt;Modern LLMs are already very good at producing readable text.&lt;/p&gt;

&lt;p&gt;The real challenge is determining whether that text is actually good enough.&lt;/p&gt;

&lt;p&gt;The application assigned quality scores to generated articles.&lt;/p&gt;

&lt;p&gt;At first glance, that seemed useful.&lt;/p&gt;

&lt;p&gt;But during the audit I realized a problem.&lt;/p&gt;

&lt;p&gt;If an article receives a score of &lt;strong&gt;72&lt;/strong&gt;, what does that actually mean?&lt;/p&gt;

&lt;p&gt;Does it have poor SEO?&lt;/p&gt;

&lt;p&gt;Weak citations?&lt;/p&gt;

&lt;p&gt;Grammar issues?&lt;/p&gt;

&lt;p&gt;Medical inaccuracies?&lt;/p&gt;

&lt;p&gt;Without explanation, the score becomes little more than a number.&lt;/p&gt;

&lt;p&gt;That experience taught me that AI systems should explain their decisions whenever possible.&lt;/p&gt;

&lt;p&gt;Transparency builds trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  Validation Is More Important Than Prompts
&lt;/h2&gt;

&lt;p&gt;Like many developers, I spent a lot of time improving prompts.&lt;/p&gt;

&lt;p&gt;Prompt engineering certainly matters.&lt;/p&gt;

&lt;p&gt;But the audit showed that validation matters even more.&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;"How can I generate better content?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I started asking:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"How can I detect bad content before users see it?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Those are two completely different engineering problems.&lt;/p&gt;

&lt;p&gt;Validation includes checking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;encoding issues&lt;/li&gt;
&lt;li&gt;incomplete sections&lt;/li&gt;
&lt;li&gt;hallucinated references&lt;/li&gt;
&lt;li&gt;formatting problems&lt;/li&gt;
&lt;li&gt;language consistency&lt;/li&gt;
&lt;li&gt;citation quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good AI applications don't simply generate.&lt;/p&gt;

&lt;p&gt;They verify.&lt;/p&gt;




&lt;h2&gt;
  
  
  Human Review Still Matters
&lt;/h2&gt;

&lt;p&gt;One reason I included a review workflow from the beginning is that medical content deserves an additional layer of verification.&lt;/p&gt;

&lt;p&gt;The application supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pending&lt;/li&gt;
&lt;li&gt;Approved&lt;/li&gt;
&lt;li&gt;Rejected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This simple workflow ensures AI-generated content isn't automatically published without oversight.&lt;/p&gt;

&lt;p&gt;As AI improves, human review may become lighter.&lt;/p&gt;

&lt;p&gt;I don't think it disappears completely—especially for domains involving health, finance, or legal information.&lt;/p&gt;




&lt;h2&gt;
  
  
  Small Improvements Make a Big Difference
&lt;/h2&gt;

&lt;p&gt;Interestingly, many improvements identified during the audit weren't exciting new features.&lt;/p&gt;

&lt;p&gt;They were engineering improvements.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stronger input validation&lt;/li&gt;
&lt;li&gt;better logging&lt;/li&gt;
&lt;li&gt;clearer quality reports&lt;/li&gt;
&lt;li&gt;safer API configuration&lt;/li&gt;
&lt;li&gt;improved Unicode handling&lt;/li&gt;
&lt;li&gt;production-ready CORS settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these changes produce flashy screenshots.&lt;/p&gt;

&lt;p&gt;All of them improve reliability.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Biggest Takeaway
&lt;/h2&gt;

&lt;p&gt;The biggest lesson wasn't about FastAPI.&lt;/p&gt;

&lt;p&gt;Or LLMs.&lt;/p&gt;

&lt;p&gt;Or RAG.&lt;/p&gt;

&lt;p&gt;It was about mindset.&lt;/p&gt;

&lt;p&gt;When I first built the project, I kept asking:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Does this feature work?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After the audit, I started asking:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"What happens when this feature fails?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That single question changes how you design software.&lt;/p&gt;

&lt;p&gt;It encourages better validation.&lt;/p&gt;

&lt;p&gt;Better logging.&lt;/p&gt;

&lt;p&gt;Better testing.&lt;/p&gt;

&lt;p&gt;Better security.&lt;/p&gt;

&lt;p&gt;And ultimately, better user experience.&lt;/p&gt;




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

&lt;p&gt;Auditing my own project reminded me that building AI applications isn't just about connecting models to prompts.&lt;/p&gt;

&lt;p&gt;Real engineering starts after the demo.&lt;/p&gt;

&lt;p&gt;It's about making systems reliable, maintainable, and trustworthy when people actually depend on them.&lt;/p&gt;

&lt;p&gt;Healthy Gut AI still has room to grow, but the audit gave me confidence that improving production quality is often less about adding more features and more about strengthening the foundations that users rarely see.&lt;/p&gt;

&lt;p&gt;If you're building AI applications, I'd encourage you to audit your own project before someone else does.&lt;/p&gt;

&lt;p&gt;You might discover that your biggest opportunities aren't where you expected them to be.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>fastapi</category>
    </item>
    <item>
      <title>TokenMizer: Giving LLMs a Memory That Doesn't Forget Between Sessions</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Tue, 04 Aug 2026 17:01:05 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/tokenmizer-giving-llms-a-memory-that-doesnt-forget-between-sessions-6he</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/tokenmizer-giving-llms-a-memory-that-doesnt-forget-between-sessions-6he</guid>
      <description>&lt;p&gt;&lt;em&gt;How a graph-memory proxy sits between your app and the OpenAI API, quietly remembering everything your LLM would otherwise lose.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Every conversation with a large language model starts from zero. Close the tab, start a new session, and the model has no idea who you are, what you discussed yesterday, or what you decided last week. Most tools work around this by stuffing more and more chat history into the context window — which is expensive, slow, and eventually hits a hard limit.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;TokenMizer&lt;/strong&gt; to solve this differently: instead of remembering by re-reading everything, it remembers by building a &lt;em&gt;graph&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Idea: A Proxy, Not a Plugin
&lt;/h2&gt;

&lt;p&gt;TokenMizer sits as a proxy in front of any OpenAI-compatible API. Your application doesn't change how it calls the model — it just points its API base URL at TokenMizer instead of directly at OpenAI. Every request and response passes through, gets analyzed, and gets stored before continuing on to the real model.&lt;/p&gt;

&lt;p&gt;This design choice matters more than it looks. It means TokenMizer works with any framework or app that already speaks the OpenAI API format, with no SDK changes and no rewritten integration code. You add memory to an existing app by changing one URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Memory Actually Gets Built
&lt;/h2&gt;

&lt;p&gt;Two systems do the heavy lifting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Intelligence&lt;/strong&gt; watches what code, documents, or files are referenced during a conversation and builds context around them — so if you're debugging the same file across three sessions, TokenMizer already knows its history in the conversation, not just its current contents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Graph Memory&lt;/strong&gt; is the more interesting part. Instead of storing conversation history as a flat log, TokenMizer extracts entities and relationships — people, projects, decisions, dependencies — and stores them as nodes and edges in a graph, backed by SQLite. When a new message comes in, TokenMizer doesn't search through old transcripts; it queries the graph for relevant nodes and pulls in only what's connected to the current topic.&lt;/p&gt;

&lt;p&gt;The practical difference: a flat-log memory system gets slower and more expensive as history grows, because it has to search more text. A graph memory system stays fast, because it's traversing relationships, not scanning transcripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seeing the Graph: The D3.js Explorer
&lt;/h2&gt;

&lt;p&gt;Memory systems that live entirely inside a database are hard to trust, because you can't see what they're doing. TokenMizer ships with a &lt;strong&gt;Graph Explorer&lt;/strong&gt; built on D3.js — a visual, interactive map of every entity and connection the system has learned. You can watch new nodes appear as a conversation progresses, or trace why the model suddenly "remembered" something from three sessions ago by following the edge back to its source.&lt;/p&gt;

&lt;p&gt;This turned out to be more useful for debugging than for demos. When memory retrieval pulls in the wrong context, the graph view shows exactly why — which node matched, and through which relationship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Ways In: CLI and MCP
&lt;/h2&gt;

&lt;p&gt;TokenMizer is distributed as a pip-installable library, so it drops into an existing Python environment directly. For day-to-day use there's a CLI to inspect, query, and manage the memory graph without writing code.&lt;/p&gt;

&lt;p&gt;The second integration path is &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; server support, which lets TokenMizer's memory be used as a tool by MCP-compatible clients — including editors like Cursor. This was a deliberate design decision: memory shouldn't be locked to one app. Whether you're calling the API directly, scripting through the CLI, or working inside an AI-assisted editor, the same graph is behind all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Broke, and What I Learned Fixing It
&lt;/h2&gt;

&lt;p&gt;Building a proxy that intercepts every API call raises the stakes on reliability — if TokenMizer fails, your app's LLM calls fail with it. An internal audit surfaced real problems worth naming honestly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Async race conditions&lt;/strong&gt; in request handling, where concurrent calls could read or write memory state out of order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent crash patterns repeated across 12 files&lt;/strong&gt; — errors that failed quietly instead of surfacing, similar in spirit to the fail-closed lesson from my other project, GitHub Autopilot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A regex regression&lt;/strong&gt; that broke entity extraction for a subset of inputs after a refactor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A data-destruction bug in the MCP installer&lt;/strong&gt; — an edge case where installation could overwrite existing memory data instead of merging with it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All nine verified issues were fixed and tested. The installer bug in particular changed how I think about setup scripts generally: anything that touches a user's existing data on install needs to default to the safest possible behavior, even if that means asking one more confirmation question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Build This Instead of Using Mem0 or Zep
&lt;/h2&gt;

&lt;p&gt;Existing memory layers for LLMs mostly work — but they usually mean adopting their SDK and their storage model. TokenMizer's proxy-first design means it can sit under tools you already use without asking you to restructure how you call the model. The graph-based retrieval is also a deliberate bet: as conversations and codebases grow, relationship-based lookup scales in a way flat retrieval doesn't.&lt;/p&gt;

&lt;p&gt;It's early — this is a project built in the open, not a finished product — but the architecture is stable enough now to be worth explaining properly, and worth other developers trying against their own workflows.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;TokenMizer is open source and pip-installable. Code, CLI docs, and the Graph Explorer are on GitHub: &lt;a href="https://github.com/Shweta-Mishra-ai/tokenmizer" rel="noopener noreferrer"&gt;Shweta-Mishra-ai/tokenmizer&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I write about building developer tools and AI infrastructure at TechNova World. If you need someone who can build a system like this and explain it clearly to your team or your users, let's talk.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>opensource</category>
      <category>python</category>
    </item>
    <item>
      <title>What Auditing My Own AI Projects Taught Me About Shipping Production Code</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Sun, 02 Aug 2026 19:01:22 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/what-auditing-my-own-ai-projects-taught-me-about-shipping-production-code-175f</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/what-auditing-my-own-ai-projects-taught-me-about-shipping-production-code-175f</guid>
      <description>&lt;p&gt;Two projects, thirteen serious bugs, and one pattern that kept showing up everywhere.&lt;/p&gt;

&lt;p&gt;Most engineers find out their code has problems when a user reports one. I found out earlier — by going back through two of my own projects and auditing them properly, on purpose, before anyone else had to.&lt;/p&gt;

&lt;p&gt;The projects were different in almost every way. GitHub Autopilot is a Flask app that automates code review and PR management through GitHub webhooks. TokenMizer is a proxy that intercepts LLM API calls to give them persistent memory. One handles webhook traffic; the other handles model requests. Different languages of failure, you'd think.&lt;/p&gt;

&lt;p&gt;They weren't. The same failure pattern showed up in both, wearing different clothes each time. Here's what I found, and what it taught me about the difference between code that works and code that's actually safe to ship.&lt;/p&gt;

&lt;p&gt;The Pattern: Failure That Doesn't Announce Itself&lt;/p&gt;

&lt;p&gt;In GitHub Autopilot, I found 27 places where the code caught an exception and did nothing with it — no log, no alert, just silent continuation. In TokenMizer, the same shape of bug appeared across 12 files as silent crash patterns, plus an async race condition where concurrent requests could read or write memory state out of order without anyone noticing until the data was already wrong.&lt;/p&gt;

&lt;p&gt;Neither of these is a bug you catch by staring at the code. They're bugs you catch by asking a different question than "does this work?" The right question is: when this fails — and eventually it will — does the failure tell anyone?&lt;/p&gt;

&lt;p&gt;Code that fails loudly is annoying but honest. Code that fails silently is comfortable to write and dangerous to run, because it lets small problems compound into large ones with no trail to follow back. Every fix I made across both projects, at its core, was about converting a silent failure into a visible one.&lt;/p&gt;

&lt;p&gt;Three Specific Failures, One Underlying Habit&lt;/p&gt;

&lt;p&gt;GitHub Autopilot's auth bypass: the MCP authentication check caught its own exceptions and let the request through — failing open instead of closed. A slow auth service became an accidental backdoor.&lt;/p&gt;

&lt;p&gt;GitHub Autopilot's rate limiter: it tracked request counts per IP but never cleaned up stale entries, so the defense meant to stop abuse became a memory leak that could crash the app under sustained traffic.&lt;/p&gt;

&lt;p&gt;TokenMizer's installer bug: an edge case in the MCP installer could overwrite a user's existing memory graph on install, instead of merging with it — a data-destruction bug hiding inside what looked like routine setup code.&lt;/p&gt;

&lt;p&gt;Three different subsystems, three different consequences — a security hole, an outage vector, a data-loss bug. But look at the shared habit underneath: in all three cases, the code assumed the happy path would hold, and didn't plan for what happens when it doesn't. The auth check assumed the auth service stays up. The rate limiter assumed traffic stays bounded. The installer assumed there's nothing to lose.&lt;/p&gt;

&lt;p&gt;Good defensive code doesn't assume the happy path. It asks "what's the safe default when I don't know what's going on?" — and for anything touching security or user data, the safe default is almost always: deny, don't proceed, don't overwrite.&lt;/p&gt;

&lt;p&gt;Testing Isn't the Finish Line — It's How You Prove the Fix&lt;/p&gt;

&lt;p&gt;Finding bugs is one skill. Proving they're actually fixed is a different one, and it's the part that's easy to skip under deadline pressure. For GitHub Autopilot, that meant writing targeted tests that reproduce each original failure — a forged request header, an auth-service timeout, sustained traffic from many IPs — and raising overall coverage from 62% to 76% along the way, with all 654 tests passing across an 834-test suite. For TokenMizer, it meant verifying all nine issues individually rather than assuming a broad refactor had swept them up.&lt;/p&gt;

&lt;p&gt;The number that matters isn't the coverage percentage. It's whether each specific failure mode you found has a test that would catch it coming back. Coverage without targeted regression tests is a vanity metric; targeted tests without coverage tracking mean you don't know what you haven't checked. You need both.&lt;/p&gt;

&lt;p&gt;Why I Wrote This Down&lt;/p&gt;

&lt;p&gt;I could have fixed these bugs quietly and moved on — nobody was demanding an audit, no user had filed a report. I did it because the fixing wasn't actually the valuable part. The valuable part was noticing the pattern across two unrelated codebases, and writing it down so it's a reusable lesson instead of a one-off cleanup.&lt;/p&gt;

&lt;p&gt;That's the habit I'd recommend to any engineer, and it's also, honestly, the reason I enjoy technical writing as much as building: a bug fix helps one project. A clearly explained pattern helps every project you touch after it. If there's one thing worth taking from two audits and thirteen bugs, it's this — the question that finds real problems isn't "does it work in the demo?" It's "what happens when the thing I'm depending on doesn't behave?" Ask that question early, and you fix bugs before they have users attached to them.&lt;/p&gt;

&lt;p&gt;GitHub Autopilot and TokenMizer are both open source: github-autopilot · tokenmizer.&lt;/p&gt;

&lt;p&gt;I build developer tools and write about what breaks while building them, at TechNova World. If you want documentation that comes from someone who's actually shipped and audited production code, let's talk.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building a GitHub App That Reviews Its Own Code: Lessons in Security Hardening</title>
      <dc:creator>Shweta Mishra</dc:creator>
      <pubDate>Sun, 26 Jul 2026 08:44:16 +0000</pubDate>
      <link>https://dev.to/shweta_mishra_b3c97874de9/building-a-github-app-that-reviews-its-own-code-lessons-in-security-hardening-4ha7</link>
      <guid>https://dev.to/shweta_mishra_b3c97874de9/building-a-github-app-that-reviews-its-own-code-lessons-in-security-hardening-4ha7</guid>
      <description>&lt;p&gt;How I turned 27 silent failures into logged ones, closed three real attack surfaces, and pushed test coverage from 62% to 76% while building an automated code-review bot.&lt;/p&gt;

&lt;p&gt;A few months ago I set out to build something simple on paper: a GitHub App that reviews pull requests, scans for leaked secrets, applies safe autofixes, and responds to slash commands like a teammate would. I called it GitHub Autopilot. It runs on Flask, uses Redis for job queuing, and talks to GitHub through webhooks.&lt;br&gt;
The first working version took a couple of weeks. Making it safe enough to trust with someone else's repository took much longer - and taught me more about security engineering than any tutorial could.&lt;br&gt;
This article walks through three real vulnerabilities I found and fixed during an internal audit, why each one mattered, and what the process looked like end to end.&lt;br&gt;
Why a Code-Review Bot Is a Security&amp;nbsp;Target&lt;br&gt;
A GitHub App that can read code, comment on PRs, and push autofixes sits in a privileged position. It has write access, it processes untrusted input (every PR, every webhook payload), and it often talks to other services - in my case, an MCP (Model Context Protocol) server for AI-assisted review.&lt;br&gt;
That combination means three things need to be airtight: authentication, request validation, and resource limits. I had working code for all three. What I didn't have, until I audited it properly, was proof that each one failed safely under attack.&lt;br&gt;
Problem 1: Authentication That Failed&amp;nbsp;Open&lt;br&gt;
The MCP integration handled requests from an external service. My original authentication check worked like this: if a token was present, validate it; if validation itself threw an error - say, the auth service was slow or unreachable - the code caught the exception and let the request through.&lt;br&gt;
This is called failing open, and it's one of the more common mistakes in systems that bolt security onto an existing code path. The intention was reasonable: don't let a flaky dependency take down the whole app. The result was dangerous: an attacker who could trigger an auth-service timeout could skip authentication entirely.&lt;br&gt;
The fix was to flip the default. Any exception during authentication now results in an automatic denial, not a pass-through. If the auth service is unreachable, the request is rejected, logged, and retried - never silently trusted. This is the standard fail-closed pattern, and it should be the default for any security check, full stop.&lt;br&gt;
Problem 2: A Content-Length Bypass&lt;br&gt;
Webhook payloads come in with a Content-Length header, and the app used it to enforce a size limit before processing - a reasonable defense against oversized or malicious payloads. The gap: the check trusted the header value itself rather than the actual bytes received.&lt;br&gt;
A request could declare a small Content-Length while streaming a much larger body, slipping past the size check entirely. This is a known class of bug in HTTP handling, and it's easy to miss because the code "looks" correct - it reads a header and compares a number.&lt;br&gt;
The fix was to validate against the actual size of the data read from the stream, not the client-supplied header. It's a small code change, but it closes a real gap between what a client claims and what a server receives - a distinction that matters anywhere you're parsing untrusted input.&lt;br&gt;
Problem 3: A Rate Limiter That Leaked&amp;nbsp;Memory&lt;br&gt;
The app rate-limits requests per IP address to prevent abuse. The original implementation stored a counter per IP in memory, incrementing on each request. What it didn't do was clean up entries for IPs that stopped sending requests.&lt;br&gt;
Under normal traffic this is invisible. Under sustained traffic from many different IPs - which is trivial to generate - the counter dictionary grows without bound. Eventually the process runs out of memory and crashes. This turns a defensive feature into an attack vector: the very thing meant to stop abuse becomes the tool for causing an outage.&lt;br&gt;
The fix added a time-based eviction policy, clearing stale IP entries on a rolling window instead of letting them accumulate forever. Rate limiters need to bound their own memory usage, not just the request rate - a detail that's easy to skip when the feature works correctly in every manual test.&lt;br&gt;
The Quieter Problem: 27 Silent&amp;nbsp;Failures&lt;br&gt;
None of the three bugs above would have been easy to catch through code review alone, and that pointed to a deeper issue: 27 places in the codebase caught exceptions and did nothing with them. A try/except: pass pattern, repeated across error-handling paths, meant that when something went wrong, the app kept running - silently, with no log entry, no alert, no trace.&lt;br&gt;
This is a comfortable pattern to write and a dangerous one to ship. It hides exactly the kind of failure that matters most: the one that happens in production, once, under conditions you didn't test for.&lt;br&gt;
Every one of those 27 handlers was rewritten to log the failure with enough context to debug it later - what operation failed, what input triggered it, and the original exception. None of them changed what the app does when something breaks. All of them changed whether you'd ever find out.&lt;br&gt;
Proving It: Testing and&amp;nbsp;Coverage&lt;br&gt;
Fixes without tests are opinions. Each of the security changes above shipped with tests that reproduce the original failure mode - a forged Content-Length, an auth-service timeout, a rate-limit counter under sustained load - and assert the new, safe behavior.&lt;br&gt;
Across the full audit cycle, the project went from 62% to 76% test coverage, with 654 out of 654 tests passing and 834 total tests in the suite. Coverage numbers alone don't prove correctness, but combined with targeted tests for each vulnerability, they gave me confidence to say the fixes actually work - not just that the code compiles.&lt;br&gt;
What This Project Taught Me About Documentation&lt;br&gt;
Fixing the bugs was half the work. The other half was writing it down in a way a future contributor - or an auditor, or a client - could actually use: an architecture diagram showing how webhooks flow through auth, queueing, and processing; a threat-model table mapping each attack surface to its mitigation; and a changelog that explains why each fix happened, not just what changed.&lt;br&gt;
That last part turned out to matter most. Code shows what a system does. Documentation is the only place that shows what it's defending against, and why the defense looks the way it does. For any system that handles untrusted input - which is most systems - that record is worth as much as the fix itself.&lt;br&gt;
GitHub Autopilot is open source. The full architecture docs, threat-model table, and audit history are available on GitHub: Shweta-Mishra-ai/github-autopilot.&lt;br&gt;
I write about building and securing developer tools at TechNova World. If you're looking for someone who can both build the system and document it clearly for your team, let's talk.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
