<?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>Forem: hyhmrright</title>
    <description>The latest articles on Forem by hyhmrright (@hyhmrright).</description>
    <link>https://forem.com/hyhmrright</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%2F3848681%2Fd65668f1-75aa-4901-a1f5-263ffe353c7a.png</url>
      <title>Forem: hyhmrright</title>
      <link>https://forem.com/hyhmrright</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hyhmrright"/>
    <language>en</language>
    <item>
      <title>caveman + brooks-lint + logic-lens: The Complete AI Code Review Stack for Claude</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Wed, 29 Apr 2026 09:32:09 +0000</pubDate>
      <link>https://forem.com/hyhmrright/caveman-brooks-lint-logic-lens-the-complete-ai-code-review-stack-for-claude-1e3e</link>
      <guid>https://forem.com/hyhmrright/caveman-brooks-lint-logic-lens-the-complete-ai-code-review-stack-for-claude-1e3e</guid>
      <description>&lt;p&gt;If you use Claude Code regularly, you've probably heard of &lt;a href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;caveman&lt;/a&gt; — the skill that makes Claude talk like a caveman to cut token usage by 65%. It's brilliant in its simplicity and has earned 49k+ stars for good reason.&lt;/p&gt;

&lt;p&gt;But here's a question I started asking myself: &lt;strong&gt;what happens after caveman helps Claude think faster and cheaper? Who's actually reviewing the &lt;em&gt;quality&lt;/em&gt; of what gets written?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the gap I built two new Claude skills to fill. Let me show you how all three tools work together as a complete AI-assisted development stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Recap: What caveman Does
&lt;/h2&gt;

&lt;p&gt;caveman is a Claude Code skill that compresses Claude's internal monologue. Instead of verbose reasoning, Claude thinks in primitive shorthand — and uses 65% fewer tokens doing it.&lt;/p&gt;

&lt;p&gt;It's a token optimizer. It makes Claude faster and cheaper without changing the quality of what it produces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it doesn't do:&lt;/strong&gt; caveman doesn't review whether your code has architectural debt, logic errors, or violates established software engineering principles. That's not its job — and that's exactly where brooks-lint and logic-lens come in.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Two Skills That Complete the Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. brooks-lint — The Architectural Review Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;brooks-lint&lt;/a&gt;&lt;/strong&gt; is a Claude skill that reviews code through the lens of 12 classic software engineering books:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Books&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Complexity &amp;amp; Design&lt;/td&gt;
&lt;td&gt;A Philosophy of Software Design, Clean Code, Refactoring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;Clean Architecture, Designing Data-Intensive Applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team &amp;amp; Process&lt;/td&gt;
&lt;td&gt;The Mythical Man-Month, The Pragmatic Programmer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;Release It!, Site Reliability Engineering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security &amp;amp; Quality&lt;/td&gt;
&lt;td&gt;The Art of Software Security, Accelerate, Software Engineering at Google&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It maps problems to &lt;strong&gt;6 risk categories (R1–R6)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;R1&lt;/strong&gt; – Accidental Complexity (Ousterhout)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R2&lt;/strong&gt; – Rotting Design (Fowler — needs refactoring)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R3&lt;/strong&gt; – Mythical Man-Month risk (Brooks — hidden coordination cost)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R4&lt;/strong&gt; – Pragmatic debt (Hunt &amp;amp; Thomas — quick fixes that compound)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R5&lt;/strong&gt; – Release risk (Nygard — production reliability issues)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R6&lt;/strong&gt; – Security concern (Viega &amp;amp; McGraw)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real example — what it catches:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/brooks-review src/payment/PaymentService.ts

Reviewing 847 lines...

⚠️ R1 – ACCIDENTAL COMPLEXITY (HIGH)
PaymentService handles: payment processing, retry logic, 
notifications, audit logging, and fraud detection.
God class with 5 responsibilities. Split into focused services.

⚠️ R2 – ROTTING DESIGN (MEDIUM)  
processPayment() is 340 lines with 6 nesting levels.
Feature envy: reaching into Order internals 12 times.
Refactoring opportunity: extract PaymentValidator.

⚠️ R5 – RELEASE RISK (HIGH)
No circuit breaker on payment gateway calls.
Retry loop can cascade during gateway outages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5 usage modes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/brooks-review file.ts        &lt;span class="c"&gt;# Full architectural review&lt;/span&gt;
/brooks-quick file.ts         &lt;span class="c"&gt;# Fast scan, critical issues only&lt;/span&gt;
/brooks-refactor file.ts      &lt;span class="c"&gt;# Refactoring suggestions&lt;/span&gt;
/brooks-security file.ts      &lt;span class="c"&gt;# Security-focused review&lt;/span&gt;
/brooks-compare v1.ts v2.ts   &lt;span class="c"&gt;# Before/after comparison&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. logic-lens — The Logic &amp;amp; Correctness Layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/hyhmrright/logic-lens" rel="noopener noreferrer"&gt;logic-lens&lt;/a&gt;&lt;/strong&gt; is a Claude skill that focuses on runtime correctness — the things that compile fine but fail in production:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/logic-lens src/order/OrderProcessor.ts

Analyzing logic patterns...

🔴 CRITICAL – NULL DEREFERENCE (Line 47)
user.address.city accessed without null check.
If user has no address (guest checkout), NullPointerException.
Fix: use optional chaining user.address?.city ?? 'Unknown'

🔴 CRITICAL – RACE CONDITION (Line 103)  
inventory.count checked then decremented in separate operations.
Under concurrent load, two threads can both pass the check.
Fix: Use atomic decrement with minimum-value guard

🟡 MEDIUM – OFF-BY-ONE (Line 156)
Loop runs i &amp;lt;= items.length instead of i &amp;lt; items.length
Will throw ArrayIndexOutOfBoundsException on last iteration

🟡 MEDIUM – SILENT FAILURE (Line 203)
try/catch swallows exception with empty catch block
Payment failures will be silently ignored
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;logic-lens covers &lt;strong&gt;9 risk categories&lt;/strong&gt; across 49 scenario types: null/undefined access, race conditions, integer overflow, SQL injection, memory leaks, auth bypass, state machine violations, and more.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the Three Tools Work Together
&lt;/h2&gt;

&lt;p&gt;Here's the workflow I've settled into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;caveman → [Claude writes code faster &amp;amp; cheaper]
    ↓
/brooks-review → [Is the architecture sound?]
    ↓
/logic-lens → [Will it actually work correctly at runtime?]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think of it as three layers of defense:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;caveman&lt;/strong&gt; — Efficiency layer. Saves tokens, speeds up iteration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;brooks-lint&lt;/strong&gt; — Architecture layer. Catches structural problems inspired by engineering classics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;logic-lens&lt;/strong&gt; — Correctness layer. Catches runtime bugs before they reach production.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  A Real Workflow Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Step 1: Use caveman for fast, cheap code generation&lt;/span&gt;
&lt;span class="c"&gt;# (caveman handles this automatically in background)&lt;/span&gt;

&lt;span class="c"&gt;# Step 2: Check architectural integrity&lt;/span&gt;
/brooks-review src/checkout/CheckoutService.ts

&lt;span class="c"&gt;# Step 3: Verify runtime correctness&lt;/span&gt;
/logic-lens src/checkout/CheckoutService.ts

&lt;span class="c"&gt;# Result: Code that's architecturally sound AND logically correct&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why These Tools Are Complementary (Not Overlapping)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Focus&lt;/th&gt;
&lt;th&gt;Catches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;caveman&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Token efficiency&lt;/td&gt;
&lt;td&gt;Nothing — it optimizes Claude's thinking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;brooks-lint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Architecture &amp;amp; design&lt;/td&gt;
&lt;td&gt;God classes, tight coupling, missing patterns, technical debt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;logic-lens&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Runtime correctness&lt;/td&gt;
&lt;td&gt;Null refs, race conditions, off-by-ones, auth gaps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There's almost zero overlap. Each tool catches a completely different class of problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;All three are Claude Code skills — install in seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# caveman (token optimization)&lt;/span&gt;
claude mcp add caveman

&lt;span class="c"&gt;# brooks-lint (architectural review)&lt;/span&gt;
claude skills add https://github.com/hyhmrright/brooks-lint

&lt;span class="c"&gt;# logic-lens (logic &amp;amp; correctness)&lt;/span&gt;
claude skills add https://github.com/hyhmrright/logic-lens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;caveman makes Claude think faster. But fast + cheap code that has architectural debt and runtime bugs is still problematic code.&lt;/p&gt;

&lt;p&gt;With all three tools in your Claude Code setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You write code &lt;strong&gt;65% cheaper&lt;/strong&gt; (caveman)&lt;/li&gt;
&lt;li&gt;Your architecture stays &lt;strong&gt;sound&lt;/strong&gt; (brooks-lint: 12 books, R1–R6 categories)
&lt;/li&gt;
&lt;li&gt;Your logic stays &lt;strong&gt;correct&lt;/strong&gt; (logic-lens: 49 runtime scenarios)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the complete stack. Try all three and let me know what you catch in your codebase.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built both skills with Claude Code. Happy to answer questions about the implementation in the comments.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/JuliusBrussee/caveman" rel="noopener noreferrer"&gt;caveman&lt;/a&gt; (the original — 49k stars, highly recommended)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;brooks-lint&lt;/a&gt; — architectural review grounded in 12 books&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hyhmrright/logic-lens" rel="noopener noreferrer"&gt;logic-lens&lt;/a&gt; — runtime correctness across 49 scenarios&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claudeai</category>
      <category>codereview</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why AI Code Review Misses Logic Bugs — And How Structured Execution Tracing Fixes It</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Wed, 29 Apr 2026 05:58:10 +0000</pubDate>
      <link>https://forem.com/hyhmrright/why-ai-code-review-misses-logic-bugs-and-how-structured-execution-tracing-fixes-it-3n0p</link>
      <guid>https://forem.com/hyhmrright/why-ai-code-review-misses-logic-bugs-and-how-structured-execution-tracing-fixes-it-3n0p</guid>
      <description>&lt;p&gt;Your CI is green. Your linter is happy. The PR has three approvals. And yet — three weeks later, 2 a.m. PagerDuty.&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;p&gt;The bugs that cause real production outages rarely &lt;em&gt;look&lt;/em&gt; wrong. They pass lint. They pass review. They often pass tests. They emerge from the &lt;strong&gt;interaction between two functions&lt;/strong&gt;, where neither author anticipated what happens when their assumptions silently collide.&lt;/p&gt;

&lt;p&gt;This is the problem Logic-Lens was built to solve.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Root Cause: Pattern Matching vs. Reasoning
&lt;/h2&gt;

&lt;p&gt;When you ask an AI to review code without structure, it &lt;strong&gt;pattern-matches&lt;/strong&gt;. It compares your code to patterns it has seen before. This works well for style. It fails for logic bugs — because logic bugs live in syntax-clean, lint-passing code that &lt;em&gt;looks&lt;/em&gt; perfectly normal.&lt;/p&gt;

&lt;p&gt;The research is unambiguous. Models using structured semi-formal reasoning achieve &lt;strong&gt;87–93% accuracy&lt;/strong&gt; on interprocedural code semantics tasks. Unstructured chain-of-thought: &lt;strong&gt;76–78%&lt;/strong&gt; — and the gap is largest on exactly the class of bugs that cause production incidents.&lt;/p&gt;

&lt;p&gt;The difference isn't model capability. It's methodology.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Fix: Structured Execution Tracing
&lt;/h2&gt;

&lt;p&gt;The key insight: &lt;strong&gt;force the model to build an explicit execution trace before reaching any conclusion.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of "does this look right?", the model must:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State premises&lt;/strong&gt; — every assumption about types, nullability, and preconditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace execution&lt;/strong&gt; — follow the actual path step by step, crossing function boundaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify divergence&lt;/strong&gt; — find the exact point where a premise breaks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prescribe remedy&lt;/strong&gt; — fix the root cause, not just the symptom&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the methodology behind &lt;strong&gt;Logic-Lens&lt;/strong&gt; — an open-source plugin for Claude Code, Codex CLI, and Gemini CLI that enforces structured execution tracing on every code review.&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Looks Like in Practice
&lt;/h2&gt;

&lt;p&gt;Here's a deceptively ordinary Python function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;discount_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;qty&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;discount_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;discount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coupon_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_discount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;discount_code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;discount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;email_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_confirmation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks fine. Three approvals. Ships to production. Here's what Logic-Lens produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Logic Health: 31/100

🔴 L6 — Callee Contract Mismatch
   Premises: coupon_service.get_discount(discount_code) → assumed float
   Trace: get_discount returns None for expired codes (documented in coupon_service.py:47)
   Divergence: total * (1 - None) raises TypeError at runtime
   Remedy: Guard with `if discount is not None` before applying. Add contract test.

🔴 L3 — Boundary Blindspot
   Premises: items assumed non-empty
   Trace: sum() over [] returns 0 → order saved with total = $0.00
   Divergence: No validation before db.save_order
   Remedy: Assert len(items) &amp;gt; 0 or raise ValueError("Order must have at least one item")

🟡 L5 — Control Flow Escape
   Premises: email_service.send_confirmation assumed non-throwing
   Trace: SMTPException propagates before db connection cleanup
   Divergence: Connection pool exhausted under sustained email failures
   Remedy: Wrap email send in try/finally; release connection unconditionally
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Every finding includes all four sections&lt;/strong&gt; — Premises, Trace, Divergence, Remedy. That's the Iron Law of Logic-Lens: no finding ships without showing its work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Nine Logic Risk Categories
&lt;/h2&gt;

&lt;p&gt;Logic-Lens evaluates code across nine dimensions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;What It Catches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;L1&lt;/td&gt;
&lt;td&gt;Shadow Override&lt;/td&gt;
&lt;td&gt;Variable shadowing across scopes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L2&lt;/td&gt;
&lt;td&gt;Type Contract Breach&lt;/td&gt;
&lt;td&gt;Type assumptions that break at runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L3&lt;/td&gt;
&lt;td&gt;Boundary Blindspot&lt;/td&gt;
&lt;td&gt;Edge cases (empty, zero, max)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L4&lt;/td&gt;
&lt;td&gt;State Mutation Hazard&lt;/td&gt;
&lt;td&gt;Shared mutable state side effects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L5&lt;/td&gt;
&lt;td&gt;Control Flow Escape&lt;/td&gt;
&lt;td&gt;Exception paths that skip cleanup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L6&lt;/td&gt;
&lt;td&gt;Callee Contract Mismatch&lt;/td&gt;
&lt;td&gt;Return value assumptions that fail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L7&lt;/td&gt;
&lt;td&gt;Concurrency/Async Hazard&lt;/td&gt;
&lt;td&gt;Race conditions, await misuse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L8&lt;/td&gt;
&lt;td&gt;Resource Lifecycle Issue&lt;/td&gt;
&lt;td&gt;Leaked connections, handles, memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L9&lt;/td&gt;
&lt;td&gt;Time/Locale Hazard&lt;/td&gt;
&lt;td&gt;Timezone, clock, and locale bugs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How It Compares
&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;Logic-Lens&lt;/th&gt;
&lt;th&gt;ESLint/Pylint&lt;/th&gt;
&lt;th&gt;GitHub Copilot Review&lt;/th&gt;
&lt;th&gt;Plain AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Explicit execution trace&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premises → Trace → Divergence → Remedy&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interprocedural bug detection&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero config, any language&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auditable / reproducible reasoning&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Logic-Lens doesn't replace your linter. It catches what linters structurally cannot: behavioral bugs in syntax-clean code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Benchmark: 91% vs. 19%
&lt;/h2&gt;

&lt;p&gt;Across three real-world codebases with documented production bugs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logic-Lens&lt;/strong&gt;: 91% pass rate on interprocedural, boundary, and state-mutation scenarios&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plain AI (unstructured)&lt;/strong&gt;: 19%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gap isn't what the model &lt;em&gt;can&lt;/em&gt; find with perfect prompting. It's what it &lt;strong&gt;consistently&lt;/strong&gt; finds, across every run, with a traceable reasoning chain that shows its work every time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Six Skills, One Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;logic&lt;/span&gt;-&lt;span class="n"&gt;lens&lt;/span&gt;          → &lt;span class="n"&gt;Full&lt;/span&gt; &lt;span class="n"&gt;structured&lt;/span&gt; &lt;span class="n"&gt;trace&lt;/span&gt; (&lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;full&lt;/span&gt; &lt;span class="n"&gt;review&lt;/span&gt;)
&lt;span class="n"&gt;logic&lt;/span&gt;-&lt;span class="n"&gt;lens&lt;/span&gt;-&lt;span class="n"&gt;quick&lt;/span&gt;    → &lt;span class="n"&gt;Fast&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="n"&gt;for&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;-&lt;span class="n"&gt;sensitive&lt;/span&gt; &lt;span class="n"&gt;reviews&lt;/span&gt;
&lt;span class="n"&gt;logic&lt;/span&gt;-&lt;span class="n"&gt;lens&lt;/span&gt;-&lt;span class="n"&gt;security&lt;/span&gt; → &lt;span class="n"&gt;OWASP&lt;/span&gt;-&lt;span class="n"&gt;mapped&lt;/span&gt; &lt;span class="n"&gt;security&lt;/span&gt; &lt;span class="n"&gt;focus&lt;/span&gt;
&lt;span class="n"&gt;logic&lt;/span&gt;-&lt;span class="n"&gt;lens&lt;/span&gt;-&lt;span class="n"&gt;perf&lt;/span&gt;     → &lt;span class="n"&gt;Bottleneck&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;complexity&lt;/span&gt; &lt;span class="n"&gt;hunting&lt;/span&gt;
&lt;span class="n"&gt;logic&lt;/span&gt;-&lt;span class="n"&gt;lens&lt;/span&gt;-&lt;span class="n"&gt;diff&lt;/span&gt;     → &lt;span class="n"&gt;PR&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="n"&gt;review&lt;/span&gt; (&lt;span class="n"&gt;interprocedural&lt;/span&gt; &lt;span class="n"&gt;focus&lt;/span&gt;)
&lt;span class="n"&gt;logic&lt;/span&gt;-&lt;span class="n"&gt;lens&lt;/span&gt;-&lt;span class="n"&gt;report&lt;/span&gt;   → &lt;span class="n"&gt;Team&lt;/span&gt;-&lt;span class="n"&gt;ready&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;severity&lt;/span&gt; &lt;span class="n"&gt;scoring&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Install in 60 Seconds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add hyhmrright/logic-lens
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;logic-lens@logic-lens-marketplace/logic-review&lt;span class="sb"&gt;```&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;**&lt;/span&gt;Gemini CLI:&lt;span class="k"&gt;**&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;/extensions install &lt;a href="https://github.com/hyhmrright/logic-lens" rel="noopener noreferrer"&gt;https://github.com/hyhmrright/logic-lens&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


**Codex CLI:**
See the [README](https://github.com/hyhmrright/logic-lens) for the skill installer command.

---

## Try It

If you've shipped a bug that passed review, it's worth running Logic-Lens on the function that caused it. The trace output is often illuminating even in retrospect.

⭐ [github.com/hyhmrright/logic-lens](https://github.com/hyhmrright/logic-lens)

**Which of the nine risk categories (L1–L9) have you hit most in production?** Drop a comment — happy to run Logic-Lens on a representative example and share the raw output.

---

## Related

If you also care about *why* your architecture has decay risks — not just where behavioral bugs live — I wrote a companion piece grounding AI code review in 12 classic engineering books:

[Show DEV: brooks-lint — an AI code reviewer that cites Fowler, Martin, and Brooks](https://dev.to/hyhmrright/i-synthesized-12-classic-engineering-books-into-an-ai-code-reviewer-heres-what-it-caught-3ed1)

The two tools cover different failure modes and work well together: Logic-Lens catches runtime behavioral bugs via execution tracing; brooks-lint diagnoses architectural decay against Fowler, Martin, Evans, and nine others.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>aitools</category>
      <category>codereview</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Logic-first code review: catching the bugs your linter, type checker, and AI reviewer all miss</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Sat, 25 Apr 2026 13:32:18 +0000</pubDate>
      <link>https://forem.com/hyhmrright/logic-first-code-review-catching-the-bugs-your-linter-type-checker-and-ai-reviewer-all-miss-1ppg</link>
      <guid>https://forem.com/hyhmrright/logic-first-code-review-catching-the-bugs-your-linter-type-checker-and-ai-reviewer-all-miss-1ppg</guid>
      <description>&lt;p&gt;Your linter says 0 warnings.&lt;br&gt;
Your type checker is clean.&lt;br&gt;
Your AI reviewer says LGTM.&lt;/p&gt;

&lt;p&gt;And yet the bug ships.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — A category of bugs slips past linters, type checkers, and AI reviewers because they only show up when &lt;em&gt;two functions interact&lt;/em&gt; in a way neither author anticipated. I built a free, open-source plugin for Claude Code / Codex CLI / Gemini CLI that uses a methodology called &lt;strong&gt;semi-formal execution tracing&lt;/strong&gt; to catch them. Repo + install: &lt;a href="https://github.com/hyhmrright/logic-lens" rel="noopener noreferrer"&gt;github.com/hyhmrright/logic-lens&lt;/a&gt; — feedback and PRs welcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This post is about a class of bugs that pass every automated check we have, because the bug only appears when &lt;strong&gt;two functions interact in a way neither author anticipated&lt;/strong&gt; — and how a methodology called &lt;em&gt;semi-formal execution tracing&lt;/em&gt; can catch them with surprising consistency.&lt;/p&gt;
&lt;h2&gt;
  
  
  The bug your tools can't see
&lt;/h2&gt;

&lt;p&gt;Here's a real-looking function. It passes lint, passes type checks, passes its unit tests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;discount_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;qty&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;discount_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;discount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coupon_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_discount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;discount_code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;discount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;total&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;
    &lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save_order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;email_service&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_confirmation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks fine, right? There are at least three real bugs here, and none of them are visible without tracing across function boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;get_discount&lt;/code&gt; can return &lt;code&gt;None&lt;/code&gt;&lt;/strong&gt; for invalid or expired coupons. &lt;code&gt;1 - None&lt;/code&gt; raises &lt;code&gt;TypeError&lt;/code&gt;. The order is never saved — but the user might assume it was, because no exception is logged at the call site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An empty &lt;code&gt;items&lt;/code&gt; list&lt;/strong&gt; silently produces a &lt;code&gt;$0.00&lt;/code&gt; order. &lt;code&gt;sum([])&lt;/code&gt; returns &lt;code&gt;0&lt;/code&gt;. The order is saved and a confirmation email is sent. No invariant catches this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If &lt;code&gt;email_service.send_confirmation&lt;/code&gt; raises&lt;/strong&gt;, the database connection is never explicitly released. Under sustained SMTP failure, the pool exhausts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A linter can't see any of this. A type checker without strict &lt;code&gt;Optional&lt;/code&gt; annotations can't either. And in my experience, plain LLM code review catches maybe one of the three on a good day — usually the most surface-level one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI reviewers miss interprocedural bugs
&lt;/h2&gt;

&lt;p&gt;A 2026 paper, &lt;em&gt;Agentic Code Reasoning&lt;/em&gt; (Ugare &amp;amp; Chandra), measured this directly. When LLMs are asked to review code with unstructured chain-of-thought, they catch interprocedural bugs at &lt;strong&gt;76–78%&lt;/strong&gt; accuracy. When the same models are forced to follow a structured reasoning template — stating premises explicitly before tracing execution — accuracy jumps to &lt;strong&gt;87–93%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The gap isn't capability. It's discipline. Without structure, the model pattern-matches on what the code &lt;em&gt;looks&lt;/em&gt; like and anchors on the happy path. With structure, it has to actually trace what happens when assumptions break.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Iron Law: four sections per finding
&lt;/h2&gt;

&lt;p&gt;I built a small open-source project called &lt;strong&gt;Logic-Lens&lt;/strong&gt; that operationalizes this methodology. It's a plugin that works with Claude Code, Codex CLI, and Gemini CLI. The core idea: no finding is reported unless it has all four of these sections.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Premises&lt;/strong&gt; — every assumption about name resolution, types, and preconditions, stated explicitly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace&lt;/strong&gt; — the actual execution path, step by step, crossing function boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Divergence&lt;/strong&gt; — the exact point where a premise breaks and what happens after.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remedy&lt;/strong&gt; — a fix that addresses the divergence, not its symptom.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the &lt;code&gt;process_order&lt;/code&gt; example above, here's an abbreviated version of what Logic-Lens produces for the first finding:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🔴 L6 — Callee Contract Mismatch: &lt;code&gt;get_discount&lt;/code&gt; may return &lt;code&gt;None&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Premises:&lt;/em&gt; &lt;code&gt;coupon_service.get_discount(code)&lt;/code&gt; is assumed to always return a numeric discount rate between 0 and 1.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Trace:&lt;/em&gt; &lt;code&gt;discount_code&lt;/code&gt; is truthy → &lt;code&gt;get_discount(discount_code)&lt;/code&gt; is called → result assigned to &lt;code&gt;discount&lt;/code&gt; → &lt;code&gt;total * (1 - discount)&lt;/code&gt; is evaluated.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Divergence:&lt;/em&gt; &lt;code&gt;get_discount&lt;/code&gt; returns &lt;code&gt;None&lt;/code&gt; for expired or invalid codes (documented in its docstring). When &lt;code&gt;discount&lt;/code&gt; is &lt;code&gt;None&lt;/code&gt;, &lt;code&gt;1 - None&lt;/code&gt; raises &lt;code&gt;TypeError&lt;/code&gt;. The call reaches &lt;code&gt;db.save_order&lt;/code&gt; only on the happy path.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remedy:&lt;/em&gt; Check &lt;code&gt;if discount is not None:&lt;/code&gt; before applying. Or have &lt;code&gt;get_discount&lt;/code&gt; raise a typed &lt;code&gt;InvalidCouponError&lt;/code&gt; that the caller handles explicitly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference from "this looks wrong" is that you can audit the reasoning. If the trace is wrong, you can point to which step is wrong. If the premise is bogus, you can correct it. The reasoning is a first-class artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six skills, one taxonomy
&lt;/h2&gt;

&lt;p&gt;Logic-Lens defines six logic risk dimensions (L1–L6): Shadow Override, Type Contract Breach, Boundary Blindspot, State Mutation Hazard, Control Flow Escape, Callee Contract Mismatch. Every finding is labeled with one of these so reports are scannable.&lt;/p&gt;

&lt;p&gt;The project ships six commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/logic-review&lt;/code&gt; — find behavioral bugs via execution tracing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/logic-explain&lt;/code&gt; — step-by-step execution explanation that crosses function boundaries&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/logic-diff&lt;/code&gt; — semantic equivalence check between two versions of a function&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/logic-locate&lt;/code&gt; — root cause localization for a failing test or crash&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/logic-health&lt;/code&gt; — aggregate logic health score across a codebase&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/logic-fix-all&lt;/code&gt; — autonomous audit-and-fix pipeline for an entire repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install on Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add hyhmrright/logic-lens
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;logic-lens@logic-lens-marketplace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;code&gt;/logic-review&lt;/code&gt; and paste any function. Gemini CLI and Codex CLI have equivalent install paths in the README.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this is not
&lt;/h2&gt;

&lt;p&gt;It's not a replacement for your linter — your linter still catches the syntax-level stuff much faster. It's not a static analyzer in the academic sense; it doesn't execute code or build an AST. It's a structured prompting methodology that turns the LLM into a more disciplined reviewer.&lt;/p&gt;

&lt;p&gt;What it's good at: callee contract violations, state mutation hazards, and control flow escapes — the bugs that cause production incidents in syntax-clean, lint-passing code.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'd love help making it better
&lt;/h2&gt;

&lt;p&gt;The project is MIT-licensed: &lt;a href="https://github.com/hyhmrright/logic-lens" rel="noopener noreferrer"&gt;github.com/hyhmrright/logic-lens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The most valuable contribution right now is &lt;strong&gt;new eval test cases&lt;/strong&gt; — especially interprocedural bugs from real production incidents you've encountered. There's an issue template that walks you through the format: paste the minimal repro, label the L1–L6 category, and describe what the four sections (Premises/Trace/Divergence/Remedy) should contain.&lt;/p&gt;

&lt;p&gt;If you try it on real code and it catches something useful — or misses something it shouldn't — please open an issue. The benchmark suite genuinely needs more coverage, and that's where the project gets sharper over time.&lt;/p&gt;

&lt;p&gt;If this resonates, a ⭐ on the repo helps others find it. Thanks for reading.&lt;/p&gt;

</description>
      <category>codequality</category>
      <category>testing</category>
      <category>ai</category>
      <category>showdev</category>
    </item>
    <item>
      <title>13 legendary investors in your terminal. No API keys, no Python, no setup.</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Tue, 21 Apr 2026 14:52:55 +0000</pubDate>
      <link>https://forem.com/hyhmrright/13-legendary-investors-in-your-terminal-no-api-keys-no-python-no-setup-5bd8</link>
      <guid>https://forem.com/hyhmrright/13-legendary-investors-in-your-terminal-no-api-keys-no-python-no-setup-5bd8</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I took the excellent &lt;a href="https://github.com/virattt/ai-hedge-fund" rel="noopener noreferrer"&gt;ai-hedge-fund&lt;/a&gt; project — a multi-agent system where AI versions of famous investors analyze stocks — and rebuilt it as a &lt;strong&gt;pure-prompt Claude Code skill&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No Python. No API keys. No financial data subscription. Just:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/sages NVDA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And 13 legendary investors — Buffett, Munger, Graham, Burry, Taleb, Cathie Wood, Druckenmiller, Ackman, Fisher, Lynch, Pabrai, Damodaran, Jhunjhunwala — walk into the room and argue about your stock.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/hyhmrright/market-sages" rel="noopener noreferrer"&gt;https://github.com/hyhmrright/market-sages&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why rebuild it as a skill?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ai-hedge-fund&lt;/code&gt; is brilliant, but to run it you need a Python environment, multiple LLM API keys, a paid financial data API, and some patience with setup. That's a high bar for the "I just want to hear what Buffett thinks about NVDA on a Tuesday night" crowd — which is most of us.&lt;/p&gt;

&lt;p&gt;Claude Code skills are basically a single markdown file that teaches Claude a new trick. That made me wonder: how much of ai-hedge-fund's value is in the orchestration code, and how much is in the &lt;em&gt;personas and frameworks&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Turns out: a lot of the magic is in the frameworks. And frameworks compress beautifully into prompts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;╔══════════════════════════════════╗
║ 🧠 Warren Buffett                ║
║ Signal: NEUTRAL                  ║
║ Confidence: 55%                  ║
║ Reasoning: Exceptional moat      ║
║ (gaming ecosystem), but current  ║
║ P/E leaves no margin of safety.  ║
╚══════════════════════════════════╝

╔══════════════════════════════════╗
║ 🧠 Michael Burry                 ║
║ Signal: BEARISH                  ║
║ Confidence: 72%                  ║
║ Reasoning: FCF yield ~1.8%,      ║
║ EV/EBIT ~80x — no deep value     ║
║ here, this is momentum not math. ║
╚══════════════════════════════════╝

... (11 more sages)

╔══════════════════════════════════════════════╗
║ 🏦 PORTFOLIO MANAGER — FINAL VERDICT         ║
║ Action: WATCH                                ║
║ Conviction: MEDIUM                           ║
║ Entry Strategy: Wait for 20-25% pullback     ║
╚══════════════════════════════════════════════╝
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each sage has their own signal rules, valuation lens, and voice. Buffett will talk about moats and owner earnings. Burry will quote EV/EBIT and FCF yield. Taleb will refuse to give you a price target and lecture you about tail risk instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design choices that mattered
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Signal rules per investor, not one shared rubric.&lt;/strong&gt;&lt;br&gt;
Buffett's BULLISH is not Cathie Wood's BULLISH. If you give every agent the same "how to decide" rubric, they all sound the same. Each sage has their own thresholds (e.g., Pabrai wants downside &amp;lt;10% before even considering an idea).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Voice style is part of the spec.&lt;/strong&gt;&lt;br&gt;
Munger should be blunt. Fisher should be meticulous. Damodaran should sound like a professor. Specifying tone explicitly makes the output way more readable — you can scan 13 opinions because they don't blur together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. A "Portfolio Manager" synthesis agent at the end.&lt;/strong&gt;&lt;br&gt;
13 opinions is noise unless someone reconciles them. The final agent weighs confidence, flags disagreement clusters, and outputs an actionable verdict.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Let users paste fresh data.&lt;/strong&gt;&lt;br&gt;
LLMs have stale training data. So the skill explicitly tells Claude: if the user pastes financial figures or news, trust those over training knowledge.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/sages AAPL
Revenue: $391B (+2% YoY)
Net Income: $94B
FCF: $107B
P/E: 28x, EV/EBITDA: 22x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Cross-CLI portability.&lt;/strong&gt;&lt;br&gt;
The same &lt;code&gt;skill.md&lt;/code&gt; works in Claude Code. I also wrote thin adapters (&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;GEMINI.md&lt;/code&gt;) so it runs in Codex CLI and Gemini CLI. One prompt, three ecosystems.&lt;/p&gt;
&lt;h2&gt;
  
  
  Install (30 seconds)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code (recommended):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add hyhmrright/market-sages
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;market-sages@market-sages-marketplace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then: &lt;code&gt;/sages AAPL&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codex CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--repo&lt;/span&gt; hyhmrright/market-sages &lt;span class="nt"&gt;--path&lt;/span&gt; skills &lt;span class="nt"&gt;--name&lt;/span&gt; market-sages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gemini CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/extensions &lt;span class="nb"&gt;install &lt;/span&gt;https://github.com/hyhmrright/market-sages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Any other LLM:&lt;/strong&gt; copy &lt;a href="https://github.com/hyhmrright/market-sages/blob/main/skill.md" rel="noopener noreferrer"&gt;skill.md&lt;/a&gt; as your system prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fun things to try
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/sages compare AAPL MSFT GOOG META AMZN
/sages TSLA --value
/sages NVDA @buffett @burry @taleb
Review my portfolio: 40% AAPL, 30% NVDA, 20% TSLA, 10% BTC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Caveats (real ones)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Not financial advice. This is an educational/entertainment tool.&lt;/li&gt;
&lt;li&gt;LLMs hallucinate numbers. Paste real data for anything serious.&lt;/li&gt;
&lt;li&gt;These are &lt;em&gt;AI impressions&lt;/em&gt; of how these investors think, not the actual investors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Credit
&lt;/h2&gt;

&lt;p&gt;Huge credit to &lt;a href="https://github.com/virattt" rel="noopener noreferrer"&gt;@virattt&lt;/a&gt; and &lt;a href="https://github.com/virattt/ai-hedge-fund" rel="noopener noreferrer"&gt;ai-hedge-fund&lt;/a&gt; for the original concept. Market Sages is a lighter, prompt-only sibling — if you want full multi-agent orchestration with real data pipelines, use ai-hedge-fund.&lt;/p&gt;

&lt;p&gt;Repo + docs (中文 / 日本語 / 한국어 included): &lt;a href="https://github.com/hyhmrright/market-sages" rel="noopener noreferrer"&gt;https://github.com/hyhmrright/market-sages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If it helps you think more clearly about a stock, a GitHub star is appreciated 🌟&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Which sage would you add?&lt;/strong&gt; I'm thinking about Soros (reflexivity) or Howard Marks (cycles) next — curious what you'd want to see in the council.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>claude</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Show DEV: brooks-lint — an AI code reviewer that cites Fowler, Martin, and Brooks</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Thu, 16 Apr 2026 16:20:33 +0000</pubDate>
      <link>https://forem.com/hyhmrright/i-synthesized-12-classic-engineering-books-into-an-ai-code-reviewer-heres-what-it-caught-3ed1</link>
      <guid>https://forem.com/hyhmrright/i-synthesized-12-classic-engineering-books-into-an-ai-code-reviewer-heres-what-it-caught-3ed1</guid>
      <description>&lt;p&gt;I gave an AI code reviewer a &lt;code&gt;PaymentProcessor&lt;/code&gt; class — seven services injected, payment + fraud + inventory + notifications all in one 60-line method.&lt;/p&gt;

&lt;p&gt;Here's what it flagged:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔴 &lt;strong&gt;Change Propagation&lt;/strong&gt; — Seven-service constructor signals a God Class in formation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; Fowler — &lt;em&gt;Refactoring&lt;/em&gt; — Divergent Change; Martin — &lt;em&gt;Clean Architecture&lt;/em&gt; — SRP&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consequence:&lt;/strong&gt; This class will change for at least four independent reasons. Each change is a merge conflict waiting to happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remedy:&lt;/strong&gt; Introduce &lt;code&gt;FraudCheckService&lt;/code&gt;, &lt;code&gt;InventoryDeductionService&lt;/code&gt;, &lt;code&gt;PaymentNotifier&lt;/code&gt;. &lt;code&gt;PaymentProcessor&lt;/code&gt; then injects 3 services, not 7.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not "this is bad." Here's &lt;strong&gt;which book&lt;/strong&gt; explains why, &lt;strong&gt;what breaks&lt;/strong&gt; if you ignore it, and &lt;strong&gt;how to fix it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's &lt;strong&gt;brooks-lint&lt;/strong&gt; — an open-source plugin for Claude Code, Codex CLI, and Gemini CLI.&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;github.com/hyhmrright/brooks-lint&lt;/a&gt; · MIT · v1.0.0&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;ESLint flags unused variables. Complexity checkers count branches. SonarQube tracks duplication percentages. All useful. None of them answer the question a senior engineer actually asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What architectural principle is this violating, and what happens if we ignore it?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've spent years reading the classics — Fowler, Martin, Evans, Brooks, Ousterhout, McConnell. Each book has a chapter that makes you think "I've seen this exact failure before." But the insight stays locked in the book.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;brooks-lint is an attempt to make that insight executable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every finding follows the same shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Symptom → Source → Consequence → Remedy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Symptom&lt;/strong&gt; is what the linter sees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source&lt;/strong&gt; is the book + chapter it comes from&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consequence&lt;/strong&gt; is what breaks in six months if you ignore it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remedy&lt;/strong&gt; is a concrete refactor&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Six Decay Risks
&lt;/h2&gt;

&lt;p&gt;After synthesizing twelve books, six patterns kept appearing as root causes of software decay:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;Core Insight&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cognitive Overload&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mental load exceeds working memory → mistakes and avoidance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Change Propagation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One change forces unrelated changes elsewhere&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Knowledge Duplication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same fact in two places → they diverge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Responsibility Rot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One module does too many things&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Dependency Disorder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modules depend on modules that depend on modules…&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Domain Model Distortion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Code doesn't speak the business's language&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;There are also six test-space variants (T1–T6) covering test brittleness, mock abuse, coverage theater, and more.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Twelve Books
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Book&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Risks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The Mythical Man-Month&lt;/td&gt;
&lt;td&gt;Frederick Brooks&lt;/td&gt;
&lt;td&gt;R2, R4, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Complete&lt;/td&gt;
&lt;td&gt;Steve McConnell&lt;/td&gt;
&lt;td&gt;R1, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refactoring&lt;/td&gt;
&lt;td&gt;Martin Fowler&lt;/td&gt;
&lt;td&gt;R1, R2, R3, R4, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean Architecture&lt;/td&gt;
&lt;td&gt;Robert C. Martin&lt;/td&gt;
&lt;td&gt;R2, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Pragmatic Programmer&lt;/td&gt;
&lt;td&gt;Hunt &amp;amp; Thomas&lt;/td&gt;
&lt;td&gt;R2, R3, R4, R5, T2, T3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain-Driven Design&lt;/td&gt;
&lt;td&gt;Eric Evans&lt;/td&gt;
&lt;td&gt;R1, R3, R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A Philosophy of Software Design&lt;/td&gt;
&lt;td&gt;Ousterhout&lt;/td&gt;
&lt;td&gt;R1, R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software Engineering at Google&lt;/td&gt;
&lt;td&gt;Winters et al.&lt;/td&gt;
&lt;td&gt;R2, R5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xUnit Test Patterns&lt;/td&gt;
&lt;td&gt;Meszaros&lt;/td&gt;
&lt;td&gt;T1, T2, T4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Art of Unit Testing&lt;/td&gt;
&lt;td&gt;Osherove&lt;/td&gt;
&lt;td&gt;T1, T2, T3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working Effectively with Legacy Code&lt;/td&gt;
&lt;td&gt;Feathers&lt;/td&gt;
&lt;td&gt;T3, T4, T5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit Testing: Principles, Practices, Patterns&lt;/td&gt;
&lt;td&gt;Khorikov&lt;/td&gt;
&lt;td&gt;T1, T2, T6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The books agree more than they disagree. Fowler's Divergent Change smell, Martin's Single Responsibility Principle, and Evans's Bounded Context are all describing the &lt;strong&gt;same underlying failure&lt;/strong&gt; from different angles.&lt;/p&gt;




&lt;h2&gt;
  
  
  Five Review Modes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/brooks-review   → PR code review (diff-focused)
/brooks-audit    → Architecture audit
/brooks-debt     → Tech debt assessment
/brooks-test     → Test quality review
/brooks-health   → Codebase health dashboard with score
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works on Claude Code, Codex CLI, and Gemini CLI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install in 60 Seconds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin &lt;span class="nb"&gt;install &lt;/span&gt;brooks-lint@brooks-lint-marketplace/brooks-audit&lt;span class="sb"&gt;```&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;% endraw %&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;**&lt;/span&gt;Codex CLI:&lt;span class="k"&gt;**&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;% raw %&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;codex plugin install hyhmrright/brooks-lint&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
plaintext

**Gemini CLI:**


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;gemini extension install hyhmrright/brooks-lint&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Source: [github.com/hyhmrright/brooks-lint](https://github.com/hyhmrright/brooks-lint)

---

## The Hard Part: False Positives

A 60-line function in a data-migration script isn't the same as a 60-line function in a payment handler. The tool needed to know **when not to flag something** — which meant reading the exception clauses in each book more carefully than expected.

The benchmark suite now has **49 scenarios**, including explicit false-positive cases that must not be flagged. That's probably the most useful artifact in the repo — it forces the skill to be calibrated, not just pattern-matching.

---

## I'd Love Your Help

v1.0 is out, but a linter grounded in books is only as good as the communities that stress-test it.

**Three specific ways you can help:**

1. **Try it on a real repo** and open an issue if a finding feels wrong — false positives are the highest-priority bug class
2. **Propose a 13th book** — if there's a classic that covers a failure mode R1–R6 misses, tell me which chapter
3. **Share a code smell** you see constantly in the comments — I'll run brooks-lint on a representative example and post the raw output

⭐ [github.com/hyhmrright/brooks-lint](https://github.com/hyhmrright/brooks-lint)

**Which of the six risks (R1–R6) do you hit most often?** Drop a comment — happy to dig into specific examples.

---

## Also From Me

If brooks-lint's *why-this-matters* framing resonated, I also built **logic-lens** — same philosophy but focused on execution-time behavioral bugs (callee contract mismatches, control flow escapes, boundary blindspots) rather than architectural decay:

[Why AI Code Review Misses Logic Bugs — And How Structured Execution Tracing Fixes It](https://dev.to/hyhmrright/why-ai-code-review-misses-logic-bugs-and-how-structured-execution-tracing-fixes-it-3n0p)

The two tools cover different failure modes and work well together: **logic-lens** catches runtime behavioral bugs via execution tracing; **brooks-lint** diagnoses architectural decay against 12 classic books.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>codequality</category>
      <category>tooling</category>
    </item>
    <item>
      <title>I gave Claude the same code review twice. It missed a SQL injection the second time. So I encoded 12 engineering books into it.</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Wed, 15 Apr 2026 09:13:10 +0000</pubDate>
      <link>https://forem.com/hyhmrright/how-i-encoded-12-classic-engineering-books-into-a-claude-code-skill-56c</link>
      <guid>https://forem.com/hyhmrright/how-i-encoded-12-classic-engineering-books-into-a-claude-code-skill-56c</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The bearing of a child takes nine months, no matter how many women are assigned."&lt;/em&gt;&lt;br&gt;
— Frederick Brooks, The Mythical Man-Month (1975)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fifty years later, Brooks was still right. And so was the rest of my shelf.&lt;/p&gt;




&lt;p&gt;I ran the same code review with Claude twice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First time:&lt;/strong&gt; caught the SQL injection, flagged separation of concerns. Solid review.&lt;br&gt;
&lt;strong&gt;Second time:&lt;/strong&gt; focused on naming conventions. Missed the injection entirely.&lt;/p&gt;

&lt;p&gt;Same code. Same model. Completely different results.&lt;/p&gt;

&lt;p&gt;That's not a Claude problem. That's a &lt;em&gt;consistency&lt;/em&gt; problem. And it's fixable — if you give the model a framework to work from.&lt;/p&gt;

&lt;p&gt;So I encoded 12 classic engineering books into a Claude Code skill. Here's what happened.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Most code quality tools count lines and cyclomatic complexity. That's useful, but it misses the deeper problems: architectural drift, knowledge silos, domain model distortion — the issues that slow teams down for months before anyone notices.&lt;/p&gt;

&lt;p&gt;Meanwhile, the software engineering classics have had answers to these problems for decades. Brooks, Fowler, Martin, McConnell, Evans, Ousterhout — twelve books, fifty years of hard-won wisdom. The insights haven't changed. We just stopped encoding them consistently.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;brooks-lint&lt;/strong&gt; is a Claude Code skill (also works with Gemini CLI and Codex CLI) that diagnoses code against &lt;strong&gt;twelve decay risk dimensions&lt;/strong&gt; synthesized from 12 classic engineering books, producing structured findings with book citations, severity labels, and concrete remedies every time.&lt;/p&gt;
&lt;h3&gt;
  
  
  The 12 Books
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Book&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The Mythical Man-Month&lt;/td&gt;
&lt;td&gt;Frederick Brooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Complete&lt;/td&gt;
&lt;td&gt;Steve McConnell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refactoring&lt;/td&gt;
&lt;td&gt;Martin Fowler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean Architecture&lt;/td&gt;
&lt;td&gt;Robert C. Martin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Pragmatic Programmer&lt;/td&gt;
&lt;td&gt;Hunt &amp;amp; Thomas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain-Driven Design&lt;/td&gt;
&lt;td&gt;Eric Evans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A Philosophy of Software Design&lt;/td&gt;
&lt;td&gt;John Ousterhout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software Engineering at Google&lt;/td&gt;
&lt;td&gt;Winters, Manshreck &amp;amp; Wright&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;xUnit Test Patterns&lt;/td&gt;
&lt;td&gt;Gerard Meszaros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The Art of Unit Testing&lt;/td&gt;
&lt;td&gt;Roy Osherove&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How Google Tests Software&lt;/td&gt;
&lt;td&gt;Whittaker, Arbon &amp;amp; Carollo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working Effectively with Legacy Code&lt;/td&gt;
&lt;td&gt;Michael Feathers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  The Six Production Code Decay Risks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;Diagnostic Question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🧠 Cognitive Overload&lt;/td&gt;
&lt;td&gt;How much mental effort to understand this?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔗 Change Propagation&lt;/td&gt;
&lt;td&gt;How many unrelated things break on one change?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📋 Knowledge Duplication&lt;/td&gt;
&lt;td&gt;Is the same decision expressed in multiple places?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌀 Accidental Complexity&lt;/td&gt;
&lt;td&gt;Is the code more complex than the problem?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏗️ Dependency Disorder&lt;/td&gt;
&lt;td&gt;Do dependencies flow in a consistent direction?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🗺️ Domain Model Distortion&lt;/td&gt;
&lt;td&gt;Does the code faithfully represent the domain?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every finding follows the same chain: &lt;strong&gt;Symptom → Source (book + chapter) → Consequence → Remedy&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Six Test-Suite Decay Risks (New in v0.5)
&lt;/h2&gt;

&lt;p&gt;brooks-lint now also audits your test suite against six test-space decay risks sourced from xUnit Test Patterns, The Art of Unit Testing, How Google Tests Software, and Working Effectively with Legacy Code:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk&lt;/th&gt;
&lt;th&gt;Diagnostic Question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔍 Test Obscurity&lt;/td&gt;
&lt;td&gt;Can you understand what this test verifies at a glance?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧱 Test Brittleness&lt;/td&gt;
&lt;td&gt;Does this test break when unrelated implementation details change?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📋 Test Duplication&lt;/td&gt;
&lt;td&gt;Are the same scenarios covered in multiple places?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🎭 Mock Abuse&lt;/td&gt;
&lt;td&gt;Are mocks hiding real design problems?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📊 Coverage Illusion&lt;/td&gt;
&lt;td&gt;Does high coverage give false confidence?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏗️ Architecture Mismatch&lt;/td&gt;
&lt;td&gt;Do tests reflect the production architecture?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  What It Looks Like
&lt;/h2&gt;

&lt;p&gt;Given this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserService&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update_profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;avatar_url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM users WHERE id = &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# always False — silent bug
&lt;/span&gt;            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;smtp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
        &lt;span class="n"&gt;points&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;login_count&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;UPDATE loyalty SET points=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; WHERE user_id=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;brooks-lint produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Health Score: 28/100

🔴 Change Propagation — Single Method Changes for Four Unrelated Business Reasons
Symptom: update_profile performs profile updates, email notifications, loyalty
         points recalculation, and cache invalidation all in one method body.
Source:  Fowler — Refactoring — Divergent Change
         Hunt &amp;amp; Thomas — The Pragmatic Programmer — Orthogonality
Consequence: Any change to the loyalty formula risks breaking email notifications.
Remedy: Extract NotificationService, LoyaltyService, and UserCacheInvalidator.

🔴 Domain Model Distortion — Silent Logic Bug: Email Notification Never Fires
Symptom: user['email'] = email overwrites the old value before the comparison —
         the condition is always False. The notification is dead code.
Source:  McConnell — Code Complete — Ch. 17: Unusual Control Structures
Consequence: Users are never notified when their email address changes.
Remedy: Capture old_email = user['email'] before any mutation.

(+ 6 more findings including SQL injection, dependency disorder, magic numbers)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Architecture Audit with Dependency Graph (v0.6)
&lt;/h2&gt;

&lt;p&gt;In Mode 2, brooks-lint generates a Mermaid dependency graph color-coded by severity — red = Critical, yellow = Warning, green = clean. It renders natively in GitHub, VS Code, and Notion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four Modes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Short Form&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;PR-level code review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-audit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-audit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Architecture audit with Mermaid dependency graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-debt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-debt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tech debt assessment with prioritized roadmap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/brooks-lint:brooks-test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/brooks-test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Test suite health review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Benchmark Results
&lt;/h2&gt;

&lt;p&gt;Tested across 3 real-world scenarios (PR review, architecture audit, tech debt):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;brooks-lint&lt;/th&gt;
&lt;th&gt;Plain Claude&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Structured findings&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Book citations&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Severity labels&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Health Score (0–100)&lt;/td&gt;
&lt;td&gt;✅ 100%&lt;/td&gt;
&lt;td&gt;❌ 0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall pass rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The gap isn't what Claude &lt;em&gt;can&lt;/em&gt; find — it's what it &lt;em&gt;consistently&lt;/em&gt; finds, with traceable evidence and actionable remedies every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Compares
&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;brooks-lint&lt;/th&gt;
&lt;th&gt;ESLint/Pylint&lt;/th&gt;
&lt;th&gt;GitHub Copilot&lt;/th&gt;
&lt;th&gt;Plain Claude&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Structured diagnosis chain&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Traces findings to classic books&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture-level insights&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain model analysis&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;~&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero config, no plugins&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with any language&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;brooks-lint doesn't replace your linter. It catches what linters can't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code (Recommended)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add hyhmrright/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gemini CLI&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/extensions &lt;span class="nb"&gt;install &lt;/span&gt;https://github.com/hyhmrright/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Codex CLI&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$brooks&lt;/span&gt;&lt;span class="nt"&gt;-review&lt;/span&gt;  &lt;span class="c"&gt;# skills trigger automatically on code quality discussions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Manual Install&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;commands/&lt;span class="k"&gt;*&lt;/span&gt;.md ~/.claude/commands/
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; skills/ ~/.claude/skills/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuration (v0.7)
&lt;/h2&gt;

&lt;p&gt;Place a &lt;code&gt;.brooks-lint.yaml&lt;/code&gt; in your project root to customize behavior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;disable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;T5&lt;/span&gt;  &lt;span class="c1"&gt;# skip coverage metrics check&lt;/span&gt;
&lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;R1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;suggestion&lt;/span&gt;  &lt;span class="c1"&gt;# downgrade Cognitive Overload for this domain&lt;/span&gt;
&lt;span class="na"&gt;ignore&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/*.generated.*"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**/vendor/**"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;https://github.com/hyhmrright/brooks-lint&lt;/a&gt; — MIT licensed, free to use.&lt;/p&gt;




&lt;p&gt;AI can help you write code faster, but it can't tell you whether you're building a cathedral or a tar pit. brooks-lint bridges that gap.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;If you've used AI for code reviews, I'm curious:&lt;/strong&gt; what's your biggest frustration with consistency? Drop it in the comments — I'd love to hear what decay risks you're seeing most.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If this was useful, a ❤️ or unicorn helps others find it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devtools</category>
      <category>ai</category>
      <category>codereview</category>
    </item>
    <item>
      <title>I built a Claude Code plugin that anchors code reviews to 6 classic SE books</title>
      <dc:creator>hyhmrright</dc:creator>
      <pubDate>Mon, 30 Mar 2026 12:49:28 +0000</pubDate>
      <link>https://forem.com/hyhmrright/i-built-a-claude-code-plugin-that-anchors-code-reviews-to-6-classic-se-books-4465</link>
      <guid>https://forem.com/hyhmrright/i-built-a-claude-code-plugin-that-anchors-code-reviews-to-6-classic-se-books-4465</guid>
      <description>&lt;p&gt;If you've used Claude Code for code reviews, you've probably noticed something: the feedback is smart, but it's vague. "This function is too long." "Consider breaking this up." Great — but &lt;em&gt;why&lt;/em&gt;? And what's the actual risk if you don't?&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;brooks-lint&lt;/a&gt; to fix this. It's a Claude Code plugin that anchors every finding to a specific chapter in one of six classic software engineering books.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with AI Code Reviews
&lt;/h2&gt;

&lt;p&gt;Generic AI reviews are good at spotting syntax issues and surface-level smells. But they struggle to explain &lt;em&gt;consequence&lt;/em&gt; — why a particular pattern is dangerous in the long run, not just aesthetically displeasing.&lt;/p&gt;

&lt;p&gt;The result: developers nod, maybe fix the obvious stuff, and move on. The deeper structural decay continues.&lt;/p&gt;

&lt;h2&gt;
  
  
  What brooks-lint Does Differently
&lt;/h2&gt;

&lt;p&gt;Every finding follows a four-part structure I call the &lt;strong&gt;Iron Law&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Symptom   → what the code is doing
Source    → which book + chapter describes this exact pattern
Consequence → what breaks if you ignore it
Remedy    → concrete fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example output:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; &lt;code&gt;UserService&lt;/code&gt; has 847 lines and handles auth, billing, notifications, and user CRUD.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Source:&lt;/strong&gt; Clean Architecture, Ch. 7 — SRP violation; responsibilities should have separate reasons to change.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Consequence:&lt;/strong&gt; Any change to billing logic risks breaking auth; test isolation becomes impossible.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Remedy:&lt;/strong&gt; Extract &lt;code&gt;BillingService&lt;/code&gt; and &lt;code&gt;NotificationService&lt;/code&gt;; keep &lt;code&gt;UserService&lt;/code&gt; focused on identity only.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No vague advice. Just: here's the book, here's the chapter, here's exactly what goes wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Six Source Books
&lt;/h2&gt;

&lt;p&gt;The plugin draws from six foundational texts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Book&lt;/th&gt;
&lt;th&gt;Focus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;The Mythical Man-Month&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Project complexity, conceptual integrity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Clean Code&lt;/em&gt; + &lt;em&gt;Refactoring&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Code-level smells and refactoring patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Clean Architecture&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Dependency rules, component boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Code Complete&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Implementation craft, construction quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;The Pragmatic Programmer&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;DRY, orthogonality, adaptability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Domain-Driven Design&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Ubiquitous language, bounded contexts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Four Review Modes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/brooks-lint:brooks-review   &lt;span class="c"&gt;# PR review — what changed and what it risks&lt;/span&gt;
/brooks-lint:brooks-audit    &lt;span class="c"&gt;# Architecture audit — structural health of the whole system&lt;/span&gt;
/brooks-lint:brooks-debt     &lt;span class="c"&gt;# Tech debt — classify and prioritize what to fix&lt;/span&gt;
/brooks-lint:brooks-test     &lt;span class="c"&gt;# Test quality — coverage gaps, fragile tests, wrong abstractions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The test quality mode (&lt;code&gt;brooks-test&lt;/code&gt;) draws from &lt;em&gt;xUnit Test Patterns&lt;/em&gt;, &lt;em&gt;The Art of Unit Testing&lt;/em&gt;, and Google's &lt;em&gt;Software Engineering&lt;/em&gt; book — it flags things like over-mocking, test logic duplication, and tests that verify implementation instead of behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eval Results
&lt;/h2&gt;

&lt;p&gt;I ran an evaluation comparing reviews with and without the plugin on a set of intentionally seeded codebases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;94%&lt;/strong&gt; of findings included a book citation and structured consequence analysis with the plugin&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;16%&lt;/strong&gt; of findings had equivalent depth without it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The plugin doesn't make Claude smarter — it makes Claude &lt;em&gt;accountable&lt;/em&gt;. When every finding has to cite a chapter, hand-wavy feedback can't survive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Via plugin marketplace (recommended)&lt;/span&gt;
/plugin marketplace add hyhmrright/brooks-lint
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;brooks-lint@brooks-lint-marketplace

&lt;span class="c"&gt;# Manual&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; skills/brooks-lint/ ~/.claude/skills/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why "Brooks"?
&lt;/h2&gt;

&lt;p&gt;Fred Brooks wrote &lt;em&gt;The Mythical Man-Month&lt;/em&gt; in 1975. Most of what he described — conceptual integrity, the second-system effect, the surgical team model — still shows up every week in production code. The plugin is named after him as a reminder that the hard problems in software aren't new, and the best answers to them are already written down.&lt;/p&gt;




&lt;p&gt;GitHub: &lt;a href="https://github.com/hyhmrright/brooks-lint" rel="noopener noreferrer"&gt;hyhmrright/brooks-lint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about how the skill detection works or how I structured the decay risk taxonomy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Update (March 2026): Now on Gemini CLI Too
&lt;/h2&gt;

&lt;p&gt;brooks-lint v0.5.2 now supports &lt;strong&gt;Gemini CLI&lt;/strong&gt; as a first-class platform, in addition to Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini CLI install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/extensions &lt;span class="nb"&gt;install &lt;/span&gt;https://github.com/hyhmrright/brooks-lint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Claude Code install:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace add hyhmrright/brooks-lint
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;brooks-lint@brooks-lint-marketplace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both platforms use the same skill files — same decay risk framework, same Iron Law diagnostics, same book citations. The only difference is the entry point configuration. If you use both tools, one install covers both.&lt;/p&gt;

&lt;p&gt;The extension is also listed on the &lt;a href="https://geminicli.com/extensions" rel="noopener noreferrer"&gt;official Gemini CLI extension gallery&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>showdev</category>
      <category>ai</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
