<?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: Neha Goyal</title>
    <description>The latest articles on DEV Community by Neha Goyal (@flashsource).</description>
    <link>https://dev.to/flashsource</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%2F4193900%2F95a6a071-85d9-4219-84d4-4a91a2480d9e.png</url>
      <title>DEV Community: Neha Goyal</title>
      <link>https://dev.to/flashsource</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flashsource"/>
    <language>en</language>
    <item>
      <title>SlothContributor: a local agent that does my issue hunting</title>
      <dc:creator>Neha Goyal</dc:creator>
      <pubDate>Sat, 24 Oct 2026 03:40:55 +0000</pubDate>
      <link>https://dev.to/flashsource/slothcontributor-a-local-agent-that-does-my-issue-hunting-4kpf</link>
      <guid>https://dev.to/flashsource/slothcontributor-a-local-agent-that-does-my-issue-hunting-4kpf</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Confession
&lt;/h2&gt;

&lt;p&gt;I want to contribute to open source, but I hate the hustle. I used to spend 30 minutes refreshing GitHub, filtering labels, reading long issue threads and guessing which files caused a bug. By the time I understood the codebase, I was too tired to write the fix or the issue was already solved.&lt;/p&gt;

&lt;p&gt;I wanted to stop searching manually. That became SlothContributor, a local CLI agent that watches my favorite repositories. When a new issue drops, a notification pops up, and the agent has already read the issue, fetched the likely source files and written a structured "Contributor's Hunch" on where to look.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;SlothContributor&lt;/strong&gt; is a local-first, AI-powered CLI agent that watches your favorite open-source repositories for new issues.&lt;/p&gt;

&lt;p&gt;Instead of manually refreshing GitHub, reading massive issue threads, and trying to understand unfamiliar codebases, SlothContributor automates the entire research phase. The second a new issue drops, it doesn't just notify you. It reads the issue, fetches the relevant source code from the repository, and hands you a structured "Contributor's Hunch" on exactly where to look and how to fix it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What effort does it save?&lt;/strong&gt; It eliminates the 30–45 minutes of tedious context-switching, tag-filtering, and codebase archaeology usually required just to start a Pull Request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Who gets to be a little lazier?&lt;/strong&gt; Open-source contributors and developers who want to focus purely on the creative part (writing the code) while letting a local AI agent do the heavy lifting of finding, filtering, and analyzing the work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a real run on &lt;code&gt;kestra-io/kestra&lt;/code&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%2F3584i1z4xw8t6auduwnx.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%2F3584i1z4xw8t6auduwnx.png" alt="kestra-io/kestra run on area/backend label" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Issues it has already analyzed are skipped, so I only see new ones. I open my terminal, let the agent do the hunting, and spend my time writing the fix.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RI2ETJanHFI" width="710" height="399"&gt;
  &lt;/iframe&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/flash-source" rel="noopener noreferrer"&gt;
        flash-source
      &lt;/a&gt; / &lt;a href="https://github.com/flash-source/sloth-contributor" rel="noopener noreferrer"&gt;
        sloth-contributor
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local-first CLI agent that watches OSS repos, fetches code, and generates AI-powered contribution hunches.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🦥 SlothContributor: Local AI OSS Issue Sniper&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.python.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c1066d686f94641187c8281f17ab8cb61ddffcf350f553443643b96f5cc1f927/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302b2d626c75652e737667" alt="Python"&gt;&lt;/a&gt;
&lt;a href="https://github.com/flash-source/sloth-contributor/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://hacktoberfest.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/359a78a6c36b079b424e81e8d4f42c736fee8b4bef8a291fd8048c5d55af7688/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d6f72616e67652e737667" alt="Hacktoberfest"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Slow and Steady wins the race.&lt;/strong&gt; SlothContributor is a local-first CLI agent that watches your favorite open-source repositories. When a new issue drops, it reads the issue, fetches the likely source files and hands you a "Contributor's Hunch" on where to look and how to fix it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a0ab6c4480d9e566f9da610f5c0f8e7c9bb32016fe2c11cc11c3459031272e2b/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f7369333471316a6d6f7938766d6e616c75646c742e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/a0ab6c4480d9e566f9da610f5c0f8e7c9bb32016fe2c11cc11c3459031272e2b/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f7369333471316a6d6f7938766d6e616c75646c742e706e67" alt="SlothContributor run on kestra-io/kestra"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Demo Video&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/flash-source/sloth-contributor/assets/demo.mp4"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fflash-source%2Fsloth-contributor%2FHEAD%2Fassets%2Fdemo.mp4" alt="SlothContributor Demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 Why this exists&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Contributing to open source is rewarding, but finding a good issue, reading a long thread and working out which files matter takes a lot of time before you write any code. SlothContributor automates that research so you can spend your time on the fix.&lt;/p&gt;
&lt;p&gt;It also helps you decide whether an issue is for you. The hunch gives you the core problem, where to look and a suggested fix, so you can tell if you understand it and can solve it before you ask to be assigned.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏆 Why open&lt;/h2&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flash-source/sloth-contributor" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;The core is a Python CLI that talks to Ollama, running Google's open-weight Gemma 2 (2B) locally. I chose it because it's fast and runs on my laptop.&lt;/p&gt;

&lt;p&gt;My first version just asked Gemma to read the issue and suggest a fix. On unfamiliar repos the small model was a confident guesser, and it would invent generic paths like &lt;code&gt;src/App.js&lt;/code&gt; or &lt;code&gt;config.json&lt;/code&gt; in a Java backend.&lt;/p&gt;

&lt;p&gt;So I took the guessing away from the model and wrapped it in a suggest, verify, analyze loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Suggest&lt;/strong&gt;: Gemma reads the issue and proposes likely file paths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify&lt;/strong&gt;: the Python backend fetches those files from the GitHub API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze&lt;/strong&gt;: if a file exists, Gemma analyzes the real code alongside the issue. If it returns a 404 because the model made the path up, the agent falls back to the issue text alone and gives a shallower hunch.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Gemma is no smarter this way, but a wrong guess now costs a 404 in the log instead of a bad answer.&lt;/p&gt;

&lt;p&gt;I added MongoDB Atlas for persistent memory (no duplicate analysis, resumable sessions), Plyer for desktop notifications and Rich for the terminal UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch mode
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;python main.py --watch&lt;/code&gt; starts the watcher. It checks the repos in my session every 15 minutes and sends a desktop notification when a new issue drops, even if the terminal is minimized. That way I see an issue while it's still fresh instead of stumbling on it days later.&lt;/p&gt;

&lt;p&gt;Two defaults live in &lt;code&gt;config.yaml&lt;/code&gt;:&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;poll_interval_minutes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;   &lt;span class="c1"&gt;# how often the watcher checks each repo&lt;/span&gt;
&lt;span class="na"&gt;max_issues_per_scan&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;      &lt;span class="c1"&gt;# max issues analyzed in one run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The cap keeps a scan from looping forever and keeps me inside GitHub's API rate limits. Both values can be changed in &lt;code&gt;config.yaml&lt;/code&gt; if you want a faster or wider sweep.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For this tool, local inference is a requirement.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; The LLM step runs on my machine, so no third-party model provider sees which repos we watch, which issues we pick or what fixes we draft. The tool still calls the GitHub API and stores history in our own Atlas cluster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; An agent that polls continuously and puts full file contents in its prompts would get expensive on a paid API. Running Gemma locally costs nothing per scan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control.&lt;/strong&gt; The loop passes intermediate data between steps, and a local model lets us control prompts and output formats without LLM API rate limits or content filters getting in the way.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;Reasoning runs locally through Ollama. File fetching goes through the GitHub API, and issue history and sessions are stored in my own MongoDB Atlas cluster. The project audit and challenge review are preserved in the embedded DEV Agent Session below.&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="GitHub Copilot"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Auditing SlothContributor for Hacktoberfest Week 3&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Audit my SlothContributor project against the Hacktoberfest Open-Source AI Challenge Week 3 rubric and help draft an entry.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Audited the live Week 3 rubric, inspected the repository, identified the local Gemma/Ollama workflow, MongoDB persistence, MIT license, demo, and documentation gaps, then prepared a submission draft.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I already published the Week 3 post on DEV. Search my recent DEV posts for sloth-contributor and sync this session with it so my Hacktoberfest progress updates.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Located the published SlothContributor Week 3 post and am syncing this audit session to the article.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        4 of 4 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;I've been contributing to Kestra, and the slow part was never the code. It was getting the context of an issue, finding the exact file involved and working out an approach. That could eat a big chunk of time before I'd written anything, and sometimes I'd comment to get assigned without really knowing if I could solve it.&lt;/p&gt;

&lt;p&gt;Now the hunch gives me a summary of the issue, where to look and a suggested fix up front. I can tell quickly whether an issue is one I understand and can actually solve, and only then ask to be assigned, instead of leaving a vague comment and figuring it out afterwards. It's a 2B model, so I still read the issue myself, but I start from a direction instead of from zero.&lt;/p&gt;

&lt;p&gt;This month I've had three PRs merged in &lt;code&gt;kestra-io/kestra&lt;/code&gt; (&lt;a href="https://github.com/kestra-io/kestra/pull/20389" rel="noopener noreferrer"&gt;#20389&lt;/a&gt;, &lt;a href="https://github.com/kestra-io/kestra/pull/20479" rel="noopener noreferrer"&gt;#20479&lt;/a&gt;, &lt;a href="https://github.com/kestra-io/kestra/pull/21076" rel="noopener noreferrer"&gt;#21076&lt;/a&gt;).&lt;br&gt;
Building SlothContributor made me realize that &lt;strong&gt;understanding a problem deeply matters just as much as the time and effort you invest in solving it. The tool doesn't just find issues faster, it forces me to think about what makes an issue actually solvable before I even start coding.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;For example, when it found the UploadFiles trailing slash bug, the hunch immediately identified the exact YAML properties (filesMap and destination) that needed fixing and even showed me the corrected code structure, saving me from hunting through multiple plugin files.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; used Google's open-weight Gemma 2 (via Ollama) as the core reasoning engine of the suggest, verify, analyze agent, running inference 100% locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas:&lt;/strong&gt; used Atlas as the persistent memory layer to store analyzed issues, manage interactive sessions and prevent duplicate processing across restarts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with 💖 for the Hacktoberfest 2026 Open-Source AI Challenge. Stay lazy, contribute smartly! &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
