<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kiran Naragund</title>
    <description>The latest articles on DEV Community by Kiran Naragund (@dev_kiran).</description>
    <link>https://dev.to/dev_kiran</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg</url>
      <title>DEV Community: Kiran Naragund</title>
      <link>https://dev.to/dev_kiran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dev_kiran"/>
    <language>en</language>
    <item>
      <title>Shift Left Code Review: How Qodo Turns Your Coding Agent Into Its Own First Reviewer</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Mon, 14 Sep 2026 05:32:40 +0000</pubDate>
      <link>https://dev.to/dev_kiran/shift-left-code-review-how-qodo-turns-your-coding-agent-into-its-own-first-reviewer-58fc</link>
      <guid>https://dev.to/dev_kiran/shift-left-code-review-how-qodo-turns-your-coding-agent-into-its-own-first-reviewer-58fc</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;I have been thinking about something that has changed quite a bit with AI coding agents.&lt;/p&gt;

&lt;p&gt;A developer can now give a task to Claude Code, Codex, Cursor, or another coding agent and get a working implementation back without writing every line manually.&lt;/p&gt;

&lt;p&gt;That's great for productivity.&lt;/p&gt;

&lt;p&gt;But there is a small problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who reviews the code before the PR?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The usual workflow still looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer gives task to AI agent
        ↓
Agent writes code
        ↓
Agent runs tests
        ↓
Pull request is created
        ↓
AI reviews PR
        ↓
Human reviews PR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The review is still happening after most of the work is already done.&lt;/p&gt;

&lt;p&gt;This is where the idea of &lt;strong&gt;shift-left code review&lt;/strong&gt; becomes interesting.&lt;/p&gt;

&lt;p&gt;Instead of waiting for the PR, what if the coding agent could get its changes reviewed while it is still working?&lt;/p&gt;

&lt;p&gt;That's the idea behind &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt;'s new &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;&lt;strong&gt;Agentic Toolbox&lt;/strong&gt;&lt;/a&gt;, launched on September 9.&lt;/p&gt;

&lt;p&gt;The toolbox lets coding agents use Qodo for codebase context, team rules, independent code review, and finding resolution directly from the coding session. Qodo's review can run against committed and uncommitted local changes before a PR exists.&lt;/p&gt;

&lt;p&gt;And I think there is an important detail here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qodo isn't trying to be the agent that writes the code. It can act as the reviewer for the agent that does.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  What Does “Shift Left” Mean Here?
&lt;/h2&gt;

&lt;p&gt;We've been hearing "shift left" in software development for years.&lt;/p&gt;

&lt;p&gt;The basic idea is simple.&lt;/p&gt;

&lt;p&gt;Find problems earlier.&lt;/p&gt;

&lt;p&gt;Instead of finding a bug in production, find it during testing.&lt;/p&gt;

&lt;p&gt;Instead of finding a security issue during release, find it during development.&lt;/p&gt;

&lt;p&gt;Instead of finding a problem during a code review, find it before the PR is opened.&lt;/p&gt;

&lt;p&gt;With AI coding agents, that last part becomes more important.&lt;/p&gt;

&lt;p&gt;An agent can make a lot of changes very quickly.&lt;/p&gt;

&lt;p&gt;If we let it write code for 20 minutes and only then send everything to a reviewer, we are still using an old review workflow with a new type of developer.&lt;/p&gt;

&lt;p&gt;That's why I think the more interesting question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can AI review AI-generated code?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can we put an independent review step directly into the coding agent's workflow?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The Problem With Letting the Same Agent Review Its Own Code
&lt;/h2&gt;

&lt;p&gt;There is an obvious question here.&lt;/p&gt;

&lt;p&gt;If Claude Code writes the code, can't we simply ask Claude Code to review it?&lt;/p&gt;

&lt;p&gt;Yes, we can.&lt;/p&gt;

&lt;p&gt;And sometimes that's useful.&lt;/p&gt;

&lt;p&gt;But there is a difference between asking the same agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Now review what you just wrote."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and sending the change to a separate review system.&lt;/p&gt;

&lt;p&gt;The agent that wrote the code already has a certain approach in mind.&lt;/p&gt;

&lt;p&gt;It may think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I implemented the requirement, the tests pass, so we're good."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An independent reviewer starts from a different position.&lt;/p&gt;

&lt;p&gt;It can look at the change and ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What could break?&lt;/li&gt;
&lt;li&gt;What requirement was missed?&lt;/li&gt;
&lt;li&gt;Is there a security problem?&lt;/li&gt;
&lt;li&gt;Does this follow the team's rules?&lt;/li&gt;
&lt;li&gt;Are there edge cases?&lt;/li&gt;
&lt;li&gt;Did this change affect something outside the files being edited?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Qodo describes this as an &lt;strong&gt;independent review&lt;/strong&gt;, where the coding agent builds while Qodo acts as a separate quality counterpart.&lt;/p&gt;

&lt;p&gt;That's the part I find useful.&lt;/p&gt;

&lt;p&gt;The goal isn't to make the coding agent smarter at everything.&lt;/p&gt;

&lt;p&gt;It's to give it a second pair of eyes before the work gets to the PR.&lt;/p&gt;


&lt;h2&gt;
  
  
  What the New Qodo Workflow Looks Like
&lt;/h2&gt;

&lt;p&gt;With the &lt;em&gt;Agentic Toolbox&lt;/em&gt;, Qodo provides a set of skills that coding agents can call when they need them.&lt;/p&gt;

&lt;p&gt;Some of the important ones are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;qodo-codebase-wisdom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get-qodo-rules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qodo-review&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qodo-review-resolver&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These cover different parts of the workflow, from understanding the codebase to loading rules and reviewing local changes.&lt;/p&gt;

&lt;p&gt;So a coding task can become something like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Understand the codebase
        ↓
Check the relevant rules
        ↓
Implement the change
        ↓
Run tests
        ↓
Qodo reviews the local changes
        ↓
Agent gets findings
        ↓
Agent fixes safe issues
        ↓
Review again
        ↓
Open PR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This is a much tighter feedback loop.&lt;/p&gt;

&lt;p&gt;And importantly, the PR doesn't have to be the starting point for code review anymore.&lt;/p&gt;


&lt;h2&gt;
  
  
  Let's Take a Simple Example
&lt;/h2&gt;

&lt;p&gt;Imagine I ask a coding agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Update the payment service so temporary failures retry up to three times."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A normal coding agent might search for the retry logic, change the implementation, run the tests, and tell me it's ready.&lt;/p&gt;

&lt;p&gt;But there may be more to the change.&lt;/p&gt;

&lt;p&gt;Maybe another service uses the same interface.&lt;/p&gt;

&lt;p&gt;Maybe the payment service has a rule that every outbound request needs a timeout.&lt;/p&gt;

&lt;p&gt;Maybe retries need an idempotency key.&lt;/p&gt;

&lt;p&gt;Maybe the team already decided in an older PR that certain payment failures must never be retried.&lt;/p&gt;

&lt;p&gt;This is the kind of context that isn't always obvious from the task description.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Qodo's Agentic Toolbox&lt;/a&gt; can let the coding agent investigate related repositories, PR history, specifications, and live Git state before it changes the code.&lt;/p&gt;

&lt;p&gt;So the agent can first ask questions such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which services depend on this interface?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Have we changed this retry behavior before?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gives the agent a better starting point.&lt;/p&gt;


&lt;h2&gt;
  
  
  Rules Should Come Before the Code
&lt;/h2&gt;

&lt;p&gt;There is another part of this that I think is easy to overlook.&lt;/p&gt;

&lt;p&gt;Most companies already have coding rules.&lt;/p&gt;

&lt;p&gt;They might be documented in:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AGENTS.md
CLAUDE.md
README.md
CONTRIBUTING.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or somewhere in an internal engineering wiki.&lt;/p&gt;

&lt;p&gt;The problem is that developers don't always remember all of them, and AI agents definitely don't automatically know your organization's internal rules.&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Qodo's Agentic Toolbox&lt;/a&gt;, the agent can retrieve relevant global, workspace, and repository rules before implementation begins.&lt;/p&gt;

&lt;p&gt;For example, imagine your team has rules like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Payment APIs must use idempotency keys.

External requests must have explicit timeouts.

Sensitive customer data must never be logged.

Changes to shared interfaces require compatibility checks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Instead of discovering these rules during PR review, the agent can get them before writing the first version of the code.&lt;/p&gt;

&lt;p&gt;That's a much better place to enforce them.&lt;/p&gt;


&lt;h2&gt;
  
  
  Then Comes the Interesting Part: Review the Local Changes
&lt;/h2&gt;

&lt;p&gt;Once the agent has finished the implementation, it doesn't necessarily need to open the PR immediately.&lt;/p&gt;

&lt;p&gt;It can ask Qodo to review the changes that currently exist in the local workspace.&lt;/p&gt;

&lt;p&gt;That can include committed and uncommitted changes. Qodo's review engine returns structured findings back into the coding session.&lt;/p&gt;

&lt;p&gt;For example, the agent might get:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Finding 1
The retry loop can continue indefinitely
Severity: High

Finding 2
The payment request does not include an idempotency key
Severity: High

Finding 3
This error is being written to logs with customer data
Severity: Medium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now the agent has something concrete to work with.&lt;/p&gt;

&lt;p&gt;Instead of me copying comments from a PR back into the coding session, the findings are already available to the agent.&lt;/p&gt;

&lt;p&gt;I can tell it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Fix anything you can resolve safely. Leave anything that needs a product or architecture decision for me."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent can make the safe fixes and leave the decisions that need a human.&lt;/p&gt;

&lt;p&gt;That's the part of this workflow that I like.&lt;/p&gt;

&lt;p&gt;It doesn't try to remove the developer from the process.&lt;/p&gt;

&lt;p&gt;It tries to reduce the amount of basic cleanup the developer has to do.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Independent Review Matters
&lt;/h2&gt;

&lt;p&gt;One thing I wouldn't lose in all of this is the word &lt;strong&gt;independent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If the same coding agent writes the code and decides whether the code is good, we haven't really created a second review step.&lt;/p&gt;

&lt;p&gt;We've just added another prompt.&lt;/p&gt;

&lt;p&gt;An independent reviewer gives us a different check.&lt;/p&gt;

&lt;p&gt;Think about a human developer.&lt;/p&gt;

&lt;p&gt;If I write a feature, I might look at my own code and think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This makes sense."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then another developer looks at it and asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why are we doing this here?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What happens when this value is null?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Doesn't another service depend on this?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's why code review exists in the first place.&lt;/p&gt;

&lt;p&gt;The goal isn't only to catch syntax errors.&lt;/p&gt;

&lt;p&gt;It's to catch things the original author didn't think about.&lt;/p&gt;

&lt;p&gt;The same idea makes sense with AI-generated code.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Happens When the Review Finds Something?
&lt;/h2&gt;

&lt;p&gt;This is where the workflow becomes different from a traditional PR review.&lt;/p&gt;

&lt;p&gt;Normally:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI reviewer
     ↓
PR comment
     ↓
Developer reads comment
     ↓
Developer goes back to IDE
     ↓
Developer changes code
     ↓
Push again
     ↓
Reviewer checks again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;With the &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Agentic Toolbox&lt;/a&gt;, the coding agent can receive the Qodo findings directly in its session.&lt;/p&gt;

&lt;p&gt;So the loop can be:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent writes code
     ↓
Qodo reviews local changes
     ↓
Finding comes back
     ↓
Agent investigates
     ↓
Agent fixes it
     ↓
Qodo reviews again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Qodo calls this a way to bring review earlier into the coding workflow. The same review engine can run before the PR and then continue into the normal PR review process.&lt;/p&gt;

&lt;p&gt;That means the review isn't a separate activity bolted onto the end.&lt;/p&gt;

&lt;p&gt;It becomes part of the development loop.&lt;/p&gt;


&lt;h2&gt;
  
  
  This Doesn't Mean Humans Stop Reviewing PRs
&lt;/h2&gt;

&lt;p&gt;I don't think shift-left review means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let the AI review everything and don't bother looking at the PR."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's not the point.&lt;/p&gt;

&lt;p&gt;There are still decisions that an AI agent shouldn't make on its own.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should we change the architecture?&lt;/li&gt;
&lt;li&gt;Is this behavior acceptable for customers?&lt;/li&gt;
&lt;li&gt;Should this migration happen now?&lt;/li&gt;
&lt;li&gt;Is this security tradeoff okay?&lt;/li&gt;
&lt;li&gt;Does this design fit the product?&lt;/li&gt;
&lt;li&gt;Is this technical debt worth taking on?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are different from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You forgot to add the required timeout."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This retry loop has no upper limit."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The idea is to let the agent handle more of the obvious engineering feedback while humans focus on the parts that actually require judgment.&lt;/p&gt;

&lt;p&gt;Qodo describes this as moving toward human oversight rather than asking people to inspect every line of every AI-generated change.&lt;/p&gt;


&lt;h2&gt;
  
  
  What About Cursor and Claude Code?
&lt;/h2&gt;

&lt;p&gt;This workflow isn't really about replacing the coding agent.&lt;/p&gt;

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

&lt;p&gt;If you're already comfortable with Claude Code, Codex, Kiro, or another MCP-compatible coding agent, the idea is to let that agent call Qodo when it needs codebase context, rules, review, or issue resolution.&lt;/p&gt;

&lt;p&gt;For example, with Codex, Qodo announced a plugin on the same September 9 launch date that connects Codex to Qodo's codebase intelligence, organizational rules, and review capabilities. Codex can ask Qodo to review local changes and receive findings in the same session.&lt;/p&gt;

&lt;p&gt;So you don't have to think of this as:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qodo vs Claude Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qodo vs Codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It's closer to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Code / Codex / Kiro
             +
           Qodo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The coding agent does the implementation.&lt;/p&gt;

&lt;p&gt;Qodo provides the context, rules, and independent quality check.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where This Gets Really Useful
&lt;/h2&gt;

&lt;p&gt;I think this becomes much more useful when the repository gets bigger.&lt;/p&gt;

&lt;p&gt;If I'm working on a small personal project, I can probably understand the whole thing myself.&lt;/p&gt;

&lt;p&gt;But in a large organization, an agent might be changing one service inside a system with dozens or hundreds of repositories.&lt;/p&gt;

&lt;p&gt;The changed code may have consumers somewhere else.&lt;/p&gt;

&lt;p&gt;There may be an old PR explaining why something was implemented in a strange way.&lt;/p&gt;

&lt;p&gt;There may be an organization-wide rule that doesn't exist in the repository.&lt;/p&gt;

&lt;p&gt;This is where Qodo's Context Engine becomes part of the workflow.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Agentic Toolbox&lt;/a&gt; can bring repository relationships, PR history, specifications, and live Git state into the coding session.&lt;/p&gt;

&lt;p&gt;So before making a change, the agent can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What else could this break?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's a much better question than simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Does this file compile?"&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  The Real Shift Is Bigger Than Code Review
&lt;/h2&gt;

&lt;p&gt;When people talk about AI coding agents, most conversations focus on how quickly they can generate code.&lt;/p&gt;

&lt;p&gt;I'm more interested in what happens after that.&lt;/p&gt;

&lt;p&gt;If agents are going to write more of our code, then the engineering process around those agents needs to change too.&lt;/p&gt;

&lt;p&gt;We probably don't want this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI generates a lot of code
        ↓
Human reads everything
        ↓
Human finds obvious problems
        ↓
AI fixes them
        ↓
Human reviews again
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That doesn't scale very well.&lt;/p&gt;

&lt;p&gt;A better workflow could be:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent understands the system
        ↓
Agent loads the relevant rules
        ↓
Agent writes the code
        ↓
Independent reviewer checks it
        ↓
Agent fixes safe issues
        ↓
Human reviews important decisions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's what I understand as the real idea behind &lt;strong&gt;shift-left code review for coding agents&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's not simply moving the review button somewhere else.&lt;/p&gt;

&lt;p&gt;It's making quality part of the coding process instead of something that starts after the coding process is finished.&lt;/p&gt;


&lt;h2&gt;
  
  
  How I'd Try This in a Real Project
&lt;/h2&gt;

&lt;p&gt;I wouldn't turn this on for every repository on day one.&lt;/p&gt;

&lt;p&gt;I'd start with one project where developers are already using coding agents.&lt;/p&gt;

&lt;p&gt;Give the agent a real task.&lt;/p&gt;

&lt;p&gt;Something that touches enough of the codebase to make context useful.&lt;/p&gt;

&lt;p&gt;Then try a workflow like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Understand the affected services and dependencies first."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Check the rules that apply to this repository."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Implement the change."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And before opening the PR:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Review my local changes and fix anything you can safely resolve."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The important thing is to see what happens in practice.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the agent find useful issues?&lt;/li&gt;
&lt;li&gt;Does it understand the repository?&lt;/li&gt;
&lt;li&gt;Does it follow the team's rules?&lt;/li&gt;
&lt;li&gt;Does it avoid wasting time fixing low-value comments?&lt;/li&gt;
&lt;li&gt;Does it know when to stop and ask the developer?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those answers will tell you much more than a feature list.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Small Change in Where We Think About Review
&lt;/h2&gt;

&lt;p&gt;For a long time, the pull request has been the natural place where code review happens.&lt;/p&gt;

&lt;p&gt;That's not going away.&lt;/p&gt;

&lt;p&gt;But with coding agents writing more code, I don't think the PR should be the &lt;strong&gt;first&lt;/strong&gt; quality check anymore.&lt;/p&gt;

&lt;p&gt;The agent has already made the change by that point.&lt;/p&gt;

&lt;p&gt;If we can check the local changes first, fix the obvious problems, and then send a cleaner PR to the team, everyone benefits.&lt;/p&gt;

&lt;p&gt;The developer gets faster feedback.&lt;/p&gt;

&lt;p&gt;The reviewer gets a cleaner change.&lt;/p&gt;

&lt;p&gt;The team gets fewer repeated comments.&lt;/p&gt;

&lt;p&gt;And the coding agent gets a feedback loop instead of just generating code and hoping it passes review.&lt;/p&gt;

&lt;p&gt;That's the part of &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Qodo's Agentic Toolbox&lt;/a&gt; that I find most interesting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The coding agent writes the code. Qodo gets a chance to review it before the rest of the team ever sees the PR.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is a pretty practical version of shift-left code review.&lt;/p&gt;


&lt;h2&gt;
  
  
  📚 Want to Read More?
&lt;/h2&gt;

&lt;p&gt;If you're experimenting with coding agents, &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Qodo's Agentic Toolbox &lt;/a&gt;documentation is a good place to start. The current workflow covers codebase questions, team rules, local review, and resolving findings from an open PR.&lt;/p&gt;

&lt;p&gt;Qodo has also published its Codex integration details, which is useful if you're already using Codex and want to see how the review step fits into the same coding session.&lt;/p&gt;
&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI coding agents have made writing code much faster.&lt;/p&gt;

&lt;p&gt;Now I think we're starting to see the next problem: &lt;strong&gt;how do we make sure the code is good before it gets pushed into the normal review process?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's where shifting code review left makes sense.&lt;/p&gt;

&lt;p&gt;Instead of waiting for the PR, give the agent access to the right context, the team's rules, and an independent reviewer.&lt;/p&gt;

&lt;p&gt;Let it catch and fix the things it can.&lt;/p&gt;

&lt;p&gt;Then let humans spend their time on the things that actually need human judgment.&lt;/p&gt;

&lt;p&gt;The PR still matters.&lt;/p&gt;

&lt;p&gt;It's just no longer the first place where quality should happen.&lt;/p&gt;


&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>productivity</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Self-Hosted and On-Prem AI Code Review: What Actually Works for Enterprise Teams?</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Sun, 13 Sep 2026 11:24:49 +0000</pubDate>
      <link>https://dev.to/dev_kiran/self-hosted-and-on-prem-ai-code-review-what-actually-works-for-enterprise-teams-12mb</link>
      <guid>https://dev.to/dev_kiran/self-hosted-and-on-prem-ai-code-review-what-actually-works-for-enterprise-teams-12mb</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;AI code review is getting pretty normal these days. You open a PR, an AI reviewer looks at the changes, and a few seconds later you have comments about bugs, security issues, missing tests, or things that could break.&lt;/p&gt;

&lt;p&gt;But this gets more complicated when you work in an enterprise environment.&lt;/p&gt;

&lt;p&gt;Your code may be sitting in a private GitHub Enterprise, GitLab, or Bitbucket setup. Your security team may not allow source code to leave your network. You may have strict data residency rules, internal model requirements, or even an air-gapped environment.&lt;/p&gt;

&lt;p&gt;So the question isn't just:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Which AI code review tool is the best?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It becomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Which one can actually work inside our environment without making the setup painful?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started looking at this from that angle, especially with &lt;strong&gt;&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt;, &lt;a href="https://www.greptile.com/" rel="noopener noreferrer"&gt;Greptile&lt;/a&gt;, and &lt;a href="https://www.coderabbit.ai/" rel="noopener noreferrer"&gt;CodeRabbit&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There is also a good reason to look at this now.&lt;/p&gt;

&lt;p&gt;On &lt;a href="https://www.qodo.ai/blog/introducing-qodos-agentic-toolbox/" rel="noopener noreferrer"&gt;&lt;strong&gt;September 9, Qodo launched its Agentic Toolbox&lt;/strong&gt;&lt;/a&gt;, which brings codebase context, organizational rules, and Qodo's review capabilities directly into coding agents such as Claude Code, Codex, Kiro, and other agent-based tools.&lt;/p&gt;

&lt;p&gt;That caught my attention because AI code review is slowly moving beyond the PR.&lt;/p&gt;

&lt;p&gt;The coding agent is now writing a lot of the code. So why should we wait until the PR is created before checking it?&lt;/p&gt;

&lt;p&gt;Let's get into it.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, What Does Self-Hosted Actually Mean?
&lt;/h2&gt;

&lt;p&gt;This sounds like a simple question, but it isn't.&lt;/p&gt;

&lt;p&gt;When a vendor says "self-hosted," I don't think we should immediately assume that everything runs inside our network.&lt;/p&gt;

&lt;p&gt;There are a few different things to check.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where does the review service run?&lt;/li&gt;
&lt;li&gt;Where is the code indexed?&lt;/li&gt;
&lt;li&gt;Where are prompts and findings stored?&lt;/li&gt;
&lt;li&gt;Where does the AI model run?&lt;/li&gt;
&lt;li&gt;Does the system need access to an external model API?&lt;/li&gt;
&lt;li&gt;Does it need outbound internet access?&lt;/li&gt;
&lt;li&gt;Can it work in an air-gapped environment?&lt;/li&gt;
&lt;li&gt;Who manages upgrades?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions matter a lot more than the "&lt;em&gt;self-hosted&lt;/em&gt;" label on the website.&lt;/p&gt;

&lt;p&gt;For example, &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt;'s current on-prem architecture runs its services inside the customer's infrastructure using Kubernetes. It also has a Context Engine that can provide deeper codebase information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.greptile.com/" rel="noopener noreferrer"&gt;Greptile&lt;/a&gt; has a self-hosted setup based around Docker and also documents support for air-gapped environments and custom LLM configurations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.coderabbit.ai/" rel="noopener noreferrer"&gt;CodeRabbit&lt;/a&gt; also offers self-hosting for enterprise customers.&lt;/p&gt;

&lt;p&gt;So yes, all three can fit into the enterprise self-hosted conversation.&lt;/p&gt;

&lt;p&gt;But the interesting part starts after that.&lt;/p&gt;




&lt;h2&gt;
  
  
  Qodo vs Greptile vs CodeRabbit
&lt;/h2&gt;

&lt;p&gt;I don't want to turn this into one of those comparison tables where every tool gets a green checkmark.&lt;/p&gt;

&lt;p&gt;In my experience, enterprise teams usually have a few very different problems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Team might mainly care about keeping source code inside its network.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Another might care more about understanding dependencies across hundreds of repositories.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Another might already have a strong PR workflow and simply want an AI reviewer that can fit into it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So let's look at these tools from that point of view.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Qodo's enterprise story goes beyond just running an AI reviewer inside your infrastructure.&lt;/p&gt;

&lt;p&gt;Its on-prem deployment supports running Qodo components inside the customer's environment, with GitHub, GitLab, and Bitbucket integrations. Qodo also supports different model setups, including external model providers and self-hosted models.&lt;/p&gt;

&lt;p&gt;The part I find more interesting is the &lt;strong&gt;context&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In a large company, a PR is rarely just about the files changed in that PR.&lt;/p&gt;

&lt;p&gt;Let's say I change a shared API. The actual flow might look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;Service&lt;/span&gt; &lt;span class="nt"&gt;A&lt;/span&gt;
   &lt;span class="err"&gt;↓&lt;/span&gt;
&lt;span class="nt"&gt;Shared&lt;/span&gt; &lt;span class="nt"&gt;API&lt;/span&gt;
   &lt;span class="err"&gt;↓&lt;/span&gt;
&lt;span class="nt"&gt;Service&lt;/span&gt; &lt;span class="nt"&gt;B&lt;/span&gt;
   &lt;span class="err"&gt;↓&lt;/span&gt;
&lt;span class="nt"&gt;Service&lt;/span&gt; &lt;span class="nt"&gt;C&lt;/span&gt;
   &lt;span class="err"&gt;↓&lt;/span&gt;
&lt;span class="nt"&gt;Database&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;My PR might only change Service A. But Service B and Service C might depend on the same API. This is where repository context becomes useful.&lt;/p&gt;

&lt;p&gt;Qodo's Context Engine is designed to work with things like repository relationships, dependencies, PR history, specs, and live Git state. The goal is to give the reviewer more information than just the current diff.&lt;/p&gt;

&lt;p&gt;Another thing worth mentioning is rules.&lt;/p&gt;

&lt;p&gt;Most teams already have rules for how code should be written. Some are in documentation. Some are in repository files. Some are just things senior developers know after working on the project for a few years.&lt;/p&gt;

&lt;p&gt;Keeping those rules in one place and making them available to both developers and AI tools is becoming more important.&lt;/p&gt;

&lt;p&gt;And this is where the new &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;&lt;strong&gt;Agentic Toolbox&lt;/strong&gt;&lt;/a&gt; launch makes Qodo more interesting.&lt;/p&gt;

&lt;p&gt;With the toolbox, coding agents can ask Qodo for codebase information, retrieve team rules, review their own local changes, and work through findings before creating a PR.&lt;/p&gt;

&lt;p&gt;So instead of:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent writes code
      ↓
Agent opens PR
      ↓
AI reviews PR
      ↓
Developer fixes issues
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can get closer to:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent understands codebase
      ↓
Agent gets team rules
      ↓
Agent writes code
      ↓
Qodo reviews the changes
      ↓
Agent fixes findings
      ↓
PR is opened
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For teams using coding agents heavily, that is a pretty useful shift.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;a href="https://www.greptile.com/" rel="noopener noreferrer"&gt;Greptile&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Greptile is another interesting option if your main requirement is an AI reviewer that understands the wider codebase and can run in your own environment.&lt;/p&gt;

&lt;p&gt;Greptile offers self-hosted deployment and documents support for air-gapped environments. It also supports custom LLM configurations, which can be useful when your company already has an approved model setup.&lt;/p&gt;

&lt;p&gt;One thing Greptile focuses on is building a knowledge graph of the codebase.&lt;/p&gt;

&lt;p&gt;The idea is that the reviewer should understand relationships between files, functions, classes, and other parts of the repository instead of looking at every PR as a completely separate piece of code.&lt;/p&gt;

&lt;p&gt;It can also use existing instruction files such as &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, and Cursor rules.&lt;/p&gt;

&lt;p&gt;I like this approach because most development teams already have some of these files.&lt;/p&gt;

&lt;p&gt;If your repository has something like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AGENTS.md
CLAUDE.md
.cursor/
docs/
.github/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;those files already contain useful information about how developers are expected to work.&lt;/p&gt;

&lt;p&gt;So during an evaluation, I would definitely test how well the tool uses that existing context.&lt;/p&gt;

&lt;p&gt;Greptile makes a lot of sense if your main use case is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"We want an AI code reviewer that understands our codebase and can run in our environment."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a pretty reasonable requirement.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;a href="https://www.coderabbit.ai/" rel="noopener noreferrer"&gt;CodeRabbit&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;CodeRabbit is probably the most familiar model for teams that think about AI code review mainly in terms of pull requests.&lt;/p&gt;

&lt;p&gt;The workflow is easy to understand:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer creates PR
       ↓
CodeRabbit reviews it
       ↓
Comments and findings appear
       ↓
Developer fixes them
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For a lot of teams, that's exactly what they need.&lt;/p&gt;

&lt;p&gt;CodeRabbit also has an Enterprise offering with self-hosting, RBAC, SSO, audit logging, API access, and other enterprise features.&lt;/p&gt;

&lt;p&gt;The self-hosted option is useful for companies that don't want their source code and review data going through a shared SaaS environment.&lt;/p&gt;

&lt;p&gt;So if your team already has a PR-based development process and doesn't want to change much, CodeRabbit is definitely worth evaluating.&lt;/p&gt;

&lt;p&gt;But there is another question I would ask today:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens before the PR?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's becoming more important because coding agents are now creating a lot more code.&lt;/p&gt;

&lt;p&gt;If Claude Code, Cursor, Codex, or another agent writes the implementation, waiting until the PR is opened to start reviewing it may be a little late.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Part Most Enterprise Teams Miss
&lt;/h2&gt;

&lt;p&gt;When I hear "we need self-hosted AI code review," I would not start by asking which product has the best AI.&lt;/p&gt;

&lt;p&gt;I'd start with the infrastructure team.&lt;/p&gt;

&lt;p&gt;Ask them what actually needs to stay inside the network.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source code
Repository index
PR data
Review findings
Logs
Embeddings
LLM requests
Model inference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;These don't necessarily live in the same place.&lt;/p&gt;

&lt;p&gt;You might have the review application running inside your VPC while still sending model requests to an external provider.&lt;/p&gt;

&lt;p&gt;That may be perfectly fine for one company.&lt;/p&gt;

&lt;p&gt;It may be completely unacceptable for another.&lt;/p&gt;

&lt;p&gt;Qodo's documentation, for example, describes support for external providers such as OpenAI, Anthropic, Vertex AI, and AWS Bedrock, as well as self-hosted LLM options.&lt;/p&gt;

&lt;p&gt;Greptile also documents custom LLM configuration for self-hosted deployments.&lt;/p&gt;

&lt;p&gt;This is why I would always ask:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where does the code live?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and separately:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where does the model see the code?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those are two different questions.&lt;/p&gt;


&lt;h2&gt;
  
  
  Self-Hosted Also Means More Work
&lt;/h2&gt;

&lt;p&gt;There is another thing worth remembering.&lt;/p&gt;

&lt;p&gt;Self-hosting gives you more control, but it also gives you more responsibility.&lt;/p&gt;

&lt;p&gt;If you deploy one of these systems yourself, someone has to manage the infrastructure.&lt;/p&gt;

&lt;p&gt;That can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes or containers&lt;/li&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Secrets&lt;/li&gt;
&lt;li&gt;Certificates&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Git authentication&lt;/li&gt;
&lt;li&gt;Model access&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Upgrades&lt;/li&gt;
&lt;li&gt;Backups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, Qodo's on-prem documentation has Kubernetes and infrastructure requirements that a platform team needs to plan for.&lt;/p&gt;

&lt;p&gt;That's not necessarily a problem.&lt;/p&gt;

&lt;p&gt;If you're a large organization, you may already have all of this infrastructure.&lt;/p&gt;

&lt;p&gt;But if your team is expecting:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's self-host this and forget about it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's probably not how it will work.&lt;/p&gt;

&lt;p&gt;I would actually include the deployment effort as part of the POC.&lt;/p&gt;

&lt;p&gt;Don't just ask the vendor to show you a demo.&lt;/p&gt;

&lt;p&gt;Have your own platform team install it.&lt;/p&gt;

&lt;p&gt;That's when you'll find the real problems.&lt;/p&gt;


&lt;h2&gt;
  
  
  Test Codebase Context, Not Just Bug Finding
&lt;/h2&gt;

&lt;p&gt;Another mistake I've seen with AI code review evaluations is testing with very simple PRs.&lt;/p&gt;

&lt;p&gt;For example:&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;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then someone changes it to:&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;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;and asks three tools which one finds the problem.&lt;/p&gt;

&lt;p&gt;That's not a very useful enterprise test.&lt;/p&gt;

&lt;p&gt;Instead, give the tools something that looks like a real change in your organization.&lt;/p&gt;

&lt;p&gt;For example, change a shared API contract.&lt;/p&gt;

&lt;p&gt;Then check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it find the callers?&lt;/li&gt;
&lt;li&gt;Does it understand the dependency?&lt;/li&gt;
&lt;li&gt;Does it notice compatibility issues?&lt;/li&gt;
&lt;li&gt;Does it use the repository's rules?&lt;/li&gt;
&lt;li&gt;Does it understand previous changes?&lt;/li&gt;
&lt;li&gt;Does it explain why the change could be risky?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tells you much more about the tool.&lt;/p&gt;

&lt;p&gt;Qodo and Greptile both put significant emphasis on broader repository context, although they approach it differently.&lt;/p&gt;


&lt;h2&gt;
  
  
  What About Coding Agents?
&lt;/h2&gt;

&lt;p&gt;This is probably the biggest reason I wanted to write this article now.&lt;/p&gt;

&lt;p&gt;The way we write software is changing.&lt;/p&gt;

&lt;p&gt;A few years ago, the normal flow was:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
   ↓
Writes code
   ↓
Opens PR
   ↓
AI reviews PR
   ↓
Human reviews PR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now we increasingly have:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
   ↓
Gives task to coding agent
   ↓
Agent explores code
   ↓
Agent writes code
   ↓
Agent runs tests
   ↓
Agent opens PR
   ↓
AI reviews PR
   ↓
Human reviews PR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The agent is doing more of the actual implementation.&lt;/p&gt;

&lt;p&gt;So I think code review also needs to move earlier.&lt;/p&gt;

&lt;p&gt;This is the idea behind &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Qodo's Agentic Toolbox&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The toolbox gives coding agents access to Qodo's codebase context, rules, review capabilities, and finding resolution. The agent can review committed or uncommitted changes before the PR exists and fix issues during the same session.&lt;/p&gt;

&lt;p&gt;For example, instead of telling your agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Implement this feature."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;you can have a workflow closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Understand the service, check our rules, implement the change, review your local changes, and fix any issues you find."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's a very different workflow from simply adding an AI bot to the PR.&lt;/p&gt;

&lt;p&gt;And I think this is where enterprise code review is heading.&lt;/p&gt;


&lt;h2&gt;
  
  
  So Which One Would I Pick?
&lt;/h2&gt;

&lt;p&gt;Honestly, it depends on what problem you're trying to solve.&lt;/p&gt;

&lt;p&gt;If the main requirement is &lt;strong&gt;self-hosted AI code review&lt;/strong&gt;, all three are worth putting through a real POC.&lt;/p&gt;

&lt;p&gt;If you want a strong &lt;strong&gt;codebase-aware review experience with enterprise deployment&lt;/strong&gt;, Greptile is worth looking at.&lt;/p&gt;

&lt;p&gt;If you already have a strong &lt;strong&gt;PR-focused workflow&lt;/strong&gt; and want to add AI review without changing the process too much, CodeRabbit makes sense to evaluate.&lt;/p&gt;

&lt;p&gt;If you're looking at the bigger picture, where &lt;strong&gt;code review, repository context, engineering rules, governance, and coding agents&lt;/strong&gt; all need to work together, I'd put Qodo high on the list.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Agentic Toolbox &lt;/a&gt;makes that last part especially interesting because Qodo is not only thinking about the PR anymore. Its tools can be used directly by coding agents while they are working on the code.&lt;/p&gt;


&lt;h2&gt;
  
  
  What I'd Check During a POC
&lt;/h2&gt;

&lt;p&gt;If I were evaluating these tools for an enterprise team, I'd keep the test pretty simple.&lt;/p&gt;

&lt;p&gt;Take one real repository.&lt;/p&gt;

&lt;p&gt;Then take one change that touches a shared component.&lt;/p&gt;

&lt;p&gt;Run the same change through each tool.&lt;/p&gt;

&lt;p&gt;I'd look at five things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How hard was it to get running inside our environment?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Data flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What leaves the network, and when?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does the reviewer understand the code around the PR?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Can it follow our actual engineering standards?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Developer workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Does it give useful feedback at the right time, or does it just add more comments to the PR?&lt;/p&gt;

&lt;p&gt;And if your developers are already using coding agents, I'd add one more test:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can the agent use the review system before opening the PR?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's becoming a pretty important question.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Self-hosted AI code review isn't just about putting an AI reviewer behind your firewall.&lt;/p&gt;

&lt;p&gt;There are a lot more pieces involved.&lt;/p&gt;

&lt;p&gt;You need to think about where your source code goes, where the repository index lives, which model is being used, how the system connects to your Git provider, who operates it, and how much context the reviewer actually has.&lt;/p&gt;

&lt;p&gt;Qodo, Greptile, and CodeRabbit are all interesting options, but they solve the problem from slightly different angles.&lt;/p&gt;

&lt;p&gt;For me, the bigger change is what is happening around coding agents.&lt;/p&gt;

&lt;p&gt;When an agent can write hundreds of lines of code in a session, waiting for a PR reviewer to find basic problems isn't always the best workflow.&lt;/p&gt;

&lt;p&gt;I'd rather have the agent understand the codebase, read the team's rules, write the code, review its own changes, fix obvious findings, and then open the PR.&lt;/p&gt;

&lt;p&gt;Humans still get the final say.&lt;/p&gt;

&lt;p&gt;But hopefully, by the time the PR reaches us, we're reviewing the things that actually need human judgment instead of spending our time finding problems an agent could have caught five minutes earlier.&lt;/p&gt;

&lt;p&gt;That's where I think enterprise AI code review is heading.&lt;/p&gt;

&lt;p&gt;And the September 9 launch of &lt;a href="https://docs.qodo.ai/agentic-toolbox/agentic-toolbox-overview" rel="noopener noreferrer"&gt;Qodo's Agentic Toolbox&lt;/a&gt; is a good example of that shift, from &lt;strong&gt;AI reviewing code after it's written&lt;/strong&gt; to &lt;strong&gt;AI quality checks becoming part of the coding workflow itself&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
    <item>
      <title>Best AI Code Review Tools for GitHub in 2026</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Sun, 02 Aug 2026 09:42:38 +0000</pubDate>
      <link>https://dev.to/dev_kiran/best-ai-code-review-tools-for-github-in-2026-4pjk</link>
      <guid>https://dev.to/dev_kiran/best-ai-code-review-tools-for-github-in-2026-4pjk</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;AI coding assistants have dramatically accelerated code generation.&lt;/p&gt;

&lt;p&gt;Whether you're using Cursor, GitHub Copilot, Claude Code, or Windsurf, writing code is faster than ever. The challenge is that code review hasn't improved at the same pace.&lt;/p&gt;

&lt;p&gt;Teams are shipping larger pull requests, reviewing more AI-generated code, and spending increasing amounts of time validating whether changes are actually correct, maintainable, and aligned with existing architecture.&lt;/p&gt;

&lt;p&gt;That's exactly why AI code review tools have become a key part of modern GitHub workflows.&lt;/p&gt;

&lt;p&gt;The problem is that not all AI review tools solve the same problem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some generate pull request summaries.&lt;/li&gt;
&lt;li&gt;Some focus on security and compliance.&lt;/li&gt;
&lt;li&gt;Some extend traditional static analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Others attempt to understand repository-wide context and review changes the way an experienced teammate would.&lt;/p&gt;

&lt;p&gt;If you're evaluating AI code review tools for GitHub, here's a practical comparison of the most widely discussed options in 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Quick Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; stands out for teams that need automated pull request reviews with repository-wide context, not just diff analysis.&lt;/p&gt;

&lt;p&gt;The GitHub integration is straightforward, reviews run automatically on pull requests, and the platform focuses on understanding dependencies, related files, and existing code patterns across the repository.&lt;/p&gt;

&lt;p&gt;For small projects, lightweight review tools may be sufficient.&lt;/p&gt;

&lt;p&gt;For larger codebases, AI-generated code, and complex pull requests, context-aware review becomes significantly more valuable.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes a Good GitHub AI Review Tool?
&lt;/h2&gt;

&lt;p&gt;Before comparing tools, it's worth defining what actually matters.&lt;/p&gt;

&lt;p&gt;For most engineering teams, four factors determine whether an AI review tool provides real value.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Integration
&lt;/h3&gt;

&lt;p&gt;Reviews should appear where developers already work, directly inside GitHub pull requests.&lt;/p&gt;

&lt;p&gt;Nobody wants another dashboard, notification stream, or workflow to manage.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Review Quality
&lt;/h3&gt;

&lt;p&gt;Useful reviews surface meaningful issues, not just more comments.&lt;/p&gt;

&lt;p&gt;The goal isn't volume. It's identifying problems developers would otherwise miss.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Context Awareness
&lt;/h3&gt;

&lt;p&gt;The best reviewers understand how changes affect the rest of the codebase.&lt;/p&gt;

&lt;p&gt;Looking only at modified lines is often insufficient for complex systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Setup and Maintenance
&lt;/h3&gt;

&lt;p&gt;Developers adopt tools faster when setup takes minutes, not weeks.&lt;/p&gt;

&lt;p&gt;The best solutions require minimal configuration and ongoing maintenance.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; automates code reviews inside GitHub while analyzing changes in repository context.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Liked
&lt;/h3&gt;

&lt;p&gt;Qodo's biggest strength is understanding code beyond the pull request diff.&lt;/p&gt;

&lt;p&gt;Instead of evaluating only modified files, it attempts to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Related files&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Existing implementation patterns&lt;/li&gt;
&lt;li&gt;Historical review context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This becomes particularly useful when a pull request spans multiple services, modules, or shared components.&lt;/p&gt;

&lt;p&gt;Many bugs are not introduced within the changed file itself. They're caused by missing updates elsewhere in the system.&lt;/p&gt;

&lt;p&gt;Context-aware analysis helps identify those issues before they reach production.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Integration
&lt;/h3&gt;

&lt;p&gt;Getting started is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the &lt;a href="https://github.com/marketplace/qodo-merge-pro" rel="noopener noreferrer"&gt;GitHub app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Grant repository access&lt;/li&gt;
&lt;li&gt;Select repositories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After setup, reviews run automatically whenever pull requests are opened or updated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Medium and large engineering teams&lt;/li&gt;
&lt;li&gt;Teams reviewing AI-generated code&lt;/li&gt;
&lt;li&gt;Multi-service architectures&lt;/li&gt;
&lt;li&gt;Complex repositories&lt;/li&gt;
&lt;li&gt;Teams prioritizing review quality over comment volume&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. CodeRabbit
&lt;/h2&gt;

&lt;p&gt;CodeRabbit is popular for delivering AI-powered pull request feedback with minimal setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Liked
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Quick installation&lt;/li&gt;
&lt;li&gt;Helpful pull request summaries&lt;/li&gt;
&lt;li&gt;Easy adoption&lt;/li&gt;
&lt;li&gt;Good developer experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many teams, it's one of the fastest ways to introduce AI reviews into GitHub workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where It Can Struggle
&lt;/h3&gt;

&lt;p&gt;Most feedback is generated from the pull request diff, with limited repository-wide context.&lt;/p&gt;

&lt;p&gt;For smaller applications, this approach often works well.&lt;/p&gt;

&lt;p&gt;As systems grow more interconnected, diff-only reviews can miss architectural dependencies, downstream effects, and implementation consistency across services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Small engineering teams&lt;/li&gt;
&lt;li&gt;Startups&lt;/li&gt;
&lt;li&gt;Simpler repositories&lt;/li&gt;
&lt;li&gt;Teams looking for lightweight AI review assistance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. SonarQube
&lt;/h2&gt;

&lt;p&gt;SonarQube focuses on code quality and security analysis rather than AI-driven review workflows.&lt;/p&gt;

&lt;p&gt;Although it's frequently mentioned alongside AI review tools, its primary purpose is different.&lt;/p&gt;

&lt;h3&gt;
  
  
  What It Does Well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Security scanning&lt;/li&gt;
&lt;li&gt;Vulnerability detection&lt;/li&gt;
&lt;li&gt;Technical debt tracking&lt;/li&gt;
&lt;li&gt;Code smells&lt;/li&gt;
&lt;li&gt;Test coverage reporting&lt;/li&gt;
&lt;li&gt;Quality gates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What It's Not Trying To Do
&lt;/h3&gt;

&lt;p&gt;SonarQube excels at enforcing quality standards, security rules, and maintainability checks.&lt;/p&gt;

&lt;p&gt;It is not designed to provide contextual pull request feedback or repository-level reasoning in the same way dedicated AI review platforms do.&lt;/p&gt;

&lt;p&gt;Think of it as a powerful quality enforcement platform rather than an AI reviewer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enterprise engineering teams&lt;/li&gt;
&lt;li&gt;Security-focused organizations&lt;/li&gt;
&lt;li&gt;Compliance requirements&lt;/li&gt;
&lt;li&gt;Governance-heavy development environments&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. GitHub Copilot Code Review
&lt;/h2&gt;

&lt;p&gt;GitHub continues expanding Copilot's review capabilities directly within the GitHub platform.&lt;/p&gt;

&lt;p&gt;For teams already invested in the GitHub ecosystem, this creates a seamless experience with no additional tooling required.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Liked
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Native GitHub integration&lt;/li&gt;
&lt;li&gt;Familiar developer workflow&lt;/li&gt;
&lt;li&gt;No additional platform management&lt;/li&gt;
&lt;li&gt;Convenient for existing Copilot users&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Current Limitations
&lt;/h3&gt;

&lt;p&gt;Review suggestions are primarily pull request focused and less repository-aware than dedicated review platforms.&lt;/p&gt;

&lt;p&gt;For simple reviews, this is often enough.&lt;/p&gt;

&lt;p&gt;Teams requiring deeper architectural understanding, broader repository context, or more advanced automation may still benefit from specialized review tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best For
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Existing GitHub Copilot customers&lt;/li&gt;
&lt;li&gt;Small teams&lt;/li&gt;
&lt;li&gt;Lightweight review assistance&lt;/li&gt;
&lt;li&gt;GitHub-first development workflows&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Which Tool Should You Choose?
&lt;/h2&gt;

&lt;p&gt;The right tool depends on how your team reviews, ships, and maintains code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose Qodo if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You review large pull requests&lt;/li&gt;
&lt;li&gt;Multiple services interact with each other&lt;/li&gt;
&lt;li&gt;AI-generated code is becoming common&lt;/li&gt;
&lt;li&gt;Repository-wide context matters&lt;/li&gt;
&lt;li&gt;You want deeper review feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose CodeRabbit if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want lightweight AI reviews&lt;/li&gt;
&lt;li&gt;Your repositories are relatively straightforward&lt;/li&gt;
&lt;li&gt;Fast adoption is a priority&lt;/li&gt;
&lt;li&gt;Pull request summaries are important&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose SonarQube if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Security is a primary concern&lt;/li&gt;
&lt;li&gt;Compliance requirements exist&lt;/li&gt;
&lt;li&gt;You need quality gates&lt;/li&gt;
&lt;li&gt;Static analysis is a core requirement&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Choose GitHub Copilot Review if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You're already using Copilot&lt;/li&gt;
&lt;li&gt;You want basic review assistance&lt;/li&gt;
&lt;li&gt;Keeping everything inside GitHub is important&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Want to Learn More?
&lt;/h2&gt;

&lt;p&gt;If you're evaluating AI code reviews, these resources provide deeper technical guidance and practical examples.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.qodo.ai/academy/ai-code-review/" rel="noopener noreferrer"&gt;&lt;strong&gt;What is AI Code Review&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A practical introduction to how AI review systems work and the types of issues they can identify.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.qodo.ai/academy/ai-generated-code-in-enterprise/" rel="noopener noreferrer"&gt;&lt;strong&gt;Reviewing AI-Generated Code&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Useful for teams increasingly relying on Cursor, Copilot, Claude Code, and other AI coding assistants.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.qodo.ai/academy/ai-code-review-tools-comparison-and-benchmarks/" rel="noopener noreferrer"&gt;&lt;strong&gt;AI Code Review Tools Comparison&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A deeper comparison of review approaches, workflows, strengths, and tradeoffs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Not all AI code review tools solve the same problem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some focus on pull request summaries.&lt;/li&gt;
&lt;li&gt;Some focus on security.&lt;/li&gt;
&lt;li&gt;Some focus on static analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Others focus on understanding how a change fits into the broader codebase.&lt;/p&gt;

&lt;p&gt;For GitHub teams, the best choice depends on the bottlenecks you're trying to eliminate.&lt;/p&gt;

&lt;p&gt;If your team is reviewing increasing volumes of AI-generated code, context awareness and review quality often matter far more than the number of comments an AI tool can generate.&lt;/p&gt;

&lt;p&gt;The most valuable reviewers aren't the ones that comment the most.&lt;/p&gt;

&lt;p&gt;They're the ones that catch issues developers would have otherwise missed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 

</description>
      <category>aiops</category>
      <category>code</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>What "Context-Aware Code Review" Actually Means🤔</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Sat, 01 Aug 2026 13:27:33 +0000</pubDate>
      <link>https://dev.to/dev_kiran/what-context-aware-code-review-actually-means-30gm</link>
      <guid>https://dev.to/dev_kiran/what-context-aware-code-review-actually-means-30gm</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;If you've looked at AI code review tools recently, you've probably seen the term &lt;strong&gt;"context-aware code review"&lt;/strong&gt; everywhere.&lt;/p&gt;

&lt;p&gt;Every tool seems to use it.&lt;/p&gt;

&lt;p&gt;Some talk about repository awareness. Others mention codebase understanding. A few claim they understand architecture and engineering best practices.&lt;/p&gt;

&lt;p&gt;After spending some time reading docs, testing different tools, and comparing how they review pull requests, I realized something:&lt;/p&gt;

&lt;p&gt;Most of us don't really know what "context-aware" means.&lt;/p&gt;

&lt;p&gt;The term gets thrown around so often that it's hard to tell whether a tool actually understands your codebase or is simply reviewing the diff and calling it context.&lt;/p&gt;

&lt;p&gt;So I wanted to dig into what context actually means in code review and why it matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  Most Reviews Start With The Diff
&lt;/h2&gt;

&lt;p&gt;Whether the review is done by a human or an AI tool, the starting point is usually the same.&lt;/p&gt;

&lt;p&gt;The pull request &lt;strong&gt;diff&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Reviewers look at what changed, which files were modified, what code was added or removed, and whether tests were updated.&lt;/p&gt;

&lt;p&gt;AI review tools generally work the same way. They receive the diff and generate feedback based on the changes.&lt;/p&gt;

&lt;p&gt;For a lot of pull requests, that's completely fine.&lt;/p&gt;

&lt;p&gt;If you're fixing a typo, updating a utility function, or cleaning up some code, the diff often contains everything needed to review the change.&lt;/p&gt;

&lt;p&gt;The problem starts when the change affects behavior outside the files being modified.&lt;/p&gt;

&lt;p&gt;That's where context becomes important.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Simple Example
&lt;/h2&gt;

&lt;p&gt;Let's say a pull request contains this line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;updatePaymentStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paymentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Looking only at the diff, nothing seems wrong.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The code compiles.&lt;/li&gt;
&lt;li&gt;Tests pass.&lt;/li&gt;
&lt;li&gt;No obvious issues stand out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But imagine a few things are true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The payment service is supposed to publish an event whenever the status changes.&lt;/li&gt;
&lt;li&gt;Audit logs are required for compliance reasons.&lt;/li&gt;
&lt;li&gt;Similar update flows also update metadata fields.&lt;/li&gt;
&lt;li&gt;Another service depends on a specific side effect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that information exists in the diff.&lt;/p&gt;

&lt;p&gt;If you're familiar with the system, you might catch the issue immediately.&lt;/p&gt;

&lt;p&gt;If you're not, you'll probably need to search the repository, look at similar implementations, and understand how this piece fits into the larger application.&lt;/p&gt;

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


&lt;h2&gt;
  
  
  So What Does "Context" Actually Mean?
&lt;/h2&gt;

&lt;p&gt;When people talk about context-aware code review, they're usually talking about information that exists outside the pull request itself.&lt;/p&gt;

&lt;p&gt;The exact definition varies between tools, but it generally falls into a few categories.&lt;/p&gt;
&lt;h3&gt;
  
  
  Repository Context
&lt;/h3&gt;

&lt;p&gt;This is probably the most common type.&lt;/p&gt;

&lt;p&gt;Instead of looking only at the modified files, a tool also examines surrounding code.&lt;/p&gt;

&lt;p&gt;For example, if you're changing a service method, it might inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Related services&lt;/li&gt;
&lt;li&gt;Shared utilities&lt;/li&gt;
&lt;li&gt;Existing implementations&lt;/li&gt;
&lt;li&gt;Similar patterns elsewhere in the repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A diff-only review doesn't usually do this.&lt;/p&gt;

&lt;p&gt;It sees the change.&lt;/p&gt;

&lt;p&gt;A context-aware review tries to understand where that change lives.&lt;/p&gt;
&lt;h3&gt;
  
  
  Historical Context
&lt;/h3&gt;

&lt;p&gt;Sometimes the most important information isn't in the code.&lt;/p&gt;

&lt;p&gt;It's in previous decisions.&lt;/p&gt;

&lt;p&gt;Every team develops conventions over time. Some patterns become standard because they've worked well. Others exist because someone got burned by a production issue three years ago.&lt;/p&gt;

&lt;p&gt;Historical context can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Previous pull requests&lt;/li&gt;
&lt;li&gt;Review comments&lt;/li&gt;
&lt;li&gt;Team conventions&lt;/li&gt;
&lt;li&gt;Accepted implementation patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Experienced engineers naturally use this information when reviewing code.&lt;/p&gt;

&lt;p&gt;A truly context-aware tool should be able to leverage some of it as well.&lt;/p&gt;
&lt;h3&gt;
  
  
  Dependency Context
&lt;/h3&gt;

&lt;p&gt;Modern systems are connected in ways that aren't always obvious.&lt;/p&gt;

&lt;p&gt;A small change in one service can impact shared libraries, downstream systems, APIs, or external integrations.&lt;/p&gt;

&lt;p&gt;This becomes even more important in organizations with multiple repositories and distributed architectures.&lt;/p&gt;

&lt;p&gt;A pull request can look perfectly fine inside its own repository while still creating problems somewhere else.&lt;/p&gt;

&lt;p&gt;That's why dependency awareness matters.&lt;/p&gt;
&lt;h3&gt;
  
  
  Architectural Context
&lt;/h3&gt;

&lt;p&gt;This is probably the hardest problem to solve.&lt;/p&gt;

&lt;p&gt;Most mature systems have architectural rules that aren't explicitly written in every file.&lt;/p&gt;

&lt;p&gt;Maybe services aren't supposed to access certain domains directly.&lt;/p&gt;

&lt;p&gt;Maybe events are required for specific workflows.&lt;/p&gt;

&lt;p&gt;Maybe security checks must happen before certain operations.&lt;/p&gt;

&lt;p&gt;A review tool that understands architecture should be able to recognize when a change violates those expectations.&lt;/p&gt;

&lt;p&gt;That's much harder than checking syntax or spotting a bug pattern.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Can You Tell If A Tool Is Actually Context-Aware?
&lt;/h2&gt;

&lt;p&gt;This is the question I started asking whenever I evaluated a new review tool.&lt;/p&gt;

&lt;p&gt;Instead of looking at marketing claims, I focused on what the feedback actually looked like.&lt;/p&gt;

&lt;p&gt;One thing I noticed is that good review comments usually explain &lt;em&gt;why&lt;/em&gt; something matters.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Consider updating this implementation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's technically feedback, but it's not very useful.&lt;/p&gt;

&lt;p&gt;Compare that with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Similar update flows publish an event after status changes. This implementation does not appear to do that, which could lead to inconsistent downstream behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second comment demonstrates awareness of patterns outside the modified code.&lt;/p&gt;

&lt;p&gt;That's a much stronger signal that the tool understands context.&lt;/p&gt;

&lt;p&gt;Another thing I look for is whether the tool can connect changes to code that wasn't modified.&lt;/p&gt;

&lt;p&gt;Many tools only analyze changed files.&lt;/p&gt;

&lt;p&gt;There's nothing wrong with that.&lt;/p&gt;

&lt;p&gt;But if a tool claims to understand context, I expect it to reference related parts of the codebase when they're relevant.&lt;/p&gt;

&lt;p&gt;I also pay attention to whether the feedback reflects team conventions.&lt;/p&gt;

&lt;p&gt;Every engineering team develops its own standards around logging, testing, security, error handling, and observability.&lt;/p&gt;

&lt;p&gt;The best review feedback feels specific to the project.&lt;/p&gt;

&lt;p&gt;The worst feedback feels like generic advice copied from a programming textbook.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why This Matters More Than Ever
&lt;/h2&gt;

&lt;p&gt;The way we write code is changing.&lt;/p&gt;

&lt;p&gt;Many teams now use tools like Cursor, GitHub Copilot, Claude Code, and other AI coding assistants every day.&lt;/p&gt;

&lt;p&gt;That means more code is being generated faster than ever.&lt;/p&gt;

&lt;p&gt;As a result, review workload keeps increasing.&lt;/p&gt;

&lt;p&gt;Reviewers aren't just checking code quality anymore.&lt;/p&gt;

&lt;p&gt;They're increasingly responsible for understanding how generated code fits into existing systems, patterns, and architectural decisions.&lt;/p&gt;

&lt;p&gt;That's where context becomes valuable.&lt;/p&gt;

&lt;p&gt;Not because AI replaces human reviewers.&lt;/p&gt;

&lt;p&gt;Because modern codebases are becoming too large and interconnected to reason about from a single pull request alone.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; Fits In
&lt;/h2&gt;

&lt;p&gt;One thing I found interesting about &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt;'s approach is its focus on gathering context before generating feedback.&lt;/p&gt;

&lt;p&gt;Instead of looking only at changed lines, it attempts to understand related files, repository structure, dependencies, previous review activity, and existing code patterns.&lt;/p&gt;

&lt;p&gt;The goal isn't to generate more comments.&lt;/p&gt;

&lt;p&gt;The goal is to generate comments that are actually relevant to the change being reviewed.&lt;/p&gt;

&lt;p&gt;Whether any tool succeeds at that should ultimately be judged by developers using it in real projects.&lt;/p&gt;

&lt;p&gt;But personally, I think this is a much better way to evaluate AI review tools than asking whether they use AI or how many comments they generate.&lt;/p&gt;

&lt;p&gt;Checkout Qodo here: &lt;a href="https://www.qodo.ai" rel="noopener noreferrer"&gt;https://www.qodo.ai&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;"Context-aware code review" has become one of those terms that everyone uses but rarely defines.&lt;/p&gt;

&lt;p&gt;Some tools are mostly diff reviewers.&lt;/p&gt;

&lt;p&gt;Others try to understand repository structure, dependencies, historical decisions, and architectural patterns before generating feedback.&lt;/p&gt;

&lt;p&gt;Neither approach is automatically better.&lt;/p&gt;

&lt;p&gt;The important thing is understanding what kind of context a tool actually uses and where its feedback comes from.&lt;/p&gt;

&lt;p&gt;Because in my experience, the biggest production issues are rarely hidden in the syntax.&lt;/p&gt;

&lt;p&gt;They're usually hidden in the context surrounding the change.&lt;/p&gt;

&lt;p&gt;And that's exactly the part that's easiest to miss when you're only looking at a diff.&lt;/p&gt;


&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>BrowserAct Hit #1 on Product Hunt, So I Decided to Test It 🧙‍♂️</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Sun, 05 Jul 2026 10:14:20 +0000</pubDate>
      <link>https://dev.to/dev_kiran/browseract-hit-1-on-product-hunt-so-i-decided-to-test-it-96m</link>
      <guid>https://dev.to/dev_kiran/browseract-hit-1-on-product-hunt-so-i-decided-to-test-it-96m</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;Over the last few months, AI agents have been evolving very quickly. We are no longer building simple chatbots that answer questions. Today, agents browse websites, execute workflows, monitor dashboards, interact with SaaS platforms, and perform actions that previously required manual work.&lt;/p&gt;

&lt;p&gt;Recently, &lt;a href="https://www.browseract.ai/Kiran" rel="noopener noreferrer"&gt;BrowserAct&lt;/a&gt; reached the top position on &lt;a href="https://www.producthunt.com/leaderboard/daily/2026/6/25" rel="noopener noreferrer"&gt;Product Hunt&lt;/a&gt;, which immediately caught my attention. Products often receive attention during launch periods, but reaching the number one spot usually means people see a real problem being solved rather than just another feature release.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6n35t452lddick2eu7d0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6n35t452lddick2eu7d0.png" alt="Product Hunt" width="799" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That made me curious.&lt;/p&gt;

&lt;p&gt;Why are developers and AI builders paying attention to &lt;a href="https://www.browseract.ai/Kiran" rel="noopener noreferrer"&gt;BrowserAct&lt;/a&gt;? Is it simply another browser automation tool, or is there something different about it?&lt;/p&gt;

&lt;p&gt;Instead of reading documentation and feature lists, I decided to test it myself and understand what problem it is trying to solve.&lt;/p&gt;

&lt;p&gt;In this article I will walk through what &lt;a href="https://www.browseract.ai/Kiran" rel="noopener noreferrer"&gt;BrowserAct&lt;/a&gt; is, the problem it addresses, how to install it locally, and some hands-on examples using real workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is &lt;a href="https://www.browseract.ai/Kiran" rel="noopener noreferrer"&gt;BrowserAct&lt;/a&gt;?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.browseract.ai/Kiran" rel="noopener noreferrer"&gt;BrowserAct&lt;/a&gt; is a browser automation CLI built specifically for &lt;em&gt;AI agents&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Traditional browser automation tools usually focus on opening pages, clicking buttons, and extracting information from websites. That works well for simple tasks, but AI agents often require more than basic automation. Real websites contain authentication flows, dynamic rendering, browser fingerprint checks, session management, and situations where human intervention becomes necessary.&lt;/p&gt;

&lt;p&gt;BrowserAct attempts to solve these challenges by treating the browser as an execution environment for agents rather than as a temporary browser window.&lt;/p&gt;

&lt;p&gt;Some of its capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser session persistence&lt;/li&gt;
&lt;li&gt;Browser identity isolation&lt;/li&gt;
&lt;li&gt;Human handoff support&lt;/li&gt;
&lt;li&gt;Parallel browser sessions&lt;/li&gt;
&lt;li&gt;Anti-detection browser environments&lt;/li&gt;
&lt;li&gt;Reusable workflows and skills&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What Problem Is BrowserAct Trying To Solve?
&lt;/h2&gt;

&lt;p&gt;After building and testing AI agents, I have noticed that many workflows do not fail because of the language model.&lt;/p&gt;

&lt;p&gt;The model usually knows what it needs to do.&lt;/p&gt;

&lt;p&gt;The problem starts when the workflow enters a browser.&lt;/p&gt;

&lt;p&gt;For example, consider an AI agent that monitors competitor pricing. On paper the task sounds straightforward. Open a website, extract information, generate a report, and send the output.&lt;/p&gt;

&lt;p&gt;Reality usually looks different.&lt;/p&gt;

&lt;p&gt;The website might require authentication. Content may be rendered dynamically. Session state may expire. Security checks can appear unexpectedly. Browser fingerprints may trigger additional verification.&lt;/p&gt;

&lt;p&gt;At this point the issue is no longer intelligence.&lt;/p&gt;

&lt;p&gt;The issue becomes execution.&lt;/p&gt;

&lt;p&gt;BrowserAct seems designed around that exact problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started with BrowserAct
&lt;/h2&gt;

&lt;p&gt;Getting started with BrowserAct is straightforward, and it can fit naturally into both command-line workflows and AI agent environments.&lt;/p&gt;

&lt;p&gt;Depending on how you plan to use it, there are two common installation approaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Install Through an AI Agent (Recommended for Agent Workflows)
&lt;/h3&gt;

&lt;p&gt;If you're using an AI coding agent or an environment that supports skills and tool integrations, BrowserAct can be installed directly as a skill.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add browser-act/skills &lt;span class="nt"&gt;--skill&lt;/span&gt; browser-act
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This allows the agent to invoke BrowserAct capabilities directly inside larger workflows. Instead of writing custom browser automation logic every time, the agent can use BrowserAct whenever browser interaction becomes necessary.&lt;/p&gt;

&lt;p&gt;For example, an agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open websites&lt;/li&gt;
&lt;li&gt;Navigate between pages&lt;/li&gt;
&lt;li&gt;Handle login flows&lt;/li&gt;
&lt;li&gt;Fill forms&lt;/li&gt;
&lt;li&gt;Extract structured content&lt;/li&gt;
&lt;li&gt;Continue browser-based workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach is useful when BrowserAct becomes part of a broader AI system rather than a standalone browser tool.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Install BrowserAct CLI Directly
&lt;/h3&gt;

&lt;p&gt;If you prefer working directly from the terminal, BrowserAct also provides a CLI installation option.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv tool &lt;span class="nb"&gt;install &lt;/span&gt;browser-act-cli &lt;span class="nt"&gt;--python&lt;/span&gt; 3.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After installation, authenticate your local environment:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act auth login

browser-act auth poll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can also directly configure an API key:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act auth &lt;span class="nb"&gt;set &lt;/span&gt;YOUR_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Once authentication is complete, BrowserAct is ready to execute browser workflows locally.&lt;/p&gt;

&lt;p&gt;Rather than jumping directly into advanced workflows, I wanted to verify that the installation was working correctly and understand the basic command flow.&lt;/p&gt;

&lt;p&gt;The first thing I checked was the browser profiles available on my system.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act browser list-profiles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvnk9i5y69qulpzhy7c9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcvnk9i5y69qulpzhy7c9.png" alt="browser-act browser list-profiles" width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The output lists available browser profiles that BrowserAct can use during execution. These profiles become useful when creating isolated browser environments, preserving state across sessions, or reusing existing login contexts.&lt;/p&gt;

&lt;p&gt;Next, I created a browser using my existing Chrome profile.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser create &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;type &lt;/span&gt;chrome &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; source-profile &lt;span class="se"&gt;\&lt;/span&gt;
local_profile_182885126174998716 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; name &lt;span class="s2"&gt;"browseract"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; desc &lt;span class="s2"&gt;"testing-browseract"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9llg2h8qz82xyuq8srao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9llg2h8qz82xyuq8srao.png" alt="browser create" width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BrowserAct automatically imports available browser state such as cookies and local storage data.&lt;/p&gt;

&lt;p&gt;Now that the browser environment was ready, I wanted to test a simple content extraction workflow.&lt;/p&gt;


&lt;h3&gt;
  
  
  First Test: Extracting Website Content
&lt;/h3&gt;

&lt;p&gt;For the first test, I used BrowserAct's &lt;code&gt;stealth-extract&lt;/code&gt; command on a simple website.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act stealth-extract https://example.com &lt;span class="nt"&gt;--content-type&lt;/span&gt; markdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwyv7ncbexx3z4yntcm1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwyv7ncbexx3z4yntcm1t.png" alt="browser-act stealth-extract https://example.com --content-type markdown" width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Example Domain

This domain is for use in documentation examples without needing permission.

[Learn more](https://iana.org/domains/example)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The result was returned as clean markdown without writing selectors, parsing HTML, or creating custom scraping logic.&lt;/p&gt;

&lt;p&gt;Next, I wanted to see how BrowserAct handled an interactive browser session.&lt;/p&gt;


&lt;h3&gt;
  
  
  Second Test: Opening a Browser Session
&lt;/h3&gt;

&lt;p&gt;I opened a browser session using the browser profile I created earlier.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--session&lt;/span&gt; first-test &lt;span class="se"&gt;\&lt;/span&gt;
browser open &lt;span class="se"&gt;\&lt;/span&gt;
chrome_local_102863481715294440 &lt;span class="se"&gt;\&lt;/span&gt;
https://github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm0m2195mqlhoberesiiy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm0m2195mqlhoberesiiy.png" alt="browser-act --session first-test browser open chrome_local_102863481715294440 https://github.com" width="800" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The output returned details about the active session:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;session_name=first-test
browser_type=chrome
url=https://github.com/
title=GitHub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;At this point, the browser was active and ready for interaction.&lt;/p&gt;
&lt;h3&gt;
  
  
  Inspecting Page State
&lt;/h3&gt;

&lt;p&gt;One of the interesting parts of BrowserAct is that it does not expose raw HTML directly. Instead, it generates a structured view of interactive elements that agents can work with.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--session&lt;/span&gt; first-test &lt;span class="se"&gt;\&lt;/span&gt;
state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F16pqlu6pzjbna10h7h7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F16pqlu6pzjbna10h7h7j.png" alt="browser-act \&lt;br&gt;
--session first-test \&lt;br&gt;
state" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This allows interactions to happen using element references rather than manually creating CSS selectors.&lt;/p&gt;

&lt;p&gt;To test this further, I clicked search button:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--session&lt;/span&gt; first-test &lt;span class="se"&gt;\&lt;/span&gt;
click 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3zocuprx3kik00rhdjm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3zocuprx3kik00rhdjm0.png" alt="browser-act \&lt;br&gt;
--session first-test \&lt;br&gt;
click 6" width="799" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, I had completed a complete workflow:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Create Browser → Open Session → Inspect → Input → Click → Navigate&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;without writing a browser automation script.&lt;/p&gt;


&lt;h3&gt;
  
  
  Third Test: Using BrowserAct with an AI Agent
&lt;/h3&gt;

&lt;p&gt;After testing BrowserAct directly through the CLI, I wanted to see how it behaved inside an actual AI agent workflow.&lt;/p&gt;

&lt;p&gt;For this experiment, I used &lt;strong&gt;Codex&lt;/strong&gt; as the agent runtime.&lt;/p&gt;

&lt;p&gt;One advantage of BrowserAct is that it does not need to live as a standalone tool. We can instruct the agent to invoke BrowserAct whenever browser interaction becomes necessary. That includes opening websites, clicking buttons, handling login flows, extracting structured content, or interacting with dynamic pages.&lt;/p&gt;

&lt;p&gt;To test this, I asked the agent to install BrowserAct and use it as part of its workflow.&lt;/p&gt;

&lt;p&gt;Here is the prompt I provided:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set up BrowserAct for me. 
Read the BrowserAct skill first: https://github.com/browser-act/skills/blob/main/browser-act/SKILL.md
Install or update the browser-act skill, then verify it works. 
Use BrowserAct when I need an AI agent to browse, click, fill forms,
handle login flows, solve CAPTCHAs, bypass bot detection, or extract structured data from websites. 
After setup, open this repository in my browser: https://github.com/browser-act/skills 
If I am logged in to GitHub, 
ask me whether you should star it for me as a quick demo that browser interaction works. 
Only click the star if I explicitly say yes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After receiving the instructions, the agent started executing the workflow automatically.&lt;/p&gt;

&lt;p&gt;The workflow looked something like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent starts
        ↓
Installs BrowserAct skill
        ↓
Verifies installation
        ↓
Opens GitHub repository
        ↓
Checks authentication state
        ↓
Requests confirmation
        ↓
Performs browser action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fldorh22f4pfgsa6chnaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fldorh22f4pfgsa6chnaf.png" alt="BA" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcbbp6atpcxq6tmfb9kc7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcbbp6atpcxq6tmfb9kc7.png" alt="BA" width="799" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The interesting part was watching the agent use BrowserAct as a tool rather than relying on static instructions. Browser actions became part of the execution process instead of separate manual steps.&lt;/p&gt;

&lt;p&gt;After receiving confirmation, the agent completed the task successfully and starred the repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgg1qzx71li37nqrtgem2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgg1qzx71li37nqrtgem2.png" alt="starred the repository" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although starring a GitHub repository is a simple action, it demonstrates an important capability. The agent was able to open a real website, maintain browser state, interact with UI elements, and complete an action inside an authenticated environment.&lt;/p&gt;

&lt;p&gt;This feels much closer to real-world AI workflows than isolated browser automation scripts.&lt;/p&gt;


&lt;h3&gt;
  
  
  Fourth Test: Human Handoff with an AI Agent
&lt;/h3&gt;

&lt;p&gt;One feature that interested me most was human handoff.&lt;/p&gt;

&lt;p&gt;Many automation workflows eventually reach a point where the process cannot continue without human participation. Common examples include OTP verification, QR login, enterprise SSO approval, and security confirmations.&lt;/p&gt;

&lt;p&gt;To test this behavior, I used &lt;em&gt;&lt;strong&gt;Codex&lt;/strong&gt;&lt;/em&gt; together with BrowserAct and created a workflow that required OTP verification.&lt;/p&gt;

&lt;p&gt;My objective was straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let the agent open the login page&lt;/li&gt;
&lt;li&gt;Enter the email automatically&lt;/li&gt;
&lt;li&gt;Pause when OTP is required&lt;/li&gt;
&lt;li&gt;Preserve browser state&lt;/li&gt;
&lt;li&gt;Resume execution after human input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I provided the following prompt to the agent:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use BrowserAct for this workflow. 

Open: https://practice.expandtesting.com/otp-login 

Actions: 
1. Launch BrowserAct 
2. Open the website 
3. Continue the login workflow 
4. If human interaction becomes necessary for OTP, preserve browser state and use BrowserAct's collaboration capability 
5. Resume execution after collaboration completes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnpnsk3nl1umlgz3d4gzh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnpnsk3nl1umlgz3d4gzh.png" alt="prompt" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent launched BrowserAct, created a browser session, and navigated to the login page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78ha8fo1ctahtss39ga0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78ha8fo1ctahtss39ga0.png" alt="BrowserAct" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the workflow reached the authentication stage, BrowserAct detected that human interaction was required and generated a &lt;em&gt;collaboration link&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1lh4athvaak5hziyv9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1lh4athvaak5hziyv9i.png" alt="collaboration link" width="799" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I opened the collaboration link and completed the login process manually.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F37l7346lfwxejxn4e2s4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F37l7346lfwxejxn4e2s4.png" alt="collaboration link" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn8eh0mzs9hju47ik3l3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn8eh0mzs9hju47ik3l3y.png" alt="OTP" width="799" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once authentication finished, control automatically returned to the agent without restarting the browser session.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8okthskevwr9nfmbww8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr8okthskevwr9nfmbww8.png" alt="authentication finished" width="799" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The interesting part was that the browser state remained active throughout the interruption. The agent paused execution, handed control to a human when necessary, and then continued from the exact same session once the required action had been completed.&lt;/p&gt;

&lt;p&gt;For production workflows involving authentication, verification, or approval steps, this feels significantly more practical than forcing complete automation.&lt;/p&gt;


&lt;h3&gt;
  
  
  Fifth Test: Running Multiple Browser Sessions
&lt;/h3&gt;

&lt;p&gt;Another scenario I wanted to test was running multiple independent browser sessions.&lt;/p&gt;

&lt;p&gt;Long-running AI systems rarely perform a single task. They may monitor dashboards, analyze feedback, review customer activity, and collect information simultaneously.&lt;/p&gt;

&lt;p&gt;I created several browser sessions locally.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="nt"&gt;--session&lt;/span&gt; reviews browser open chrome_local_102863481715294440 https://reddit.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="nt"&gt;--session&lt;/span&gt; ops browser open chrome_local_102863481715294440 https://status.openai.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="nt"&gt;--session&lt;/span&gt; community browser open chrome_local_102863481715294440 https://dev.to
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I then listed active sessions:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act session list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The output showed multiple active sessions operating independently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F82e41b7nm255xy5e9qh5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F82e41b7nm255xy5e9qh5.png" alt="browser-act session list" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This separation becomes useful because each workflow maintains its own execution state while avoiding interference with other tasks.&lt;/p&gt;
&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;After spending some time testing BrowserAct, I understand why it attracted attention during its Product Hunt launch.&lt;/p&gt;

&lt;p&gt;The value does not come from simply opening browsers and clicking buttons.&lt;/p&gt;

&lt;p&gt;The interesting part is treating the browser as an execution layer for AI agents and handling the problems that appear in real environments.&lt;/p&gt;
&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>cli</category>
      <category>tutorial</category>
      <category>automation</category>
    </item>
    <item>
      <title>The Code Review Metrics No One Is Tracking..</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Mon, 29 Jun 2026 17:09:37 +0000</pubDate>
      <link>https://dev.to/dev_kiran/the-code-review-metrics-no-one-is-tracking-2mm6</link>
      <guid>https://dev.to/dev_kiran/the-code-review-metrics-no-one-is-tracking-2mm6</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;When teams talk about engineering metrics, the conversation usually moves toward speed. We often look at things like pull request turnaround time, lead time, deployment frequency, and how quickly changes move through the system.&lt;/p&gt;

&lt;p&gt;These are useful metrics because they tell us how efficiently work is flowing through the development process. But after spending time on larger projects and working across different teams, I started noticing that speed alone doesn't always tell the full story.&lt;/p&gt;

&lt;p&gt;I've seen teams merge pull requests quickly and still spend a lot of time later dealing with repeated issues, hotfixes, and bugs that somehow escaped review. I've also seen teams with slower review cycles that ended up having fewer production issues because they consistently caught missing pieces earlier.&lt;/p&gt;

&lt;p&gt;That made me think about whether we sometimes focus too much on &lt;em&gt;how fast reviews move&lt;/em&gt; and not enough on &lt;em&gt;whether reviews are actually helping improve code quality.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let's get into it 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Quick Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//qodo.ai"&gt;Qodo&lt;/a&gt; is probably one of the better options if your goal is not just measuring review speed but understanding review quality across a team. Instead of only showing statistics around pull request activity, it tries to surface patterns that are easy to miss during day-to-day development. Things like recurring issues, repeated review findings, critical problems appearing across repositories, and whether developers are actually resolving suggestions start becoming visible.&lt;/p&gt;

&lt;p&gt;That becomes more useful as projects grow because the challenge usually changes over time. In smaller projects, the focus is often on moving code quickly. In larger systems with more developers and more pull requests, the bigger challenge becomes understanding whether the same problems keep appearing repeatedly and slowly affecting quality.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With Looking Only at PR Velocity
&lt;/h2&gt;

&lt;p&gt;Let's imagine two teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team A&lt;/strong&gt; has an average review time of around 15 minutes. Pull requests move quickly, deployments happen frequently, and every dashboard looks healthy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team B&lt;/strong&gt; takes closer to 40 minutes on average to review pull requests. From the outside it initially looks like Team B is moving more slowly.&lt;/p&gt;

&lt;p&gt;But after a few months, a different picture starts appearing.&lt;/p&gt;

&lt;p&gt;Team A repeatedly runs into missing edge cases, production fixes, and review discussions that seem strangely familiar. Reviewers continue asking for missing tests, validation updates, and similar changes over and over again.&lt;/p&gt;

&lt;p&gt;Team B, despite taking longer during reviews, catches many of these issues before code reaches production.&lt;/p&gt;

&lt;p&gt;At that point the discussion becomes less about "Which team reviews faster?" and more about "Which team is preventing problems from repeating?"&lt;/p&gt;

&lt;p&gt;That difference is important because pull request speed by itself doesn't tell us whether reviews are actually doing their job.&lt;/p&gt;




&lt;h2&gt;
  
  
  Metrics I Think Teams Ignore Too Often
&lt;/h2&gt;

&lt;p&gt;I don't think these replace &lt;a href="https://dora.dev/guides/dora-metrics/" rel="noopener noreferrer"&gt;DORA metrics&lt;/a&gt; or existing engineering metrics. I think they help explain the things happening underneath them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repeated Review Comments
&lt;/h3&gt;

&lt;p&gt;Most teams eventually start seeing the same comments appear repeatedly in reviews.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Missing test coverage&lt;/p&gt;

&lt;p&gt;Validation missing&lt;/p&gt;

&lt;p&gt;Logging not updated&lt;/p&gt;

&lt;p&gt;Missing null handling&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If reviewers repeatedly ask for the same fixes, there is usually something deeper happening. It often means team standards are unclear, patterns are not consistently enforced, or reviewers are spending time doing repetitive work that could probably be automated.&lt;/p&gt;

&lt;p&gt;Over time this also creates review fatigue because developers and reviewers start seeing the same discussions repeatedly.&lt;/p&gt;




&lt;h3&gt;
  
  
  Resolution Rate
&lt;/h3&gt;

&lt;p&gt;This was one of the more interesting things I started thinking about.&lt;/p&gt;

&lt;p&gt;Detecting issues isn't necessarily difficult. Most tools can generate findings and suggestions. The more important question is whether developers actually resolve them.&lt;/p&gt;

&lt;p&gt;Let's imagine your team detected 150 review findings this month. That initially sounds useful.&lt;/p&gt;

&lt;p&gt;But then imagine that only 50 of those findings actually got resolved.&lt;/p&gt;

&lt;p&gt;Now the discussion changes. Instead of asking how many issues were found, you start asking whether developers trust the findings enough to act on them. If suggestions consistently get ignored, then the issue may not be lack of detection. The issue might be noise.&lt;/p&gt;




&lt;h3&gt;
  
  
  Average Findings Per Pull Request
&lt;/h3&gt;

&lt;p&gt;This metric becomes interesting when you stop looking at it as a fixed number and start looking at trends.&lt;/p&gt;

&lt;p&gt;Let's say your average findings per pull request increased from &lt;em&gt;1.4&lt;/em&gt; to &lt;em&gt;4.8&lt;/em&gt; over a few months.&lt;/p&gt;

&lt;p&gt;That increase by itself doesn't automatically mean quality became worse.&lt;/p&gt;

&lt;p&gt;Maybe AI-generated code started becoming part of the workflow. Maybe more developers joined the project. Maybe complexity increased as new services were added.&lt;/p&gt;

&lt;p&gt;The actual number isn't usually the important part. The trend and the reasons behind it tend to reveal much more.&lt;/p&gt;




&lt;h3&gt;
  
  
  Critical Findings Across Repositories
&lt;/h3&gt;

&lt;p&gt;Some issues never fail CI and never break builds.&lt;/p&gt;

&lt;p&gt;Examples might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing authorization checks&lt;/li&gt;
&lt;li&gt;Dependency-related risks&lt;/li&gt;
&lt;li&gt;Missing audit logging&lt;/li&gt;
&lt;li&gt;Breaking changes in shared services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you see one isolated issue, it may not look important.&lt;/p&gt;

&lt;p&gt;But if similar issues repeatedly appear across repositories and teams, they stop feeling like isolated bugs. At that point they start looking more like process problems or architectural patterns that need attention.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Made Me Think About This
&lt;/h2&gt;

&lt;p&gt;Recently I was reading about &lt;a href="https://www.qodo.ai/blog/introducing-findings-page/" rel="noopener noreferrer"&gt;Qodo's Findings page&lt;/a&gt; and the idea behind it caught my attention.&lt;/p&gt;

&lt;p&gt;Most review feedback today lives inside pull requests. Someone opens a PR, reviewers leave comments, fixes get pushed, and eventually the pull request gets merged. After that, the conversation mostly disappears.&lt;/p&gt;

&lt;p&gt;The problem with that workflow is that patterns disappear too.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.qodo.ai/blog/introducing-findings-page/" rel="noopener noreferrer"&gt;Findings page&lt;/a&gt; tries to look across repositories and over longer periods of time by surfacing things like recurring findings, critical issues, resolution trends, and repeated review patterns.&lt;/p&gt;

&lt;p&gt;What I found interesting wasn't really the feature itself. It was the way it changes the perspective.&lt;/p&gt;

&lt;p&gt;If the same validation issue appears in thirty pull requests over two months, that no longer feels like an individual PR issue. It starts feeling like a signal that something larger is happening in the team's workflow.&lt;/p&gt;

&lt;p&gt;You can read more about monitoing organization-wide pull request findings here: &lt;a href="https://docs.qodo.ai/governance/view-all-findings-in-organization" rel="noopener noreferrer"&gt;https://docs.qodo.ai/governance/view-all-findings-in-organization&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A Practical Example
&lt;/h2&gt;

&lt;p&gt;Let's imagine your team created 150 pull requests over the last month.&lt;/p&gt;

&lt;p&gt;The dashboard initially looks healthy because review time is improving, deployment frequency has increased, and pull requests are moving smoothly.&lt;/p&gt;

&lt;p&gt;But when you start looking deeper, you notice that 42 pull requests had missing test coverage, 28 repeated similar validation problems, and dependency-related risks kept appearing across multiple repositories.&lt;/p&gt;

&lt;p&gt;The conversation naturally becomes more useful because people stop asking why reviews are slow and start asking why the same problems continue appearing repeatedly.&lt;/p&gt;

&lt;p&gt;That usually leads to more meaningful improvements because now the focus shifts from speed alone toward improving the development process itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Want to Read More?
&lt;/h2&gt;

&lt;p&gt;If you want to explore this area further, &lt;a href="//qodo.ai"&gt;Qodo&lt;/a&gt; has a &lt;a href="https://www.qodo.ai/academy/" rel="noopener noreferrer"&gt;learning hub&lt;/a&gt; with a few useful resources around AI-assisted review workflows and code quality.&lt;/p&gt;

&lt;p&gt;Some good starting points are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.qodo.ai/academy/ai-code-review/" rel="noopener noreferrer"&gt;What is AI Code Review&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
A good introduction to how AI review works and the kinds of problems it tries to catch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.qodo.ai/academy/ai-generated-code-in-enterprise/" rel="noopener noreferrer"&gt;Reviewing AI-generated Code&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Covers common patterns and mistakes teams are seeing as AI-generated code becomes more common.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.qodo.ai/academy/ai-code-review-tools-comparison-and-benchmarks/" rel="noopener noreferrer"&gt;AI Code Review Tools Comparison&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Useful if you want to understand how different approaches and tools compare.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Metrics like deployment frequency and lead time still matter and they will continue to matter. But they don't always explain why teams repeatedly run into certain problems.&lt;/p&gt;

&lt;p&gt;As development teams generate more code and AI continues increasing review volume, understanding review quality probably becomes more important too.&lt;/p&gt;

&lt;p&gt;Questions around recurring findings, issue resolution, and repeated patterns often tell a more complete story than review speed alone because they reveal the hidden work that teams keep paying for repeatedly.&lt;/p&gt;

&lt;p&gt;A fast pull request is useful, but a healthy review process is usually much more valuable over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 

</description>
      <category>codenewbie</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Can Generate Code Faster. The Bigger Challenge Is Reviewing It 😐</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Sat, 27 Jun 2026 18:46:30 +0000</pubDate>
      <link>https://dev.to/dev_kiran/ai-can-generate-code-faster-the-bigger-challenge-is-reviewing-it-1edf</link>
      <guid>https://dev.to/dev_kiran/ai-can-generate-code-faster-the-bigger-challenge-is-reviewing-it-1edf</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;AI coding assistants have changed the way many teams build software. Tasks like generating components, creating tests, writing boilerplate, or handling repetitive refactors can now happen in minutes instead of hours.&lt;/p&gt;

&lt;p&gt;The productivity gain is real and that part is easy to notice.&lt;/p&gt;

&lt;p&gt;What becomes interesting after using these tools for a while is that a different bottleneck starts appearing. Code generation becomes faster, but the review process often stays the same.&lt;/p&gt;

&lt;p&gt;Teams can generate hundreds of lines of code within minutes, but someone still has to answer important questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this actually solve the requirement?&lt;/li&gt;
&lt;li&gt;Are edge cases covered?&lt;/li&gt;
&lt;li&gt;Will this introduce side effects?&lt;/li&gt;
&lt;li&gt;Does it align with existing patterns?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The speed of writing code has changed. The need for confidence has not.&lt;/p&gt;

&lt;p&gt;That is where I think the conversation around AI-assisted development is starting to shift.&lt;/p&gt;

&lt;p&gt;The challenge is becoming less about generating code and more about making sure the generated code is actually safe to ship.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With Reviewing AI-Generated Code Like Regular Code
&lt;/h2&gt;

&lt;p&gt;Imagine asking an AI coding assistant to implement coupon validation for premium users.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add coupon validation for premium users and create tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A few seconds later you get:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPremium&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
   &lt;span class="nf"&gt;applyCoupon&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Nothing immediately looks wrong. The code is clean, there are no syntax issues, tests may pass, and the implementation appears complete.&lt;/p&gt;

&lt;p&gt;But pull request reviews usually go beyond reading diffs.&lt;/p&gt;

&lt;p&gt;Reviewers start asking questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens if the coupon has expired?&lt;/li&gt;
&lt;li&gt;Does this affect payment calculations?&lt;/li&gt;
&lt;li&gt;Should audit logs be updated?&lt;/li&gt;
&lt;li&gt;Are there services depending on this behavior?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where AI-generated code becomes interesting.&lt;/p&gt;

&lt;p&gt;It can often be functionally correct while still missing important implementation details. Research around larger AI-generated projects has also shown that functional correctness does not necessarily translate into maintainable system design. Teams still encounter duplicated logic, complexity growth, weak exception handling, and architectural inconsistencies.&lt;/p&gt;

&lt;p&gt;Eventually humans catch these issues.&lt;/p&gt;

&lt;p&gt;The question becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we catch them earlier?&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  A Different Workflow: Cursor Builds, &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; Reviews
&lt;/h2&gt;

&lt;p&gt;One thing I found interesting is thinking about AI code generation and AI review as two separate responsibilities.&lt;/p&gt;

&lt;p&gt;Instead of treating generation and validation as the same problem, &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; positions itself as a quality layer across the development workflow.&lt;/p&gt;

&lt;p&gt;The process becomes something like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate → Review → Push → Review Again → Ship&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rather than:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate → Push → Hope the PR catches everything&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 1: Feed standards before code gets generated
&lt;/h3&gt;

&lt;p&gt;AI assistants work from context. If they do not know your architecture patterns, naming conventions, or domain rules, they fall back to generic assumptions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; introduces a shared rule system(&lt;a href="https://www.qodo.ai/blog/how-i-use-qodos-agent-skills-to-auto-fix-issues-in-pull-requests/" rel="noopener noreferrer"&gt;agent-skills&lt;/a&gt;) that can provide those standards before generation starts. The same rules used later in reviews can also guide code generation itself. That means expectations stay consistent throughout the workflow instead of changing between development and review.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 2: Review locally before code leaves the IDE
&lt;/h3&gt;

&lt;p&gt;Most review feedback arrives after a pull request is opened.&lt;/p&gt;

&lt;p&gt;By then developers have often switched context and mentally moved on from the implementation.&lt;/p&gt;

&lt;p&gt;One thing &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; does differently is shifting review earlier into development itself. Local changes can be reviewed directly inside the IDE before they ever reach a repository.&lt;/p&gt;

&lt;p&gt;That means issues such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing tests&lt;/li&gt;
&lt;li&gt;Duplicated logic&lt;/li&gt;
&lt;li&gt;Potential bugs&lt;/li&gt;
&lt;li&gt;Violations of team standards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;can surface while the implementation is still fresh in your head. &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; describes this as a shift-left review approach where quality checks happen before PR discussions even begin.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 3: Review pull requests with full context
&lt;/h3&gt;

&lt;p&gt;Traditional PR reviews usually focus on changed lines.&lt;/p&gt;

&lt;p&gt;The challenge is that code changes rarely live in isolation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt;'s review system attempts to include broader context such as repository history, related code, dependencies, and organizational standards when evaluating a pull request. Multiple review agents then focus on different concerns like duplicated logic, breaking changes, critical bugs, and rule enforcement.&lt;/p&gt;

&lt;p&gt;That changes the type of feedback you receive.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Variable naming could improve&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You may get something closer to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This update changes payment behavior but related audit handling appears missing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The feedback becomes more focused on intent and impact rather than surface-level observations.&lt;/p&gt;


&lt;h2&gt;
  
  
  AI Review Is Not Replacing Human Review
&lt;/h2&gt;

&lt;p&gt;I do not think AI review replaces engineers.&lt;/p&gt;

&lt;p&gt;Human reviewers still understand business decisions, architecture trade-offs, and product context in ways AI systems currently struggle with.&lt;/p&gt;

&lt;p&gt;Where AI review becomes useful is reducing repetitive work and helping teams focus attention where it matters.&lt;/p&gt;

&lt;p&gt;It can surface missing pieces, highlight risks, and point out areas worth investigating.&lt;/p&gt;

&lt;p&gt;The role feels less like replacing code review and more like adding another layer of verification.&lt;/p&gt;


&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI has already changed how quickly code gets written.&lt;/p&gt;

&lt;p&gt;The next challenge is making sure quality scales with that speed.&lt;/p&gt;

&lt;p&gt;What stood out to me is that &lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; is not trying to become another code generator. The idea seems closer to becoming a quality layer that sits alongside development and review workflows.&lt;/p&gt;

&lt;p&gt;Cursor builds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo&lt;/a&gt; reviews.&lt;/p&gt;

&lt;p&gt;That separation actually feels natural.&lt;/p&gt;

&lt;p&gt;Because as teams generate more code with AI, confidence in what gets shipped becomes just as important as speed.&lt;/p&gt;
&lt;h2&gt;
  
  
  Resources &amp;amp; Getting Started
&lt;/h2&gt;

&lt;p&gt;If you want to explore the workflow further, here are a few useful resources from Qodo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get started with Qodo:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.qodo.ai/" rel="noopener noreferrer"&gt;Qodo Platform&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation and setup guides:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.qodo.ai/" rel="noopener noreferrer"&gt;Qodo Documentation&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Best AI Code Review Tools for Catching Breaking Changes 🔥</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Mon, 22 Jun 2026 19:51:45 +0000</pubDate>
      <link>https://dev.to/dev_kiran/best-ai-code-review-tools-for-catching-breaking-changes-51g2</link>
      <guid>https://dev.to/dev_kiran/best-ai-code-review-tools-for-catching-breaking-changes-51g2</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;Most code review tools are good at finding syntax problems, style issues, and missing test cases. The harder problem is finding changes that look harmless in a pull request but later break another service, API consumer, or application.&lt;/p&gt;

&lt;p&gt;A renamed field, a modified function signature, or a small schema change can easily pass review. The code itself still works, but the impact shows up after deployment.&lt;/p&gt;

&lt;p&gt;This is where &lt;a href="https://www.qodo.ai/academy/ai-code-review/" rel="noopener noreferrer"&gt;AI code review&lt;/a&gt; becomes more interesting. Instead of looking only at the current file, some tools can understand context and identify changes that might affect other parts of the system.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Quick Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//qodo.ai"&gt;Qodo&lt;/a&gt; is the best &lt;a href="https://www.qodo.ai/academy/ai-code-review/" rel="noopener noreferrer"&gt;AI code review&lt;/a&gt; tool for catching breaking changes and reviewing high impact pull requests. It can fit naturally into GitHub workflows, analyze pull requests with more repository context, and focus on changes that can affect downstream systems.&lt;/p&gt;

&lt;p&gt;For teams dealing with shared APIs, AI generated code, or larger codebases with multiple dependencies, this becomes useful because the review is not only checking code quality. It is also asking whether the change can break something after deployment.&lt;/p&gt;

&lt;p&gt;That becomes even more useful when using a focused Breaking Changes agent that reviews things like API contracts, function signatures, interface changes, and backward compatibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually counts as a breaking change?
&lt;/h2&gt;

&lt;p&gt;Breaking changes usually happen when code changes affect consumers outside the current file or service.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Function signature changes&lt;/li&gt;
&lt;li&gt;Removed or renamed fields&lt;/li&gt;
&lt;li&gt;API response updates&lt;/li&gt;
&lt;li&gt;Database schema modifications&lt;/li&gt;
&lt;li&gt;Shared library changes&lt;/li&gt;
&lt;li&gt;Interface updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Before:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;john@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fullName&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;john@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The change itself looks small and clean. During review, many developers would approve this without a second thought.&lt;/p&gt;

&lt;p&gt;The issue starts when another service still expects the &lt;code&gt;name&lt;/code&gt; field. The code passes review, deployments succeed, and then suddenly downstream systems start failing.&lt;/p&gt;

&lt;p&gt;Traditional review tools often miss this because there is no syntax problem. The problem is the impact of the change.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. &lt;a href="//qodo.ai"&gt;Qodo&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//qodo.ai"&gt;Qodo&lt;/a&gt; becomes interesting because it can focus on pull request reasoning instead of leaving generic comments on every file.&lt;/p&gt;

&lt;p&gt;Many AI review systems give suggestions around naming, formatting, or code cleanup. Those suggestions are useful, but they do not always help with production risks.&lt;/p&gt;

&lt;p&gt;A focused Breaking Changes agent could instead ask questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did an API contract change?&lt;/li&gt;
&lt;li&gt;Did a function signature change?&lt;/li&gt;
&lt;li&gt;Did a shared interface change?&lt;/li&gt;
&lt;li&gt;Can dependent services fail?&lt;/li&gt;
&lt;li&gt;Is backward compatibility affected?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Before:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;includeMetadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The code still works and tests might still pass.&lt;/p&gt;

&lt;p&gt;A Breaking Changes agent could still flag this and warn that consumers may still rely on the previous function signature. This creates more useful feedback because it focuses on downstream impact rather than only code style.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;p&gt;Teams working with shared APIs, larger repositories, AI generated code, and pull requests where breaking downstream systems is a bigger concern.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot has already become part of many developer workflows and provides pull request summaries, code explanations, and development assistance.&lt;/p&gt;

&lt;p&gt;It works well when teams want a broad coding assistant inside GitHub.&lt;/p&gt;

&lt;p&gt;The limitation for this use case is that Copilot focuses more on overall developer productivity than specialized breaking change analysis.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;p&gt;Teams looking for general AI assistance and coding productivity.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. &lt;a href="https://www.coderabbit.ai/" rel="noopener noreferrer"&gt;CodeRabbit&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;CodeRabbit automates pull request reviews and generates comments around changes.&lt;/p&gt;

&lt;p&gt;The setup process is simple and the pull request summaries can help teams handling a large number of reviews.&lt;/p&gt;

&lt;p&gt;Sometimes broader review systems generate many suggestions and comments. Over time developers can start ignoring reviews if too much low value feedback appears.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;p&gt;Teams wanting automated pull request reviews with minimal setup.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. &lt;a href="https://aws.amazon.com/codeguru/profiler/" rel="noopener noreferrer"&gt;Amazon CodeGuru Reviewer&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon CodeGuru Reviewer focuses more on code quality, performance, and security recommendations.&lt;/p&gt;

&lt;p&gt;It can identify inefficient code patterns and suggest improvements across applications running in AWS environments.&lt;/p&gt;

&lt;p&gt;Its focus is usually broader code quality analysis rather than contract awareness or downstream impact detection.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;p&gt;AWS teams focused on performance and quality improvements.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. &lt;a href="https://www.sonarsource.com/products/sonarqube/" rel="noopener noreferrer"&gt;SonarQube&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;SonarQube has been a common choice for static analysis and code quality checks for years. With newer AI related capabilities and integrations, teams are using it alongside AI workflows.&lt;/p&gt;

&lt;p&gt;It performs well for identifying maintainability issues, security risks, and technical debt.&lt;/p&gt;

&lt;p&gt;Breaking changes can still require additional context because static analysis alone may not understand the impact across multiple systems.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;p&gt;Teams that already rely heavily on code quality gates and static analysis.&lt;/p&gt;
&lt;h2&gt;
  
  
  6. &lt;a href="https://snyk.io/product/snyk-code/" rel="noopener noreferrer"&gt;Snyk Code&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Snyk Code mainly focuses on security analysis and code scanning.&lt;/p&gt;

&lt;p&gt;For development teams where security and review happen together, it can become part of the pull request workflow.&lt;/p&gt;

&lt;p&gt;While it is not designed specifically for breaking change detection, it helps catch risks that could eventually create larger issues in production.&lt;/p&gt;

&lt;p&gt;Best for:&lt;/p&gt;

&lt;p&gt;Security focused development teams.&lt;/p&gt;
&lt;h2&gt;
  
  
  Learning resources worth checking
&lt;/h2&gt;

&lt;p&gt;If you want to go deeper into AI code review, Qodo also has a &lt;a href="https://www.qodo.ai/academy/" rel="noopener noreferrer"&gt;learning hub&lt;/a&gt; with practical articles around the topic. Some useful pieces include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.qodo.ai/academy/ai-code-review/" rel="noopener noreferrer"&gt;What is AI code review&lt;/a&gt;, which explains how AI reviews work and what they can actually detect&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.qodo.ai/academy/ai-generated-code-in-enterprise/" rel="noopener noreferrer"&gt;Reviewing AI generated code&lt;/a&gt;, which covers common patterns and mistakes developers often miss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These resources are useful if you want to understand not just the tools, but also the review process itself.&lt;/p&gt;
&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;When reviewing pull requests, the question is usually not whether AI can explain code better. The more useful question is whether the change can create problems after deployment.&lt;/p&gt;

&lt;p&gt;A tool that creates twenty comments is not always more valuable than a tool that catches one issue that could break production.&lt;/p&gt;

&lt;p&gt;For catching breaking changes, fewer and more relevant signals usually provide more value than large amounts of feedback.&lt;/p&gt;
&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>programming</category>
      <category>productivity</category>
      <category>ai</category>
      <category>tooling</category>
    </item>
    <item>
      <title>🔥7 Tools Every AI Agent Developer Should Know in 2026</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Mon, 22 Jun 2026 06:38:55 +0000</pubDate>
      <link>https://dev.to/dev_kiran/7-tools-every-ai-agent-developer-should-know-in-2026-5471</link>
      <guid>https://dev.to/dev_kiran/7-tools-every-ai-agent-developer-should-know-in-2026-5471</guid>
      <description>&lt;p&gt;Hello Devs👋&lt;/p&gt;

&lt;p&gt;A year ago, most AI projects were glorified chatbots.&lt;/p&gt;

&lt;p&gt;Today, we're building agents that browse websites, execute workflows, analyze data, monitor systems, interact with SaaS products, and collaborate with humans.&lt;/p&gt;

&lt;p&gt;The challenge is no longer getting an LLM to answer questions. The challenge is giving AI agents reliable access to the real world.&lt;/p&gt;

&lt;p&gt;After experimenting with dozens of frameworks and platforms, I've found that successful AI agents usually rely on a small set of tools that solve very specific problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reasoning&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Browser interaction&lt;/li&gt;
&lt;li&gt;Workflow orchestration&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Knowledge retrieval&lt;/li&gt;
&lt;li&gt;Human collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building AI agents in 2026, these are seven tools worth knowing.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;a href="https://www.browseract.ai/Kiran" rel="noopener noreferrer"&gt;BrowserAct&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Most AI agents fail when they leave the comfort of APIs and enter the browser.&lt;/p&gt;

&lt;p&gt;Modern websites are full of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic content&lt;/li&gt;
&lt;li&gt;Login flows&lt;/li&gt;
&lt;li&gt;CAPTCHA challenges&lt;/li&gt;
&lt;li&gt;Anti-bot systems&lt;/li&gt;
&lt;li&gt;Multi-step workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where BrowserAct becomes interesting.&lt;/p&gt;

&lt;p&gt;BrowserAct is a browser automation CLI built for AI agents. It gives agents real browser control, anti-detection browser environments, human handoff when automation gets stuck, parallel sessions that do not interfere with each other, and independent browser identities for multi-account workflows.&lt;/p&gt;

&lt;p&gt;Instead of simply opening pages and clicking buttons, it helps agents operate inside real-world browser environments while supporting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anti-detection browser profiles&lt;/li&gt;
&lt;li&gt;Session management&lt;/li&gt;
&lt;li&gt;Human handoff&lt;/li&gt;
&lt;li&gt;Parallel browser tasks&lt;/li&gt;
&lt;li&gt;Multi-account isolation&lt;/li&gt;
&lt;li&gt;Reusable browser skills&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tested a simple BrowserAct workflow locally first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing BrowserAct:&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;uv tool &lt;span class="nb"&gt;install &lt;/span&gt;browser-act-cli &lt;span class="nt"&gt;--python&lt;/span&gt; 3.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx7ezda0fyjr4q0jhhehk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx7ezda0fyjr4q0jhhehk.png" alt="BrowserAct" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To run my local browser, I listed the available browser profiles.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act browser list-profiles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7s9esn9q4w9vli5jiq2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7s9esn9q4w9vli5jiq2.png" alt="browser-act browser list-profiles" width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then created a browser using my existing Chrome profile.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bildz3ut6chm35x36r7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bildz3ut6chm35x36r7.png" alt="browser-act" width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, Im going to extract the content from the website example.com&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act stealth-extract https://example.com &lt;span class="nt"&gt;--content-type&lt;/span&gt; markdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6za78wnbdyfhhceblotp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6za78wnbdyfhhceblotp.png" alt="browser-act stealth-extract" width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Using BrowserAct with an AI Agent
&lt;/h3&gt;

&lt;p&gt;I'm using Codex as the agent runtime for this experiment.&lt;/p&gt;

&lt;p&gt;We can instruct the agent to use &lt;code&gt;browser-act&lt;/code&gt; whenever browser interaction is required, such as opening pages, clicking buttons, handling login flows, or extracting structured data.&lt;/p&gt;

&lt;p&gt;Here is my Agent prompt.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Set up BrowserAct &lt;span class="k"&gt;for &lt;/span&gt;me. Read the BrowserAct skill first: &lt;span class="o"&gt;[&lt;/span&gt;https://github.com/browser-act/skills/tree/main/browser-act]&lt;span class="o"&gt;(&lt;/span&gt;https://github.com/browser-act/skills/blob/main/browser-act/SKILL.md&lt;span class="o"&gt;)&lt;/span&gt;/SKILL.md Install or update the browser-act skill, &lt;span class="k"&gt;then &lt;/span&gt;verify it works. Use BrowserAct when I need an AI agent to browse, click, fill forms, handle login flows, solve CAPTCHAs, bypass bot detection, or extract structured data from websites. After setup, open this repository &lt;span class="k"&gt;in &lt;/span&gt;my browser: https://github.com/browser-act/skills If I am logged &lt;span class="k"&gt;in &lt;/span&gt;to GitHub, ask me whether you should star it &lt;span class="k"&gt;for &lt;/span&gt;me as a quick demo that browser interaction works. Only click the star &lt;span class="k"&gt;if &lt;/span&gt;I explicitly say yes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Here is how the agent executed the workflow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3wdgvvsxogkibjj6c96w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3wdgvvsxogkibjj6c96w.png" alt="browser-act" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj9jz1gvjvurw9voec9hr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj9jz1gvjvurw9voec9hr.png" alt="browser-act" width="799" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent successfully completed the task and starred the repository after receiving explicit confirmation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9a9eayk3jb31zh1cszp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9a9eayk3jb31zh1cszp.png" alt="Agent" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While starring a repository is simple, the important part is that the agent successfully opened a real website, preserved browser state, interacted with UI elements, and completed an action inside an authenticated session.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Real Use Case: Competitor Monitoring Agent
&lt;/h2&gt;

&lt;p&gt;Imagine building an agent that monitors competitor pricing across multiple ecommerce platforms.&lt;/p&gt;

&lt;p&gt;A simple scraper often breaks because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pages require login&lt;/li&gt;
&lt;li&gt;Content is dynamically rendered&lt;/li&gt;
&lt;li&gt;Risk-control systems trigger&lt;/li&gt;
&lt;li&gt;Browser fingerprints get flagged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With BrowserAct, the workflow becomes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkr3ijwrir4w77jvqbd33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkr3ijwrir4w77jvqbd33.png" alt="BrowserAct" width="323" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key advantage is that browser identity, cookies, proxies, and session state remain isolated and reusable.&lt;/p&gt;
&lt;h3&gt;
  
  
  Real Use Case: Human Handoff
&lt;/h3&gt;

&lt;p&gt;Every automation eventually encounters a step that requires a human.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;QR code login&lt;/li&gt;
&lt;li&gt;SMS verification&lt;/li&gt;
&lt;li&gt;Enterprise SSO approval&lt;/li&gt;
&lt;li&gt;Security confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most automation tools simply fail at this point.&lt;/p&gt;

&lt;p&gt;BrowserAct keeps the browser session alive and allows a human to complete the required action. Once verification is finished, the agent continues from the same session instead of restarting the workflow.&lt;/p&gt;

&lt;p&gt;This sounds simple, but it solves one of the most common production bottlenecks in browser-based agents.&lt;/p&gt;
&lt;h4&gt;
  
  
  Testing Human Handoff with an AI Agent
&lt;/h4&gt;

&lt;p&gt;To see how BrowserAct handles real interruptions, I tested the workflow using Codex as the AI agent runtime.&lt;/p&gt;

&lt;p&gt;The goal was simple: let the agent handle the login process automatically, pause when human input becomes necessary, and then continue from the same browser session.&lt;/p&gt;

&lt;p&gt;Here is the prompt I gave the agent:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use BrowserAct for this workflow.

Open:
https://practice.expandtesting.com/otp-login

Actions:

1. Launch BrowserAct
2. Open the OTP login page
3. Fill the email field with:
   practice@expandtesting.com
4. Continue the login flow
5. If OTP verification is required:

   - Preserve browser state
   - Pause execution
   - Ask me for the OTP code
   - Wait for my response

6. After I provide the OTP:
   - Resume from the same session
   - Complete login
   - Confirm success

Do not restart the browser session if human input is needed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm7wp8cg3x741vip3aalt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm7wp8cg3x741vip3aalt.png" alt="Agent Prompt" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Here is the Agent executions
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent creating a browser session called &lt;em&gt;expandtesting_otp_login&lt;/em&gt; for the execution&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr9zeg37raunkdbi064i5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr9zeg37raunkdbi064i5.png" alt="_expandtesting_otp_login_ " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The agent entered the email automatically and paused at the &lt;strong&gt;OTP&lt;/strong&gt; step while preserving the browser session.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fang4sxm7joxj0h8z5u4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fang4sxm7joxj0h8z5u4v.png" alt="OTP" width="799" height="423"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After I provided the OTP, the agent resumed execution and completed authentication successfully.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80puxsgx81v4jw5e1iec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80puxsgx81v4jw5e1iec.png" alt="Success" width="798" height="179"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What stood out here was not the OTP itself.&lt;/p&gt;

&lt;p&gt;The interesting part was that the browser session remained active throughout the interruption. The workflow continued from the existing state instead of restarting the login process from the beginning.&lt;/p&gt;
&lt;h3&gt;
  
  
  Real Use Case: Multi-Agent Operations
&lt;/h3&gt;

&lt;p&gt;Suppose you're running:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer support monitoring&lt;/li&gt;
&lt;li&gt;Order review&lt;/li&gt;
&lt;li&gt;Feedback analysis&lt;/li&gt;
&lt;li&gt;Dashboard reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of forcing everything into one browser session, BrowserAct allows each task to run independently while maintaining the required account state.&lt;/p&gt;

&lt;p&gt;To understand how BrowserAct handles parallel workflows, I created multiple independent browser sessions locally.&lt;/p&gt;

&lt;p&gt;Start separate browser sessions:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="nt"&gt;--session&lt;/span&gt; reviews browser open chrome_local_102863481715294440 https://reddit.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="nt"&gt;--session&lt;/span&gt; ops browser open chrome_local_102863481715294440 https://status.openai.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act &lt;span class="nt"&gt;--session&lt;/span&gt; dev-community browser open chrome_local_102863481715294440 https://dev.to
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Checking active browser sessions:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;browser-act session list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffu0di2157n36qy861j3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffu0di2157n36qy861j3w.png" alt="browser-act session list" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The active session list showed that each workflow was isolated even though the browser profile remained shared.&lt;/p&gt;

&lt;p&gt;This separation matters for long-running AI systems because browser state, cookies, and task execution stay independent and avoid cross-workflow interference.&lt;/p&gt;

&lt;p&gt;For teams building agents that interact heavily with web applications, BrowserAct fills a gap that traditional browser automation tools were never designed to solve.&lt;/p&gt;

&lt;p&gt;GitHub Repo:&lt;br&gt;
&lt;strong&gt;&lt;a href="https://github.com/browser-act/skills" rel="noopener noreferrer"&gt;https://github.com/browser-act/skills&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  2. LangGraph by LangChain
&lt;/h2&gt;

&lt;p&gt;Reasoning alone is rarely enough for production agents.&lt;/p&gt;

&lt;p&gt;As agents become more capable, you quickly run into problems like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-step workflows&lt;/li&gt;
&lt;li&gt;Long-running tasks&lt;/li&gt;
&lt;li&gt;Human approvals&lt;/li&gt;
&lt;li&gt;State persistence&lt;/li&gt;
&lt;li&gt;Multi-agent coordination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where LangGraph becomes useful.&lt;/p&gt;

&lt;p&gt;LangGraph is designed specifically for building stateful AI agents that operate through graph-based workflows rather than simple request-response loops.&lt;/p&gt;

&lt;p&gt;Instead of forcing everything into a single prompt, it allows developers to define controlled execution paths while still preserving agent flexibility.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stateful workflows&lt;/li&gt;
&lt;li&gt;Human-in-the-loop checkpoints&lt;/li&gt;
&lt;li&gt;Durable execution&lt;/li&gt;
&lt;li&gt;Multi-agent coordination&lt;/li&gt;
&lt;li&gt;Retry and recovery handling&lt;/li&gt;
&lt;li&gt;Streaming execution&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Real Use Case: Customer Support Agent
&lt;/h3&gt;

&lt;p&gt;Imagine a support agent handling enterprise tickets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read ticket details&lt;/li&gt;
&lt;li&gt;Retrieve account information&lt;/li&gt;
&lt;li&gt;Check documentation&lt;/li&gt;
&lt;li&gt;Escalate complex issues&lt;/li&gt;
&lt;li&gt;Request human approval when needed&lt;/li&gt;
&lt;li&gt;Return a final response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without orchestration, these workflows become messy very quickly.&lt;/p&gt;

&lt;p&gt;LangGraph helps structure the decision flow while preserving memory and state.&lt;/p&gt;

&lt;p&gt;Repository / Docs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.langchain.com/oss/python/langgraph/overview" rel="noopener noreferrer"&gt;&lt;strong&gt;https://docs.langchain.com/oss/python/langgraph/overview&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  3. Mem0 by Mem0
&lt;/h2&gt;

&lt;p&gt;Most agents have terrible memory.&lt;/p&gt;

&lt;p&gt;They either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forget previous interactions&lt;/li&gt;
&lt;li&gt;Stuff everything into context windows&lt;/li&gt;
&lt;li&gt;Waste tokens repeatedly&lt;/li&gt;
&lt;li&gt;Lose long-term user preferences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mem0 solves this problem by acting as a persistent memory layer for AI agents.&lt;/p&gt;

&lt;p&gt;Rather than replaying full conversations every time, it extracts useful information, stores it, and retrieves only what matters.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persistent long-term memory&lt;/li&gt;
&lt;li&gt;Automatic memory extraction&lt;/li&gt;
&lt;li&gt;Memory compression&lt;/li&gt;
&lt;li&gt;Cross-session recall&lt;/li&gt;
&lt;li&gt;User preference tracking&lt;/li&gt;
&lt;li&gt;Reduced token usage&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Real Use Case: AI Personal Assistant
&lt;/h3&gt;

&lt;p&gt;Imagine an assistant helping a user over several months.&lt;/p&gt;

&lt;p&gt;Instead of repeatedly asking:&lt;/p&gt;

&lt;p&gt;"What programming language do you use?"&lt;br&gt;
"What projects are you working on?"&lt;br&gt;
"What are your preferences?"&lt;/p&gt;

&lt;p&gt;The agent remembers previous interactions and becomes more useful over time.&lt;/p&gt;

&lt;p&gt;This makes interactions feel less like chatting with a stateless model and more like working with an actual assistant.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. n8n
&lt;/h2&gt;

&lt;p&gt;Building an AI agent is one thing.&lt;/p&gt;

&lt;p&gt;Connecting it to the rest of your stack is a completely different challenge.&lt;/p&gt;

&lt;p&gt;Agents rarely operate in isolation. They usually need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger workflows&lt;/li&gt;
&lt;li&gt;Update databases&lt;/li&gt;
&lt;li&gt;Send emails&lt;/li&gt;
&lt;li&gt;Connect with SaaS products&lt;/li&gt;
&lt;li&gt;Call APIs&lt;/li&gt;
&lt;li&gt;Execute scheduled tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where n8n becomes useful.&lt;/p&gt;

&lt;p&gt;n8n is a workflow automation platform that helps AI agents interact with external systems through visual workflows and programmable logic.&lt;/p&gt;

&lt;p&gt;Instead of writing custom integrations for every service, developers can connect agents to hundreds of tools while keeping workflows manageable.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual workflow builder&lt;/li&gt;
&lt;li&gt;AI agent integrations&lt;/li&gt;
&lt;li&gt;Self-hosted deployment&lt;/li&gt;
&lt;li&gt;API connectivity&lt;/li&gt;
&lt;li&gt;Scheduled workflows&lt;/li&gt;
&lt;li&gt;Large integration ecosystem&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Real Use Case: Lead Qualification Agent
&lt;/h3&gt;

&lt;p&gt;Imagine an AI sales agent processing incoming leads:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read lead information&lt;/li&gt;
&lt;li&gt;Analyze qualification criteria&lt;/li&gt;
&lt;li&gt;Update CRM records&lt;/li&gt;
&lt;li&gt;Send personalized emails&lt;/li&gt;
&lt;li&gt;Create support tickets&lt;/li&gt;
&lt;li&gt;Notify sales teams&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without workflow orchestration, every integration requires additional code and maintenance.&lt;/p&gt;

&lt;p&gt;n8n helps coordinate these actions while keeping the workflow transparent and easy to modify.&lt;/p&gt;

&lt;p&gt;Link / Docs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://n8n.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;https://n8n.io/&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Langfuse
&lt;/h2&gt;

&lt;p&gt;AI agents become difficult to debug once they move into production.&lt;/p&gt;

&lt;p&gt;When something goes wrong, questions appear quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why did the agent fail?&lt;/li&gt;
&lt;li&gt;Which prompt caused the issue?&lt;/li&gt;
&lt;li&gt;Which tool produced incorrect output?&lt;/li&gt;
&lt;li&gt;Why did token usage suddenly increase?&lt;/li&gt;
&lt;li&gt;Why did response quality drop?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Langfuse becomes useful.&lt;/p&gt;

&lt;p&gt;Langfuse is an observability platform designed for LLM applications and AI agents.&lt;/p&gt;

&lt;p&gt;Instead of guessing what happened during execution, developers can inspect traces, prompts, model outputs, evaluations, and performance metrics.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request tracing&lt;/li&gt;
&lt;li&gt;Prompt debugging&lt;/li&gt;
&lt;li&gt;Agent evaluation&lt;/li&gt;
&lt;li&gt;Cost monitoring&lt;/li&gt;
&lt;li&gt;Performance analytics&lt;/li&gt;
&lt;li&gt;Session replay&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Real Use Case: Production Agent Debugging
&lt;/h3&gt;

&lt;p&gt;Imagine a customer support agent that suddenly starts returning poor responses.&lt;/p&gt;

&lt;p&gt;A typical debugging workflow might look like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open execution traces&lt;/li&gt;
&lt;li&gt;Inspect prompts&lt;/li&gt;
&lt;li&gt;Review tool outputs&lt;/li&gt;
&lt;li&gt;Analyze model decisions&lt;/li&gt;
&lt;li&gt;Compare successful runs&lt;/li&gt;
&lt;li&gt;Identify failure patterns&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without observability, debugging often becomes trial and error.&lt;/p&gt;

&lt;p&gt;Langfuse helps developers understand what actually happened during execution.&lt;/p&gt;

&lt;p&gt;Link / Docs:&lt;/p&gt;

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


&lt;h2&gt;
  
  
  6. Qdrant
&lt;/h2&gt;

&lt;p&gt;Many AI agents become significantly more useful when they can access external knowledge.&lt;/p&gt;

&lt;p&gt;The challenge is that agents often need to work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Internal knowledge bases&lt;/li&gt;
&lt;li&gt;PDFs&lt;/li&gt;
&lt;li&gt;Support tickets&lt;/li&gt;
&lt;li&gt;Research data&lt;/li&gt;
&lt;li&gt;Large collections of text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Qdrant becomes useful.&lt;/p&gt;

&lt;p&gt;Qdrant is a vector database designed for semantic search and retrieval workflows.&lt;/p&gt;

&lt;p&gt;Instead of relying only on the model's built-in knowledge, developers can store embeddings and retrieve relevant information dynamically.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vector search&lt;/li&gt;
&lt;li&gt;Hybrid search&lt;/li&gt;
&lt;li&gt;Metadata filtering&lt;/li&gt;
&lt;li&gt;Scalable retrieval&lt;/li&gt;
&lt;li&gt;Fast indexing&lt;/li&gt;
&lt;li&gt;Production deployment support&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Real Use Case: Internal Knowledge Assistant
&lt;/h3&gt;

&lt;p&gt;Imagine building an AI assistant for a company.&lt;/p&gt;

&lt;p&gt;The workflow could look like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User asks a question&lt;/li&gt;
&lt;li&gt;Generate embeddings&lt;/li&gt;
&lt;li&gt;Search relevant documents&lt;/li&gt;
&lt;li&gt;Retrieve matching information&lt;/li&gt;
&lt;li&gt;Add context to the prompt&lt;/li&gt;
&lt;li&gt;Generate a final answer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without retrieval systems, the model depends only on what it already knows.&lt;/p&gt;

&lt;p&gt;Qdrant helps agents access updated information and organization-specific knowledge.&lt;/p&gt;

&lt;p&gt;Link / Docs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qdrant.tech/" rel="noopener noreferrer"&gt;&lt;strong&gt;https://qdrant.tech&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  7. HumanLayer
&lt;/h2&gt;

&lt;p&gt;No matter how capable AI agents become, some decisions still require human involvement.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Financial approvals&lt;/li&gt;
&lt;li&gt;Sensitive actions&lt;/li&gt;
&lt;li&gt;Escalations&lt;/li&gt;
&lt;li&gt;Security checks&lt;/li&gt;
&lt;li&gt;Compliance reviews&lt;/li&gt;
&lt;li&gt;Critical business decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where HumanLayer becomes useful.&lt;/p&gt;

&lt;p&gt;HumanLayer is designed to add human approval and collaboration workflows into AI agents.&lt;/p&gt;

&lt;p&gt;Instead of allowing agents to operate without oversight, developers can introduce checkpoints where humans review and approve actions before execution continues.&lt;/p&gt;

&lt;p&gt;Key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human approval workflows&lt;/li&gt;
&lt;li&gt;Slack integration&lt;/li&gt;
&lt;li&gt;Escalation handling&lt;/li&gt;
&lt;li&gt;Human checkpoints&lt;/li&gt;
&lt;li&gt;Agent collaboration&lt;/li&gt;
&lt;li&gt;Action gating&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Real Use Case: Financial Approval Agent
&lt;/h3&gt;

&lt;p&gt;Imagine an AI agent responsible for preparing payment requests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gather payment information&lt;/li&gt;
&lt;li&gt;Validate transaction details&lt;/li&gt;
&lt;li&gt;Generate recommendations&lt;/li&gt;
&lt;li&gt;Send approval request&lt;/li&gt;
&lt;li&gt;Wait for human confirmation&lt;/li&gt;
&lt;li&gt;Execute approved actions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without human collaboration layers, agents may perform actions that require oversight.&lt;/p&gt;

&lt;p&gt;HumanLayer helps agents safely involve people when decisions become sensitive.&lt;/p&gt;

&lt;p&gt;Link / Docs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://humanlayer.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;https://humanlayer.dev&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>cli</category>
      <category>automation</category>
    </item>
    <item>
      <title>Wiring AI Code Review into a Bitbucket + Jira Workflow</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Sun, 21 Jun 2026 19:02:11 +0000</pubDate>
      <link>https://dev.to/dev_kiran/wiring-ai-code-review-into-a-bitbucket-jira-workflow-1ke8</link>
      <guid>https://dev.to/dev_kiran/wiring-ai-code-review-into-a-bitbucket-jira-workflow-1ke8</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;If your team uses Bitbucket + Jira, your workflow probably looks something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick a Jira ticket&lt;/li&gt;
&lt;li&gt;Create a branch&lt;/li&gt;
&lt;li&gt;Push code&lt;/li&gt;
&lt;li&gt;Open a pull request&lt;/li&gt;
&lt;li&gt;Get reviews&lt;/li&gt;
&lt;li&gt;Merge and close the ticket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pretty straightforward.&lt;/p&gt;

&lt;p&gt;But as projects start growing and more developers join the team, things slowly become messy.&lt;/p&gt;

&lt;p&gt;You start seeing situations like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PRs with very little context&lt;/li&gt;
&lt;li&gt;Requirements getting missed during implementation&lt;/li&gt;
&lt;li&gt;The same review comments appearing repeatedly&lt;/li&gt;
&lt;li&gt;Tickets marked as "done" while edge cases are still missing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most discussions around AI code review focus heavily on GitHub workflows.&lt;/p&gt;

&lt;p&gt;But many teams still work inside Bitbucket + Jira every day.&lt;/p&gt;

&lt;p&gt;So I wanted to understand something:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where does AI code review actually fit into this workflow?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not just PR summaries. Not just generated comments..&lt;/p&gt;

&lt;p&gt;Can it actually help developers during day-to-day work?&lt;/p&gt;

&lt;p&gt;Let's get into it 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Bitbucket + Jira Workflows Feel Different
&lt;/h2&gt;

&lt;p&gt;Bitbucket and Jira already integrate really well.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link branches directly to Jira tickets&lt;/li&gt;
&lt;li&gt;Connect pull requests to issues&lt;/li&gt;
&lt;li&gt;Track development progress automatically&lt;/li&gt;
&lt;li&gt;Trigger CI/CD workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem usually is not integration.&lt;/p&gt;

&lt;p&gt;The harder part is making sure implementation actually matches what the ticket intended.&lt;/p&gt;

&lt;p&gt;Review discussions often become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did we update all affected services?&lt;/li&gt;
&lt;li&gt;Does this fully match the Jira requirement?&lt;/li&gt;
&lt;li&gt;Are tests missing?&lt;/li&gt;
&lt;li&gt;Could this change affect something else?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Human reviewers catch a lot of this. But not always.&lt;/p&gt;

&lt;p&gt;That's where AI review starts becoming interesting. Not as a replacement for reviews. More like an additional validation layer.&lt;/p&gt;




&lt;h3&gt;
  
  
  A Simple Bitbucket + Jira Workflow
&lt;/h3&gt;

&lt;p&gt;Let’s take a basic example.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Create a Jira ticket
&lt;/h4&gt;

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

&lt;p&gt;&lt;strong&gt;PAY-142&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"&lt;em&gt;Add coupon validation for premium users&lt;/em&gt;"&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Create a linked branch
&lt;/h4&gt;

&lt;p&gt;Something like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;feature/PAY-142-coupon-validation&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Bitbucket automatically links the branch with Jira.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Implement the change
&lt;/h4&gt;

&lt;p&gt;You add something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPremium&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
   &lt;span class="nf"&gt;applyCoupon&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Looks fine.&lt;/p&gt;

&lt;p&gt;PR opens successfully.&lt;/p&gt;

&lt;p&gt;Tests pass.&lt;/p&gt;

&lt;p&gt;Everything seems okay.&lt;/p&gt;
&lt;h4&gt;
  
  
  Step 4: Review the PR
&lt;/h4&gt;

&lt;p&gt;Normally reviewers look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code quality&lt;/li&gt;
&lt;li&gt;Naming&lt;/li&gt;
&lt;li&gt;Logic&lt;/li&gt;
&lt;li&gt;Tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI reviewers can add another layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did related files also need updates?&lt;/li&gt;
&lt;li&gt;Are edge cases missing?&lt;/li&gt;
&lt;li&gt;Does the implementation fully match the ticket?&lt;/li&gt;
&lt;li&gt;Could this affect shared services?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of replacing reviews, it helps fill small gaps.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where I Found &lt;a href="//qodo.ai"&gt;Qodo&lt;/a&gt; Interesting
&lt;/h2&gt;

&lt;p&gt;While exploring AI review tools for this workflow, one thing I noticed with &lt;a href="//qodo.ai"&gt;Qodo&lt;/a&gt; was that it tries to review more than just the changed lines inside a pull request.&lt;/p&gt;

&lt;p&gt;Instead of focusing only on the PR diff, it attempts to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Related files&lt;/li&gt;
&lt;li&gt;Existing code patterns&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Previous review context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Imagine the Jira ticket says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add audit logging for payment updates&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Implementation:&lt;/p&gt;

&lt;p&gt;updatePayment();&lt;/p&gt;

&lt;p&gt;The code works.&lt;/p&gt;

&lt;p&gt;Tests pass.&lt;/p&gt;

&lt;p&gt;PR gets approved.&lt;/p&gt;

&lt;p&gt;Everything looks fine.&lt;/p&gt;

&lt;p&gt;Except logging was never added.&lt;/p&gt;

&lt;p&gt;Traditional checks may not catch that.&lt;/p&gt;

&lt;p&gt;A reviewer might miss it too.&lt;/p&gt;

&lt;p&gt;In larger projects, where a single Jira ticket touches multiple files or services, having another layer looking for missing pieces can be useful.&lt;/p&gt;

&lt;p&gt;I liked this because it felt less like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's a random AI suggestion"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and more like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Something related to this change might be missing"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That context becomes more useful as projects grow.&lt;/p&gt;


&lt;h3&gt;
  
  
  SonarQube vs AI Review in This Workflow
&lt;/h3&gt;

&lt;p&gt;SonarQube still has an important role.&lt;/p&gt;

&lt;p&gt;It helps with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Security checks&lt;/li&gt;
&lt;li&gt;✅ Code smells&lt;/li&gt;
&lt;li&gt;✅ Quality gates&lt;/li&gt;
&lt;li&gt;✅ Coverage rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But SonarQube mainly answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is something technically wrong?&lt;/li&gt;
&lt;li&gt;AI review often tries to answer:&lt;/li&gt;
&lt;li&gt;Does this implementation make sense in context?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both solve different problems.&lt;/p&gt;


&lt;h2&gt;
  
  
  📚 Want to Read More?
&lt;/h2&gt;

&lt;p&gt;If you want to learn more about AI-assisted reviews and workflows, Qodo has a &lt;a href="https://www.qodo.ai/academy/" rel="noopener noreferrer"&gt;learning hub&lt;/a&gt; with some useful resources.&lt;/p&gt;

&lt;p&gt;A few interesting ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.qodo.ai/academy/ai-code-review/" rel="noopener noreferrer"&gt;What is AI Code Review&lt;/a&gt;&lt;br&gt;
Good starting point if you want to understand how AI review works and what it tries to catch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.qodo.ai/academy/ai-generated-code-in-enterprise/" rel="noopener noreferrer"&gt;Reviewing AI Generated Code&lt;/a&gt;&lt;br&gt;
Covers common mistakes and patterns teams see when reviewing AI-written code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.qodo.ai/academy/ai-code-review-tools-comparison-and-benchmarks/" rel="noopener noreferrer"&gt;AI Code Review Tools Comparison&lt;/a&gt;&lt;br&gt;
Useful if you want to compare approaches and understand where different tools fit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🏁 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI code review is not replacing Jira workflows or human reviewers.&lt;/p&gt;

&lt;p&gt;It adds another layer between:&lt;/p&gt;

&lt;p&gt;Ticket → Code → Pull Request&lt;/p&gt;

&lt;p&gt;For Bitbucket + Jira teams, that can help reduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing requirements&lt;/li&gt;
&lt;li&gt;Repeated review comments&lt;/li&gt;
&lt;li&gt;Small issues that become larger problems later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most discussions online focus on GitHub.&lt;/p&gt;

&lt;p&gt;But for teams already using Bitbucket and Jira every day, there is still a lot of value in adding AI review to the workflow.&lt;/p&gt;
&lt;h2&gt;
  
  
  👨‍💻 TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Jira tracks requirements&lt;/li&gt;
&lt;li&gt;✅ Bitbucket manages code changes&lt;/li&gt;
&lt;li&gt;✅ AI review adds another validation layer&lt;/li&gt;
&lt;li&gt;✅ Useful when PRs affect multiple files or services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As always, tools help, but good reviews still need humans.&lt;/p&gt;
&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
    <item>
      <title>From MVP to Production: Tools That Grow With Your SaaS 🚀</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Mon, 16 Mar 2026 03:20:09 +0000</pubDate>
      <link>https://dev.to/dev_kiran/from-mvp-to-production-tools-that-grow-with-your-saas-148</link>
      <guid>https://dev.to/dev_kiran/from-mvp-to-production-tools-that-grow-with-your-saas-148</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;Building a SaaS product is thrilling. But moving from your first MVP to a reliable production service takes more than code. You need scalable infrastructure for things like auth, billing, emails, uploads, observability, and execution intelligence. Building all of this from scratch slows you down and introduces risk.&lt;/p&gt;

&lt;p&gt;That’s why many SaaS teams use proven tools and SDKs that solve real infrastructure problems so they can focus on the core product.&lt;/p&gt;

&lt;p&gt;In this article you’ll get for each tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clear description of what it does&lt;/li&gt;
&lt;li&gt;Key features&lt;/li&gt;
&lt;li&gt;Why it’s useful for SaaS&lt;/li&gt;
&lt;li&gt;A simple getting-started guide&lt;/li&gt;
&lt;li&gt;Links to official docs and websites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s level up your SaaS stack 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s an SDK?
&lt;/h2&gt;

&lt;p&gt;A software development kit (SDK) is a bundled set of tools that helps you integrate functionality or services into your application without building them from scratch.&lt;/p&gt;

&lt;p&gt;SDKs often include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prewritten code libraries&lt;/li&gt;
&lt;li&gt;APIs and interface definitions&lt;/li&gt;
&lt;li&gt;Documentation and examples&lt;/li&gt;
&lt;li&gt;Debugging or testing helpers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using SDKs helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save time&lt;/li&gt;
&lt;li&gt;Avoid reinventing the wheel&lt;/li&gt;
&lt;li&gt;Reduce bugs&lt;/li&gt;
&lt;li&gt;Build consistently across environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you need authentication, payments, emails, or production intelligence, well-chosen SDKs drastically speed up development.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.hud.io/" rel="noopener noreferrer"&gt;Hud&lt;/a&gt;: Runtime Production Intelligence That Scales With You
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbq3rq02cce1hgq5y0fq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbq3rq02cce1hgq5y0fq.png" alt="Hud" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hud is a &lt;strong&gt;runtime code sensor that captures real production execution behavior and brings that context where engineers actually work&lt;/strong&gt; in their IDEs and code review workflows. It continuously collects function-level execution data, detects issues like regressions or errors, surfaces root causes, and powers production-aware development with or without AI assists.&lt;/p&gt;

&lt;p&gt;Unlike typical SDKs that provide discrete functions (like auth or payments), Hud is an intelligence layer. It does not change your business logic. Instead, it observes how that logic behaves under production traffic and delivers real execution insights back into your development loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why It Matters
&lt;/h3&gt;

&lt;p&gt;Most SaaS teams face a gap between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What code looks like in source&lt;/li&gt;
&lt;li&gt;How it actually runs under real customer load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gap grows as you scale and adopt AI-assisted coding tools. Code suggestions and refactors that look valid in staging may fail in production because they lack real execution context.&lt;/p&gt;

&lt;p&gt;Hud fills this gap by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Giving function behavior signals from production&lt;/li&gt;
&lt;li&gt;Detecting regressions or errors automatically&lt;/li&gt;
&lt;li&gt;Pinpointing exact root causes&lt;/li&gt;
&lt;li&gt;Feeding runtime context into supported IDEs&lt;/li&gt;
&lt;li&gt;Enabling safer, production-aware AI coding workflows (MCP server)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, Hud helps you move from reactive debugging to proactive production confidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Function-Level Execution Data&lt;/strong&gt;: Hud captures how each function behaves in production: invocation counts, durations, error signals, and behavioral trends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDE Integration&lt;/strong&gt;: Runtime summaries appear inside supported editors like VS Code and JetBrains. You get real behavior context without leaving your code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Issue Detection&lt;/strong&gt;: Hud flags behavioral changes after deploys, new errors, and performance regressions with root cause context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-Aware AI Coding&lt;/strong&gt;: &lt;a href="https://docs.hud.io/docs/hud-mcp-server" rel="noopener noreferrer"&gt;Hud’s MCP server&lt;/a&gt; streams production signals into AI assistants like Copilot or Cursor so generated suggestions align with how your code runs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal Overhead &amp;amp; Zero Config&lt;/strong&gt;: It installs fast and runs safely in production without heavy configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why SaaS Teams Use It
&lt;/h3&gt;

&lt;p&gt;Hud is not just another monitoring tool. It becomes valuable when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your app has real production traffic&lt;/li&gt;
&lt;li&gt;Issues only show up after deploy&lt;/li&gt;
&lt;li&gt;You use AI-assisted coding tools&lt;/li&gt;
&lt;li&gt;You want deeper insight than logs or traces can provide&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beginner teams focused on MVPs usually do not need this yet. But once you have real users and production complexity, Hud helps teams catch issues early, fix them quickly, and build with confidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Get Started
&lt;/h3&gt;

&lt;p&gt;Here is a simple guide to set up Hud in a &lt;code&gt;Node.js&lt;/code&gt; app.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Create a Hud Account
&lt;/h4&gt;

&lt;p&gt;First, sign up at &lt;a href="https://hud.io" rel="noopener noreferrer"&gt;hud.io&lt;/a&gt; and create your workspace. After signup you’ll get API keys for your project.&lt;/p&gt;

&lt;p&gt;👉 Visit: &lt;a href="https://hud.io/" rel="noopener noreferrer"&gt;https://hud.io&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Install the Hud SDK
&lt;/h4&gt;

&lt;p&gt;In your project directory, install the Hud package:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;


&lt;p&gt;This installs the lightweight sensor that captures runtime behavior.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Initialize Hud Early in Your App
&lt;/h4&gt;

&lt;p&gt;Hud works best when it starts before your application logic. So import and initialize it early in your main file.&lt;/p&gt;

&lt;p&gt;Create a file named &lt;code&gt;hud-init.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hud&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hud-sdk/setup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;hud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;includeModules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;hud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HUD_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-service&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then, change your start script so this file loads first:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;--require&lt;/span&gt; ./hud-init.js index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or import it at the top of your entry file:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./hud-init.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// ...rest of your app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  4. Open Your IDE Extension
&lt;/h4&gt;

&lt;p&gt;Install the Hud extension in your IDE (VS Code, JetBrains, or Cursor). This lets you see real production behavior right next to your code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VS Code: Install from &lt;a href="https://marketplace.visualstudio.com/items?itemName=Hud.hud" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;JetBrains IDEs: Install from &lt;a href="https://plugins.jetbrains.com/plugin/25174-hud" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now you’ll see runtime summaries and signals directly in your editor.&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Deploy and Watch Production
&lt;/h4&gt;

&lt;p&gt;Once Hud is running in production, it starts collecting and sending runtime data automatically. You can view function performance, errors, and trends in the Hud dashboard or directly in your IDE.&lt;/p&gt;

&lt;p&gt;Watch this quick demo video for better understanding 👇&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/JoOhI6QF6Zs"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Links&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://docs.hud.io/docs/welcome" rel="noopener noreferrer"&gt;https://docs.hud.io/docs/welcome&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://hud.io/" rel="noopener noreferrer"&gt;https://hud.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install &amp;amp; Setup Guide&lt;/strong&gt;: &lt;a href="https://docs.hud.io/docs/installation-guide" rel="noopener noreferrer"&gt;https://docs.hud.io/docs/installation-guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  &lt;a href="https://clerk.com/" rel="noopener noreferrer"&gt;Clerk&lt;/a&gt;: Authentication Without Building It Yourself
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgn9g40a266qngswqbod7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgn9g40a266qngswqbod7.png" alt="Clerk" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clerk helps you handle authentication and user management without building everything from scratch. It takes care of users, sessions, and tokens, so your backend can trust who is making a request.&lt;/p&gt;

&lt;p&gt;Instead of writing your own auth logic, you can use Clerk to verify users securely on the backend and protect your APIs.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Secure user authentication&lt;/li&gt;
&lt;li&gt;Session and token management&lt;/li&gt;
&lt;li&gt;Easy backend verification&lt;/li&gt;
&lt;li&gt;Works well with Node.js APIs&lt;/li&gt;
&lt;li&gt;Dashboard to manage users&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Why It’s Useful for SaaS
&lt;/h3&gt;

&lt;p&gt;Every SaaS backend needs to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who the user is&lt;/li&gt;
&lt;li&gt;Whether the request is authenticated&lt;/li&gt;
&lt;li&gt;Whether the session is valid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Doing this yourself is time-consuming and risky.&lt;/p&gt;

&lt;p&gt;Clerk helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure your backend APIs quickly&lt;/li&gt;
&lt;li&gt;Avoid common auth mistakes&lt;/li&gt;
&lt;li&gt;Scale user management as your SaaS grows&lt;/li&gt;
&lt;li&gt;Spend less time on security setup&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How to Get Started (Backend Setup – Node.js)
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1. Create a Clerk Account
&lt;/h4&gt;

&lt;p&gt;Sign up on the Clerk website and create a new application.&lt;br&gt;
From the dashboard, copy your Secret Key.&lt;/p&gt;

&lt;p&gt;👉 Website: &lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;https://clerk.com&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Install the Clerk Backend SDK
&lt;/h4&gt;

&lt;p&gt;In your backend project, install Clerk:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @clerk/clerk-sdk-node
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  3. Add Environment Variables
&lt;/h4&gt;

&lt;p&gt;Add your Clerk secret key to your environment variables:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CLERK_SECRET_KEY=your_secret_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  4. Protect Backend Routes
&lt;/h4&gt;

&lt;p&gt;Use Clerk middleware to protect your API routes.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ClerkExpressRequireAuth&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@clerk/clerk-sdk-node&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Public route&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anyone can access this&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Protected route&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/dashboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nc"&gt;ClerkExpressRequireAuth&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Authenticated request&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server running on port 3000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, only authenticated users can access &lt;code&gt;/api/dashboard&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Access User Information on the Backend
&lt;/h4&gt;

&lt;p&gt;Once authenticated, you can safely access user data.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nc"&gt;ClerkExpressRequireAuth&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This makes it easy to link users to your database records.&lt;/p&gt;
&lt;h4&gt;
  
  
  Frontend Configuration (Quick Note)
&lt;/h4&gt;

&lt;p&gt;Once your backend is protected, you’ll need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add Clerk to your frontend (React, Next.js, etc.)&lt;/li&gt;
&lt;li&gt;Send the authentication token with API requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clerk provides ready-made frontend SDKs and UI components to handle login and signup easily.&lt;/p&gt;

&lt;p&gt;👉 Frontend setup docs: &lt;a href="https://clerk.com/docs" rel="noopener noreferrer"&gt;https://clerk.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Links&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://clerk.com/docs" rel="noopener noreferrer"&gt;https://clerk.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://clerk.com" rel="noopener noreferrer"&gt;https://clerk.com&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;a href="https://stripe.com/in" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;: Payments and Subscriptions for Your SaaS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63hgqopsvanv7p1b7kd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63hgqopsvanv7p1b7kd0.png" alt="Stripe" width="799" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stripe helps you handle payments and subscriptions without building complex billing logic yourself. It takes care of card payments, retries, invoices, and many edge cases that are hard to get right.&lt;/p&gt;

&lt;p&gt;For a SaaS backend, Stripe is mainly used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create subscriptions&lt;/li&gt;
&lt;li&gt;Charge customers&lt;/li&gt;
&lt;li&gt;Listen to payment events using webhooks&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;One-time payments and subscriptions&lt;/li&gt;
&lt;li&gt;Secure payment handling&lt;/li&gt;
&lt;li&gt;Webhooks for billing events&lt;/li&gt;
&lt;li&gt;Customer and invoice management&lt;/li&gt;
&lt;li&gt;Widely used and well-documented&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Why It’s Useful for SaaS
&lt;/h3&gt;

&lt;p&gt;Almost every SaaS needs billing. Writing your own payment system is risky and slow.&lt;/p&gt;

&lt;p&gt;Stripe helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start charging users quickly&lt;/li&gt;
&lt;li&gt;Avoid payment and security issues&lt;/li&gt;
&lt;li&gt;Handle upgrades, downgrades, and cancellations&lt;/li&gt;
&lt;li&gt;Keep your backend in sync with payment status&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How to Get Started (Backend Setup – Node.js)
&lt;/h3&gt;

&lt;p&gt;Below is a simple backend setup using Node.js.&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Create a Stripe Account
&lt;/h4&gt;

&lt;p&gt;Sign up on Stripe and create a project.&lt;br&gt;
From the dashboard, copy your Secret API Key.&lt;/p&gt;

&lt;p&gt;👉 Website: &lt;a href="https://stripe.com/" rel="noopener noreferrer"&gt;https://stripe.com&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Install the Stripe SDK
&lt;/h4&gt;

&lt;p&gt;Install Stripe in your backend project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install stripe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  3. Add Environment Variables
&lt;/h4&gt;

&lt;p&gt;Add your Stripe secret key to your environment variables:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;STRIPE_SECRET_KEY=your_secret_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  4. Initialize Stripe in Your Backend
&lt;/h4&gt;

&lt;p&gt;Create a Stripe client that you can reuse in your app.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Stripe&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stripe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stripe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Stripe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;STRIPE_SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-01-28&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;stripe&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  5. Create a Customer
&lt;/h4&gt;

&lt;p&gt;When a user signs up for your SaaS, create a Stripe customer.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;stripe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user@email.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Store the &lt;code&gt;customer.id&lt;/code&gt; in your database and link it to the user.&lt;/p&gt;
&lt;h4&gt;
  
  
  6. Create a Subscription
&lt;/h4&gt;

&lt;p&gt;Use Stripe Checkout or create subscriptions directly from the backend.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;stripe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subscriptions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;price_id_here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This starts billing the customer based on your pricing plan.&lt;/p&gt;
&lt;h4&gt;
  
  
  7. Handle Webhooks
&lt;/h4&gt;

&lt;p&gt;Webhooks tell your backend when something changes, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment success&lt;/li&gt;
&lt;li&gt;Payment failure&lt;/li&gt;
&lt;li&gt;Subscription canceled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create a webhook endpoint:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;bodyParser&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;body-parser&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/webhook&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;bodyParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;invoice.payment_succeeded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Payment successful&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;customer.subscription.deleted&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Subscription canceled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;received&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;NOTE: This is just a demo and getting started code, please refer the documentation and implement according to your application needs.&lt;/p&gt;

&lt;p&gt;Use webhooks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable or disable features&lt;/li&gt;
&lt;li&gt;Update subscription status in your database&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Frontend Configuration (Quick Note)
&lt;/h4&gt;

&lt;p&gt;On the frontend, you’ll usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redirect users to Stripe Checkout&lt;/li&gt;
&lt;li&gt;Or collect payment details using Stripe Elements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stripe provides ready-made frontend tools so you don’t need to handle card data yourself.&lt;/p&gt;

&lt;p&gt;👉 Frontend docs: &lt;a href="https://stripe.com/docs/payments/checkout" rel="noopener noreferrer"&gt;https://stripe.com/docs/payments/checkout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Links&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend Documentation&lt;/strong&gt;: &lt;a href="https://stripe.com/docs/api" rel="noopener noreferrer"&gt;https://stripe.com/docs/api&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://stripe.com/" rel="noopener noreferrer"&gt;https://stripe.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checkout Guide&lt;/strong&gt;: &lt;a href="https://stripe.com/docs/payments/checkout" rel="noopener noreferrer"&gt;https://stripe.com/docs/payments/checkout&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks Guide&lt;/strong&gt;: &lt;a href="https://stripe.com/docs/webhooks" rel="noopener noreferrer"&gt;https://stripe.com/docs/webhooks&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  &lt;a href="https://resend.com/" rel="noopener noreferrer"&gt;Resend&lt;/a&gt;: Send Transactional Emails Without the Complexity
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9v5vcn80rloblozv870.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9v5vcn80rloblozv870.png" alt="Resend" width="799" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resend helps you send transactional emails from your backend easily and reliably.&lt;br&gt;
This includes emails like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Welcome emails&lt;/li&gt;
&lt;li&gt;Login or magic link emails&lt;/li&gt;
&lt;li&gt;Payment or subscription notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of managing SMTP servers or complex email setup, Resend gives you a simple API that works well for SaaS products.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simple email-sending API&lt;/li&gt;
&lt;li&gt;High email deliverability&lt;/li&gt;
&lt;li&gt;Support for HTML and React email templates&lt;/li&gt;
&lt;li&gt;Works well with Node.js backends&lt;/li&gt;
&lt;li&gt;Minimal setup and clear logs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Why It’s Useful for SaaS
&lt;/h3&gt;

&lt;p&gt;Every SaaS needs emails, but email infrastructure is often painful.&lt;/p&gt;

&lt;p&gt;Resend helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send emails quickly without SMTP setup&lt;/li&gt;
&lt;li&gt;Avoid common delivery issues&lt;/li&gt;
&lt;li&gt;Keep email logic simple and clean&lt;/li&gt;
&lt;li&gt;Focus on product logic instead of email servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s especially useful for early-stage SaaS and MVPs.&lt;/p&gt;
&lt;h3&gt;
  
  
  How to Get Started (Backend Setup – Node.js)
&lt;/h3&gt;

&lt;p&gt;Below is a simple backend setup using &lt;code&gt;Node.js&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Create a Resend Account
&lt;/h4&gt;

&lt;p&gt;Sign up on Resend and create a project.&lt;br&gt;
From the dashboard, copy your API Key.&lt;/p&gt;

&lt;p&gt;👉 Website: &lt;a href="https://resend.com" rel="noopener noreferrer"&gt;https://resend.com&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Install the Resend SDK
&lt;/h4&gt;

&lt;p&gt;Install Resend in your backend project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install resend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  3. Add Environment Variables
&lt;/h4&gt;

&lt;p&gt;Add your Resend API key to your environment variables:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RESEND_API_KEY=your_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  4. Send Your First Email
&lt;/h4&gt;

&lt;p&gt;Create a Resend client and send an email from your backend.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Resend&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;resend&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Resend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RESEND_API_KEY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emails&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="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SaaS App &amp;lt;noreply@yourdomain.com&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user@email.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome to our app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;p&amp;gt;Thanks for signing up!&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That’s it, your email is sent.&lt;/p&gt;
&lt;h4&gt;
  
  
  Frontend Configuration (Quick Note)
&lt;/h4&gt;

&lt;p&gt;Resend is mostly used on the backend.&lt;br&gt;
On the frontend, you usually just trigger backend APIs that send emails.&lt;/p&gt;

&lt;p&gt;If you want nicer emails, Resend also supports React-based email templates.&lt;/p&gt;

&lt;p&gt;👉 Email templates docs: &lt;a href="https://resend.com/docs/dashboard/templates/introduction" rel="noopener noreferrer"&gt;https://resend.com/docs/dashboard/templates/introduction&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Links&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://resend.com/docs/introduction" rel="noopener noreferrer"&gt;https://resend.com/docs/introduction&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://resend.com" rel="noopener noreferrer"&gt;https://resend.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get Started&lt;/strong&gt;: &lt;a href="https://resend.com/docs/send-with-nodejs" rel="noopener noreferrer"&gt;https://resend.com/docs/send-with-nodejs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  &lt;a href="https://uploadthing.com/" rel="noopener noreferrer"&gt;UploadThing&lt;/a&gt;: Better file uploads
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxiqetdd9l9rs9av0c15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxiqetdd9l9rs9av0c15.png" alt="UploadThing" width="799" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UploadThing helps you handle file uploads in your SaaS without building complex upload logic.&lt;br&gt;
It takes care of file handling, storage, and validation so you don’t have to manage servers or storage APIs directly.&lt;/p&gt;

&lt;p&gt;It works especially well with Next.js backends, but the idea stays the same: secure uploads with very little code.&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simple and secure file uploads&lt;/li&gt;
&lt;li&gt;File size and type validation&lt;/li&gt;
&lt;li&gt;No custom storage setup needed&lt;/li&gt;
&lt;li&gt;Works well with modern backend frameworks&lt;/li&gt;
&lt;li&gt;Clean API and good developer experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why It’s Useful for SaaS&lt;/p&gt;

&lt;p&gt;Many SaaS products need file uploads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Profile pictures&lt;/li&gt;
&lt;li&gt;Documents&lt;/li&gt;
&lt;li&gt;Reports&lt;/li&gt;
&lt;li&gt;Media files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building uploads yourself takes time and is easy to get wrong.&lt;/p&gt;

&lt;p&gt;UploadThing helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add uploads quickly&lt;/li&gt;
&lt;li&gt;Avoid storage and security issues&lt;/li&gt;
&lt;li&gt;Keep backend code simple&lt;/li&gt;
&lt;li&gt;Focus on product features&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How to Get Started (Backend Setup: Next.js / Node.js)
&lt;/h3&gt;

&lt;p&gt;Below is a simple backend setup using Next.js API routes.&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Create an UploadThing Account
&lt;/h4&gt;

&lt;p&gt;Sign up on UploadThing and create a new project.&lt;br&gt;
From the dashboard, copy your API Key.&lt;/p&gt;

&lt;p&gt;👉 Website: &lt;a href="https://uploadthing.com" rel="noopener noreferrer"&gt;https://uploadthing.com&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Install the UploadThing SDK
&lt;/h4&gt;

&lt;p&gt;Install UploadThing in your project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install uploadthing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  3. Add Environment Variables
&lt;/h4&gt;

&lt;p&gt;Add your UploadThing API key to your environment variables:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UPLOADTHING_SECRET=your_secret_key
UPLOADTHING_APP_ID=your_app_id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  4. Create an Upload Router (Backend)
&lt;/h4&gt;

&lt;p&gt;Create a backend upload handler to define what files are allowed.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createUploadthing&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uploadthing/next&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createUploadthing&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uploadRouter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fileUploader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;maxFileSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2MB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;maxFileSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;4MB&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;onUploadComplete&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;File uploaded:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allowed file types&lt;/li&gt;
&lt;li&gt;File size limits&lt;/li&gt;
&lt;li&gt;What happens after upload&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  5. Expose the Upload Endpoint
&lt;/h4&gt;

&lt;p&gt;Export your router so your app can use it.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createNextRouteHandler&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uploadthing/next&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;uploadRouter&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./uploadRouter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nf"&gt;createNextRouteHandler&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;router&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;uploadRouter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Frontend Configuration (Quick Note)
&lt;/h4&gt;

&lt;p&gt;On the frontend, you’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use UploadThing’s UI helpers&lt;/li&gt;
&lt;li&gt;Connect them to your backend upload route&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UploadThing provides ready-made components to make this easy.&lt;/p&gt;

&lt;p&gt;👉 Frontend docs: &lt;a href="https://docs.uploadthing.com" rel="noopener noreferrer"&gt;https://docs.uploadthing.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official Links&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://docs.uploadthing.com" rel="noopener noreferrer"&gt;https://docs.uploadthing.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://uploadthing.com" rel="noopener noreferrer"&gt;https://uploadthing.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  That's It.🙏
&lt;/h2&gt;

&lt;p&gt;Building a SaaS that grows from MVP to production means choosing tools that scale with you. From authentication and billing to production intelligence and observability, these SDKs help you deliver value faster and more confidently.&lt;/p&gt;

&lt;p&gt;If you find this guide useful, please like and share. Someone else building a SaaS might benefit too 💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>software</category>
      <category>ai</category>
      <category>coding</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Enterprise AI Code Review in Real World Teams</title>
      <dc:creator>Kiran Naragund</dc:creator>
      <pubDate>Thu, 26 Feb 2026 16:06:08 +0000</pubDate>
      <link>https://dev.to/dev_kiran/enterprise-ai-code-review-in-real-world-teams-4m5l</link>
      <guid>https://dev.to/dev_kiran/enterprise-ai-code-review-in-real-world-teams-4m5l</guid>
      <description>&lt;p&gt;Hello Devs 👋&lt;/p&gt;

&lt;p&gt;If you’ve only worked in small teams, adding AI code review feels almost trivial.&lt;/p&gt;

&lt;p&gt;Install a tool.&lt;br&gt;
Connect your repo.&lt;br&gt;
Merge a PR and watch the comments roll in.&lt;/p&gt;

&lt;p&gt;That is usually enough to get started.&lt;/p&gt;

&lt;p&gt;Enterprise environments are a completely different story.&lt;/p&gt;

&lt;p&gt;When you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;300, 1,000, or even 10,000 developers contributing daily&lt;/li&gt;
&lt;li&gt;Dozens or hundreds of repositories with different ownership models&lt;/li&gt;
&lt;li&gt;Shared internal libraries that power half the company&lt;/li&gt;
&lt;li&gt;Compliance requirements that are audited regularly&lt;/li&gt;
&lt;li&gt;Multiple DevOps platforms coexisting across departments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI review stops being a productivity experiment you try for a sprint.&lt;/p&gt;

&lt;p&gt;It becomes an architectural decision that affects how the entire engineering organization works.&lt;/p&gt;

&lt;p&gt;Let’s talk about what actually matters from a developer perspective.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changes in Enterprise Environments?
&lt;/h2&gt;

&lt;p&gt;As developers, we usually think in very practical terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this comment actually help me improve the code?&lt;/li&gt;
&lt;li&gt;Is this feedback technically accurate?&lt;/li&gt;
&lt;li&gt;Is it going to slow me down while I am trying to ship?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At enterprise scale, the questions expand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Will this behave consistently across all our repositories?&lt;/li&gt;
&lt;li&gt;Is our proprietary code safe in the process?&lt;/li&gt;
&lt;li&gt;Does this scale without flooding PRs with noise?&lt;/li&gt;
&lt;li&gt;Can it enforce standards in a consistent and predictable way?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are fundamentally different concerns compared to startup level tooling decisions. What works for 15 engineers does not automatically work for 1,500.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi Repo Reality
&lt;/h2&gt;

&lt;p&gt;Most large companies are not running a single mono repo.&lt;/p&gt;

&lt;p&gt;You will typically see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A shared SDK repository used by multiple teams&lt;/li&gt;
&lt;li&gt;Several microservices owned by different groups&lt;/li&gt;
&lt;li&gt;Infrastructure as code repositories&lt;/li&gt;
&lt;li&gt;Internal tooling and automation projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now imagine this scenario.&lt;/p&gt;

&lt;p&gt;You change a shared interface in Repo A. That interface is consumed by 12 services spread across 8 other repositories.&lt;/p&gt;

&lt;p&gt;A diff only review inside a single repo will not understand the blast radius. It cannot see how that change might ripple across dependent systems.&lt;/p&gt;

&lt;p&gt;This is one of the biggest gaps I have noticed in many AI review tools.&lt;/p&gt;

&lt;p&gt;They evaluate the pull request in isolation. Enterprises need tools that understand the system as a whole, not just the file that changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Platform Fragmentation Is Real
&lt;/h2&gt;

&lt;p&gt;In large organizations, standardization is often aspirational rather than real. You will frequently find:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Azure DevOps&lt;/strong&gt; in one department&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bitbucket&lt;/strong&gt; in another&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; for open source initiatives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLab&lt;/strong&gt; in specific regions or subsidiaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an AI review tool works well on only one platform, you are left with two uncomfortable options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fragment your tooling and accept inconsistent behavior&lt;/li&gt;
&lt;li&gt;Force a company wide migration, which is rarely smooth or politically simple&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From a developer perspective, consistency matters a lot. You do not want different review logic depending on which repository you happen to be working in that week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and Deployment Constraints
&lt;/h2&gt;

&lt;p&gt;This is where enterprise environments differ the most.&lt;/p&gt;

&lt;p&gt;Many companies require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SOC 2 compliance&lt;/li&gt;
&lt;li&gt;On prem deployment options&lt;/li&gt;
&lt;li&gt;Air gapped environments&lt;/li&gt;
&lt;li&gt;Strict data retention and governance policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a tool requires sending proprietary code to an external service without clear controls, security teams will block it immediately.&lt;/p&gt;

&lt;p&gt;As developers, we do not always see those conversations happening in the background. But they directly determine which tools we are even allowed to evaluate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparing Tool Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Static Analysis Platforms
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;SonarQube&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What it does well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security scanning&lt;/li&gt;
&lt;li&gt;Detecting code smells&lt;/li&gt;
&lt;li&gt;Enforcing coverage thresholds&lt;/li&gt;
&lt;li&gt;Providing compliance dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where it fits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Baseline quality enforcement&lt;/li&gt;
&lt;li&gt;Highly regulated environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where it does not help much:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architectural reasoning&lt;/li&gt;
&lt;li&gt;Cross repo impact awareness&lt;/li&gt;
&lt;li&gt;Contextual AI style suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is reliable and predictable, but rule based.&lt;/p&gt;

&lt;p&gt;Think of it as a guardrail. It keeps you within boundaries, but it does not actively review your design decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security Focused Platforms
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;GitHub Advanced Security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Strong for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secret scanning&lt;/li&gt;
&lt;li&gt;Dependency vulnerability detection&lt;/li&gt;
&lt;li&gt;Improving overall security posture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deeply centered around GitHub&lt;/li&gt;
&lt;li&gt;Primarily focused on security, not full PR workflow&lt;/li&gt;
&lt;li&gt;Does not reason about broader architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It protects you from known vulnerabilities.&lt;br&gt;
It does not holistically improve pull request quality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lightweight AI PR Assistants
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;CodeRabbit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Very quick setup&lt;/li&gt;
&lt;li&gt;Clear PR summaries&lt;/li&gt;
&lt;li&gt;Useful for smaller, self contained repositories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons at scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diff only analysis&lt;/li&gt;
&lt;li&gt;Limited contextual awareness&lt;/li&gt;
&lt;li&gt;Can become noisy in complex systems&lt;/li&gt;
&lt;li&gt;Fewer governance controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a 20 developer team, this can be more than enough.&lt;/p&gt;

&lt;p&gt;For a 1,000 developer organization with shared dependencies and layered architecture, it often falls short.&lt;/p&gt;

&lt;h3&gt;
  
  
  Context Aware Enterprise AI Review
&lt;/h3&gt;

&lt;p&gt;Example: &lt;strong&gt;Qodo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This category aims to address:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi repo indexing&lt;/li&gt;
&lt;li&gt;Dependency awareness&lt;/li&gt;
&lt;li&gt;Cross repo impact detection&lt;/li&gt;
&lt;li&gt;Custom rule enforcement&lt;/li&gt;
&lt;li&gt;Flexible deployment models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From a developer standpoint, the real questions are simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it understand more than just my diff?&lt;/li&gt;
&lt;li&gt;Are the suggestions precise and actionable?&lt;/li&gt;
&lt;li&gt;Does it reduce back and forth during review?&lt;/li&gt;
&lt;li&gt;Do engineers actually accept the suggestions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If developers ignore the comments, the tool slowly fades into background noise. Adoption is earned, not mandated.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Developers in Enterprises Actually Care About
&lt;/h2&gt;

&lt;p&gt;When I talk to engineers in large organizations, their concerns are very pragmatic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this going to slow my PR down?&lt;/li&gt;
&lt;li&gt;Am I going to waste time dismissing false positives?&lt;/li&gt;
&lt;li&gt;Does it understand our internal patterns and conventions?&lt;/li&gt;
&lt;li&gt;Will it block my merge for the wrong reasons?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At enterprise scale, trust becomes everything.&lt;/p&gt;

&lt;p&gt;A high acceptance rate matters more than impressive sounding AI explanations.&lt;/p&gt;

&lt;p&gt;Precision beats volume.&lt;/p&gt;

&lt;p&gt;A tool that leaves five accurate comments is more valuable than one that leaves fifty generic ones.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Simple Enterprise Checklist
&lt;/h2&gt;

&lt;p&gt;If I were evaluating AI code review in a large organization, here is what I would personally verify:&lt;/p&gt;

&lt;p&gt;✅ Works consistently across Azure DevOps, Bitbucket, GitHub, and GitLab&lt;br&gt;
✅ Understands multi repo dependencies and shared libraries&lt;br&gt;
✅ Supports cloud, on prem, or air gapped deployment&lt;br&gt;
✅ Demonstrates strong security posture and compliance certifications&lt;br&gt;
✅ Allows custom rules aligned with team specific standards&lt;br&gt;
✅ Shows real developer adoption, not forced usage metrics&lt;br&gt;
✅ Scales beyond 100 developers without overwhelming PRs&lt;/p&gt;

&lt;p&gt;If a tool fails two or three of these, it will likely struggle during enterprise rollout.&lt;/p&gt;

&lt;p&gt;At the end of the day, AI code review in large organizations is not about adding more comments to pull requests. It is about building a system that developers trust, security teams approve, and architecture teams can rely on long term.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank You!!🙏
&lt;/h2&gt;

&lt;p&gt;Thank you for reading this far. If you find this article useful, please like and share this article. Someone could find it useful too.💖&lt;/p&gt;

&lt;p&gt;Connect with me on &lt;a href="https://x.com/kiran__a__n" rel="noopener noreferrer"&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/Kiran1689" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/kiran-a-n" rel="noopener noreferrer"&gt;&lt;strong&gt;LinkedIn&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__1204850"&gt;
    &lt;a href="/dev_kiran" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1204850%2F1873cf6a-e8a7-4d43-9af8-296ac0506b3a.jpg" alt="dev_kiran image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dev_kiran"&gt;Kiran Naragund&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dev_kiran"&gt;Tech Writer and Moderator @DEV ✦ Senior Software Engineer ✦ Open-Source Contributor ✦ Email for Collabs :)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
