<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/3ozoLHDZU" -->

---
title: Linters: The Most Underabused Tool In The AI-Slop Era
description: AI-generated code is fast but inconsistent, making linters more valuable than ever. Custom lint rules can enforce translation key validity, prevent hardcoded...
canonical: https://daily.dev/posts/3ozolhdzu
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Linters: The Most Underabused Tool In The AI-Slop Era | daily.dev
og:description: AI-generated code is fast but inconsistent, making linters more valuable than ever. Custom lint rules can enforce translation key validity, prevent hardcoded...
og:url: https://daily.dev/posts/3ozolhdzu
og:image: https://api.daily.dev/og/posts/3ozoLHDZU.png
og:image:alt: Post cover image
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Linters: The Most Underabused Tool In The AI-Slop Era

**[Fabian Letsch](https://daily.dev/sources/v7balm8y0o32yjz1hhf5a)** · [@fabianletsch](https://daily.dev/fabianletsch) · 144 upvotes · 14 comments

## Summary

AI-generated code is fast but inconsistent, making linters more valuable than ever. Custom lint rules can enforce translation key validity, prevent hardcoded strings, ban specific imports, enforce architectural boundaries, and eliminate entire categories of repetitive review comments. Unlike AI code review instructions (CLAUDE.md, AGENTS.md), linters are deterministic — they either pass or fail every time. The post also covers configuration best practices: run linters in the editor with autofixes on save, use CI as a safety net, and be cautious with pre-commit hooks that slow down frequent commits.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://fabianletsch.de/blog/linters-the-most-underabused-tool-in-the-ai-slop-era/>

## Community discussion

Top comments from developers on daily.dev.

**@eugeneyaremenko** · 33 upvotes

> # **In the grim darkness of the far future, there is only code reviews**
>
>
> TDD + Linters is the way forward.
>
> ![image.png](https://media.daily.dev/image/upload/s--wXYkyrTL--/f_auto/v1776247211/ugc/content_0cbba94b-8f7c-44f5-aae5-5d8d78b7a4d9?_a=BAMAMiWQ0)

**@eugeneyaremenko** · 5 upvotes

> I found it very useful with ClaudeCode to apply tool use hooks to ban deployment and builds via bash and instead provide it with a tool/MCP (MCP basically interpreter with a bunch of discoverable tools, Claude writes code in a scratch file and asks the MCP to eval it, I use files because Claude can diff edit them and promote into a snippets storage if they are reusable) .
>
> This way it can't bypass lints, test gates + I log all the ops in db and sometimes review with LLM to see if we can optimize the API (tool surface) also I gave it a rule to write md files with reviews on our tasks when it...

**@akkitto** · 2 upvotes

> Linters are just a single cogwheel in the whole system of code review. Using LLM code efficiently is a lot about efficiently review code with high quality standards, which you can enforce programmatically.

**@majortank** · 1 upvotes

> Linting is annoying tbh. But it's valuable.

**@alvarogfn** · 1 upvotes

> In the end, automate everything you can, haha.

## Similar posts on daily.dev

- [10 anti-AI slop moves for frontend projects going faster than humans can review—Martian Chronicles, Evil Martians’ team blog](https://daily.dev/posts/10-anti-ai-slop-moves-for-frontend-projects-going-faster-than-humans-can-review-martian-chronicles--70jbo6jvx) · Martian Chronicles · 24 upvotes · 5 comments
- [Stop burning tokens on code review](https://daily.dev/posts/stop-burning-tokens-on-code-review-kxrtlop02) · swizec.com · 147 upvotes · 16 comments
- [The review bottleneck: when AI codes faster than you can read](https://daily.dev/posts/the-review-bottleneck-when-ai-codes-faster-than-you-can-read-y7hf5qzpo) · RUBYLAND · 0 upvotes · 0 comments
- [Maintainability sensors for coding agents](https://daily.dev/posts/maintainability-sensors-for-coding-agents-c4l8mms6d) · Martin Fowler · 0 upvotes · 0 comments
- [AI Code Review Best Practices](https://daily.dev/posts/ai-code-review-best-practices-ii7hbaa3j) · Aviator Blog · 15 upvotes · 1 comments

---

Tags: [#ai-coding](https://daily.dev/tags/ai-coding), [#code-review](https://daily.dev/tags/code-review), [#javascript](https://daily.dev/tags/javascript), [#webdev](https://daily.dev/tags/webdev)

[View this post on daily.dev](https://daily.dev/posts/3ozolhdzu)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"DiscussionForumPosting","mainEntityOfPage":"https://daily.dev/posts/3ozolhdzu","headline":"Linters: The Most Underabused Tool In The AI-Slop Era","text":"Shared: Linters: The Most Underabused Tool In The AI-Slop Era","url":"https://daily.dev/posts/3ozolhdzu","datePublished":"2026-04-14T22:39:31.318Z","dateModified":"2026-10-14T02:26:07.051Z","author":{"@type":"Person","name":"Fabian Letsch","url":"https://daily.dev/fabianletsch","image":"https://lh3.googleusercontent.com/a/ACg8ocKR6BVy_wn23EoOKq7-BlszlcXcLmASlnb7l-GtS-q1bePnkaJf=s96-c","description":"Hey, i'm Fabian and I deeply care about helping devs ship more code with less bugs in less time! 🔥","interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":50270}},"image":"https://media.daily.dev/image/upload/s--0_ODbtD2--/f_auto/v1722860399/public/Placeholder%2008","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":144},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":14}],"sharedContent":{"@type":"WebPage","url":"https://api.daily.dev/r/seyCz9H85"},"comment":[{"@type":"Comment","text":"In the grim darkness of the far future, there is only code reviews\nTDD + Linters is the way forward.","datePublished":"2026-04-15T10:01:12.514Z","url":"https://daily.dev/posts/3ozoLHDZU#c-1rNgHVCMx","author":{"@type":"Person","name":"Eugene Yaremenko","url":"https://daily.dev/eugeneyaremenko","image":"https://avatars.githubusercontent.com/u/1898905?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":33}},{"@type":"Comment","text":"I found it very useful with ClaudeCode to apply tool use hooks to ban deployment and builds via bash and instead provide it with a tool/MCP (MCP basically interpreter with a bunch of discoverable tools, Claude writes code in a scratch file and asks the MCP to eval it, I use files because Claude can diff edit them and promote into a snippets storage if they are reusable) .\nThis way it can’t bypass lints, test gates + I log all the ops in db and sometimes review with LLM to see if we can optimize the API (tool surface) also I gave it a rule to write md files with reviews on our tasks when it ended up struggling and detected an issue with our flow.\nSessionStart hooks are also cool to smoke test the system, check for stale deps, zombie containers. I auto generate workspace report for Claude and inject into its session context but ClaudeCode has very small limit for this (token count) so instead I inject file path to the report. But then Claude usually ignores it and doesn’t read the file (even with the rule that “forces” it to) so I ended up banning all tool use until it reads it (the text of the report contains name of the flag file that it needs to create to unlock the tools) - works like a charm 😃\nAlso I’m considering banning main ClaudeCode instance from writing tests (and altering test files in any way) to reduce cheating (mainly, when it get’s low on context it starts to disable tests) I probably need an agent for test authoring that is intentionally adversarial to the code writer (main Claude) - tries to fail it. You can actually enforce Red/green TDD with this (Well, theoretically) by driving the cycle via script that first unlicks test writer agent that must write a test that fails and then switch turns to the code writer that must write code that make tests pass and this auto switches turn to the testing agent that writes tests (one of another intentionally blocked via hooks) It might be a cool idea but I bet it will go super slow. But then maybe if you run it fully independently :thinking: Yeah and I’m not sure how to force both sides to work granularly. Maybe with dynamic tool call back based of current diff? Like if we got a new function or N lines of code I will block all claude tool actions on all the files except the one that passes the check and/or switch to test agent action (agent call) something like that. It’s kinda getting too hacky.","datePublished":"2026-04-15T10:31:45.182Z","dateModified":"2026-04-15T10:33:59.747Z","url":"https://daily.dev/posts/3ozoLHDZU#c-oiI0QjXgW","author":{"@type":"Person","name":"Eugene Yaremenko","url":"https://daily.dev/eugeneyaremenko","image":"https://avatars.githubusercontent.com/u/1898905?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":5}},{"@type":"Comment","text":"Linters are just a single cogwheel in the whole system of code review. Using LLM code efficiently is a lot about efficiently review code with high quality standards, which you can enforce programmatically.","datePublished":"2026-04-15T13:31:30.163Z","url":"https://daily.dev/posts/3ozoLHDZU#c-7Wj4Rufcx","author":{"@type":"Person","name":"Daniel","url":"https://daily.dev/akkitto","image":"https://media.daily.dev/image/upload/s--FtwJqX4c--/f_auto/v1754900041/avatars/avatar_29TCpY2hJR72V3BlxPXzX?_a=BAMClqZW0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2}},{"@type":"Comment","text":"Linting is annoying tbh. But it’s valuable.","datePublished":"2026-04-16T00:20:50.281Z","url":"https://daily.dev/posts/3ozoLHDZU#c-xJhGa4z40","author":{"@type":"Person","name":"Thabo Tankiso Thebe","url":"https://daily.dev/majortank","image":"https://avatars.githubusercontent.com/u/41399491?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"In the end, automate everything you can, haha.","datePublished":"2026-04-15T18:37:59.944Z","url":"https://daily.dev/posts/3ozoLHDZU#c-dnvSUWBEZ","author":{"@type":"Person","name":"Álvaro Guimarães","url":"https://daily.dev/alvarogfn","image":"https://avatars.githubusercontent.com/u/62889807?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}}],"isPartOf":{"@type":"WebPage","url":"https://daily.dev/sources/v7balm8y0o32yjz1hhf5a","name":"Fabian Letsch"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Fabian Letsch","item":"https://daily.dev/sources/v7balm8y0o32yjz1hhf5a"},{"@type":"ListItem","position":3,"name":"Linters: The Most Underabused Tool In The AI-Slop Era"}]}
```

