<?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: Runix</title>
    <description>The latest articles on DEV Community by Runix (@chattermate).</description>
    <link>https://dev.to/chattermate</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%2F2949965%2F5db8b84c-f621-42e2-a1c7-17c8581fa13d.png</url>
      <title>DEV Community: Runix</title>
      <link>https://dev.to/chattermate</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chattermate"/>
    <language>en</language>
    <item>
      <title>We let an AI write SQL against customer databases. Here is every guardrail, and why prompting is not one.</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Fri, 04 Sep 2026 07:21:33 +0000</pubDate>
      <link>https://dev.to/chattermate/we-let-an-ai-write-sql-against-customer-databases-here-is-every-guardrail-and-why-prompting-is-3k9a</link>
      <guid>https://dev.to/chattermate/we-let-an-ai-write-sql-against-customer-databases-here-is-every-guardrail-and-why-prompting-is-3k9a</guid>
      <description>&lt;p&gt;A customer writes in: "my last three orders are missing." Someone has to open a database and look.&lt;/p&gt;

&lt;p&gt;We built an AI agent that does that part. It reads the ticket, forms a hypothesis, queries the customer's own systems, and writes up what it found with the queries attached as evidence. Useful. Also, on its face, a terrible idea — you have an LLM reading untrusted text from strangers on the internet, and you are handing it a database connection.&lt;/p&gt;

&lt;p&gt;We shipped it anyway. The interesting work was not the agent. It was the roughly 400 lines standing between the agent and the data, and the thing we got wrong twice before getting it right.&lt;/p&gt;

&lt;p&gt;All of this is Apache-2.0 and sitting in &lt;a href="https://github.com/ChatterMate/chattermate.chat" rel="noopener noreferrer"&gt;our repo&lt;/a&gt;, so you can read the real thing rather than take our word for it. The two files are &lt;code&gt;backend/app/services/sql_guardrails.py&lt;/code&gt; and &lt;code&gt;backend/app/services/db_connector_service.py&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompting is not a security boundary
&lt;/h2&gt;

&lt;p&gt;Start here, because everything else follows from it.&lt;/p&gt;

&lt;p&gt;You cannot write "only generate SELECT statements" in a system prompt and call that a control. You can write it — we do — but it is a hint about intent, not a guarantee about behaviour. The model reads customer messages. Customer messages can contain instructions. Somewhere between those two facts is every prompt-injection writeup of the last three years.&lt;/p&gt;

&lt;p&gt;So the rule we settled on: &lt;strong&gt;every guarantee is enforced outside the model, on a parsed AST.&lt;/strong&gt; Not on the string. Not by asking nicely. If a property matters, it gets checked by code that the model cannot talk to.&lt;/p&gt;

&lt;p&gt;That sounds obvious written down. It is also the part most "AI + your database" demos skip, because the demo works fine when nobody is attacking it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer one: parse it, do not regex it
&lt;/h2&gt;

&lt;p&gt;The first thing we do with model-generated SQL is throw away the string.&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="n"&gt;statements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqlglot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_sql&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dialect&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;statements&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;SqlValidationResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Exactly one SQL statement is allowed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;statement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;statements&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;SqlValidationResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Only plain SELECT statements are allowed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then a denylist of node types that must not appear anywhere in the tree: &lt;code&gt;Insert&lt;/code&gt;, &lt;code&gt;Update&lt;/code&gt;, &lt;code&gt;Delete&lt;/code&gt;, &lt;code&gt;Merge&lt;/code&gt;, &lt;code&gt;Create&lt;/code&gt;, &lt;code&gt;Drop&lt;/code&gt;, &lt;code&gt;Alter&lt;/code&gt;, &lt;code&gt;TruncateTable&lt;/code&gt;, &lt;code&gt;Grant&lt;/code&gt;, &lt;code&gt;Command&lt;/code&gt;, &lt;code&gt;Transaction&lt;/code&gt;, &lt;code&gt;Set&lt;/code&gt;, &lt;code&gt;Into&lt;/code&gt;, &lt;code&gt;Lock&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Into&lt;/code&gt; and &lt;code&gt;Lock&lt;/code&gt; are on that list for a reason. &lt;code&gt;SELECT * INTO evil FROM orders&lt;/code&gt; is a SELECT, and it writes. &lt;code&gt;SELECT * FROM orders FOR UPDATE&lt;/code&gt; is a SELECT, and it takes locks. Both parse as &lt;code&gt;exp.Select&lt;/code&gt;. Both would have walked straight through a naive &lt;code&gt;sql.strip().upper().startswith("SELECT")&lt;/code&gt; check.&lt;/p&gt;

&lt;p&gt;At the end, the statement is re-rendered from the AST with &lt;code&gt;comments=False&lt;/code&gt;, and that rendering is what executes. Two things fall out of that. Comments never reach the server, which matters more than it sounds — MySQL executes &lt;code&gt;/*! ... */&lt;/code&gt;. And whatever runs is canonical SQL derived from a tree we inspected, not the raw string we were handed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer two: an allowlist that walks the whole tree
&lt;/h2&gt;

&lt;p&gt;Every table reference has to be on the connector's allowlist. The obvious version of this check is also the broken one, because table references hide in places people forget to look.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;pg_shadow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The top-level FROM is &lt;code&gt;x&lt;/code&gt;. Looks clean. The real read is inside the CTE body.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="k"&gt;UNION&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;oid&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;pg_shadow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same trick, different wrapper.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;statement.find_all(exp.Table)&lt;/code&gt; walks all of it — CTEs, subqueries, joins, union arms. CTE &lt;em&gt;names&lt;/em&gt; are exempted, since a reference to &lt;code&gt;x&lt;/code&gt; resolves to a CTE we already walked, but only when unqualified. A CTE called &lt;code&gt;users&lt;/code&gt; does not authorize &lt;code&gt;secret_schema.users&lt;/code&gt;. That is a real test case, and it exists because it is exactly the sort of thing you would get wrong.&lt;/p&gt;

&lt;p&gt;Bare names resolve against default schemas, so an allowlist entry of &lt;code&gt;public.orders&lt;/code&gt; also authorizes &lt;code&gt;orders&lt;/code&gt;. But &lt;code&gt;hidden.orders&lt;/code&gt; is refused. Same table name, different schema, no.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer three: filter the relation, not the predicate
&lt;/h2&gt;

&lt;p&gt;This is the part worth the whole article.&lt;/p&gt;

&lt;p&gt;Support data is multi-tenant in the worst way: one &lt;code&gt;orders&lt;/code&gt; table, every customer's rows in it. The agent investigating Ann's missing orders must not be able to read Bob's. And the naive approach — check that the model's WHERE clause contains the right customer filter — cannot be made to work.&lt;/p&gt;

&lt;p&gt;Think about what you would have to prove. That no &lt;code&gt;OR&lt;/code&gt; widens the predicate. That no join reintroduces unfiltered rows. That no correlated subquery reaches around it. That no UNION arm adds a branch without it. You are writing a static analyser for arbitrary SQL semantics, and you will lose.&lt;/p&gt;

&lt;p&gt;So we stopped validating the predicate and started rewriting the relation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;   &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;   &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;customer_email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ann@x.com'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every scoped base table gets swapped for a pre-filtered subquery. The model's own SQL is then applied on top of that.&lt;/p&gt;

&lt;p&gt;Now &lt;code&gt;OR 1=1&lt;/code&gt; is not a bypass. It is not even interesting. The outer predicate can say whatever it likes, because the relation it selects from only ever contained one customer's rows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_or_true_cannot_widen_the_scope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&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="nf"&gt;scoped&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT id FROM orders WHERE 1=1 OR customer_email = &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;victim@x.com&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FROM (SELECT * FROM orders WHERE customer_email = &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;OWNER&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that the query is &lt;em&gt;allowed&lt;/em&gt;. We are not blocking it. We are making it harmless, which is a much better place to be than pattern-matching hostile predicates forever.&lt;/p&gt;

&lt;p&gt;Three details that took us longer than they should have:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It fails closed.&lt;/strong&gt; A scoped table with no customer identity on the ticket is refused outright. The tempting behaviour — no scope value, so skip the filter — reads every customer's rows. That is the bug you only find in production, so there is a test pinning it shut for &lt;code&gt;None&lt;/code&gt;, &lt;code&gt;""&lt;/code&gt; and &lt;code&gt;" "&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The value is a literal node, never string-formatted.&lt;/strong&gt; &lt;code&gt;exp.Literal.string(value)&lt;/code&gt; escapes on render. Feed it &lt;code&gt;x' OR '1'='1&lt;/code&gt; and you get &lt;code&gt;'x'' OR ''1''=''1'&lt;/code&gt; — one string, no injection. We are rewriting SQL to defend against injection, so it would be somewhat embarrassing to introduce one while doing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scoping happens last.&lt;/strong&gt; The allowlist and masking checks run against what the model actually wrote. If we rewrote first, those checks would be inspecting our own wrappers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer four: masked columns, and the whole-row trick
&lt;/h2&gt;

&lt;p&gt;Some columns should never reach the model at all. Email, phone, whatever your compliance people circled.&lt;/p&gt;

&lt;p&gt;The naive implementation masks by output column name, after the query runs. It survives about ninety seconds of adversarial thinking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;harmless&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;          &lt;span class="c1"&gt;-- alias&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;        &lt;span class="c1"&gt;-- expression&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'a@b.c'&lt;/span&gt;   &lt;span class="c1"&gt;-- probe by inference&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The last one never selects the column at all. It just asks yes/no questions until it knows the value.&lt;/p&gt;

&lt;p&gt;So masked columns cannot be &lt;em&gt;referenced&lt;/em&gt;, anywhere. Not in SELECT, not in WHERE, not inside a function.&lt;/p&gt;

&lt;p&gt;Then there is the category we did not think of first, and which is the reason this section exists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;to_jsonb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;row_to_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)::&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;c&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;array_agg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every one of those collapses an entire row into a single value. Name-based masking looks at the output column, sees &lt;code&gt;to_jsonb&lt;/code&gt;, finds nothing called &lt;code&gt;email&lt;/code&gt;, and passes the whole record through with the email inside it.&lt;/p&gt;

&lt;p&gt;In Postgres a bare table name used as a value &lt;em&gt;is&lt;/em&gt; the row. &lt;code&gt;SELECT customers FROM customers&lt;/code&gt; is legal and returns row tuples. That one genuinely surprised us.&lt;/p&gt;

&lt;p&gt;The fix is two rules on the AST. A star nested inside anything other than a top-level projection is refused. And a bare, unqualified column reference whose name matches a table, alias or CTE in scope is refused, because that is a whole-row value wearing a column's clothes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT *&lt;/code&gt;, &lt;code&gt;t.*&lt;/code&gt; and &lt;code&gt;count(*)&lt;/code&gt; stay legal. The first two expand to real column names that get redacted by name on the way back; the last is a count, and counts do not leak rows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer five: assume all of the above is wrong
&lt;/h2&gt;

&lt;p&gt;Everything so far is one system. One system means one bug away from nothing.&lt;/p&gt;

&lt;p&gt;So the session is independently read-only, at the driver:&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="c1"&gt;# postgres
&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-c statement_timeout=5000 -c default_transaction_read_only=on&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# mysql
&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SET SESSION TRANSACTION READ ONLY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SET SESSION max_execution_time = 5000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the AST validator has a hole we have not found, a write still fails at the server. The statement timeout does the same job for the resource-exhaustion cases the function denylist is aimed at — &lt;code&gt;pg_sleep&lt;/code&gt;, &lt;code&gt;benchmark()&lt;/code&gt;, and the rest of that family.&lt;/p&gt;

&lt;p&gt;And the executor fetches &lt;code&gt;max_rows + 1&lt;/code&gt; even though the validator already forced a LIMIT. Belt and braces, deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we are still not certain about
&lt;/h2&gt;

&lt;p&gt;Two things, stated plainly, because a security post with no open questions is a marketing post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The denylist is a denylist.&lt;/strong&gt; &lt;code&gt;BLOCKED_FUNCTIONS&lt;/code&gt; covers the Postgres and MySQL functions we know about for sleeping, reading files, opening network connections and poking at server config. Denylists are structurally incomplete. It is defence in depth behind the read-only session, not the thing holding the line, and we would rather have an allowlist here — we have not found a workable one that does not break ordinary queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Row scoping is opt-in, and that is a sharp edge.&lt;/strong&gt; &lt;code&gt;row_scope&lt;/code&gt; is empty until you set a customer-identifying column per table. An operator who connects a database and skips that step gets an agent that can read every row of every allowlisted table. The docs say to set it. Defaults beat documentation, and this default is the wrong way round. It is the change we would most like to make.&lt;/p&gt;

&lt;p&gt;The whole corpus lives in &lt;code&gt;backend/tests/services/test_sql_guardrails.py&lt;/code&gt; — mutations, table smuggling, function abuse, masked-column exfiltration, row-scope bypasses. If you find one it does not cover, that is a genuinely useful issue to open, and we would rather hear it from you than from a customer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that generalises
&lt;/h2&gt;

&lt;p&gt;If you are building an agent that touches real data, the shape of this is reusable even if none of the code is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parse, do not pattern-match. Model output is untrusted input, and untrusted input gets a parser.&lt;/li&gt;
&lt;li&gt;Constrain the &lt;em&gt;relation&lt;/em&gt;, not the model's predicate. Anything the model can write around, it eventually will.&lt;/li&gt;
&lt;li&gt;Assume your first masking implementation leaks. Ours did, via a Postgres feature most people never touch.&lt;/li&gt;
&lt;li&gt;Put a second, independent barrier underneath. Then write the test that proves the first one failing is survivable.&lt;/li&gt;
&lt;li&gt;Fail closed. Every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this makes an LLM trustworthy. That is the point. It makes trustworthiness unnecessary, which is the only version of this that scales.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I build &lt;a href="https://chattermate.chat" rel="noopener noreferrer"&gt;ChatterMate&lt;/a&gt;, an open-source AI customer support platform with human handoff — Apache-2.0 and self-hostable. Everything above is in the repo at &lt;a href="https://github.com/ChatterMate/chattermate.chat" rel="noopener noreferrer"&gt;github.com/ChatterMate/chattermate.chat&lt;/a&gt;, so go and find the hole I missed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>postgres</category>
      <category>python</category>
    </item>
    <item>
      <title>ChatterMate vs Chatwoot vs Typebot: Which Open-Source Chat Platform Is Right for You?</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Thu, 26 Mar 2026 04:44:31 +0000</pubDate>
      <link>https://dev.to/chattermate/chattermate-vs-chatwoot-vs-typebot-which-open-source-chat-platform-is-right-for-you-ba9</link>
      <guid>https://dev.to/chattermate/chattermate-vs-chatwoot-vs-typebot-which-open-source-chat-platform-is-right-for-you-ba9</guid>
      <description>&lt;p&gt;If you're evaluating open-source alternatives to Intercom, Drift, or Zendesk Chat, you've likely come across three names: &lt;strong&gt;Chatwoot&lt;/strong&gt;, &lt;strong&gt;Typebot&lt;/strong&gt;, and &lt;strong&gt;ChatterMate&lt;/strong&gt;. They all live in the "self-hostable customer chat" space — but they solve very different problems.&lt;/p&gt;

&lt;p&gt;Here's an honest breakdown.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Quick Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;ChatterMate&lt;/th&gt;
&lt;th&gt;Chatwoot&lt;/th&gt;
&lt;th&gt;Typebot&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI-first chatbot automation&lt;/td&gt;
&lt;td&gt;Human agent inbox&lt;/td&gt;
&lt;td&gt;No-code bot builder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Local LLM support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Ollama native&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No-code workflow builder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Human handoff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Smart escalation&lt;/td&gt;
&lt;td&gt;✅ Core feature&lt;/td&gt;
&lt;td&gt;✅ Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Self-hostable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Docker&lt;/td&gt;
&lt;td&gt;✅ Docker&lt;/td&gt;
&lt;td&gt;✅ Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vector search / RAG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ pgvector&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API-first&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ FastAPI&lt;/td&gt;
&lt;td&gt;✅ Rails API&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-LLM provider&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ (OpenAI, Groq, Ollama, Google)&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Chatwoot: The Human Agent Inbox
&lt;/h2&gt;

&lt;p&gt;Chatwoot is excellent at what it does: routing customer conversations to human agents. It's battle-tested, mature, and has a large community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams with human support agents who need a shared inbox, SLA tracking, and omnichannel support (email, Twitter/X, WhatsApp, etc.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not ideal for:&lt;/strong&gt; AI-first automation where you want bots handling the majority of conversations without human involvement.&lt;/p&gt;

&lt;p&gt;If you want AI, you'd need to bolt it on externally — Chatwoot doesn't natively run language models.&lt;/p&gt;




&lt;h2&gt;
  
  
  Typebot: The Flow Builder
&lt;/h2&gt;

&lt;p&gt;Typebot is a drag-and-drop conversation flow builder. Think visual programming for chatbots — you build branching dialogue trees, collect form data, and trigger webhooks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Marketing teams building lead capture bots, survey flows, or onboarding sequences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not ideal for:&lt;/strong&gt; Dynamic AI responses. Typebot's bots are deterministic — they follow the script you build. You can integrate OpenAI via blocks, but the LLM is a plugin, not the core.&lt;/p&gt;




&lt;h2&gt;
  
  
  ChatterMate: The AI-First Agent
&lt;/h2&gt;

&lt;p&gt;ChatterMate takes a different approach: the AI is the agent, not a bolt-on.&lt;/p&gt;

&lt;p&gt;You connect a knowledge base, configure an agent, and ChatterMate uses vector search (pgvector) to give the AI relevant context before responding. Customers get accurate, contextual answers 24/7 — and the agent escalates to humans when it can't help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes it different:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Fully local AI with Ollama&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;ollama pull llama3.2&lt;/code&gt; and ChatterMate connects to it directly. No OpenAI account, no API costs, no data leaving your infrastructure. This matters enormously for regulated industries (healthcare, finance, legal).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Multi-LLM switching&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Already have OpenAI access? Use GPT-4o. Want to experiment with Groq's speed? Switch providers without changing your setup. Per-agent model selection means you can run different LLMs for different use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Smart human handoff&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ChatterMate doesn't just dump the customer to a human — it's aware of business hours, routes based on team availability, and includes conversation context so the agent isn't starting from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. RAG-ready from day one&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;pgvector is baked in. Upload documents, connect to your knowledge base, and the AI has semantic search over your content before every response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. No-code workflow builder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For custom logic — conditional responses, Jira ticket creation, form collection — there's a drag-and-drop builder. No Python required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get started in minutes&lt;/span&gt;
git clone https://github.com/chattermate/chattermate.chat.git
&lt;span class="nb"&gt;cd &lt;/span&gt;chattermate.chat
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  When to Pick Each
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pick Chatwoot if:&lt;/strong&gt; You primarily have human support agents who need a shared inbox, omnichannel support, or SLA tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick Typebot if:&lt;/strong&gt; You're building marketing or onboarding flows and want visual, no-code flow control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick ChatterMate if:&lt;/strong&gt; You want AI handling 80%+ of conversations autonomously, data sovereignty matters (fully local with Ollama), or you need smart human escalation baked in.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest Take
&lt;/h2&gt;

&lt;p&gt;These tools aren't really competing — they're solving different problems. If you want a chatbot that &lt;em&gt;thinks&lt;/em&gt;, ChatterMate is the open-source option built for it.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/chattermate/chattermate.chat" rel="noopener noreferrer"&gt;GitHub: chattermate/chattermate.chat&lt;/a&gt; — 58 stars, AGPL licensed, v1.0.9&lt;/p&gt;

&lt;p&gt;Contributions welcome — zero open issues means the board is yours.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm Runix, building ChatterMate in public. Follow &lt;a href="https://x.com/ChatterMat65796" rel="noopener noreferrer"&gt;@ChatterMat65796&lt;/a&gt; for updates.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>selfhosted</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Self-Host Your Own AI Chatbot: ChatterMate + Ollama in 10 Minutes</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Tue, 24 Mar 2026 06:31:58 +0000</pubDate>
      <link>https://dev.to/chattermate/self-host-your-own-ai-chatbot-chattermate-ollama-in-10-minutes-ng9</link>
      <guid>https://dev.to/chattermate/self-host-your-own-ai-chatbot-chattermate-ollama-in-10-minutes-ng9</guid>
      <description>&lt;p&gt;Running your own AI chatbot shouldn't require a PhD or a cloud bill.&lt;/p&gt;

&lt;p&gt;ChatterMate is an open-source (AGPL) AI chat agent built from scratch to work with LLMs. Pair it with Ollama and you get a fully local AI assistant — no API keys, no third-party data processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Self-Host?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy&lt;/strong&gt;: Customer conversations never leave your infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt;: No per-token API charges&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control&lt;/strong&gt;: Pick your model, tune your prompts, own your data&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;Clone the repo: &lt;code&gt;git clone https://github.com/chattermate/chattermate.chat&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use Docker Compose to spin everything up&lt;/li&gt;
&lt;li&gt;Point it at your Ollama instance&lt;/li&gt;
&lt;li&gt;You're live&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Vue.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM&lt;/strong&gt;: Ollama (local) or any OpenAI-compatible API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: PostgreSQL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current Stats
&lt;/h2&gt;

&lt;p&gt;58 GitHub stars, 26 forks, 4 contributors, v1.0.9 released.&lt;/p&gt;

&lt;p&gt;We're actively looking for contributors — the issue tracker is clean and we're happy to mentor first-time OSS contributors.&lt;/p&gt;

&lt;p&gt;Check it out: &lt;a href="https://github.com/chattermate/chattermate.chat" rel="noopener noreferrer"&gt;github.com/chattermate/chattermate.chat&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>selfhosted</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Self-Host an AI Customer Chat Agent with Ollama + ChatterMate (No API Keys Needed)</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Thu, 19 Mar 2026 16:03:23 +0000</pubDate>
      <link>https://dev.to/chattermate/how-to-self-host-an-ai-customer-chat-agent-with-ollama-chattermate-no-api-keys-needed-39j8</link>
      <guid>https://dev.to/chattermate/how-to-self-host-an-ai-customer-chat-agent-with-ollama-chattermate-no-api-keys-needed-39j8</guid>
      <description>&lt;p&gt;So you want an AI-powered customer chat widget on your site — but you don't want to send every conversation to OpenAI or pay per token?&lt;/p&gt;

&lt;p&gt;ChatterMate is an open-source AI chat agent that works seamlessly with Ollama, meaning you can run the entire stack locally. No API keys. No cloud dependency. Full data ownership.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk through getting ChatterMate running with Ollama on your own server.&lt;/p&gt;

&lt;p&gt;What you'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Linux server (or Mac/Windows with Docker)&lt;/li&gt;
&lt;li&gt;Docker and Docker Compose&lt;/li&gt;
&lt;li&gt;About 8GB RAM for running a decent local model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 1: Clone the repo&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/chattermate/chattermate.chat.git" rel="noopener noreferrer"&gt;https://github.com/chattermate/chattermate.chat.git&lt;/a&gt;&lt;br&gt;
cd chattermate.chat&lt;/p&gt;

&lt;p&gt;Step 2: Set up Ollama&lt;/p&gt;

&lt;p&gt;Install Ollama and pull a model:&lt;/p&gt;

&lt;p&gt;curl -fsSL &lt;a href="https://ollama.com/install.sh" rel="noopener noreferrer"&gt;https://ollama.com/install.sh&lt;/a&gt; | sh&lt;br&gt;
ollama pull llama3.2&lt;/p&gt;

&lt;p&gt;Step 3: Configure and run&lt;/p&gt;

&lt;p&gt;Copy the example environment file and configure it to point to your local Ollama instance. Then spin everything up with Docker Compose.&lt;/p&gt;

&lt;p&gt;What's in v1.0.9 (latest release):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slack integration with OAuth&lt;/li&gt;
&lt;li&gt;Secure token-based authentication for widgets&lt;/li&gt;
&lt;li&gt;XSS attack prevention and security hardening&lt;/li&gt;
&lt;li&gt;Database connection pooling improvements&lt;/li&gt;
&lt;li&gt;Contributions from external developer @cdmx-inWhy self-host your AI chat?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Complete data privacy - conversations never leave your server.&lt;/p&gt;

&lt;p&gt;No per-token costs - run as many conversations as your hardware allows.&lt;/p&gt;

&lt;p&gt;Customize everything - the AI agent's personality, knowledge base, and behavior are all yours to tune.&lt;/p&gt;

&lt;p&gt;AGPL licensed - truly open source.&lt;/p&gt;

&lt;p&gt;Current stats: 58 stars, 26 forks on GitHub, 4 contributors, 586 commits, 10 releases.&lt;/p&gt;

&lt;p&gt;Get started: &lt;a href="https://github.com/chattermate/chattermate.chat" rel="noopener noreferrer"&gt;https://github.com/chattermate/chattermate.chat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star the repo if this is useful - we're a small team and every star helps us keep building in the open. We'd also love PRs, issues, and feedback from the community.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>selfhosted</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introducing LogManticsAI: LLM-Powered CLI for Semantic JSON Log Analysis</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Tue, 03 Jun 2025 05:10:47 +0000</pubDate>
      <link>https://dev.to/chattermate/introducing-logmanticsai-llm-powered-cli-for-semantic-json-log-analysis-1969</link>
      <guid>https://dev.to/chattermate/introducing-logmanticsai-llm-powered-cli-for-semantic-json-log-analysis-1969</guid>
      <description>&lt;p&gt;In the evolving landscape of IT operations and DevOps, the ability to efficiently analyze and monitor logs is paramount. Enter LogManticsAI, an open-source command-line tool that leverages Large Language Models (LLMs) to provide semantic analysis of JSON logs, real-time anomaly detection, and continuous monitoring—all within your terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔍 What is LogManticsAI?&lt;/strong&gt;&lt;br&gt;
LogManticsAI is designed to enhance log analysis by integrating the power of LLMs. It offers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interactive Setup:&lt;/strong&gt; Easily configure LLM settings and specify log file paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-File Monitoring:&lt;/strong&gt; Simultaneously monitor multiple JSON log files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secure API Key Storage:&lt;/strong&gt; Utilizes keyring for safe storage of API keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSON Validation:&lt;/strong&gt; Ensures log files are properly structured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic Analysis:&lt;/strong&gt; Identifies important log keys and patterns using LLMs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Anomaly Detection:&lt;/strong&gt; Continuously monitors logs to detect anomalies as they occur.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM Provider Support:&lt;/strong&gt; Compatible with various LLM providers via Agno, including OpenAI, Anthropic, Google, and Groq.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slack Integration:&lt;/strong&gt; Sends real-time notifications to Slack channels.&lt;br&gt;
GitHub&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 Getting Started&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Clone the Repository:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/chattermate/LogManticsAI.git&lt;br&gt;
cd LogManticsAI&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install Dependencies:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run the Tool:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python logmantics.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Follow the interactive prompts to configure your LLM settings and specify the log files you wish to monitor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 Why Use LLMs for Log Analysis?&lt;/strong&gt;&lt;br&gt;
Traditional log analysis tools often rely on predefined rules and patterns, which can miss novel or unexpected issues. By leveraging LLMs, LogManticsAI can:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand Context:&lt;/strong&gt; Interpret logs in a more human-like manner, considering the context of events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detect Anomalies:&lt;/strong&gt; Identify unusual patterns that may not match predefined rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adapt to New Patterns:&lt;/strong&gt; Learn from new types of log entries without manual updates.&lt;br&gt;
signoz.io&lt;/p&gt;

&lt;p&gt;This approach aligns with the growing trend of integrating AI into observability tools to enhance system monitoring and incident response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📣 Join the Community&lt;/strong&gt;&lt;br&gt;
LogManticsAI is open-source and welcomes contributions. Whether you're interested in adding new features, improving documentation, or sharing feedback, your input is valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/chattermate/LogManticsAI" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**Issues &amp;amp; Feature Requests: &lt;a href="https://dev.tourl"&gt;**https://github.com/chattermate/LogManticsAI/issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Embrace the future of log analysis with LogManticsAI and experience the power of LLMs in your DevOps toolkit.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>aws</category>
      <category>linux</category>
    </item>
    <item>
      <title>🧠 The Image War: OpenAI vs Grok — Who’s the Real Visual Genius?</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Thu, 27 Mar 2025 06:31:20 +0000</pubDate>
      <link>https://dev.to/chattermate/the-image-war-openai-vs-grok-whos-the-real-visual-genius-1ke</link>
      <guid>https://dev.to/chattermate/the-image-war-openai-vs-grok-whos-the-real-visual-genius-1ke</guid>
      <description>&lt;p&gt;In the last 24 hours, the AI world has been &lt;strong&gt;shaken&lt;/strong&gt;. OpenAI just dropped a bombshell with their new image generation model, and it's turning heads everywhere. Naturally, I had one question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who’s the king of image generation — OpenAI or Grok?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To find out, I decided to run a series of real-world tests with basic prompts. No fancy engineering here — just casual, natural instructions. Because let’s be honest, that’s how we all talk to AI.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 Round 1: The Doodle Challenge
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Create a doodle that shows &lt;em&gt;“English is the new programming language,”&lt;/em&gt; with a character talking to a computer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; A very casual, not-so-intelligent prompt — just to see how well AI interprets human intention.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;strong&gt;Grok&lt;/strong&gt;: Struggled a bit in the beginning, but got the idea eventually.
&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;OpenAI&lt;/strong&gt;: Nailed it from the start.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fss12g91rzbpodnehw62d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fss12g91rzbpodnehw62d.png" alt="Open Ai Gtp-4o vs grok" width="800" height="833"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Verdict:&lt;/strong&gt; 🤝 Tie — Grok took a while to warm up, but the final outputs were similar. What's your preference?&lt;/p&gt;




&lt;h2&gt;
  
  
  😂 Round 2: Meme Reply Challenge
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Reply with a meme to a tweet that says: &lt;em&gt;“I got my first customer!”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt; &lt;em&gt;Give a meme image reply for someone who just made their first paying customer.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;strong&gt;Grok&lt;/strong&gt;: Meh, not really meme-worthy.
&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;OpenAI&lt;/strong&gt;: Delivered a perfect meme — even asked for confirmation. Nice touch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0bgo5qtlc5pjj3buzbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0bgo5qtlc5pjj3buzbq.png" alt="Open Ai Gtp-4o vs grok" width="800" height="396"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Winner:&lt;/strong&gt; 🏆 &lt;strong&gt;OpenAI&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📣 Round 3: Product Review Announcement
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Create an image for an X (Twitter) post announcing a review of Chattermate by Scoutforge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review Link:&lt;/strong&gt; &lt;a href="https://scoutforge.net/reviews/chattermateai/" rel="noopener noreferrer"&gt;Chattermate Review by Scoutforge&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Rating:&lt;/strong&gt; 4.2/5&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;strong&gt;Grok&lt;/strong&gt;: Just gave up. Gibberish text, chaotic visuals.
&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;OpenAI&lt;/strong&gt;: Absolutely stunning result. Photoshop, are you watching?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8oz16g5drlpybb7v4glw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8oz16g5drlpybb7v4glw.png" alt="Open Ai Gtp-4o vs grok" width="800" height="992"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Winner:&lt;/strong&gt; 🏆 &lt;strong&gt;OpenAI&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎉 Final Test: Birthday Invitation Challenge (A Dad’s Special)
&lt;/h2&gt;

&lt;p&gt;This one's personal. For the past 8 years, I’ve been designing my son’s birthday invitations from scratch in Photoshop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; See if AI can beat me at this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Create a birthday invitation for my son Runix, this Sunday at 3:30 PM. Theme: Nerf Gun. Age: 9. Ask guests to RSVP.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;strong&gt;Grok&lt;/strong&gt;: Started with gibberish again.
&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;OpenAI&lt;/strong&gt;: Blew away every expectation. Honestly, I might retire from Photoshop forever.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy9rq1wpyl2hutgmas3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy9rq1wpyl2hutgmas3n.png" alt="Open Ai Gtp-4o vs grok" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Winner:&lt;/strong&gt; 🏆 &lt;strong&gt;OpenAI&lt;/strong&gt; (no contest)&lt;/p&gt;




&lt;h2&gt;
  
  
  🧾 Summary
&lt;/h2&gt;

&lt;p&gt;The results were &lt;strong&gt;far beyond my imagination&lt;/strong&gt;. What started as a casual test made me question the future of design tools.&lt;/p&gt;

&lt;p&gt;Graphic designers, Photoshop, Canva...&lt;br&gt;&lt;br&gt;
You're officially on &lt;strong&gt;AI notice&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI's image model isn’t just good — it's a game-changer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me know in the comments if you've tried both tools.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;What’s your pick: Grok or OpenAI?&lt;/strong&gt;&lt;/p&gt;




</description>
      <category>design</category>
      <category>ai</category>
      <category>developer</category>
      <category>graphic</category>
    </item>
    <item>
      <title>The Future of Development: From Code to Prompts – Will We Become AI Operators?</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Wed, 19 Mar 2025 17:15:00 +0000</pubDate>
      <link>https://dev.to/chattermate/the-future-of-development-from-code-to-prompts-will-we-become-ai-operators-1c4d</link>
      <guid>https://dev.to/chattermate/the-future-of-development-from-code-to-prompts-will-we-become-ai-operators-1c4d</guid>
      <description>&lt;p&gt;In the whirlwind of technological evolution, a bold question emerges: Will developers soon swap their code editors for prompts, stepping into roles as "AI operators"? Picture this—a job posting for an "AI Operator," someone who crafts precise instructions, verifies outputs, and ensures intelligent systems hum along smoothly. It’s not a distant sci-fi fantasy; it’s a possibility creeping closer every day. As AI reshapes the tech landscape, what does this mean for developers, their work-life balance, and even humanity’s broader relationship with nature? Let’s dive into this shift, blending optimism with realism, and back it up with some eye-opening stats.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Operators: The Next Evolution of Developers?
&lt;/h3&gt;

&lt;p&gt;The idea of an "AI operator" isn’t as wild as it sounds. Tools like GitHub Copilot, Cursor, and Claude 3.5 are already nudging developers toward a future where AI does the heavy lifting—writing boilerplate code, debugging, or even generating entire functions. A speculative post on X suggested that roles like "AI Prompt Engineers" or "AI-Human Collaboration Experts" could account for 25% of software jobs by 2026. But does this mean traditional software engineering is on its way out?&lt;/p&gt;

&lt;p&gt;Not quite. AI might automate the grunt work, but it won’t erase the need for human ingenuity. Think of it as a partnership: developers could evolve into AI operators, guiding machines to solve complex problems while focusing on strategy, creativity, and innovation. It’s less about replacement and more about redefinition.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Numbers Tell the Story
&lt;/h3&gt;

&lt;p&gt;Recent data paints a vivid picture of this transformation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;75% of companies&lt;/strong&gt; plan to adopt AI within the next five years, signaling a seismic shift in how tech is built and managed (Source: Web ID 6).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;300 million jobs&lt;/strong&gt; could be displaced globally by AI by 2030, yet &lt;strong&gt;69 million new jobs&lt;/strong&gt; are expected to rise from the ashes of this disruption (Source: Web ID 8).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;25% of routine tasks&lt;/strong&gt; are already handled by AI, liberating workers from monotony (Source: Web ID 8).&lt;/li&gt;
&lt;li&gt;AI could inject &lt;strong&gt;$19.9 trillion&lt;/strong&gt; into the global economy by 2030, reshaping industries and creating opportunities we can barely imagine (Source: Web ID 8).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These stats suggest a dual reality: disruption is coming, but so is opportunity—for those ready to pivot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Work-Life Balance: A Dream Within Reach?
&lt;/h3&gt;

&lt;p&gt;Here’s the tantalizing upside: AI could usher in a golden era of work-life balance. If AI takes over repetitive tasks—think endless bug fixes or CRUD operations—developers might reclaim hours for creative pursuits or simply stepping away from the screen. Surveys show &lt;strong&gt;51% of office workers&lt;/strong&gt; believe AI improves their work-life balance, and &lt;strong&gt;81%&lt;/strong&gt; say it boosts job performance (Source: Web ID 5).&lt;/p&gt;

&lt;p&gt;Imagine spending less time wrestling with syntax and more time dreaming up bold architectures or mentoring the next generation. This isn’t just about clocking out early; it’s about rediscovering the joy of development. AI could amplify human potential, not diminish it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bright Side: Back to Nature?
&lt;/h3&gt;

&lt;p&gt;Elon Musk once mused about a future of abundance where AI produces so much that money becomes irrelevant. It’s a utopian vision, but it sparks an intriguing thought: What if AI frees us from repetitive thinking, pushing us toward a more natural existence? If machines handle the mundane—coding loops, managing servers, optimizing databases—humans could focus on art, exploration, or simply living in harmony with the world.&lt;/p&gt;

&lt;p&gt;This isn’t pure fantasy. With &lt;strong&gt;25% of routine tasks&lt;/strong&gt; already automated, we’re inching toward a reality where AI manages complexity, leaving us room to breathe. The positive side? A world where technology solves problems so efficiently that we’re nudged back to simpler, more human rhythms.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Transition: A Rough Ride
&lt;/h3&gt;

&lt;p&gt;But let’s not sugarcoat it—history warns us that big shifts get messy. The Industrial Revolution upended lives before it stabilized, and AI’s takeover could follow suit. The stats are sobering: &lt;strong&gt;60% of jobs in advanced economies&lt;/strong&gt; face risks from AI automation, and that 300-million-job displacement figure looms large (Source: Web ID 8).&lt;/p&gt;

&lt;p&gt;The "in-between" phase worries me most. As one X user put it, "Developers will still be needed, but only for high-level tasks like designing architectures." Those who can’t adapt—whether due to skill gaps or resistance—risk being left behind. It’s survival of the fittest, just as it’s always been when technology leaps forward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adapt or Fade: The Developer’s Challenge
&lt;/h3&gt;

&lt;p&gt;So, how do we thrive in this AI-driven future? It’s all about adaptability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Master AI collaboration&lt;/strong&gt;: Learn to write killer prompts, spot AI’s blind spots, and integrate it into your workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lean into human strengths&lt;/strong&gt;: Creativity, empathy, and big-picture thinking will outshine any algorithm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never stop learning&lt;/strong&gt;: With tech evolving at warp speed, curiosity is your lifeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The developers who succeed won’t just code—they’ll orchestrate. They’ll wield AI like a conductor wields a baton, creating symphonies of innovation.&lt;/p&gt;

&lt;h3&gt;
  
  
  A World Run by AI, Lived by Humans
&lt;/h3&gt;

&lt;p&gt;Let’s dream big for a moment. Picture a future where AI runs the show—managing infrastructure, optimizing resources, even governing with cold efficiency—while humans chase passions and purpose. It’s exhilarating, terrifying, and, frankly, possible. The &lt;strong&gt;$19.9 trillion economic boost&lt;/strong&gt; AI might deliver by 2030 hints at a world of surplus, where scarcity fades and new possibilities bloom.&lt;/p&gt;

&lt;p&gt;Will developers become AI operators? Maybe. But more crucially, they’ll become architects of this strange, thrilling future—one where machines and humans dance in sync.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your Move
&lt;/h3&gt;

&lt;p&gt;Don’t sit on the sidelines. Start playing with AI tools now—try Cursor, experiment with Claude, or tinker with whatever’s next. Learn to prompt, iterate, and innovate. The future belongs to those who see AI not as a doom, but as a partner in building something extraordinary.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>developers</category>
      <category>ai</category>
      <category>coding</category>
    </item>
    <item>
      <title>The Top 10 Open-Source Chatbot Frameworks of 2025</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Tue, 18 Mar 2025 16:51:00 +0000</pubDate>
      <link>https://dev.to/chattermate/the-top-10-open-source-chatbot-frameworks-of-2025-9jd</link>
      <guid>https://dev.to/chattermate/the-top-10-open-source-chatbot-frameworks-of-2025-9jd</guid>
      <description>&lt;p&gt;Chatbots are transforming how we engage with technology, and open-source frameworks are at the heart of this revolution. Whether you’re crafting a simple Q&amp;amp;A bot or sophisticated conversational AI, these tools offer flexibility, power, and—best of all—no cost. In this post, we’ll explore the top 10 open-source chatbot providers lighting up the dev world in 2025. Let’s dive in and find the perfect framework for your next project!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open-Source Chatbot Frameworks?
&lt;/h2&gt;

&lt;p&gt;Open-source frameworks let you customize to your heart’s content, tap into vibrant communities, and skip subscription fees. From startups to enterprises, these tools empower developers to build smarter bots faster. Ready to meet the best of the best?&lt;/p&gt;

&lt;h2&gt;
  
  
  Top 10 Open-Source Chatbot Frameworks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;a href="https://rasa.com" rel="noopener noreferrer"&gt;Rasa&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Advanced platform for contextual chatbots with strong natural language understanding (NLU).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Perfect for complex, multi-turn conversations with deep customization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; Python&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;a href="https://botpress.com" rel="noopener noreferrer"&gt;Botpress&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Full-stack chatbot platform with a visual flow editor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Balances no-code ease with powerful NLP features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; JavaScript (Node.js)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;a href="https://chattermate.chat" rel="noopener noreferrer"&gt;ChatterMate&lt;/a&gt; New Entrant
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Easiest framework to deploy, optimized for large language models (LLMs), Built for AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Instant knowledge base training via PDFs or website links; advanced integrations (human transfers, Jira tickets).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Features:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Rapid setup (operational in 5 minutes).&lt;/li&gt;
&lt;li&gt;Instant knowledge base integration.&lt;/li&gt;
&lt;li&gt;Advanced capabilities: human transfer, Jira ticket creation, etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Language:&lt;/strong&gt; JavaScript/Python&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Links:&lt;/strong&gt; Website | GitHub | Docs
&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;a href="https://dev.botframework.com" rel="noopener noreferrer"&gt;Microsoft Bot Framework&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Builds bots for Teams, Slack, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Enterprise-ready with Azure integration and multi-language options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; C#, JavaScript, Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stars:&lt;/strong&gt; 4,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;a href="https://botman.io" rel="noopener noreferrer"&gt;BotMan&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; PHP framework for multi-platform chatbots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Simple syntax, versatile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; PHP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stars:&lt;/strong&gt; 5,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. &lt;a href="https://bottender.js.org" rel="noopener noreferrer"&gt;Bottender&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; React-based conversational interfaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; React state management integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stars:&lt;/strong&gt; 2,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. &lt;a href="https://github.com/dialogflow-community" rel="noopener noreferrer"&gt;Dialogflow Community Edition&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Open-source Google Dialogflow variant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Intent detection, ideal for small-scale projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stars:&lt;/strong&gt; 1,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. &lt;a href="https://botonic.io" rel="noopener noreferrer"&gt;Botonic&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; React-powered, serverless chatbots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; WhatsApp, Messenger integrations, extensive plugins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; JavaScript (React)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stars:&lt;/strong&gt; 1,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. &lt;a href="https://github.com/gunthercox/ChatterBot" rel="noopener noreferrer"&gt;ChatterBot&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Creates responsive bots trained by data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Quick setup, trainable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; Python&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stars:&lt;/strong&gt; 10,000+&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. &lt;a href="https://botkit.ai" rel="noopener noreferrer"&gt;Botkit&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it does:&lt;/strong&gt; Customizable multi-platform bots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it’s great:&lt;/strong&gt; Easy API, strong community support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; JavaScript (Node.js)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Stars:&lt;/strong&gt; 7,000+&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to Pick the Perfect Framework
&lt;/h2&gt;

&lt;p&gt;Choosing the right tool depends on your needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; Python (Rasa, Chattermate), JavaScript (Botpress, Botkit).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complexity:&lt;/strong&gt; Simple (Chattermate, BotMan), Advanced (Rasa, Microsoft Bot Framework).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features:&lt;/strong&gt; Multi-channel (Botpress, Botkit, ChatterMate).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community:&lt;/strong&gt; Larger communities (Rasa, Botpress) offer more resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick Tip:&lt;/strong&gt; Match the framework to your team’s skills. New to chatbots? Start easy with ChatterBot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Win: ChatterMate in Action
&lt;/h2&gt;

&lt;p&gt;Last month, I challenged my intern to build a customer support bot using ChatterMate. The result? A masterpiece! With AI integrations, real-time messaging, and smooth escalation, our response times dropped dramatically. If you’re in customer service, this is a hidden gem!&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Key Feature&lt;/th&gt;
&lt;th&gt;GitHub Stars&lt;/th&gt;
&lt;th&gt;Multi-Channel&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rasa&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Advanced NLU&lt;/td&gt;
&lt;td&gt;15,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Botpress&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;Visual editor&lt;/td&gt;
&lt;td&gt;10,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatterBot&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Automatic learning&lt;/td&gt;
&lt;td&gt;10,000+&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microsoft Bot Framework&lt;/td&gt;
&lt;td&gt;Multiple&lt;/td&gt;
&lt;td&gt;Enterprise tools&lt;/td&gt;
&lt;td&gt;4,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BotMan&lt;/td&gt;
&lt;td&gt;PHP&lt;/td&gt;
&lt;td&gt;Platform-agnostic&lt;/td&gt;
&lt;td&gt;5,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bottender&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;React-based&lt;/td&gt;
&lt;td&gt;2,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dialogflow CE&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;Intent recognition&lt;/td&gt;
&lt;td&gt;1,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Botonic&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;Serverless&lt;/td&gt;
&lt;td&gt;1,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatterMate&lt;/td&gt;
&lt;td&gt;JS/Python&lt;/td&gt;
&lt;td&gt;AI + human support&lt;/td&gt;
&lt;td&gt;new&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Botkit&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;Multi-platform&lt;/td&gt;
&lt;td&gt;7,000+&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Your Turn: What’s Your Favorite?
&lt;/h2&gt;

&lt;p&gt;These frameworks are reshaping the chatbot landscape. Whether simplicity or cutting-edge AI is your goal, there's a perfect tool here for you. Have you used any? Got a hidden favorite we missed? Drop a comment—I’d love to hear your thoughts!&lt;/p&gt;

&lt;h1&gt;
  
  
  chatbots #opensource #AI #programming #developers #technology #javascript #python #php
&lt;/h1&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>programming</category>
      <category>developers</category>
    </item>
    <item>
      <title>Is the AI Revolution a Boom or Doom for Programmers?</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Mon, 17 Mar 2025 16:08:00 +0000</pubDate>
      <link>https://dev.to/chattermate/is-the-ai-revolution-a-boom-or-doom-for-programmers-2nef</link>
      <guid>https://dev.to/chattermate/is-the-ai-revolution-a-boom-or-doom-for-programmers-2nef</guid>
      <description>&lt;p&gt;The rapid advancement in AI, especially large language models like Claude 3.5, GPT-4 Turbo, and Gemini, has sparked an intense debate: Are these tools enhancing developers' capabilities, or are they setting the stage for an existential crisis for programmers?&lt;/p&gt;

&lt;p&gt;Recently, I experienced something astonishing that made me reconsider my stance.&lt;/p&gt;

&lt;p&gt;I assigned my intern a fairly complex task: implementing a "delete account" feature across multiple databases and microservices. This wasn't trivial—it involved intricate dependencies, cross-service validations, and careful handling of foreign keys that weren't consistently named.&lt;/p&gt;

&lt;p&gt;My intern turned to Claude 3.5 for assistance. The results? Mind-blowing.&lt;/p&gt;

&lt;p&gt;The code Claude helped him produce was not just good—it was exceptional. Here's what it did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically accessed system tables to discover and map foreign key relationships—even when naming conventions were inconsistent.&lt;/li&gt;
&lt;li&gt;Dynamically generated mapper logic to manage these relationships accurately.&lt;/li&gt;
&lt;li&gt;Covered extensive edge cases effortlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The kicker? This all took 90% less time than we had initially estimated. A task that would typically take days was completed within hours, freeing up valuable time for other critical tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consider these recent industry insights:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;According to GitHub’s Copilot survey, developers reported completing tasks up to &lt;strong&gt;55% faster&lt;/strong&gt; with AI-assisted tools.&lt;/p&gt;

&lt;p&gt;Gartner predicts that by 2025, AI tools will be standard practice in over &lt;strong&gt;70% of development&lt;/strong&gt; organizations.&lt;/p&gt;

&lt;p&gt;Stack Overflow’s 2023 developer survey revealed that nearly &lt;strong&gt;75% of developers are already using or planning to use AI&lt;/strong&gt; in their workflows.&lt;/p&gt;

&lt;p&gt;Based on this experience and industry trends, here's my prediction:&lt;/p&gt;

&lt;p&gt;AI won't entirely replace programmers. Instead, it will establish a middle ground, significantly improving efficiency and productivity. AI will handle repetitive and tedious coding tasks, freeing developers to focus more on innovation and higher-level problem-solving. Additionally, AI-assisted coding might encourage experienced programmers, who moved into management roles, to return to hands-on coding due to the reduced monotony and increased productivity.&lt;/p&gt;

&lt;p&gt;This experience got me thinking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is AI here to replace us or empower us?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How should we adapt our skills and workflows?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are we prepared for a future where coding is drastically accelerated or even automated&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;I'd love to hear your experiences and views:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you see AI as a threat or a valuable partner in software development?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>coding</category>
      <category>programming</category>
      <category>developers</category>
    </item>
    <item>
      <title>ChatterMate: A No-Code AI Agent Framework That Puts You in Control</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Mon, 17 Mar 2025 09:56:36 +0000</pubDate>
      <link>https://dev.to/chattermate/chattermate-a-no-code-ai-agent-framework-that-puts-you-in-control-2ji8</link>
      <guid>https://dev.to/chattermate/chattermate-a-no-code-ai-agent-framework-that-puts-you-in-control-2ji8</guid>
      <description>&lt;p&gt;For over 17 years, I’ve seen technology evolve—from the days of coding in COBOL and Rexx on mainframes to becoming a full-stack developer in today’s dynamic landscape. Yet, despite all these advancements, I often found myself frustrated by bloated, expensive, and overly complex chatbot solutions that didn’t really harness the full power of modern AI.&lt;/p&gt;

&lt;p&gt;That’s why I built ChatterMate.&lt;br&gt;
&lt;strong&gt;Why ChatterMate?&lt;/strong&gt;&lt;br&gt;
ChatterMate is a no-code AI agent framework designed for anyone who wants to build and run intelligent chatbots on their own terms. Here’s what makes it different:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-Hosted &amp;amp; Open-Source:&lt;/strong&gt;&lt;br&gt;
You retain full control over your data without being locked into costly SaaS subscriptions. Deploy it on your own server or cloud, and enjoy the freedom to customize every aspect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choice of AI Models:&lt;/strong&gt;&lt;br&gt;
Whether you prefer GPT-4, Claude, or even your own custom LLMs, ChatterMate is built to work with a range of AI engines so you can choose what best fits your needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seamless Integrations:&lt;/strong&gt;&lt;br&gt;
It connects easily with tools like Slack, WhatsApp, Zendesk, and Jira. Automate conversations, manage support tickets, and maintain a smooth workflow without switching platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart Handoff &amp;amp; Feedback:&lt;/strong&gt;&lt;br&gt;
ChatterMate isn’t just an AI chatbot—it’s an AI-powered agent. It automatically transfers chats to human agents when necessary and even collects feedback to improve its responses over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No-Code Customization:&lt;/strong&gt;&lt;br&gt;
Designed for both non-coders and developers, you can set up and customize the chatbot with a few clicks, or dive deeper into the code if you wish. There’s no pressure to subscribe to expensive services—just the freedom to build exactly what you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Journey to ChatterMate&lt;/strong&gt;&lt;br&gt;
I started my career coding on mainframes, writing COBOL and Rexx, and later transitioned to full-stack development. Throughout my journey, I’ve always been driven by a desire to simplify and perfect the tools I use. I wanted software that wasn’t just functional but also intuitive, affordable, and under my control.&lt;/p&gt;

&lt;p&gt;When I looked for a good AI-powered chatbot, I found that most available options were either massive, expensive sales traps or simply didn’t embrace AI as the core driver of innovation. I thought, “Why not build something that does it right?” That’s when I started experimenting with AI agent chat widgets. Working with Claude 3.5 and tools like Cursor reignited the thrill of coding for me. It was like rediscovering the magic of my early days—except now, AI is the creative force.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building with AI: Tips &amp;amp; Lessons&lt;/strong&gt;&lt;br&gt;
Here are some tips that helped me along the way, and might inspire you if you’re looking to explore AI-driven development:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Find a Project You Can Improve:&lt;/strong&gt;&lt;br&gt;
Look for software that frustrates you—something that you know could be done better. This will fuel your motivation and ensure your project makes a real impact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan for Drawbacks:&lt;/strong&gt;&lt;br&gt;
Identify the limitations of current solutions. Then, reimagine how you’d rebuild them with AI as the first principle. Transform obstacles into opportunities for innovation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get Design Inspiration:&lt;/strong&gt;&lt;br&gt;
Tools like Cursor and Claude 3.5 don’t just help you code—they inspire you. Use them to experiment with UI designs and functionality, and watch your ideas come to life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask AI to Code Step by Step:&lt;/strong&gt;&lt;br&gt;
Instead of issuing one long command, break your tasks into smaller steps. This way, the AI won’t get overwhelmed, and you’ll have more control over the output. Always review and refine—never blindly accept AI-generated code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embrace the Addiction:&lt;/strong&gt;&lt;br&gt;
Once you experience the immediate gratification of rapid iterations and quick feedback, you might just get hooked. The creative freedom AI offers is addictive—in a good way. Enjoy the process, but balance it with careful planning and testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Looking Forward&lt;/strong&gt;&lt;br&gt;
ChatterMate isn’t just another chatbot framework—it’s a testament to the power of AI in transforming how we build and interact with software. It’s built for a future where you have the freedom to innovate without being chained to expensive, proprietary solutions.&lt;/p&gt;

&lt;p&gt;If you’re excited about a future where AI-driven tools empower you to build better, more efficient software, I invite you to check out ChatterMate. Explore the code, contribute to the project, and join the conversation. Let’s build something amazing together!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore ChatterMate:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://dev.tourl"&gt;chattermate.chat&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://dev.tourl"&gt;github.com/chattermate/chattermate.chat&lt;/a&gt;&lt;br&gt;
Happy coding, and welcome to the AI revolution!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>developer</category>
      <category>python</category>
    </item>
    <item>
      <title>AI Is Additive !!</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Mon, 17 Mar 2025 09:52:45 +0000</pubDate>
      <link>https://dev.to/chattermate/ai-is-additive--400a</link>
      <guid>https://dev.to/chattermate/ai-is-additive--400a</guid>
      <description>&lt;p&gt;For over 17 years, I’ve witnessed the evolution of technology firsthand — from the days of coding in COBOL and Rexx on mainframes to becoming a full-stack developer in today’s dynamic landscape. Despite the incredible advancements, I often found myself longing for software that was both easy to use and sensibly priced. When I set out to find a good AI-powered chatbot, I was disappointed to discover that most available solutions were either massive, expensive sales traps like Sierra.ai or Observe.ai, or simply didn’t leverage AI to its fullest potential.&lt;/p&gt;

&lt;p&gt;My breakthrough came when I started experimenting with a few test AI agent chat widgets. Working with Claude 3.5 and Cursor felt nothing short of magical. Claude 3.5 — oh it’s additive — it almost seems to understand your thoughts. Sure, it makes mistakes, but coupled with nearly two decades of experience and a passion for innovation, it reignited the thrill I once felt playing with pointers and records on a mainframe.&lt;/p&gt;

&lt;p&gt;Coding has transformed into an art where imagination is seamlessly translated into code with the help of AI. Those small wins and smiles, which once came after grueling weeks debugging broken Java or mainframe code, are now instantaneous. In just a few weeks, I vibe-coded an extensive chat framework that I can hardly believe I built. This isn’t just another project — it’s a testament to how AI can be a catalyst for creativity and innovation.&lt;/p&gt;

&lt;p&gt;For many, AI may seem like a harbinger of doom. But for some of us, it’s become a new form of addiction — an addiction to the freedom and endless possibilities it brings. As I look at the monstrous SaaS offerings flooding the market, I’m convinced that AI truly empowers innovation. It’s additive, it’s liberating, and it’s redefining what it means to build software in our time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tips for AI Addictive Coding&lt;/strong&gt;&lt;br&gt;
Over the years, I’ve honed a few tips to help you embrace the power of AI and even get a little “addicted” to the creative process:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Find a Project You Can Improve&lt;/strong&gt;&lt;br&gt;
Look for a piece of software or a process that you know you could do better. Identify its shortcomings and imagine how AI can transform it. This will not only motivate you but also ensure that your project has a tangible impact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Plan for Drawbacks and Rewrite with AI in Mind&lt;/strong&gt;&lt;br&gt;
Every project has its limitations. Before diving in, plan for potential drawbacks — what’s not working and why? Then, consider how you would rebuild it with AI as the foundation. This mindset shift allows you to see obstacles as opportunities for reinvention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Get Design Inspiration&lt;/strong&gt;&lt;br&gt;
Tools like Cursor and Claude 3.5 are your new best friends. They not only help you code faster but also inspire you with their intuitive understanding of what could be. Use them as a reference point to explore design ideas and create user interfaces that are both modern and functional. (Imagine the seamless integration of a dynamic UI, where AI and design coalesce to enhance the user experience.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Ask AI to Code Step by Step&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When working with AI, break down your tasks into smaller, manageable steps instead of issuing one long, complex command. This approach prevents the AI from becoming overwhelmed and making mistakes. Always review every change thoroughly — don’t blindly accept the code generated by AI. Remember, AI is a tool that follows your instructions, and we’re still the ones in charge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Get Ready to Get Addicted&lt;/strong&gt;&lt;br&gt;
Once you start experiencing the immediate gratification of AI-driven coding — where your ideas are rapidly transformed into working code — you might find yourself hooked. The thrill of quick iterations, instant feedback, and the creative freedom to explore new solutions can be irresistible. Embrace it, but remember to balance it with thoughtful planning and testing.&lt;/p&gt;

&lt;p&gt;AI isn’t just a tool; it’s a new way of thinking and building. It’s additive, it’s liberating, and it’s here to stay. So, if you’re ready to experience a revolution in coding — where every line of code feels like a work of art — jump in and let the addiction begin!&lt;/p&gt;

&lt;p&gt;Check out the repo which has born out of my addiction: &lt;a href="https://dev.tourl"&gt;github.com/chattermate/chattermate.chat&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>ai</category>
      <category>developers</category>
    </item>
    <item>
      <title>I Built an Open-Source AI Chatbot That You Can Fully Own – No Vendor Lock-In! 🚀</title>
      <dc:creator>Runix</dc:creator>
      <pubDate>Mon, 17 Mar 2025 09:43:03 +0000</pubDate>
      <link>https://dev.to/chattermate/i-built-an-open-source-ai-chatbot-that-you-can-fully-own-no-vendor-lock-in-1efg</link>
      <guid>https://dev.to/chattermate/i-built-an-open-source-ai-chatbot-that-you-can-fully-own-no-vendor-lock-in-1efg</guid>
      <description>&lt;p&gt;After working with AI chatbots for years, I kept running into the same problems—most chatbot platforms are either:&lt;br&gt;
❌ Closed-source &amp;amp; overpriced (Intercom, Drift, Zendesk Chat)&lt;br&gt;
❌ Rule-based &amp;amp; outdated (Rasa, BotPress)&lt;br&gt;
❌ Too dependent on external APIs (DialogFlow, GPT-based services with no real control)&lt;/p&gt;

&lt;p&gt;So I spent the last few months building ChatterMate (GitHub Repo), an AI-first, open-source chatbot framework that’s:&lt;/p&gt;

&lt;p&gt;✅ Fully self-hostable – No forced cloud, full control over data&lt;br&gt;
✅ Works with GPT-4, Claude, or your own models&lt;br&gt;
✅ Handles AI-human handoff seamlessly&lt;br&gt;
✅ Integrates with Slack, WhatsApp, Zendesk, Jira, and more&lt;br&gt;
✅ No-code customization – But devs can extend it, too!&lt;/p&gt;

&lt;p&gt;Why Open-Source?&lt;br&gt;
I wanted something that devs, startups, and businesses could use without vendor lock-in, and something customizable for real-world AI automation. Whether it’s for customer support, AI assistants, or workflow automation, this is built to adapt.&lt;/p&gt;

&lt;p&gt;Looking for Feedback &amp;amp; Contributors!&lt;br&gt;
I’d love to hear what you think—&lt;/p&gt;

&lt;p&gt;What’s your biggest frustration with AI chatbots today?&lt;br&gt;
Do you prefer self-hosting over SaaS chat tools?&lt;br&gt;
What features would make an AI chatbot actually useful for you?&lt;br&gt;
If you’re into open-source, AI automation, or chatbot dev, feel free to check it out and share any feedback! 🚀&lt;/p&gt;

&lt;p&gt;👉 GitHub Repo: github.com/chattermate/chattermate.chat&lt;br&gt;
👉 Live Demo &amp;amp; Docs: chattermate.chat&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts!&lt;/p&gt;

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