<?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: Lokesh</title>
    <description>The latest articles on DEV Community by Lokesh (@lokeshagarwal).</description>
    <link>https://dev.to/lokeshagarwal</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%2F3785563%2Febfe5fe0-387d-46e5-ac40-63b8a3be72c9.jpg</url>
      <title>DEV Community: Lokesh</title>
      <link>https://dev.to/lokeshagarwal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lokeshagarwal"/>
    <language>en</language>
    <item>
      <title>I Built a Portable AI Skill That Safely Upgrades .NET Applications</title>
      <dc:creator>Lokesh</dc:creator>
      <pubDate>Sat, 01 Aug 2026 01:16:02 +0000</pubDate>
      <link>https://dev.to/lokeshagarwal/i-built-a-portable-ai-skill-that-safely-upgrades-net-applications-131f</link>
      <guid>https://dev.to/lokeshagarwal/i-built-a-portable-ai-skill-that-safely-upgrades-net-applications-131f</guid>
      <description>&lt;h2&gt;
  
  
  I Built a Portable AI Skill That Safely Upgrades .NET Applications
&lt;/h2&gt;

&lt;p&gt;AI coding assistants have become incredibly good at writing code.&lt;/p&gt;

&lt;p&gt;But I kept running into the same problem...&lt;/p&gt;

&lt;p&gt;When I asked an AI to upgrade a .NET application, the response usually looked something like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Update the TargetFramework, update the NuGet packages, and build."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anyone who has upgraded a real production application knows that's only a tiny part of the job.&lt;/p&gt;

&lt;p&gt;A proper upgrade normally involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choosing the correct supported .NET version&lt;/li&gt;
&lt;li&gt;Updating Microsoft and third-party packages&lt;/li&gt;
&lt;li&gt;Handling private NuGet feeds&lt;/li&gt;
&lt;li&gt;Fixing vulnerable dependencies&lt;/li&gt;
&lt;li&gt;Detecting deprecated packages&lt;/li&gt;
&lt;li&gt;Removing unused packages safely&lt;/li&gt;
&lt;li&gt;Updating Docker images&lt;/li&gt;
&lt;li&gt;Updating CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Understanding breaking changes&lt;/li&gt;
&lt;li&gt;Running builds and tests&lt;/li&gt;
&lt;li&gt;Producing an upgrade report&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;That's an &lt;strong&gt;engineering workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I decided to build one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introducing CoreLogic AI Skills
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CoreLogic AI Skills&lt;/strong&gt; is an open-source library of reusable engineering workflows designed for AI coding agents.&lt;/p&gt;

&lt;p&gt;Instead of writing the same prompts repeatedly, each workflow is packaged as a reusable &lt;strong&gt;Skill&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build once. Use with any AI coding agent.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The library currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;Cursor&lt;/li&gt;
&lt;li&gt;OpenCode&lt;/li&gt;
&lt;li&gt;Codex&lt;/li&gt;
&lt;li&gt;ChatGPT (packaged skills)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub Repository:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/mrlokeshagarwal/corelogic-ai-skills" rel="noopener noreferrer"&gt;https://github.com/mrlokeshagarwal/corelogic-ai-skills&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The first public skill: dotnet-upgrade
&lt;/h2&gt;

&lt;p&gt;The first skill I created is called &lt;strong&gt;dotnet-upgrade&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of blindly modifying a repository, it behaves more like an experienced senior engineer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1 – Repository Assessment
&lt;/h2&gt;

&lt;p&gt;It first analyses the repository.&lt;/p&gt;

&lt;p&gt;It looks for things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current .NET version&lt;/li&gt;
&lt;li&gt;Solution structure&lt;/li&gt;
&lt;li&gt;Project types&lt;/li&gt;
&lt;li&gt;NuGet packages&lt;/li&gt;
&lt;li&gt;Private package feeds&lt;/li&gt;
&lt;li&gt;Vulnerable dependencies&lt;/li&gt;
&lt;li&gt;Deprecated packages&lt;/li&gt;
&lt;li&gt;Docker configuration&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It then creates an upgrade plan.&lt;/p&gt;

&lt;p&gt;Nothing is modified yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 2 – Approval
&lt;/h2&gt;

&lt;p&gt;One design decision was very important to me.&lt;/p&gt;

&lt;p&gt;The skill &lt;strong&gt;never starts changing code immediately&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead it presents 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;.NET Upgrade Assessment

Current framework:
.NET 6

Recommended target:
.NET 10 LTS

Projects:
6

Vulnerable packages:
4

Deprecated packages:
2

Docker changes required:
Yes

CI/CD changes required:
Yes

No files have been modified.

Approve this plan?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only after explicit approval does the upgrade begin.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 3 – Upgrade
&lt;/h2&gt;

&lt;p&gt;After approval the skill can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upgrade the target framework&lt;/li&gt;
&lt;li&gt;Update NuGet packages&lt;/li&gt;
&lt;li&gt;Handle private NuGet feeds&lt;/li&gt;
&lt;li&gt;Fix vulnerable dependencies&lt;/li&gt;
&lt;li&gt;Review deprecated packages&lt;/li&gt;
&lt;li&gt;Remove unused packages carefully&lt;/li&gt;
&lt;li&gt;Update Docker files&lt;/li&gt;
&lt;li&gt;Update CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Resolve common upgrade issues&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Phase 4 – Validation
&lt;/h2&gt;

&lt;p&gt;The work isn't finished after changing code.&lt;/p&gt;

&lt;p&gt;The skill validates the application by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restoring packages&lt;/li&gt;
&lt;li&gt;Building the solution&lt;/li&gt;
&lt;li&gt;Running tests&lt;/li&gt;
&lt;li&gt;Publishing the application&lt;/li&gt;
&lt;li&gt;Producing a comparison report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because a successful build doesn't always mean a successful upgrade.&lt;/p&gt;




&lt;h2&gt;
  
  
  More than a prompt library
&lt;/h2&gt;

&lt;p&gt;One thing I wanted to avoid was creating another repository full of prompts.&lt;/p&gt;

&lt;p&gt;Instead, I built a small ecosystem.&lt;/p&gt;

&lt;p&gt;The repository includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusable Skills&lt;/li&gt;
&lt;li&gt;Generic installer&lt;/li&gt;
&lt;li&gt;Multi-skill support&lt;/li&gt;
&lt;li&gt;Validation tooling&lt;/li&gt;
&lt;li&gt;Packaging utilities&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Platform adapters&lt;/li&gt;
&lt;li&gt;Automated tests&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adding a new skill shouldn't require changing the installer or packaging logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  Another included skill
&lt;/h2&gt;

&lt;p&gt;The repository also includes &lt;strong&gt;start-story&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It helps developers begin work from an Azure DevOps work item by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retrieving the work item&lt;/li&gt;
&lt;li&gt;Determining the correct repository&lt;/li&gt;
&lt;li&gt;Creating or reusing the appropriate branch&lt;/li&gt;
&lt;li&gt;Validating the implementation&lt;/li&gt;
&lt;li&gt;Creating a Pull Request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Like &lt;code&gt;dotnet-upgrade&lt;/code&gt;, it includes approval checkpoints before potentially destructive actions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why portable skills?
&lt;/h2&gt;

&lt;p&gt;Every AI coding tool has its own way of working.&lt;/p&gt;

&lt;p&gt;Some support Skills.&lt;/p&gt;

&lt;p&gt;Some support Rules.&lt;/p&gt;

&lt;p&gt;Some support Instructions.&lt;/p&gt;

&lt;p&gt;Some support AGENTS.md.&lt;/p&gt;

&lt;p&gt;I wanted the workflow itself to remain portable while only the discovery mechanism changed.&lt;/p&gt;

&lt;p&gt;That's why the repository includes adapters for multiple platforms rather than maintaining completely different implementations.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;I'm planning to add more engineering-focused skills, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Performance Review&lt;/li&gt;
&lt;li&gt;.NET Code Review&lt;/li&gt;
&lt;li&gt;Entity Framework Modernization&lt;/li&gt;
&lt;li&gt;Architecture Review&lt;/li&gt;
&lt;li&gt;CI/CD Pipeline Review&lt;/li&gt;
&lt;li&gt;Security Audit&lt;/li&gt;
&lt;li&gt;Dependency Modernization&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  I'd love your feedback
&lt;/h2&gt;

&lt;p&gt;This is the first public beta.&lt;/p&gt;

&lt;p&gt;If you use Claude Code, Cursor, OpenCode, Codex, ChatGPT—or any other AI coding assistant—I would really appreciate your feedback.&lt;/p&gt;

&lt;p&gt;Which engineering workflow would you like to see turned into a reusable AI Skill?&lt;/p&gt;

&lt;p&gt;⭐ GitHub Repository&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrlokeshagarwal/corelogic-ai-skills" rel="noopener noreferrer"&gt;https://github.com/mrlokeshagarwal/corelogic-ai-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, ideas and contributions are always welcome.&lt;/p&gt;




&lt;h2&gt;
  
  
  Thanks for reading!
&lt;/h2&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>dotnet</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Building a Reusable AI Workflow for Azure DevOps Work Items</title>
      <dc:creator>Lokesh</dc:creator>
      <pubDate>Tue, 28 Jul 2026 00:09:09 +0000</pubDate>
      <link>https://dev.to/lokeshagarwal/from-azure-devops-ticket-to-pull-request-an-agent-skill-that-stops-short-of-merge-5eem</link>
      <guid>https://dev.to/lokeshagarwal/from-azure-devops-ticket-to-pull-request-an-agent-skill-that-stops-short-of-merge-5eem</guid>
      <description>&lt;h2&gt;
  
  
  Building a Reusable AI Workflow for Azure DevOps Work Items
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;AI is great at reasoning. It is terrible at remembering how your company likes to do Git.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every week I implement dozens of Azure DevOps work items.&lt;/p&gt;

&lt;p&gt;The process is always the same.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the work item&lt;/li&gt;
&lt;li&gt;Understand the acceptance criteria&lt;/li&gt;
&lt;li&gt;Find the correct repository&lt;/li&gt;
&lt;li&gt;Create a branch&lt;/li&gt;
&lt;li&gt;Search the codebase&lt;/li&gt;
&lt;li&gt;Implement the change&lt;/li&gt;
&lt;li&gt;Validate it&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;Push&lt;/li&gt;
&lt;li&gt;Create a Pull Request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those steps are individually difficult.&lt;/p&gt;

&lt;p&gt;They're just repetitive.&lt;/p&gt;

&lt;p&gt;Naturally I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why can't an AI agent do all of this?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It turns out writing code is only about &lt;strong&gt;20% of the workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The remaining 80% is engineering discipline.&lt;/p&gt;

&lt;p&gt;An AI agent can absolutely generate code.&lt;/p&gt;

&lt;p&gt;But it doesn't automatically know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which repository contains the feature&lt;/li&gt;
&lt;li&gt;how your team names branches&lt;/li&gt;
&lt;li&gt;which projects require manual validation&lt;/li&gt;
&lt;li&gt;whether the working tree is already dirty&lt;/li&gt;
&lt;li&gt;if another Pull Request already exists&lt;/li&gt;
&lt;li&gt;how your product is organised&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those aren't intelligence problems.&lt;/p&gt;

&lt;p&gt;They're workflow problems.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;strong&gt;Start Story&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than creating another "AI coding assistant", I wanted to build something different:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A reusable workflow that safely takes an Azure DevOps work item all the way to a Pull Request while keeping a developer firmly in control.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;I had three design goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Remove repetitive work
&lt;/h2&gt;

&lt;p&gt;I didn't want AI replacing developers.&lt;/p&gt;

&lt;p&gt;I wanted it replacing ceremony.&lt;/p&gt;

&lt;p&gt;If an agent can save me fifteen minutes on every ticket by handling Git operations and Azure DevOps plumbing, that's a meaningful productivity gain.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Make it reusable
&lt;/h2&gt;

&lt;p&gt;The first version worked.&lt;/p&gt;

&lt;p&gt;Unfortunately it only worked for &lt;strong&gt;my&lt;/strong&gt; repositories.&lt;/p&gt;

&lt;p&gt;Repository names were hardcoded.&lt;/p&gt;

&lt;p&gt;Validation rules lived inside PowerShell.&lt;/p&gt;

&lt;p&gt;Search guidance referenced my controllers.&lt;/p&gt;

&lt;p&gt;It wasn't a reusable tool.&lt;/p&gt;

&lt;p&gt;It was a diary entry that happened to execute.&lt;/p&gt;

&lt;p&gt;I wanted something I could point at an entirely different product and have it work with minimal configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Never sacrifice safety
&lt;/h2&gt;

&lt;p&gt;Automation should reduce mistakes.&lt;/p&gt;

&lt;p&gt;Not create new ones.&lt;/p&gt;

&lt;p&gt;That meant every operation had to be deterministic.&lt;/p&gt;

&lt;p&gt;No guessing.&lt;/p&gt;

&lt;p&gt;No "probably".&lt;/p&gt;

&lt;p&gt;No auto-merging.&lt;/p&gt;

&lt;p&gt;No silently continuing after errors.&lt;/p&gt;

&lt;p&gt;Human approval always remains the final step.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Workflow
&lt;/h2&gt;

&lt;p&gt;The finished workflow looks 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;Azure DevOps Work Item
        │
        ▼
Read Story
        │
        ▼
Understand Acceptance Criteria
        │
        ▼
Detect Repository
        │
        ▼
Create or Reuse Branch
        │
        ▼
Agent Implements Change
        │
        ▼
Validate Repository
        │
        ▼
Developer Review
        │
        ▼
Commit
        │
        ▼
Push
        │
        ▼
Create Pull Request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice what isn't there.&lt;/p&gt;

&lt;p&gt;Merge.&lt;/p&gt;

&lt;p&gt;The workflow deliberately stops after creating the Pull Request.&lt;/p&gt;

&lt;p&gt;Review is still performed by a human.&lt;/p&gt;

&lt;p&gt;That decision alone removed a huge amount of risk.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Biggest Design Mistake
&lt;/h2&gt;

&lt;p&gt;Originally I thought this project was mostly about prompts.&lt;/p&gt;

&lt;p&gt;It wasn't.&lt;/p&gt;

&lt;p&gt;The biggest challenge was deciding &lt;strong&gt;what belongs where&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Everything had become mixed together.&lt;/p&gt;

&lt;p&gt;PowerShell knew repository names.&lt;/p&gt;

&lt;p&gt;Markdown knew folder structures.&lt;/p&gt;

&lt;p&gt;Configuration files contained workflow logic.&lt;/p&gt;

&lt;p&gt;Every change required editing multiple places.&lt;/p&gt;

&lt;p&gt;Eventually I realised I wasn't building one system.&lt;/p&gt;

&lt;p&gt;I was building three.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three Layers Instead of One
&lt;/h2&gt;

&lt;p&gt;The architecture eventually became surprisingly simple.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scripts&lt;/td&gt;
&lt;td&gt;Deterministic operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown&lt;/td&gt;
&lt;td&gt;AI reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Profiles&lt;/td&gt;
&lt;td&gt;Product knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each layer has exactly one responsibility.&lt;/p&gt;

&lt;p&gt;That sounds obvious.&lt;/p&gt;

&lt;p&gt;It wasn't obvious while building it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer One — Scripts
&lt;/h2&gt;

&lt;p&gt;Scripts perform work that should always behave identically.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Git operations&lt;/li&gt;
&lt;li&gt;Azure DevOps REST calls&lt;/li&gt;
&lt;li&gt;Validation&lt;/li&gt;
&lt;li&gt;Pull Request creation&lt;/li&gt;
&lt;li&gt;Branch detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A script should never need to "think".&lt;/p&gt;

&lt;p&gt;It simply executes.&lt;/p&gt;

&lt;p&gt;That makes scripts predictable and easy to test.&lt;/p&gt;

&lt;p&gt;They become the safety rails around the AI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer Two — Markdown
&lt;/h2&gt;

&lt;p&gt;Markdown contains instructions for the coding agent.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;implementation workflow&lt;/li&gt;
&lt;li&gt;review checkpoints&lt;/li&gt;
&lt;li&gt;coding expectations&lt;/li&gt;
&lt;li&gt;reasoning guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike scripts, markdown is expected to evolve.&lt;/p&gt;

&lt;p&gt;As I discover better workflows, the instructions improve.&lt;/p&gt;

&lt;p&gt;The scripts rarely change.&lt;/p&gt;

&lt;p&gt;The prompts improve continuously.&lt;/p&gt;

&lt;p&gt;That separation turned out to be incredibly valuable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Layer Three — Repository Profiles
&lt;/h2&gt;

&lt;p&gt;Every product has tribal knowledge.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;"Search this controller first."&lt;/li&gt;
&lt;li&gt;"Business logic lives here."&lt;/li&gt;
&lt;li&gt;"Ignore generated files."&lt;/li&gt;
&lt;li&gt;"Don't modify this folder."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally those details lived inside prompts.&lt;/p&gt;

&lt;p&gt;That meant every repository required editing the workflow.&lt;/p&gt;

&lt;p&gt;Now they live inside repository profiles.&lt;/p&gt;

&lt;p&gt;Changing products no longer requires changing the workflow.&lt;/p&gt;

&lt;p&gt;Only the profile changes.&lt;/p&gt;




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

&lt;p&gt;Eventually I settled on one design rule.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If it's deterministic, put it in a script.&lt;/p&gt;

&lt;p&gt;If it requires judgement, put it in markdown.&lt;/p&gt;

&lt;p&gt;If it's specific to one product, put it in a repository profile.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That single decision simplified almost every part of the project.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>azuredevops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>PR Bot: AI-Powered PR Reviews for Azure DevOps, GitHub &amp; Bitbucket</title>
      <dc:creator>Lokesh</dc:creator>
      <pubDate>Sun, 22 Feb 2026 23:32:15 +0000</pubDate>
      <link>https://dev.to/lokeshagarwal/pr-bot-ai-powered-pr-reviews-for-azure-devops-github-bitbucket-4gib</link>
      <guid>https://dev.to/lokeshagarwal/pr-bot-ai-powered-pr-reviews-for-azure-devops-github-bitbucket-4gib</guid>
      <description>&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; prbot is a CLI that uses Claude, GPT, or Cursor to review pull requests on Azure DevOps, GitHub, or Bitbucket. It posts structured feedback as PR comments, including inline feedback on specific lines. Configure once, run &lt;code&gt;prbot review 42&lt;/code&gt;, and get AI-powered code reviews aligned with your team's standards.&lt;/p&gt;




&lt;p&gt;Code reviews are critical for software quality — but they’re often slow, repetitive, and inconsistent.&lt;/p&gt;

&lt;p&gt;What if a CLI tool could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch your PR&lt;/li&gt;
&lt;li&gt;Apply your team’s coding standards&lt;/li&gt;
&lt;li&gt;Send everything to Claude, GPT, or Cursor&lt;/li&gt;
&lt;li&gt;Post structured feedback directly on the PR&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s what &lt;strong&gt;prbot&lt;/strong&gt; does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;prbot&lt;/strong&gt; does exactly that. It's a lightweight CLI that fetches PR metadata and diffs from your source control platform, sends them to an AI (Claude, GPT, or Cursor), and posts the review as comments—including inline feedback on specific lines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why prbot?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;prbot fetches PR metadata and diffs from your source control platform.&lt;/li&gt;
&lt;li&gt;It loads your &lt;code&gt;CodeStandard.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It sends structured input to the selected AI provider (Claude, GPT, or Cursor).&lt;/li&gt;
&lt;li&gt;The AI returns schema-validated JSON.&lt;/li&gt;
&lt;li&gt;prbot posts the review as structured PR comments (including inline feedback).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No servers. No webhooks. Just a CLI.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Azure DevOps, GitHub, and Bitbucket Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Your standards&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reviews against a custom &lt;code&gt;CodeStandard.md&lt;/code&gt; file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Choice of AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude (Anthropic), GPT (OpenAI), or Cursor Cloud Agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inline comments&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Issues posted on the exact lines of code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replace mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Re-run reviews and replace old AI comments with fresh ones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zero infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Just a CLI; no servers or webhooks to manage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone and install&lt;/span&gt;
git clone https://github.com/mrlokeshagarwal/pr-bot.git
&lt;span class="nb"&gt;cd &lt;/span&gt;pr-bot
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build

&lt;span class="c"&gt;# Make it global (optional)&lt;/span&gt;
npm &lt;span class="nb"&gt;link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Setup in 3 Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Choose your platform
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Repo format&lt;/th&gt;
&lt;th&gt;Auth&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;owner/repo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Personal Access Token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure DevOps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;repo-name&lt;/code&gt; or GUID&lt;/td&gt;
&lt;td&gt;PAT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bitbucket&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;workspace/repo-slug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;App Password&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&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;prbot &lt;span class="nb"&gt;set &lt;/span&gt;platform github
prbot &lt;span class="nb"&gt;set &lt;/span&gt;repo owner/repo
prbot &lt;span class="nb"&gt;set &lt;/span&gt;github-token    &lt;span class="c"&gt;# Prompts for your token&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Azure DevOps:&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;prbot &lt;span class="nb"&gt;set &lt;/span&gt;platform ado
prbot &lt;span class="nb"&gt;set &lt;/span&gt;org https://dev.azure.com/YourOrg
prbot &lt;span class="nb"&gt;set &lt;/span&gt;project YourProject
prbot &lt;span class="nb"&gt;set &lt;/span&gt;repo YourRepo
prbot &lt;span class="nb"&gt;set &lt;/span&gt;pat            &lt;span class="c"&gt;# Prompts for PAT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Bitbucket:&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;prbot &lt;span class="nb"&gt;set &lt;/span&gt;platform bitbucket
prbot &lt;span class="nb"&gt;set &lt;/span&gt;repo workspace/repo-slug
prbot &lt;span class="nb"&gt;set &lt;/span&gt;bitbucket-token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Add your coding standard
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;CodeStandard.md&lt;/code&gt; with your team's guidelines. prbot sends this to the AI so reviews align with your rules.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prbot &lt;span class="nb"&gt;set &lt;/span&gt;standard C:&lt;span class="se"&gt;\p&lt;/span&gt;ath&lt;span class="se"&gt;\t&lt;/span&gt;o&lt;span class="se"&gt;\C&lt;/span&gt;odeStandard.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Configure AI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Claude (default)&lt;/span&gt;
prbot &lt;span class="nb"&gt;set &lt;/span&gt;provider claude
prbot &lt;span class="nb"&gt;set &lt;/span&gt;claude-key

&lt;span class="c"&gt;# Or OpenAI&lt;/span&gt;
prbot &lt;span class="nb"&gt;set &lt;/span&gt;provider openai
prbot &lt;span class="nb"&gt;set &lt;/span&gt;openai-key
prbot &lt;span class="nb"&gt;set &lt;/span&gt;model gpt-4o
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Run a Review
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Review PR #42&lt;/span&gt;
prbot review 42

&lt;span class="c"&gt;# Dry run (see output without posting)&lt;/span&gt;
prbot review 42 &lt;span class="nt"&gt;--dry-run&lt;/span&gt;

&lt;span class="c"&gt;# Replace old AI comments with a fresh review&lt;/span&gt;
prbot review 42 &lt;span class="nt"&gt;--replace&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Use &lt;code&gt;--dry-run&lt;/code&gt; on production PRs first to verify the output before posting comments.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What You Get
&lt;/h2&gt;

&lt;p&gt;Each review includes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Section&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High-level overview of the changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk assessment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Potential issues or concerns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Questions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clarifications the AI suggests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issues&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Specific findings with severity, file, line, and code snippets&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All comments are prefixed with &lt;code&gt;[AI Review]&lt;/code&gt; so you can easily identify and filter them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Type-safe, modern JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Node.js 18+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native &lt;code&gt;fetch&lt;/code&gt;, no extra HTTP libs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Commander&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CLI framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zod&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Schema validation for AI responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;diff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unified diff generation for Azure DevOps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/mrlokeshagarwal/pr-bot" rel="noopener noreferrer"&gt;github.com/mrlokeshagarwal/pr-bot&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/mrlokeshagarwal/pr-bot.git
&lt;span class="nb"&gt;cd &lt;/span&gt;pr-bot
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
prbot status   &lt;span class="c"&gt;# Verify setup&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Project Status
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This is an early-stage project. The code has not been formally tested across all platforms and edge cases. Use with caution on production PRs—consider running with &lt;code&gt;--dry-run&lt;/code&gt; first to verify output before posting comments.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Disclaimers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Trademarks:&lt;/strong&gt; Azure DevOps, GitHub, and Bitbucket are trademarks of their respective owners. Claude, GPT, and Cursor are trademarks of Anthropic, OpenAI, and Cursor, respectively. This project is not affiliated with or endorsed by Microsoft, GitHub, Inc., Atlassian, Anthropic, OpenAI, or Cursor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Terms of Service:&lt;/strong&gt; Use of prbot is subject to the terms of service of the AI providers (Anthropic, OpenAI, Cursor) and source control platforms (Azure DevOps, GitHub, Bitbucket) you connect to. Ensure your usage complies with their respective policies.&lt;/p&gt;




&lt;p&gt;If you use Azure DevOps, GitHub, or Bitbucket and want consistent, AI-assisted code reviews, give prbot a try.&lt;/p&gt;

&lt;p&gt;⭐ Star the repo if you find it useful&lt;br&gt;&lt;br&gt;
💬 Feedback and contributions are welcome&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>devops</category>
      <category>ai</category>
      <category>codereview</category>
    </item>
  </channel>
</rss>
