<?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: Tushar Satpute</title>
    <description>The latest articles on DEV Community by Tushar Satpute (@tushar_satpute_d1d6ce4f2e).</description>
    <link>https://dev.to/tushar_satpute_d1d6ce4f2e</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%2F3299722%2Fb9112673-b422-414d-bf85-980f289f43d7.png</url>
      <title>DEV Community: Tushar Satpute</title>
      <link>https://dev.to/tushar_satpute_d1d6ce4f2e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tushar_satpute_d1d6ce4f2e"/>
    <language>en</language>
    <item>
      <title>SlothSort: Let a Local Gemma Model Clean Up Your Messy Folder</title>
      <dc:creator>Tushar Satpute</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:28:20 +0000</pubDate>
      <link>https://dev.to/tushar_satpute_d1d6ce4f2e/slothsort-let-a-local-gemma-model-clean-up-your-messy-folder-31n4</link>
      <guid>https://dev.to/tushar_satpute_d1d6ce4f2e/slothsort-let-a-local-gemma-model-clean-up-your-messy-folder-31n4</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;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;SlothSort is a privacy-first Python CLI that organizes the immediate files in a messy folder. A Gemma model running locally through Ollama looks at filenames, extensions, and sizes, then proposes useful folders such as Finance, Photos, Notes, or Code.&lt;/p&gt;

&lt;p&gt;The lazy payoff is simple: I review one dry-run instead of sorting every file myself. Nothing moves until I explicitly add &lt;code&gt;--apply&lt;/code&gt;, and the latest run can be reversed with &lt;code&gt;--undo&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;A short screen recording will be added here after capture. In the meantime, the complete demo is reproducible locally with the commands below; it uses only the included sample files.&lt;/p&gt;

&lt;p&gt;The demo should show an untidy copy of the included sample folder, generate a local AI plan, apply it, and restore everything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Copy-Item sample demo-files -Recurse
python slothsort.py demo-files
python slothsort.py demo-files --apply
python slothsort.py demo-files --undo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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/ExPl0iT-29" rel="noopener noreferrer"&gt;
        ExPl0iT-29
      &lt;/a&gt; / &lt;a href="https://github.com/ExPl0iT-29/slothsort" rel="noopener noreferrer"&gt;
        slothsort
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Privacy-first local Gemma folder organizer for Hacktoberfest 2026 Week 3
    &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;SlothSort&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;SlothSort is a privacy-first CLI that lets a local Gemma model organize one messy folder for you. It shows a dry-run first, never overwrites files, and can undo the latest organization pass.&lt;/p&gt;

&lt;p&gt;Built for the Hacktoberfest 2026 Week 3 &lt;strong&gt;Slow and Steady&lt;/strong&gt; challenge: make something with open-source AI that rewards laziness.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why open AI&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Filenames can reveal bills, clients, projects, and personal interests. SlothSort sends only filenames, extensions, and sizes to a Gemma model running locally through Ollama. Nothing needs to leave the machine, and the model can be inspected or replaced.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;


  &lt;div class="js-render-enrichment-target"&gt;
    &lt;div class="render-plaintext-hidden"&gt;
      &lt;pre&gt;flowchart LR
    A[Selected folder] --&amp;gt; B[Read names, extensions, sizes]
    B --&amp;gt; C[Local Ollama + Gemma]
    C --&amp;gt; D[Validated JSON plan]
    D --&amp;gt; E[Dry-run preview]
    E --&amp;gt;|--apply| F[Safe moves + manifest]
    F --&amp;gt;|--undo| A
&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;span class="js-render-enrichment-loader d-flex flex-justify-center flex-items-center width-full"&gt;
    &lt;span&gt;
      &lt;span class="sr-only"&gt;Loading&lt;/span&gt;
&lt;/span&gt;
  &lt;/span&gt;


&lt;p&gt;SlothSort scans only the immediate files in the selected folder. It rejects malformed model output, path traversal, duplicate entries, unknown…&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ExPl0iT-29/slothsort" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;The project is MIT licensed and uses only Python's standard library at the application layer.&lt;/p&gt;

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

&lt;p&gt;SlothSort scans only the immediate files in the selected folder and sends their names, extensions, and sizes to a local &lt;code&gt;gemma3:1b&lt;/code&gt; model through Ollama's HTTP API. File contents never enter the prompt.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Selected folder] --&amp;gt; B[Read names, extensions, sizes]
    B --&amp;gt; C[Local Ollama + Gemma]
    C --&amp;gt; D[Validate JSON plan]
    D --&amp;gt; E[Dry-run preview]
    E --&amp;gt; F[Safe move manifest]
    F --&amp;gt;|undo| A&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;I treated model output as untrusted input. SlothSort rejects malformed JSON, invented or duplicated files, incomplete plans, path traversal, unsafe category names, and overwrite collisions. It writes an undo manifest before moving anything and rolls back completed moves if an operation fails.&lt;/p&gt;

&lt;p&gt;Six standard-library tests cover validation, collision refusal, apply/undo, a tampered manifest, and the Ollama HTTP response contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Folder names and filenames can expose bills, clients, projects, and personal interests. Running an open-weight Gemma model locally means that metadata stays on my machine. Ollama also makes the runtime replaceable: users can inspect the integration, choose another Gemma size, or point the same transparent interface at another local model.&lt;/p&gt;

&lt;p&gt;A closed hosted model would make the CLI easier to deploy, but it would weaken the privacy story and add a recurring network and API dependency. Here, openness is what makes the tool appropriate for personal files.&lt;/p&gt;

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

&lt;p&gt;One reviewed command can categorize every immediate file in a folder, while the dry-run and undo path keep the automation low-risk. The included sample makes the full plan/apply/restore loop reproducible without risking personal data.&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; — Gemma performs the core semantic classification locally through Ollama.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/jangwook_kim_e31e7291ad98/ollama-structured-outputs-in-practice-getting-type-safe-json-from-local-llms-with-pydantic-m38"&gt;Ollama Structured Outputs in Practice — Getting Type-Safe JSON from Local LLMs with Pydantic&lt;/a&gt; informed the decision to treat local-model JSON as a strict interface rather than trusted prose.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/burak_yldz_aef1be5e5088/why-sending-schemas-to-cloud-llms-is-a-privacy-risk-generating-synthetic-data-locally-with-ollama-36k6"&gt;Why Sending Schemas to Cloud LLMs is a Privacy Risk: Generating Synthetic Data Locally with Ollama&lt;/a&gt; reinforces the local-inference plus deterministic-validation pattern.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/theaicommit/why-forced-json-output-is-always-valid-and-sometimes-wrong-2jc8"&gt;Why Forced JSON Output Is Always Valid and Sometimes Wrong&lt;/a&gt; is a useful reminder that valid structure does not guarantee correct model decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI Disclosure
&lt;/h2&gt;

&lt;p&gt;OpenAI Codex assisted with implementation, tests, documentation, and this draft. I reviewed the code and will verify the final Gemma demo before submitting.&lt;/p&gt;

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