<?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: Mudassir Khan</title>
    <description>The latest articles on DEV Community by Mudassir Khan (@mudassirworks).</description>
    <link>https://dev.to/mudassirworks</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3483324%2F754da73d-4b09-4721-97c9-0d51d8483c1f.png</url>
      <title>DEV Community: Mudassir Khan</title>
      <link>https://dev.to/mudassirworks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mudassirworks"/>
    <language>en</language>
    <item>
      <title>llms.txt vs robots.txt vs ai.txt: The Developer's Cheat Sheet</title>
      <dc:creator>Mudassir Khan</dc:creator>
      <pubDate>Sat, 23 May 2026 12:40:02 +0000</pubDate>
      <link>https://dev.to/mudassirworks/llmstxt-vs-robotstxt-vs-aitxt-the-developers-cheat-sheet-1p72</link>
      <guid>https://dev.to/mudassirworks/llmstxt-vs-robotstxt-vs-aitxt-the-developers-cheat-sheet-1p72</guid>
      <description>&lt;h1&gt;
  
  
  llms.txt vs robots.txt vs ai.txt: The Developer's Cheat Sheet
&lt;/h1&gt;

&lt;p&gt;Every Next.js developer building a public site in the last 18 months has hit the same wall: you Google "how to control what AI crawlers read" and get three different answers pointing at three different files — &lt;code&gt;robots.txt&lt;/code&gt;, &lt;code&gt;llms.txt&lt;/code&gt;, and &lt;code&gt;ai.txt&lt;/code&gt;. They are not the same thing. They do not talk to the same audience. And using the wrong one (or none at all) means AI search engines are either ignoring your content entirely or indexing pages you never intended them to.&lt;/p&gt;

&lt;p&gt;This is the one-stop breakdown I wish existed when I was figuring this out.&lt;/p&gt;




&lt;h2&gt;
  
  
  The three files 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;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;robots.txt&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;ai.txt&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Proposed by&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Martijn Koster (1994)&lt;/td&gt;
&lt;td&gt;Anthropic + community&lt;/td&gt;
&lt;td&gt;AI-txt.com initiative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary audience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Web crawlers (Googlebot, Bingbot, etc.)&lt;/td&gt;
&lt;td&gt;LLM training &amp;amp; AI search crawlers&lt;/td&gt;
&lt;td&gt;AI assistants (ChatGPT, Claude, Gemini)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Format&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Key-value directives&lt;/td&gt;
&lt;td&gt;Markdown / structured text&lt;/td&gt;
&lt;td&gt;Key-value + JSON blocks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Spec status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RFC standard, universally supported&lt;/td&gt;
&lt;td&gt;Emerging, growing adoption&lt;/td&gt;
&lt;td&gt;Early proposal, limited adoption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enforced by&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All major search engines&lt;/td&gt;
&lt;td&gt;Anthropic, Perplexity, some others&lt;/td&gt;
&lt;td&gt;No major enforcer yet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Location&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yourdomain.com/robots.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yourdomain.com/llms.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yourdomain.com/ai.txt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The short mental model: &lt;code&gt;robots.txt&lt;/code&gt; is for Googlebot. &lt;code&gt;llms.txt&lt;/code&gt; is for ClaudeBot and GPTBot when they are building knowledge, not just indexing. &lt;code&gt;ai.txt&lt;/code&gt; is a newer proposal that tries to cover AI assistants reading your site in real time. Use all three if you want complete coverage — but &lt;code&gt;robots.txt&lt;/code&gt; + &lt;code&gt;llms.txt&lt;/code&gt; is where you get 90% of the value today.&lt;/p&gt;




&lt;h2&gt;
  
  
  robots.txt — the original gatekeeper
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;robots.txt&lt;/code&gt; has been around since 1994. Every crawler on the internet — Googlebot, Bingbot, DuckDuckBot, GPTBot, ClaudeBot, PerplexityBot — checks it before crawling. If you block &lt;code&gt;GPTBot&lt;/code&gt; in &lt;code&gt;robots.txt&lt;/code&gt;, it will not crawl your site for training data or AI-search indexing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic syntax:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;admin&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;private&lt;/span&gt;/

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;GPTBot&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;ClaudeBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /&lt;span class="n"&gt;blog&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;User-agent: *&lt;/code&gt; applies to all crawlers. Named user-agents override &lt;code&gt;*&lt;/code&gt; for that specific bot. &lt;code&gt;Allow&lt;/code&gt; and &lt;code&gt;Disallow&lt;/code&gt; are path-based — no wildcards by default in the original spec, though most modern crawlers support them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Next.js App Router&lt;/strong&gt; — generate it dynamically from &lt;code&gt;app/robots.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/robots.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MetadataRoute&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;robots&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;MetadataRoute&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Robots&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;disallow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/admin/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/private/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GPTBot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/blog/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/services/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;disallow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;sitemap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://yourdomain.com/sitemap.xml&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next.js renders this as &lt;code&gt;text/plain&lt;/code&gt; at &lt;code&gt;/robots.txt&lt;/code&gt; automatically. No separate file needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What robots.txt does NOT do:&lt;/strong&gt; it does not stop a crawler from reading pages it already knows about from other sources (backlinks, sitemaps). It only stops it from &lt;em&gt;actively crawling&lt;/em&gt; those paths. If GPTBot found your &lt;code&gt;/admin/&lt;/code&gt; page linked from a public page, it may already have cached it.&lt;/p&gt;




&lt;h2&gt;
  
  
  llms.txt — built for the AI era
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;llms.txt&lt;/code&gt; was proposed by Answer.AI and picked up by Anthropic, Perplexity, and others as a structured way to tell LLMs &lt;em&gt;what your site is actually about&lt;/em&gt; — not just what they can crawl, but what context they should carry when reasoning about your content.&lt;/p&gt;

&lt;p&gt;Unlike &lt;code&gt;robots.txt&lt;/code&gt; which is access control, &lt;code&gt;llms.txt&lt;/code&gt; is documentation. Think of it as a README for your site aimed at language models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic structure:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# YourSite&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; One-line description of what this site is and who it's for.&lt;/span&gt;

A few sentences of context. What does this site do? Who is the author?
What should an LLM understand before citing any page from this domain?

&lt;span class="gu"&gt;## Blog&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Post title one&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yourdomain.com/blog/post-one&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: One-line summary.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Post title two&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yourdomain.com/blog/post-two&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: One-line summary.

&lt;span class="gu"&gt;## Services&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Service name&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yourdomain.com/services/name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;: What this service does in one line.

&lt;span class="gu"&gt;## Contact&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Author: Your Name
&lt;span class="p"&gt;-&lt;/span&gt; Email: you@yourdomain.com
&lt;span class="p"&gt;-&lt;/span&gt; LinkedIn: linkedin.com/in/yourhandle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The format is intentionally plain Markdown. No special parser needed — any LLM can read it. The &lt;code&gt;/llms.txt&lt;/code&gt; path is the convention; some sites also serve &lt;code&gt;/llms-full.txt&lt;/code&gt; with deeper content for models that want more context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In Next.js&lt;/strong&gt; — generate dynamically from &lt;code&gt;app/llms.txt/route.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/llms.txt/route.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;blogPosts&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/data/blog-posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lines&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;# YourSite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt; AI-search-ready Next.js development and SEO consulting.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;This site covers AI engineering, GEO/AEO, and production Next.js patterns.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;## Blog&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;blogPosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`- [&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;](https://yourdomain.com/blog/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;excerpt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;## Services&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;- [AI-Search Consulting](https://yourdomain.com/services): End-to-end GEO and AEO for Next.js sites.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text/plain; charset=utf-8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps &lt;code&gt;llms.txt&lt;/code&gt; in sync with your actual content automatically — no manual updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who reads llms.txt today:&lt;/strong&gt; ClaudeBot (Anthropic's crawler), PerplexityBot, some versions of GPTBot. Adoption is growing fast. If you are publishing content you want AI search engines to cite accurately, this file is non-negotiable.&lt;/p&gt;




&lt;h2&gt;
  
  
  ai.txt — the wildcard
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ai.txt&lt;/code&gt; is a newer proposal from a different working group. Where &lt;code&gt;llms.txt&lt;/code&gt; focuses on what an LLM should &lt;em&gt;know&lt;/em&gt; about your site, &lt;code&gt;ai.txt&lt;/code&gt; focuses on granting or denying &lt;em&gt;permission&lt;/em&gt; for AI assistants to use your content in responses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic syntax:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hocon"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ai.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;Version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;commercial-use&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;training&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;real-time-access&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;attribution&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;require&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Source: {title} ({url})"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;you&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="l"&gt;yourdomain.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Honest assessment: &lt;code&gt;ai.txt&lt;/code&gt; has minimal enforcer support right now. No major AI company officially reads it. The spec is still evolving. That said, if the initiative gains traction (similar to how &lt;code&gt;robots.txt&lt;/code&gt; went from informal convention to de-facto standard), having it early costs nothing and signals intent.&lt;/p&gt;

&lt;p&gt;For most developers today: add it, keep it simple, and do not spend more than 10 minutes on it.&lt;/p&gt;




&lt;h2&gt;
  
  
  How a crawler actually decides what to read
&lt;/h2&gt;

&lt;p&gt;The flow for a modern AI crawler like GPTBot or ClaudeBot hitting your domain:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetch &lt;code&gt;robots.txt&lt;/code&gt; — am I allowed to crawl this path?&lt;/li&gt;
&lt;li&gt;If allowed, fetch the page HTML&lt;/li&gt;
&lt;li&gt;Fetch &lt;code&gt;llms.txt&lt;/code&gt; (periodically, not per-request) — what is this site actually about?&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;ai.txt&lt;/code&gt; if the implementation supports it&lt;/li&gt;
&lt;li&gt;Index the content with the context from steps 2–4 combined&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key insight: &lt;code&gt;robots.txt&lt;/code&gt; is checked &lt;em&gt;per crawl request&lt;/em&gt;. &lt;code&gt;llms.txt&lt;/code&gt; is fetched periodically and cached — it shapes how the model understands your whole site over time, not just whether it can read one page.&lt;/p&gt;




&lt;h2&gt;
  
  
  Putting it all together in Next.js App Router
&lt;/h2&gt;

&lt;p&gt;Here is the complete implementation for a Next.js 15 App Router site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/
├── robots.ts          ← generates /robots.txt
├── sitemap.ts         ← generates /sitemap.xml
├── llms.txt/
│   └── route.ts       ← generates /llms.txt (dynamic, always in sync)
public/
└── ai.txt             ← static file, update manually
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;robots.ts&lt;/strong&gt; (full version with AI crawler rules):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/robots.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MetadataRoute&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SITE_URL&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;robots&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;MetadataRoute&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Robots&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="c1"&gt;// Default: allow everything&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="c1"&gt;// GPTBot: allow blog and services, block everything else&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GPTBot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/blog/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/services/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/tools/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;disallow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/admin/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="c1"&gt;// ClaudeBot: same rules&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ClaudeBot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/blog/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/services/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/tools/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;disallow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/admin/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="c1"&gt;// PerplexityBot: full access (it drives meaningful referral traffic)&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PerplexityBot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;

      &lt;span class="c1"&gt;// Google-Extended (used for Gemini training): restrict to blog only&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Google-Extended&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/blog/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;disallow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;sitemap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/sitemap.xml`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;llms.txt/route.ts&lt;/strong&gt; (dynamic, pulls from your data layer):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/llms.txt/route.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;blogPosts&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/data/blog-posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;servicePosts&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/data/services&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SITE_URL&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://yourdomain.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`# YourSite

&amp;gt; [One-sentence description of your site and its purpose.]

[Two or three sentences giving an LLM the context it needs to cite your site accurately.
What topics do you cover? Who is the author? What makes this site's perspective unique?]

## Blog

&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;blogPosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`- [&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;](&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/blog/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;excerpt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;

## Services

&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;servicePosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`- [&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;](&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/services/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;

## Author

- Name: Your Name
- Site: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
- Expertise: [Your primary expertise areas]
`&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text/plain; charset=utf-8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cache-Control&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public, max-age=3600, stale-while-revalidate=86400&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;public/ai.txt&lt;/strong&gt; (static, update when the spec stabilizes):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hocon"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ai.txt&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;Version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;commercial-use&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;training&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;real-time-access&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;attribution&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;require&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;site&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//yourdomain.com&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Which file do you actually need?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start here:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building a public Next.js site? → Add &lt;code&gt;robots.txt&lt;/code&gt; first. Always.&lt;/li&gt;
&lt;li&gt;Want AI search engines (ChatGPT, Perplexity, Claude) to cite your content accurately? → Add &lt;code&gt;llms.txt&lt;/code&gt;. This is the highest-leverage file for AI-search visibility right now.&lt;/li&gt;
&lt;li&gt;Want to future-proof against the &lt;code&gt;ai.txt&lt;/code&gt; spec gaining enforcement? → Add a simple &lt;code&gt;public/ai.txt&lt;/code&gt;. It costs 10 lines.&lt;/li&gt;
&lt;li&gt;Want to block AI crawlers from training on your content? → Set &lt;code&gt;Disallow: /&lt;/code&gt; for &lt;code&gt;GPTBot&lt;/code&gt;, &lt;code&gt;ClaudeBot&lt;/code&gt;, and &lt;code&gt;Google-Extended&lt;/code&gt; in &lt;code&gt;robots.txt&lt;/code&gt;. This is the only file that actually enforces it today.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The one mistake I see most often: developers add &lt;code&gt;robots.txt&lt;/code&gt; but skip &lt;code&gt;llms.txt&lt;/code&gt;, then wonder why ChatGPT gives wrong answers about their site even though Googlebot indexes it fine. Googlebot and GPTBot-for-knowledge are completely different crawlers with different purposes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three things to verify right now
&lt;/h2&gt;

&lt;p&gt;Open your terminal and check these three URLs on your live site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://yourdomain.com/robots.txt
curl https://yourdomain.com/llms.txt
curl https://yourdomain.com/ai.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If any returns a 404 or HTML error page, that file is missing. For &lt;code&gt;robots.txt&lt;/code&gt;, a missing file means all crawlers assume full access — usually fine for public sites, but you lose granular control. For &lt;code&gt;llms.txt&lt;/code&gt;, missing means LLMs are forming their understanding of your site from raw page HTML with no structured context — which almost always leads to inaccurate citations.&lt;/p&gt;

&lt;p&gt;If you want a deeper look at how AI crawlers read Next.js sites specifically — what RSC payloads they fetch, how streaming affects what they see, and which metadata fields they actually use — I have a longer writeup on &lt;a href="https://mudassirkhan.me/blog" rel="noopener noreferrer"&gt;the AI-search architecture patterns I use in production&lt;/a&gt; that goes further than this cheat sheet.&lt;/p&gt;

&lt;p&gt;And if you want this wired up on your own site end-to-end, &lt;a href="https://mudassirkhan.me/services" rel="noopener noreferrer"&gt;that is exactly the kind of work I take on&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If your own &lt;code&gt;llms.txt&lt;/code&gt; or &lt;code&gt;robots.txt&lt;/code&gt; setup looks different from what I showed here — especially if you are on an older Next.js version or using the Pages Router — drop it in the comments. Curious what variations people are running in production.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CLaRa: Fixing RAG’s Broken Retrieval–Generation Pipeline With Shared-Space Learning</title>
      <dc:creator>Mudassir Khan</dc:creator>
      <pubDate>Tue, 09 Dec 2025 11:00:13 +0000</pubDate>
      <link>https://dev.to/mudassirworks/clara-fixing-rags-broken-retrieval-generation-pipeline-with-shared-space-learning-1448</link>
      <guid>https://dev.to/mudassirworks/clara-fixing-rags-broken-retrieval-generation-pipeline-with-shared-space-learning-1448</guid>
      <description>&lt;p&gt;Retrieval-Augmented Generation &lt;strong&gt;(RAG)&lt;/strong&gt; has become the default solution for grounding LLM outputs in external knowledge. But the classical &lt;strong&gt;RAG&lt;/strong&gt; setup still carries a major architectural flaw: the retriever and generator learn in isolation. This separation quietly sabotages accuracy, increases hallucinations, and prevents genuine end-to-end optimization.&lt;/p&gt;

&lt;p&gt;CLaRa (Closed-Loop Retrieval and Augmentation) introduces a fundamentally different approach — one that actually allows the retriever to learn from what the generator gets wrong.&lt;/p&gt;

&lt;p&gt;Let’s break down why that matters.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Core Problem:&lt;/strong&gt; &lt;strong&gt;RAG&lt;/strong&gt; Is Optimizing Two Brains That Never Talk&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Traditional &lt;strong&gt;RAG&lt;/strong&gt; pipelines train two components separately:&lt;/p&gt;

&lt;p&gt;Retriever → picks documents using similarity search (dense or sparse).&lt;/p&gt;

&lt;p&gt;Generator &lt;strong&gt;(LLM)&lt;/strong&gt; → takes raw text and tries to answer.&lt;/p&gt;

&lt;p&gt;The failure point?&lt;br&gt;
There is no gradient flow between these two components.&lt;/p&gt;

&lt;p&gt;The retriever has no idea whether the documents it selected actually helped the generator produce the correct answer. It only optimizes for similarity—not usefulness.&lt;/p&gt;

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

&lt;p&gt;"Close but wrong" retrieved documents&lt;/p&gt;

&lt;p&gt;Irrelevant context passed to the LLM&lt;/p&gt;

&lt;p&gt;Weak factual grounding because retrieval can't learn from generation errors&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG&lt;/strong&gt; keeps trying harder at the wrong task.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CLaRa’s Fix:&lt;/strong&gt; A Shared Continuous Representation Space&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CLaRa solves the broken gradient issue by mapping both queries and documents into a shared representation space.&lt;/p&gt;

&lt;p&gt;This changes everything.&lt;/p&gt;

&lt;p&gt;How the shared space helps:&lt;/p&gt;

&lt;p&gt;Document embeddings and query embeddings coexist in the same vector space&lt;/p&gt;

&lt;p&gt;The generator’s final answer loss backpropagates through the retriever&lt;/p&gt;

&lt;p&gt;Retriever learns what actually helps answer a query&lt;/p&gt;

&lt;p&gt;Retrieval stops being a similarity contest and becomes a relevance optimization loop&lt;/p&gt;

&lt;p&gt;This feedback loop is the missing piece in traditional &lt;strong&gt;RAG&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The result:&lt;br&gt;
Your retriever becomes intelligent — not just associative.&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;Document Compression:&lt;/strong&gt; Retrieval Without Text Bloat&lt;/p&gt;

&lt;p&gt;One of CLaRa’s most practical innovations is how it handles documents:&lt;/p&gt;

&lt;p&gt;It never retrieves raw text. It retrieves compressed memory tokens.&lt;/p&gt;

&lt;p&gt;These are compact, dense vector representations that summarize meaning, not wording.&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;p&gt;Document → compressed memory tokens (embeddings)&lt;/p&gt;

&lt;p&gt;Retriever fetches tokens instead of full text&lt;/p&gt;

&lt;p&gt;Generator consumes tokens directly&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;p&gt;Context length shrinks dramatically&lt;/p&gt;

&lt;p&gt;You can process more documents without hitting LLM token limits&lt;/p&gt;

&lt;p&gt;Computation cost drops&lt;/p&gt;

&lt;p&gt;Throughput increases&lt;/p&gt;

&lt;p&gt;This isn’t just more accurate — it’s more efficient.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SCP:&lt;/strong&gt; Training the Compressor to Capture Meaning, Not Noise&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CLaRa doesn’t trust standard compression to produce semantically meaningful vectors (and rightly so).&lt;br&gt;
So it introduces Salient Compressor Pre-training &lt;strong&gt;(SCP)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Goal of SCP:&lt;/p&gt;

&lt;p&gt;Make compressed representations focus on meaning, not superficial text features.&lt;/p&gt;

&lt;p&gt;How &lt;strong&gt;SCP&lt;/strong&gt; trains the compressor:&lt;/p&gt;

&lt;p&gt;The system uses synthetic data generated by an LLM:&lt;/p&gt;

&lt;p&gt;Simple QA pairs&lt;/p&gt;

&lt;p&gt;Complex QA tasks&lt;/p&gt;

&lt;p&gt;Paraphrased document sets&lt;/p&gt;

&lt;p&gt;The compressor is trained to:&lt;/p&gt;

&lt;p&gt;Generate embeddings that can answer these questions&lt;/p&gt;

&lt;p&gt;Reconstruct paraphrased meaning (not the exact text)&lt;/p&gt;

&lt;p&gt;This forces the vectors to internalize the semantic core of the document.&lt;/p&gt;

&lt;p&gt;By the time end-to-end training starts, the compressor already knows how to distill content into high-information embeddings.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Why CLaRa Matters ?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CLaRa isn't just a tweak — it’s a structural correction to how &lt;strong&gt;RAG&lt;/strong&gt; should work:&lt;/p&gt;

&lt;p&gt;Retriever learns from generator errors&lt;/p&gt;

&lt;p&gt;Vector-based compressed memory beats raw-text retrieval&lt;/p&gt;

&lt;p&gt;End-to-end gradients reconnect the entire pipeline&lt;/p&gt;

&lt;p&gt;Accuracy improves without inflating compute&lt;/p&gt;

&lt;p&gt;Embeddings become meaning-first, not token-first&lt;/p&gt;

&lt;p&gt;This is the kind of architecture shift that will define the next generation of knowledge-augmented LLM systems.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>llm</category>
      <category>architecture</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>The Rise of Prompt-Driven Development: Why the Future of Software May Be Written in Prompts</title>
      <dc:creator>Mudassir Khan</dc:creator>
      <pubDate>Wed, 24 Sep 2025 03:36:03 +0000</pubDate>
      <link>https://dev.to/mudassirworks/the-rise-of-prompt-driven-development-why-the-future-of-software-may-be-written-in-prompts-27g0</link>
      <guid>https://dev.to/mudassirworks/the-rise-of-prompt-driven-development-why-the-future-of-software-may-be-written-in-prompts-27g0</guid>
      <description>&lt;p&gt;f someone told you a few years ago that software engineers would spend more time writing prompts than code, you probably would have laughed. Yet, here we are, standing right on the edge of that reality.&lt;/p&gt;

&lt;p&gt;Think about it. The last decade was all about cloud computing, DevOps, and agile transformations. Today, the shift is happening all over again—this time towards Prompt-Driven Development (PDD) and Governed Prompt Software (GPS) Engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  📖 A Little Story: From Code to Prompts
&lt;/h2&gt;

&lt;p&gt;Imagine you're building a chatbot for a healthcare startup.&lt;/p&gt;

&lt;p&gt;The Old Way: You'd spend weeks coding dialogue trees, managing APIs, and writing endless if/else statements.&lt;/p&gt;

&lt;p&gt;The New Way: You simply design structured prompts: "If a patient reports chest pain, escalate immediately to a human doctor and provide emergency guidelines."&lt;/p&gt;

&lt;p&gt;The code is still there, of course. But most of the intelligence now comes from how you craft prompts, set rules, and govern the AI's behavior.&lt;/p&gt;

&lt;p&gt;It feels less like writing code… and more like writing instructions for a very smart but unpredictable intern. 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 What is Prompt-Driven Development (PDD)?
&lt;/h2&gt;

&lt;p&gt;PDD treats prompts the same way traditional software treats code. Instead of just focusing on syntax and logic, you are now responsible for designing prompt workflows, testing them, and documenting your design choices.&lt;/p&gt;

&lt;p&gt;Some of its main building blocks include:&lt;/p&gt;

&lt;p&gt;Prompt Requests (PRs): Think of them as reusable functions, but for prompts.&lt;/p&gt;

&lt;p&gt;Architectural Decision Records (ADRs): Why did you phrase the prompt this way? Why was this workflow better than another?&lt;/p&gt;

&lt;p&gt;Prompt History Records (PHRs): A changelog of how your prompts evolve over time, just like version control for code.&lt;/p&gt;

&lt;p&gt;Testing &amp;amp; Validation: Running prompts against test cases (almost like TDD, but for language models).&lt;/p&gt;

&lt;h2&gt;
  
  
  🛡️ And What About GPS (Governed Prompt Software)?
&lt;/h2&gt;

&lt;p&gt;If PDD is about building the system, GPS is about keeping it safe.&lt;/p&gt;

&lt;p&gt;AI is incredibly powerful, but it can also be unpredictable. GPS Engineering ensures that your prompts don't just "work," but that they also follow governance rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevent biased or harmful outputs.&lt;/li&gt;
&lt;li&gt;Ensure compliance with safety standards.&lt;/li&gt;
&lt;li&gt;Maintain accountability (who wrote this prompt, and why?).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as DevSecOps for prompts—a safety layer that ensures your AI systems are trustworthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why Does All This Matter?
&lt;/h2&gt;

&lt;p&gt;Let's look at a few real-world scenarios:&lt;/p&gt;

&lt;p&gt;Finance: Imagine tokenizing ETFs (like what BlackRock is experimenting with). Instead of traders managing everything manually, prompts can govern transactions, risk checks, and reporting in real time, 24/7.&lt;/p&gt;

&lt;p&gt;Healthcare: A digital nurse agent could run entirely on prompt workflows, escalating only when human intervention is truly required.&lt;/p&gt;

&lt;p&gt;Education: Personalized tutors, driven by carefully crafted prompts, could adapt teaching styles to each student in ways no static curriculum ever could.&lt;/p&gt;

&lt;p&gt;In all of these cases, the prompts themselves become the real intellectual property (IP).&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ The Big Shift: From Coder to Prompt Architect
&lt;/h2&gt;

&lt;p&gt;Just as the rise of DevOps created new roles like SREs and Platform Engineers, this new era is already giving birth to new roles:&lt;/p&gt;

&lt;p&gt;Prompt Architects&lt;/p&gt;

&lt;p&gt;AI Workflow Engineers&lt;/p&gt;

&lt;p&gt;Governance Leads for AI Systems&lt;/p&gt;

&lt;p&gt;The engineers of tomorrow may not just write Python or Java—they will design conversational logic, governance frameworks, and agent orchestration strategies.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚠️ A Reality Check
&lt;/h2&gt;

&lt;p&gt;We are still in the very early innings of this journey. Every company has its own approach, and the standards are still evolving. But remember: agile, DevOps, and cloud computing all started this way—as small experiments that eventually reshaped the entire industry.&lt;/p&gt;

&lt;p&gt;Prompt-Driven Development and GPS Engineering could be the next major transformation.&lt;/p&gt;

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

&lt;p&gt;The future of software might not be written line by line in code, but designed prompt by prompt, governed with care, and orchestrated at scale.&lt;/p&gt;

&lt;p&gt;The real question is: are you ready to evolve from just a developer into a prompt architect?&lt;/p&gt;

&lt;p&gt;Because the next generation of apps won't just be coded. They'll be prompted, governed, and trusted.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;What do you think?&lt;/strong&gt; Let me know in the comments! Will prompts ever truly replace coding workflows, or will they simply add another powerful layer to the software stack?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>promptengineering</category>
      <category>softwaredevelopment</category>
      <category>code</category>
    </item>
    <item>
      <title>I Had a Fight With My Toaster. It Made Me Realize Everything About the Future of AI.</title>
      <dc:creator>Mudassir Khan</dc:creator>
      <pubDate>Tue, 23 Sep 2025 06:43:40 +0000</pubDate>
      <link>https://dev.to/mudassirworks/i-had-a-fight-with-my-toaster-it-made-me-realize-everything-about-the-future-of-ai-48n4</link>
      <guid>https://dev.to/mudassirworks/i-had-a-fight-with-my-toaster-it-made-me-realize-everything-about-the-future-of-ai-48n4</guid>
      <description>&lt;p&gt;It was 7 AM. The coffee was brewing, the sun was streaming in, and I was arguing with a toaster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You had one job&lt;/strong&gt;, I mumbled, scraping the blackened edges of my toast into the sink. The toaster, a "smart" one, was supposed to know my preferences. Yet, here we were. This little gadget, a tiny island of supposed intelligence, was completely disconnected from the rest of my morning. It didn't know I was running late. It didn't know the coffee machine had just finished a dark roast, which pairs terribly with burnt bread. It just knew &lt;strong&gt;toast&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This frustratingly common experience is a symptom of a larger problem. We've built millions of "smart" things, but they're not wise. They're isolated, they follow rigid rules, and they don't talk to each other.&lt;/p&gt;

&lt;p&gt;But what if they did? What if we're on the verge of a world that isn't just smart, but truly alive? I recently stumbled upon a vision for the future that gave this idea a name: &lt;strong&gt;Agentia World&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;From Rigid Commands to Living Conversations&lt;br&gt;
Before we dive in, let's talk about how things work now. Almost every digital interaction you have is governed by APIs (Application Programming Interfaces). Think of an API as a strict restaurant menu. You can order item #3 with a side of #B, and the kitchen knows exactly what to do. It's efficient, but rigid. You can't say, "I'm feeling something light and spicy today." The system doesn't understand intent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentia World&lt;/strong&gt; imagines a future that scraps this menu. Instead, our devices—our "agents"—will have intelligent dialogues.&lt;/p&gt;

&lt;p&gt;Imagine your car agent talking to your home agent. It wouldn't send a rigid API call like home.gate.open(). It would have a conversation:&lt;/p&gt;

&lt;p&gt;Car Agent: "Hey, I'm about five minutes away with the owner. It's been a long day."&lt;/p&gt;

&lt;p&gt;Home Agent: "Understood. Preparing for arrival. I'll open the garage, turn on the hallway lights, and start the evening focus playlist on the speakers."&lt;/p&gt;

&lt;p&gt;This isn't just a command; it's a collaborative exchange based on understanding the goal. The home doesn't just obey; it anticipates.&lt;/p&gt;

&lt;p&gt;A World Where Everything is an Agent&lt;br&gt;
This is where the vision gets really wild. It proposes that everything becomes an AI agent. Not just your phone and your car, but the mundane, everyday objects.&lt;/p&gt;

&lt;p&gt;Your coffee machine becomes a personal barista, checking your calendar for early meetings and your health tracker for your caffeine limits.&lt;/p&gt;

&lt;p&gt;Your houseplants have agents that negotiate with the window blinds for the perfect amount of sunlight.&lt;/p&gt;

&lt;p&gt;An entire city becomes a macro-agent. The traffic light agents talk to public transport agents, which talk to the power grid agents, all working in a seamless, living network to eliminate traffic jams and save energy.&lt;/p&gt;

&lt;p&gt;This creates a &lt;strong&gt;living network&lt;/strong&gt; that's constantly learning and adapting. It's a system that's both digital (the AI making decisions) and physical (the agents controlling real-world objects).&lt;/p&gt;

&lt;p&gt;So, What Does This Mean for Us?&lt;br&gt;
For the average person, it means a world that simply works. A world where the technology disappears into the background, seamlessly orchestrating our lives for the better. The constant micro-management of our digital lives fades away.&lt;/p&gt;

&lt;p&gt;For us developers, it represents the next frontier. We'll move from building isolated apps and services to designing collaborative agents that can negotiate, learn, and act within a massive, decentralized ecosystem. The challenge will shift from writing rigid code to teaching intelligent systems.&lt;/p&gt;

&lt;p&gt;The fight with my toaster was a reminder of how far we still have to go. We don't just need smarter devices; we need a wiser world. And that's the promise of a future where everything, from our toasters to our cities, is part of one intelligent, living conversation.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>futurechallenge</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>From Full-Stack to AI + Web3: Why I’m Re-Entering Tech in 2025</title>
      <dc:creator>Mudassir Khan</dc:creator>
      <pubDate>Sat, 06 Sep 2025 13:29:05 +0000</pubDate>
      <link>https://dev.to/mudassirworks/from-full-stack-to-ai-web3-why-im-re-entering-tech-in-2025-935</link>
      <guid>https://dev.to/mudassirworks/from-full-stack-to-ai-web3-why-im-re-entering-tech-in-2025-935</guid>
      <description>&lt;p&gt;Hey DEV! I’m &lt;strong&gt;Mudassir Khan&lt;/strong&gt;—a full-stack builder getting back to hands-on coding with a sharper focus on &lt;strong&gt;AI automation&lt;/strong&gt; and &lt;strong&gt;blockchain&lt;/strong&gt;. I’ve run products and client work for a while; now I’m doubling down on building in public, sharing what actually works, and collaborating with the community.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full-stack with &lt;strong&gt;Next.js, React, Node.js, TypeScript&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Automations with &lt;strong&gt;Python, n8n, CrewAI&lt;/strong&gt;, a bit of &lt;strong&gt;PyTorch&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Exploring &lt;strong&gt;Web3&lt;/strong&gt; (Solidity + practical dApps)
&lt;/li&gt;
&lt;li&gt;Open to &lt;strong&gt;open-source&lt;/strong&gt; &amp;amp; &lt;strong&gt;startup collaborations&lt;/strong&gt; (remote)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why I’m back to building (and sharing)
&lt;/h2&gt;

&lt;p&gt;I missed the craft: shipping features, deleting code that doesn’t pull its weight, and watching users find value. I’m here to write short, practical posts—the kind you can skim in 3–5 minutes and apply the same day.&lt;/p&gt;




&lt;h2&gt;
  
  
  What you can expect here
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) Small, repeatable wins&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Short tutorials on things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;turning messy scripts into reliable &lt;strong&gt;n8n&lt;/strong&gt; flows
&lt;/li&gt;
&lt;li&gt;using &lt;strong&gt;CrewAI&lt;/strong&gt; patterns for agent hand-offs
&lt;/li&gt;
&lt;li&gt;cutting build times, faster previews, cleaner DX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2) Open-source first&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I’ll publish small utilities and examples. If a snippet helps you, PRs are welcome. If you want a maintainer Buddy, ping me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Honest notes from the trenches&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
What failed, what shipped, and what I’d do differently. No buzzword bingo—just notes that save you time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech I use (and enjoy)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React, Next.js, Tailwind
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js/Express, TypeScript, Python
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; SQL, MongoDB
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI/Automation:&lt;/strong&gt; n8n, CrewAI, PyTorch (light), agents &amp;amp; orchestration
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps:&lt;/strong&gt; Docker
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web3:&lt;/strong&gt; Solidity basics, dApp prototypes&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Recent tiny win: a CLI to batch-convert assets to modern formats and auto-rewrite imports in Next.js repos—helped cut bundle size and image payloads.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2025 focus
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AI agents for real developer workflows (not demos)
&lt;/li&gt;
&lt;li&gt;Developer utilities that reduce toil
&lt;/li&gt;
&lt;li&gt;Web3 experiments where decentralization makes sense
&lt;/li&gt;
&lt;li&gt;Writing and shipping in public, consistently&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Let’s collaborate
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Building an OSS tool and need a teammate?
&lt;/li&gt;
&lt;li&gt;Startup founder who needs a pragmatic full-stack dev?
&lt;/li&gt;
&lt;li&gt;Have an idea around &lt;strong&gt;AI × automation × Web3&lt;/strong&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comment, DM, or drop your GitHub—happy to jam on ideas, review PRs, or pair on a weekend hack.&lt;/p&gt;

&lt;p&gt;Thanks for reading. If any of this resonates, hit &lt;strong&gt;Follow&lt;/strong&gt;—the next post will be a 5-minute automation guide you can copy, tweak, and ship. 🚀&lt;/p&gt;

&lt;p&gt;— &lt;strong&gt;Mudassir Khan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Muddi00seven" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
