<?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: Hugo Robles</title>
    <description>The latest articles on DEV Community by Hugo Robles (@roblesh).</description>
    <link>https://dev.to/roblesh</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%2F3788086%2F4d173d3a-0af4-40f4-ad72-ca7c52cf1864.png</url>
      <title>DEV Community: Hugo Robles</title>
      <link>https://dev.to/roblesh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roblesh"/>
    <language>en</language>
    <item>
      <title>Your API docs are built for humans. Who reads them now?</title>
      <dc:creator>Hugo Robles</dc:creator>
      <pubDate>Tue, 24 Feb 2026 02:03:55 +0000</pubDate>
      <link>https://dev.to/roblesh/i-built-swagent-convert-your-openapi-spec-to-llmstxt-for-ai-ready-apis-4h51</link>
      <guid>https://dev.to/roblesh/i-built-swagent-convert-your-openapi-spec-to-llmstxt-for-ai-ready-apis-4h51</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Our docs are built for humans. Who reads them now?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We're in the &lt;strong&gt;Agent Era&lt;/strong&gt;. AI-first development isn't coming — it's here.&lt;/p&gt;

&lt;p&gt;LLM agents consume your API documentation too. Every time an AI assistant helps a developer integrate your API, it reads your docs. But Swagger UI, Redoc, and traditional OpenAPI docs weren't built for that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost of human-first docs
&lt;/h2&gt;

&lt;p&gt;Traditional API docs are a disaster for AI agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thousands of wasted tokens&lt;/strong&gt; on navigation chrome, sidebars, and UI elements the LLM has to skip&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verbose JSON schemas&lt;/strong&gt; with deeply nested &lt;code&gt;$ref&lt;/code&gt; definitions that explode token counts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicated descriptions&lt;/strong&gt; repeated across endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML noise&lt;/strong&gt; that buries the actual API semantics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your AI-powered integrations are paying the cost — in latency, in token spend, and in accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if you could just say: &lt;em&gt;"Learn my API"&lt;/em&gt;?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Tell your AI agent: "Learn https://api.alloverapps.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the vision. The agent fetches &lt;code&gt;llms.txt&lt;/code&gt; — a compact, token-optimized representation of your entire API — and understands it immediately. No bloat. No parsing overhead. Just clean, structured API knowledge ready for the Agent Era.&lt;/p&gt;

&lt;p&gt;That's what &lt;a href="https://swagent.dev" rel="noopener noreferrer"&gt;swagent&lt;/a&gt; enables.&lt;/p&gt;

&lt;h2&gt;
  
  
  How swagent works
&lt;/h2&gt;

&lt;p&gt;swagent converts your OpenAPI spec into &lt;strong&gt;3 outputs simultaneously&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📄 &lt;strong&gt;llms.txt&lt;/strong&gt; — compact format for LLM consumption (~75% token reduction)&lt;/li&gt;
&lt;li&gt;📝 &lt;strong&gt;Markdown&lt;/strong&gt; — human-readable API reference&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;HTML&lt;/strong&gt; — shareable landing page for your API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 65KB OpenAPI spec becomes ~16KB. That's the difference between an agent that nails your API in one shot vs. one that hallucinates endpoints halfway through.&lt;/p&gt;

&lt;h2&gt;
  
  
  The compact notation
&lt;/h2&gt;

&lt;p&gt;Instead of verbose JSON schemas, swagent uses a notation designed for machines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /pets
  Summary: List all pets
  Params: limit:number, status:available|pending|sold
  Response: [{id*, name*, tag}]

POST /pets
  Summary: Create a pet
  Body: {name*, tag}
  Response: {id*, name*, tag}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;*&lt;/code&gt; = required · &lt;code&gt;:type&lt;/code&gt; for non-strings · &lt;code&gt;|&lt;/code&gt; for enums · &lt;code&gt;[{...}]&lt;/code&gt; for arrays&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;swagent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Fastify&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Fastify&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;fastify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;swagent&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;swagent&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Fastify&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;swagent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="c1"&gt;// Your API now exposes /llms.txt, /docs.md and a landing page&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also works with: &lt;strong&gt;Express, Hono, Elysia, Koa, NestJS, Nitro/Nuxt&lt;/strong&gt; and as a &lt;strong&gt;CLI tool&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built on the llms.txt standard
&lt;/h2&gt;

&lt;p&gt;swagent aligns with the &lt;a href="https://llmstxt.org" rel="noopener noreferrer"&gt;llms.txt standard&lt;/a&gt; — the emerging convention for machine-readable content optimized for AI consumption. The pattern is simple: alongside your human docs, expose a version built for machines.&lt;/p&gt;

&lt;p&gt;The Agent Era is already here. Your API docs should be ready for it.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;🌐 Live playground: &lt;a href="https://swagent.dev" rel="noopener noreferrer"&gt;swagent.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 npm: &lt;a href="https://www.npmjs.com/package/swagent" rel="noopener noreferrer"&gt;npmjs.com/package/swagent&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Are you building AI agents that consume APIs? How are you feeding API specs to your LLMs today?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>openapi</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
