<?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: Manan Sharma</title>
    <description>The latest articles on DEV Community by Manan Sharma (@manan_822e7).</description>
    <link>https://dev.to/manan_822e7</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%2F4019149%2F997b7adf-8d29-46da-a8e0-69f7c6005cd0.png</url>
      <title>DEV Community: Manan Sharma</title>
      <link>https://dev.to/manan_822e7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manan_822e7"/>
    <language>en</language>
    <item>
      <title>AI-Generated PR Review at Scale</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Thu, 01 Oct 2026 03:08:53 +0000</pubDate>
      <link>https://dev.to/manan_822e7/ai-generated-pr-review-at-scale-gfn</link>
      <guid>https://dev.to/manan_822e7/ai-generated-pr-review-at-scale-gfn</guid>
      <description>&lt;h2&gt;
  
  
  High PR volume, but the manual reviewing speed doesn't improve
&lt;/h2&gt;

&lt;p&gt;Before AI agents, a team merged maybe 5-10 PRs a day, and a senior engineer could hold "what does this touch" in their head. Now teams are seeing 3-5 times that volume. The bottleneck isn't reviewing code quality anymore — linters and type checkers handle that. The bottleneck is impact triage: which of these 40 PRs today actually touch something risky, and which are safe to fast-track? A human can't manually trace dependency graphs at that volume.&lt;/p&gt;

&lt;p&gt;This is not a judgment problem (reviewing code), it is a computation problem — which is exactly what should be automated, not left to reviewer fatigue.&lt;/p&gt;

&lt;p&gt;The traditional review methods - a human tracing "what does this change affect" on many PRs every day - won't work now. This is what failure mode blast radius analysis exists to remove.&lt;/p&gt;

&lt;h2&gt;
  
  
  How CXGRD helps
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.cxgrd.com" rel="noopener noreferrer"&gt;cxgrd&lt;/a&gt; implements auto-triage. It automatically calculates blast radius for changes done in every PR and flags them with tags like critical, high, medium and low. PRs with low risk move fast, whereas, the ones with critical or high risk are flagged for real human attention. What gets reviewed at scale is not the change, but the risk.&lt;/p&gt;

&lt;p&gt;But this does not replace linting and type checking and actual code correctness still matter. CXGRD itself uses the compilers to verify the correctness of code.&lt;/p&gt;

&lt;p&gt;Check out cxgrd, and let me know what you think. &lt;br&gt;
Have you ever encountered a ton of PRs? I would love to know how you managed to review them.&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Building a custom prompt generator for cxgrd</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Wed, 23 Sep 2026 16:56:20 +0000</pubDate>
      <link>https://dev.to/manan_822e7/building-a-custom-prompt-generator-for-cxgrd-34o4</link>
      <guid>https://dev.to/manan_822e7/building-a-custom-prompt-generator-for-cxgrd-34o4</guid>
      <description>&lt;p&gt;Hey everybody, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://cxgrd.com" rel="noopener noreferrer"&gt;cxgrd&lt;/a&gt; currently uses AI models using API keys on free tier (yeah, I can't afford to pay for these models). And Groq doesn't support free models now. So, to avoid this problem once and for all, I decided to build a custom prompt generator for cxgrd. &lt;/p&gt;

&lt;p&gt;So here is the plan: a pure logic based versatile engine which will&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write a detailed description of the user's change.&lt;/li&gt;
&lt;li&gt;include blast radius results: affected files, ranked by dependents or distance, with the risk level and the reason for it (e.g. "12 dependents, touches a shared util").&lt;/li&gt;
&lt;li&gt;create constraints: conditional blocks driven by data. Examples: high risk adds "keep public exports unchanged", a schema or migration file adds "don't alter existing columns without a migration", and files with many dependents go into a "do not modify unless necessary" list, and some stop conditions like "if the change requires touching files outside the list above, stop and report."&lt;/li&gt;
&lt;li&gt;performs verifications: which tests import the affected files, plus "run cxgrd check before finishing".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This way it's better at reliability, reproducibility, speed, and testability. It's not automatically better at interpreting intent like an AI model, because an AI model can turn a vague "make login less janky" into specific instructions, which a template can't. But this prompt's real value won't be the prose, it will be the facts which only cxgrd knows: the risk level, the affected files, what depends on what. A template can carry these metrics perfectly.&lt;/p&gt;

&lt;p&gt;This is what I thought about this prompt engine. I would love to hear what your think about this, any form of feedback/suggestion is welcomed because I genuinely want cxgrd to grow. &lt;/p&gt;

</description>
      <category>help</category>
    </item>
    <item>
      <title>Running git commands became tedious, so I built gatm</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Mon, 14 Sep 2026 11:44:05 +0000</pubDate>
      <link>https://dev.to/manan_822e7/running-git-commands-became-tedious-so-i-built-gatm-5em5</link>
      <guid>https://dev.to/manan_822e7/running-git-commands-became-tedious-so-i-built-gatm-5em5</guid>
      <description>&lt;p&gt;I actively make commits to &lt;a href="https://www.cxgrd.com" rel="noopener noreferrer"&gt;cxgrd&lt;/a&gt;. But running the four git commands &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt; and &lt;code&gt;branch&lt;/code&gt; again and again was time consuming and boring. So I built a small tool which I call gatm (Git Automation Tool by Manan). &lt;/p&gt;

&lt;p&gt;Now I just need to run &lt;code&gt;gatm&lt;/code&gt; in my terminal, and it runs add, commit and push by itself. &lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @geekgod382/gatm 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I had to name it this way because npm said the name "gatm" is very similar to some other packages.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;When you run &lt;code&gt;gatm&lt;/code&gt; it will extract the untracked/modified files and run &lt;code&gt;git add &amp;lt;the changed files&amp;gt;&lt;/code&gt;. After this, it deterministically generates a commit message (I just used &lt;code&gt;git status --porcelain&lt;/code&gt; for this job) and run &lt;code&gt;git commit -m "message"&lt;/code&gt;. At last, it runs &lt;code&gt;git push -u origin branch_name&lt;/code&gt; to push the commit.&lt;/p&gt;

&lt;p&gt;If there are no modified files, it returns "nothing to commit". If push fails because of changes in remote origin, it returns "run git pull first". The extraction of untracked/modified files happens by keeping an eye on &lt;code&gt;.gitignore&lt;/code&gt; file, to avoid node_modules or .env files from being committed. &lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Git &lt;strong&gt;SHOULD BE&lt;/strong&gt; installed and make sure &lt;code&gt;git init&lt;/code&gt; was already ran in the project directory, and a remote origin was added. &lt;/p&gt;

&lt;h2&gt;
  
  
  Options
&lt;/h2&gt;

&lt;p&gt;gatm supports these options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-m "custom_commit_message"&lt;/code&gt; : use this option for adding a custom commit message. This will bypass the deterministic message generation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-b "new_branch_name"&lt;/code&gt; : use this option for creating a new branch and commiting to it. When this option is used, gatm will run &lt;code&gt;git checkout -b new_branch_name&lt;/code&gt; to create and switch to new branch, and then pushes to it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-d&lt;/code&gt; : a dry run option. This will give you the details about changed files, commit message generated and branching and won't run any command. This option is just for your own satisfaction. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although I build gatm for my personal use, but I decided to publish it to npm, if someone else struggles with running multiple commands, they can use it too.&lt;/p&gt;

&lt;p&gt;GitHub : &lt;a href="https://github.com/geekgod382/gatm" rel="noopener noreferrer"&gt;https://github.com/geekgod382/gatm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would be very happy to hear your feedback about it.&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I built Github actions workflow for cxgrd</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Sat, 22 Aug 2026 17:53:24 +0000</pubDate>
      <link>https://dev.to/manan_822e7/i-built-github-actions-workflow-for-cxgrd-2kg3</link>
      <guid>https://dev.to/manan_822e7/i-built-github-actions-workflow-for-cxgrd-2kg3</guid>
      <description>&lt;p&gt;I recently built and shipped GitHub Actions workflow for &lt;a href="https://cxgrd.com" rel="noopener noreferrer"&gt;cxgrd&lt;/a&gt;. I built it to automate the scanning of project directory by the &lt;code&gt;scan&lt;/code&gt; command and blast radius analysis by the &lt;code&gt;check&lt;/code&gt; command, on every PR created. &lt;/p&gt;

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

&lt;p&gt;When ever a PR is created, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The project dependencies and cxgrd are installed&lt;/li&gt;
&lt;li&gt;The project is scanned with &lt;code&gt;cxgrd scan&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;check&lt;/code&gt; command is used to run blast radius analysis and compiler checks&lt;/li&gt;
&lt;li&gt;The results (risk level, affected files, changed types ) are posted as a comment to the PR. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The comment is updated on every subsequent run, instead of posting a new comment.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built this
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;check&lt;/code&gt; command already had &lt;code&gt;BlastRadiusAnalyzer&lt;/code&gt; being used for posting CI check results to DB and team dashboard. The only thing was to create a &lt;code&gt;--json&lt;/code&gt; flag to extract the result in json format and post it as a comment. &lt;br&gt;
The thing I found interesting was, I didn't have to use auth for posting the comment. While I was designing the flow, I came across something new: &lt;code&gt;GITHUB_TOKEN&lt;/code&gt;, which Actions inject into every PR, and is scoped to the specific repo, with permissions to comment. So, I just needed to write a small JS script, something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;

&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cxgrd check --json &amp;gt; result.json&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/github-script@v7&lt;/span&gt;
    &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;const fs = require('fs');&lt;/span&gt;
        &lt;span class="s"&gt;const result = JSON.parse(fs.readFileSync('result.json'));&lt;/span&gt;
        &lt;span class="s"&gt;await github.rest.issues.createComment({&lt;/span&gt;
          &lt;span class="s"&gt;owner: context.repo.owner,&lt;/span&gt;
          &lt;span class="s"&gt;repo: context.repo.repo,&lt;/span&gt;
          &lt;span class="s"&gt;issue_number: context.issue.number, // PR number, auto-available&lt;/span&gt;
          &lt;span class="s"&gt;body: `## CXGRD Blast Radius\n\nRisk: ${result.risk}\n...`&lt;/span&gt;
        &lt;span class="s"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;inside the &lt;code&gt;.yml&lt;/code&gt; file. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I thought, the reason behind low adoption of cxgrd is that the users have to run CLI commands on their own. So I wrapped the core feature inside a CI workflow file. &lt;/p&gt;

&lt;p&gt;Maybe this will help cxgrd grow.&lt;/p&gt;

&lt;p&gt;Checkout the GitHub Action &lt;a href="https://github.com/marketplace/actions/cxgrd-blast-radius-check" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I am open to any feedback which will help me and my tool grow.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>marketing</category>
    </item>
    <item>
      <title>How cxgrd differs from AI agent-based code review tools</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Sat, 15 Aug 2026 09:33:23 +0000</pubDate>
      <link>https://dev.to/manan_822e7/how-cxgrd-differs-from-ai-agent-based-code-review-tools-3alf</link>
      <guid>https://dev.to/manan_822e7/how-cxgrd-differs-from-ai-agent-based-code-review-tools-3alf</guid>
      <description>&lt;p&gt;In my &lt;a href="https://dev.to/manan_822e7/why-ai-coding-agents-fail-on-large-repos-the-stateless-context-problem-p0g"&gt;previous post&lt;/a&gt;, I introduced the CLI tool CXGRD which I built to prevent agents from breaking architecture. &lt;/p&gt;

&lt;p&gt;CXGRD computes blast radius using dependency graph traversal — a deterministic analysis of real import, call, and reference relationships in your codebase. This post explains what that means and how it differs from AI agent-based code review tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core difference
&lt;/h2&gt;

&lt;p&gt;AI agents (like an LLM-based code review tool) reads a diff and predicts what might be affected, based on pattern matching over the code it's shown. The output is a judgment — probabilistic, and it can miss relationships that aren't visible in the diff it was given, or hallucinate connections that don't exist.&lt;/p&gt;

&lt;p&gt;CXGRD instead builds an explicit graph of your codebase's real dependencies — which files import which, which functions call which — and traces a change through that graph mechanically. A dependency edge either exists in the graph or it doesn't. There's no inference step where an edge could be missed or invented.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters in practice
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;AI agent interpretation&lt;/th&gt;
&lt;th&gt;CXGRD dependency graph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basis&lt;/td&gt;
&lt;td&gt;Model's reading of the diff&lt;/td&gt;
&lt;td&gt;Actual import/call relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consistency&lt;/td&gt;
&lt;td&gt;Can vary between runs on the same input&lt;/td&gt;
&lt;td&gt;Same input always produces the same result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure mode&lt;/td&gt;
&lt;td&gt;Can miss or hallucinate a relationship&lt;/td&gt;
&lt;td&gt;Can only miss relationships the graph itself doesn't model (e.g. dynamic imports)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Explainability&lt;/td&gt;
&lt;td&gt;"The model flagged this as risky"&lt;/td&gt;
&lt;td&gt;"File X imports function Y, which changed" — a traceable path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where AI still adds value
&lt;/h2&gt;

&lt;p&gt;CXGRD isn't anti-AI — Pro and Team tiers use an LLM (Groq) for &lt;strong&gt;prompt enrichment&lt;/strong&gt;: turning a computed blast radius into a clear, readable prompt for feeding into an AI coding assistant's context window. The graph traversal that determines &lt;em&gt;what&lt;/em&gt; is affected stays deterministic; the LLM's job is limited to &lt;em&gt;explaining&lt;/em&gt; that result in natural language, not deciding it.&lt;/p&gt;

&lt;p&gt;This is where CXGRD complements tools like Cursor or Claude Code rather than competing with them: those tools govern the &lt;em&gt;actions&lt;/em&gt; an AI agent takes while writing code, while CXGRD governs the &lt;em&gt;consequences&lt;/em&gt; of a change once it exists — checking blast radius before merge, regardless of whether the code was written by a human or an AI assistant.&lt;/p&gt;

&lt;p&gt;See how CXGRD works &lt;a href="https://www.cxgrd.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>architecture</category>
      <category>agents</category>
    </item>
    <item>
      <title>Why AI Coding Agents Fail on Large Repos: The Stateless Context Problem</title>
      <dc:creator>Manan Sharma</dc:creator>
      <pubDate>Fri, 10 Jul 2026 11:52:24 +0000</pubDate>
      <link>https://dev.to/manan_822e7/why-ai-coding-agents-fail-on-large-repos-the-stateless-context-problem-p0g</link>
      <guid>https://dev.to/manan_822e7/why-ai-coding-agents-fail-on-large-repos-the-stateless-context-problem-p0g</guid>
      <description>&lt;p&gt;Let's be honest - stateless AI tools are incredibly powerful, but they have terrible short term memory, and are context-limited. They look at your repo through a keyhole — whatever's visible in that one session is all they know.&lt;/p&gt;

&lt;p&gt;You've probably seen your AI tool trying to fix one thing and break several others. This happens because they don't know what else in your codebase depends on that particular module it is editing. &lt;/p&gt;

&lt;p&gt;Modern codebases are deeply interconnected, and as repos grow, it gets harder for AI agents to track every dependency, architectural layer, and downstream effect.&lt;/p&gt;

&lt;p&gt;I ran into this constantly while building a PR reviewer tool. Every time I asked AI to fix one thing or add a feature, it would quietly break something else. I wondered if it was possible to provide a complete dependency map to the entire codebase which can tell AI something like, "Hey, you just changed what this method returns, but you forgot about these 3 modules importing it".&lt;/p&gt;

&lt;p&gt;To fix this problem, I built a CLI which I call &lt;a href="https://www.cxgrd.com" rel="noopener noreferrer"&gt;CXGRD&lt;/a&gt; . It maps your code, builds dependency graphs, calculates blast radius and provides enriched prompts for AI tools, while at the same time verifying the changes made by performing compiler-backed checks. It's free to try — &lt;code&gt;npm install -g cxgrd&lt;/code&gt; and run &lt;code&gt;cxgrd scan&lt;/code&gt; on any repo. &lt;/p&gt;

&lt;p&gt;Would genuinely love feedback from anyone who's hit the same "fix one thing, break three" problem.&lt;/p&gt;

&lt;p&gt;GitHub : &lt;a href="https://github.com/cxgrd" rel="noopener noreferrer"&gt;https://github.com/cxgrd&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
