<?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: KR Shanto</title>
    <description>The latest articles on DEV Community by KR Shanto (@shantodotdev).</description>
    <link>https://dev.to/shantodotdev</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%2F732505%2Fff853653-e277-462e-b13a-2bdd53a1613c.png</url>
      <title>DEV Community: KR Shanto</title>
      <link>https://dev.to/shantodotdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shantodotdev"/>
    <language>en</language>
    <item>
      <title>I Built an AI-Native Local Crawler to Audit My Clients' Websites</title>
      <dc:creator>KR Shanto</dc:creator>
      <pubDate>Fri, 18 Sep 2026 04:30:35 +0000</pubDate>
      <link>https://dev.to/shantodotdev/i-built-an-ai-native-local-crawler-to-audit-my-clients-websites-293a</link>
      <guid>https://dev.to/shantodotdev/i-built-an-ai-native-local-crawler-to-audit-my-clients-websites-293a</guid>
      <description>&lt;p&gt;Let's be honest. Our AI coding agents can inspect our code, understand the project structure, and help us change a shared layout. But it cannot automatically see that the website has broken canonicals, orphan pages, redirect chains, or inconsistent metadata across hundreds of URLs.&lt;/p&gt;

&lt;p&gt;An SEO crawler can find those problems, but the results usually live in a separate dashboard. I still have to read the report, find the relevant source code, explain the issue to the agent, apply a fix, and then repeat the crawl.&lt;/p&gt;

&lt;p&gt;For client websites, there is another concern. The site may be running locally, sitting behind a staging URL, or containing information I do not want to send to another cloud service.&lt;/p&gt;

&lt;p&gt;I wanted a tighter loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask an AI agent to audit a website.&lt;/li&gt;
&lt;li&gt;Run the crawl locally.&lt;/li&gt;
&lt;li&gt;Let the agent query the findings it actually needs.&lt;/li&gt;
&lt;li&gt;Fix the related code.&lt;/li&gt;
&lt;li&gt;Run the check again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I could not find a tool that worked exactly this way, so I started building &lt;strong&gt;Black Sparrow&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The tool I wanted to use
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Black Sparrow&lt;/strong&gt; is an open-source, local-first website crawler and technical SEO audit engine written in Rust.&lt;/p&gt;

&lt;p&gt;It works as a regular command-line tool, so I can audit a site directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;blacksparrow audit https://example.com &lt;span class="nt"&gt;--max-pages&lt;/span&gt; 500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgy29ok3ikwam1u48rodh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgy29ok3ikwam1u48rodh.png" alt="Running blacksparrow command to audit a web page" width="799" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important part, however, is that Black Sparrow also runs as a Model Context Protocol server. That gives AI coding agents a structured way to start crawls, monitor progress, inspect pages, filter issues, and retrieve concise reports.&lt;/p&gt;

&lt;p&gt;Instead of copying a large SEO export into a chat, I can ask the agent something closer to this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Audit the SEO of this website. And fix them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;The crawler gathers evidence from the website. The agent connects that evidence to the codebase.&lt;/p&gt;

&lt;p&gt;That connection is the main reason I am building Black Sparrow.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I built it in Rust
&lt;/h2&gt;

&lt;p&gt;Performance was one reason, but the larger reason was learning.&lt;/p&gt;

&lt;p&gt;Building a crawler touches networking, asynchronous execution, streaming parsers, storage, graph algorithms, and error handling. Rust makes me think carefully about the boundaries between those parts.&lt;/p&gt;

&lt;p&gt;Black Sparrow uses &lt;strong&gt;Tokio&lt;/strong&gt; for asynchronous work and &lt;strong&gt;Reqwest&lt;/strong&gt; for HTTP requests. It processes HTML with Cloudflare's &lt;code&gt;lol_html&lt;/code&gt; streaming parser, extracting titles, descriptions, headings, links, canonicals, directives, images, and structured data without building a large DOM for every page.&lt;/p&gt;

&lt;p&gt;Each page moves through a pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetch the response.&lt;/li&gt;
&lt;li&gt;Parse the relevant HTML.&lt;/li&gt;
&lt;li&gt;Run page-level SEO rules.&lt;/li&gt;
&lt;li&gt;Add new internal links to the frontier.&lt;/li&gt;
&lt;li&gt;Store the findings in SQLite.&lt;/li&gt;
&lt;li&gt;Build the site graph for post-crawl analysis.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The current rule catalog covers 120 technical checks across metadata, indexability, links, canonicals, structured data, security, international SEO, and site architecture.&lt;/p&gt;
&lt;h2&gt;
  
  
  Giving AI agents tools instead of a data dump
&lt;/h2&gt;

&lt;p&gt;Calling a project “AI-native” can easily become a marketing label. For Black Sparrow, it means designing the crawler around the way agents actually use tools.&lt;/p&gt;

&lt;p&gt;A complete website crawl may take longer than an agent tool call is allowed to run. Returning thousands of raw findings can also waste most of the model's context window.&lt;/p&gt;

&lt;p&gt;Black Sparrow's MCP server handles those constraints by exposing focused operations.&lt;/p&gt;

&lt;p&gt;An agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start an audit in the background and receive a session ID.&lt;/li&gt;
&lt;li&gt;Check the crawl's progress without blocking.&lt;/li&gt;
&lt;li&gt;Run a quick audit on one page.&lt;/li&gt;
&lt;li&gt;Query issues by severity, category, or URL.&lt;/li&gt;
&lt;li&gt;Request a compact Markdown report.&lt;/li&gt;
&lt;li&gt;Validate structured data.&lt;/li&gt;
&lt;li&gt;Check whether AI search crawlers are allowed by robots.txt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent asks for the information it needs instead of loading the entire audit into context.&lt;/p&gt;

&lt;p&gt;A practical workflow could look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent starts a crawl against &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Black Sparrow audits the pages and stores the results locally in SQLite.&lt;/li&gt;
&lt;li&gt;The agent queries only critical and alert-level issues.&lt;/li&gt;
&lt;li&gt;It traces repeated findings back to a shared component or layout.&lt;/li&gt;
&lt;li&gt;After changing the code, it runs a single-page check for quick verification.&lt;/li&gt;
&lt;li&gt;It starts another crawl to confirm the site-wide result.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The SEO tool and the coding agent remain separate systems, but MCP gives them a useful contract for working together.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why local-first matters
&lt;/h2&gt;

&lt;p&gt;Local-first is not only about avoiding an account or subscription.&lt;/p&gt;

&lt;p&gt;When I work on a website, I don't want it to first publish, then use some online crawlers to judge the SEO. I want to test that locally with my AI agents so they can autonomously catch the issues and fix them.&lt;/p&gt;

&lt;p&gt;The audit history stays in a local SQLite database. Reports can be exported as terminal output, JSON, Markdown, CSV, or interactive HTML when I need to share them.&lt;/p&gt;

&lt;p&gt;It also makes the tool easier to include in development and CI workflows. The same engine can be used by a person in the terminal, a script in a pipeline, or an AI agent through MCP.&lt;/p&gt;
&lt;h2&gt;
  
  
  Trying Black Sparrow with an AI agent
&lt;/h2&gt;

&lt;p&gt;Black Sparrow can be installed on macOS or Linux with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Shantodotdev/blacksparrow/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;An MCP-compatible coding agent can launch it with this configuration:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"blacksparrow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"blacksparrow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then the agent can start audits and query the results through Black Sparrow's MCP tools.&lt;/p&gt;

&lt;p&gt;The raw HTTP crawler is the main engine today. JavaScript-rendered analysis through the Chrome DevTools Protocol is planned for websites where the meaningful content only appears after client-side rendering. I also plan to build a desktop interface, while keeping the CLI and agent workflows lightweight.&lt;/p&gt;
&lt;h2&gt;
  
  
  Building it in public
&lt;/h2&gt;

&lt;p&gt;Black Sparrow began with a simple frustration: my coding tools could understand the code, and my SEO tools could understand the website, but they could not work together.&lt;/p&gt;

&lt;p&gt;Building the missing connection has turned into a deeper project involving Rust, networking, crawling, graph analysis, local storage, and agent-tool design.&lt;/p&gt;

&lt;p&gt;If you work on client websites, try Black Sparrow on a local or staging project and tell me where the workflow feels rough. The most useful feedback at this stage is not praise. It is the point where the tool fails to match real work.&lt;/p&gt;

&lt;p&gt;You can find the project here:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Shantodotdev" rel="noopener noreferrer"&gt;
        Shantodotdev
      &lt;/a&gt; / &lt;a href="https://github.com/Shantodotdev/blacksparrow" rel="noopener noreferrer"&gt;
        blacksparrow
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Blazingly fast, local-first website crawler and 120-rule technical SEO audit engine with native MCP support.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Black Sparrow&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;High-performance, local-first website crawler, 120-rule technical SEO audit engine, and AI-native auditor written in Rust.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Shantodotdev/blacksparrow/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0fe2ae13caf4376c0e1bbb8dc308b35c5fcfeb59cb5057377c7144a8f87fb709/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f5368616e746f646f746465762f626c61636b73706172726f773f696e636c7564655f70726572656c656173657326636f6c6f723d653131643438266c6f676f3d676974687562" alt="Release"&gt;&lt;/a&gt; &lt;a href="https://github.com/Shantodotdev/blacksparrow/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5700512bfcacc0ec7b0621932b4aff5d76b523ad9538dd85853dc00a5949c4d0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f5368616e746f646f746465762f626c61636b73706172726f772f746f74616c3f636f6c6f723d656334383939266c6f676f3d676974687562266c6162656c3d646f776e6c6f616473" alt="Downloads"&gt;&lt;/a&gt; &lt;a href="https://github.com/Shantodotdev/blacksparrow/actions" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/67517e5b504c42efc9afd3d9fd4906cbace521c9506df5da5a83f3a128427a69/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f5368616e746f646f746465762f626c61636b73706172726f772f63692e796d6c3f6272616e63683d6d61696e266c6162656c3d4349266c6f676f3d6769746875622d616374696f6e73" alt="CI"&gt;&lt;/a&gt; &lt;a href="https://www.rust-lang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b13fe0f5331137cc3b1b614663747e34c4b6ee04c9a73ee0c12380935adb3362/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f727573742d323032315f65646974696f6e2d6639373331362e737667" alt="Rust 2021"&gt;&lt;/a&gt; &lt;a href="https://github.com/Shantodotdev/blacksparrow/./docs/mcp.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/71679f6c140cd7a1da2288c440a0ab0dea59a50e470389c4b9bd6b8d69cc12b2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d63702d636f6d706c69616e742d6265313835642e737667" alt="Model Context Protocol"&gt;&lt;/a&gt; &lt;a href="https://github.com/Shantodotdev/blacksparrow/./LICENSE-MIT" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ce66fc57e62f67b18a395724cfe539597d893cad2c95183a2902768d2b29cd52/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542532464170616368652d2d322e302d3833313834332e737667" alt="License: MIT / Apache-2.0"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Black Sparrow&lt;/strong&gt; is a lightweight, blazing-fast website crawler and technical SEO auditor designed as a modern, local-first alternative to heavy legacy tools like Screaming Frog and expensive cloud crawlers.&lt;/p&gt;

&lt;p&gt;Built from the ground up in Rust, Black Sparrow streams HTML responses through Cloudflare's zero-copy &lt;code&gt;lol_html&lt;/code&gt; parser, dynamically adjusts crawl speed using network congestion algorithms (AIMD), persists audit history in an embedded SQLite database, and exposes a native &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; server for autonomous AI coding agents.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Shantodotdev/blacksparrow/./docs/assets/cli_terminal_audit.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FShantodotdev%2Fblacksparrow%2FHEAD%2F.%2Fdocs%2Fassets%2Fcli_terminal_audit.png" alt="Black Sparrow CLI Audit in Terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Shantodotdev/blacksparrow/./docs/assets/html_report_dashboard.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FShantodotdev%2Fblacksparrow%2FHEAD%2F.%2Fdocs%2Fassets%2Fhtml_report_dashboard.png" alt="Black Sparrow Interactive HTML Report"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Key Features&lt;/h2&gt;
&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;⚡ &lt;strong&gt;Blazingly Fast&lt;/strong&gt;: Crawls ~500–800 pages/second on raw HTTP using under 50 MB of RAM.&lt;/li&gt;

&lt;li&gt;🔒 &lt;strong&gt;Local-First &amp;amp; Private&lt;/strong&gt;: All data stays on your machine in an embedded SQLite WAL database. No accounts, no cloud dependencies, zero telemetry.&lt;/li&gt;

&lt;li&gt;🧠 &lt;strong&gt;AI-Native (MCP)&lt;/strong&gt;: Native stdio Model Context Protocol server. AI agents in…&lt;/li&gt;

&lt;/ul&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Shantodotdev/blacksparrow" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I will keep sharing what I learn while building it, including the crawler architecture, technical SEO rules, MCP design, and the mistakes behind each improvement. If those topics interest you, follow the project and follow me here on Dev.to.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rust</category>
      <category>webdev</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
