<?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: Scan AI Slop</title>
    <description>The latest articles on DEV Community by Scan AI Slop (@scanaislop).</description>
    <link>https://dev.to/scanaislop</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%2Forganization%2Fprofile_image%2F13579%2F4c1b7572-bd32-4acd-ad0d-0a080260f9ad.png</url>
      <title>DEV Community: Scan AI Slop</title>
      <link>https://dev.to/scanaislop</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scanaislop"/>
    <language>en</language>
    <item>
      <title>Introducing aislop: The Quality Gate for AI-Written Code</title>
      <dc:creator>Kenny Olawuwo.</dc:creator>
      <pubDate>Sat, 06 Jun 2026 19:58:48 +0000</pubDate>
      <link>https://dev.to/scanaislop/introducing-aislop-the-quality-gate-for-ai-written-code-326g</link>
      <guid>https://dev.to/scanaislop/introducing-aislop-the-quality-gate-for-ai-written-code-326g</guid>
      <description>&lt;p&gt;I got tired of reviewing pull requests that looked fine until they were not.&lt;/p&gt;

&lt;p&gt;The code compiled. The tests passed. The diff looked reasonable. Then, buried in the middle, there would be a catch block that swallowed every error, a &lt;code&gt;TODO&lt;/code&gt; that returned fake data, or another &lt;code&gt;as any&lt;/code&gt; cast because the agent did not finish the type work.&lt;/p&gt;

&lt;p&gt;That is the part people underestimate about AI-generated code. The first problem is not that it is obviously broken. The first problem is that it often looks acceptable.&lt;/p&gt;

&lt;p&gt;I built &lt;code&gt;[aislop](https://github.com/scanaislop/aislop)&lt;/code&gt; for that gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  What aislop is
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;aislop&lt;/code&gt; is an open-source CLI for scanning AI-written code before it reaches production. It looks for the patterns AI coding agents leave behind when they are optimizing for "make the prompt work" instead of "keep this codebase healthy."&lt;/p&gt;

&lt;p&gt;Run it once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx aislop@latest scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install it and make it part of your local workflow:&lt;br&gt;
&lt;/p&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; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; aislop
aislop scan &lt;span class="nt"&gt;--changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It scores the code, reports findings, and can auto-fix the mechanical issues. The more important part is the gate: it gives your team a way to catch AI slop before it becomes normal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem it solves
&lt;/h2&gt;

&lt;p&gt;Claude Code, Cursor, Codex, Copilot, and other coding agents are useful. This is not an argument against them. I use them because they make real engineering work faster.&lt;/p&gt;

&lt;p&gt;But agents have a different failure profile than humans.&lt;/p&gt;

&lt;p&gt;They write error handling that makes the function stop throwing, even when that hides the real failure. They add comments that explain the code instead of explaining a decision. They duplicate helpers because discovering the existing helper requires context. They cast through type errors because the compiler is in the way of finishing the task.&lt;/p&gt;

&lt;p&gt;None of that means the agent is useless. It means the output needs a different quality gate.&lt;/p&gt;

&lt;p&gt;Your existing linter still matters. Tests still matter. Typechecking still matters. &lt;code&gt;aislop&lt;/code&gt; sits next to those tools and asks a narrower question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did an AI coding agent leave behind patterns that will make this code harder to maintain?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What it catches
&lt;/h2&gt;

&lt;p&gt;Common findings include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Narrative comments above self-explanatory code&lt;/li&gt;
&lt;li&gt;Swallowed exceptions and empty fallbacks&lt;/li&gt;
&lt;li&gt;Unsafe &lt;code&gt;as any&lt;/code&gt; casts&lt;/li&gt;
&lt;li&gt;Hallucinated imports&lt;/li&gt;
&lt;li&gt;Duplicated helpers and dead code&lt;/li&gt;
&lt;li&gt;Production TODO stubs&lt;/li&gt;
&lt;li&gt;Hardcoded environment values&lt;/li&gt;
&lt;li&gt;Oversized files and functions that agents kept appending to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not always bugs on day one. That is why they survive review. The damage is cumulative: noisier files, weaker types, less trustworthy error handling, more duplicate logic, and slower future changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I wanted a dedicated tool
&lt;/h2&gt;

&lt;p&gt;General-purpose linters were designed around human-written code. They catch formatting issues, unused variables, unsafe syntax, and many useful correctness problems. They do not fully understand the repeated fingerprints of agent output.&lt;/p&gt;

&lt;p&gt;For example, a linter might catch this:&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="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it probably will not catch this:&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="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second version is what agents often write. It looks like error handling. In production, it means "the sync failed" and "there were no records" now look identical.&lt;/p&gt;

&lt;p&gt;That is the kind of pattern &lt;code&gt;aislop&lt;/code&gt; is built to flag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it fits
&lt;/h2&gt;

&lt;p&gt;Start with changed files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aislop scan &lt;span class="nt"&gt;--changes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add CI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aislop ci &lt;span class="nt"&gt;--changes&lt;/span&gt; &lt;span class="nt"&gt;--base&lt;/span&gt; origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your team uses agent hooks, install one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aislop hook &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--claude&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is simple: keep the speed of AI-assisted development, but stop the low-quality residue from merging unnoticed.&lt;/p&gt;

&lt;p&gt;That is the bet behind &lt;code&gt;aislop&lt;/code&gt;: AI coding agents are here to stay, so code quality tooling has to adapt.&lt;/p&gt;

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

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

</description>
      <category>ai</category>
      <category>codequality</category>
      <category>cleancode</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
