<?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: Krishna Khandelwal</title>
    <description>The latest articles on DEV Community by Krishna Khandelwal (@kkhandelwal1733).</description>
    <link>https://dev.to/kkhandelwal1733</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%2F4025847%2F1b62487e-c67b-42fb-9630-452d036c0e7b.jpg</url>
      <title>DEV Community: Krishna Khandelwal</title>
      <link>https://dev.to/kkhandelwal1733</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kkhandelwal1733"/>
    <language>en</language>
    <item>
      <title>I Built an AI That Turns GitHub Issues Into Pull Requests — No Local Setup Required</title>
      <dc:creator>Krishna Khandelwal</dc:creator>
      <pubDate>Mon, 13 Jul 2026 03:05:00 +0000</pubDate>
      <link>https://dev.to/kkhandelwal1733/i-built-an-ai-that-turns-github-issues-into-pull-requests-no-local-setup-required-codedoc-3bmp</link>
      <guid>https://dev.to/kkhandelwal1733/i-built-an-ai-that-turns-github-issues-into-pull-requests-no-local-setup-required-codedoc-3bmp</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;resolvo&lt;/strong&gt; is an agentic pipeline that takes a GitHub issue and a repo URL and hands you back a working pull request — with tests already passing and a review already done.&lt;/p&gt;

&lt;p&gt;The "passion" here isn't a stretch for me — it's the actual origin story. I kept losing weekend hours to the same loop: read an issue, dig through an unfamiliar codebase to find the right files, write the fix, write tests, second-guess the diff, open the PR. I love writing code, I don't love being the API glue between "here's a bug" and "here's a merge." So I built a system that treats that whole loop as a multi-agent job: explore the repo, plan the change like a senior engineer would, implement it, test it in a sandbox, review it adversarially, and only then open the PR.&lt;/p&gt;

&lt;p&gt;It's less "AI writes your code for you" and more "AI does the tedious 80% around your code with the same rigor a careful human would" — this solution cuts issue turnaround time by 85% by allowing anyone to resolve lightweight bugs. The goal is to democratize basic maintenance and remove bottlenecks. It's built for modern, fast-moving teams that need to keep their senior talent focused on high-impact projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://drive.google.com/file/d/10i-YiVGiO4Ed25_T5tF5hNb3T2FExDei/view?usp=drive_link" rel="noopener noreferrer"&gt;Demo Video&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/KKhandelwal1733" rel="noopener noreferrer"&gt;
        KKhandelwal1733
      &lt;/a&gt; / &lt;a href="https://github.com/KKhandelwal1733/resolvo" rel="noopener noreferrer"&gt;
        resolvo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Agentic pipeline that turns a GitHub issue into a tested pull request — no local clone required. Built with LangGraph.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;resolvo is built on &lt;strong&gt;LangGraph&lt;/strong&gt;, structured as a &lt;code&gt;StateGraph&lt;/code&gt; with a fairly deep multi-agent pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub Issue + Repo URL
        │
        ▼
  PreClassifier          → fast intent/confidence check before expensive work
        │
   ┌────┴────┐
ExploreLite  ExploreFull  → tree-sitter parse, symbol graph, architecture summary
   └────┬────┘
        │
   PlannerAgent           → enrichment → BM25 + Cohere rerank retrieval → plan
        │
  ┌─────┴──────┐
FastTrack   Standard / Critical
  │              │
ReviewLite    Implement → Test → Review ──(retry / human)──┐
  │              │                                         │
  └──────────────┘◄────────────────────────────────────────┘
        │
  GeneratePRMeta → GitHub PR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few decisions I'm most proud of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Routing by confidence, not by default.&lt;/strong&gt; A &lt;code&gt;PreClassifier&lt;/code&gt; decides how deep exploration needs to go, and the &lt;code&gt;PlannerAgent&lt;/code&gt; chooses one of three pipeline paths — &lt;code&gt;fast_track&lt;/code&gt;, &lt;code&gt;standard&lt;/code&gt;, or &lt;code&gt;critical&lt;/code&gt; — so a one-line typo fix doesn't pay the same cost as a cross-module refactor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Splitting reasoning work by strength, not by convenience.&lt;/strong&gt; I used &lt;strong&gt;Gemini Flash models&lt;/strong&gt; for the two critical steps that need the most contextual judgment — final implementation &lt;em&gt;planning&lt;/em&gt; and &lt;em&gt;adversarial code review&lt;/em&gt; — while &lt;strong&gt;Google's lite models&lt;/strong&gt; handle enrichment, per-file implementation, and test generation. Same model ecosystem, different reasoning depth for different stakes: the adversarial reviewer gets full diffs, test results, and pre-check findings; the lite reviewer (used on the fast track) gets diff summaries only. That tiering is really the heart of the "diff reasoning modes" idea — cheap, fast reasoning where the risk is low, deep reasoning where it isn't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grounding, not just guessing.&lt;/strong&gt; I wired &lt;strong&gt;Grounding with Google Search&lt;/strong&gt; into the Gemini calls so planning and review aren't limited to whatever the model memorized during training. When a fix depends on something that moves — a library's current API surface, a framework's latest breaking change, a security advisory — Gemini pulls in live web results instead of confidently proposing a fix built on a deprecated signature. That distinction matters for a code-fixing agent specifically: a plan built on stale knowledge doesn't fail loudly, it fails silently until the test run catches it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real execution, not vibes.&lt;/strong&gt; Tests run inside an &lt;strong&gt;E2B sandbox&lt;/strong&gt; against a real shallow clone of the repo, with &lt;code&gt;pytest-json-report&lt;/code&gt; parsed back into structured results — so "the fix works" is a fact, not an LLM's opinion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval that isn't just embeddings.&lt;/strong&gt; The planner fuses five signals — raw-issue BM25, enriched-query BM25, Cohere &lt;code&gt;rerank-v4.0&lt;/code&gt;, symbol-name matching, and one-hop dependency expansion — via Reciprocal Rank Fusion before Gemini ever sees a prompt, so the plan is grounded in the actual dependency graph of the repo, not just semantic similarity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Google AI&lt;/strong&gt; — Gemini Flash powers the two highest-stakes reasoning steps in the pipeline (final implementation planning and adversarial code review), deliberately reserved for the moments where deeper reasoning matters most, while lighter-weight models handle the rest of the pipeline. On top of that, &lt;strong&gt;Grounding with Google Search&lt;/strong&gt; is wired into those Gemini calls so the model can reason against current, real-world information — up-to-date library APIs, framework changes, advisories — rather than relying solely on training-time knowledge.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
