<?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: Rutvi Senjaliya</title>
    <description>The latest articles on DEV Community by Rutvi Senjaliya (@rutvisenjaliyashivalik).</description>
    <link>https://dev.to/rutvisenjaliyashivalik</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%2F4204066%2F32904880-f222-46ca-ac6b-ea0f830c8315.png</url>
      <title>DEV Community: Rutvi Senjaliya</title>
      <link>https://dev.to/rutvisenjaliyashivalik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rutvisenjaliyashivalik"/>
    <language>en</language>
    <item>
      <title>Standup Sloth 🦥: My Laptop Writes My Daily Standup Before I Finish My Chai</title>
      <dc:creator>Rutvi Senjaliya</dc:creator>
      <pubDate>Sat, 24 Oct 2026 07:52:25 +0000</pubDate>
      <link>https://dev.to/rutvisenjaliyashivalik/standup-sloth-my-laptop-writes-my-daily-standup-before-i-finish-my-chai-59b4</link>
      <guid>https://dev.to/rutvisenjaliyashivalik/standup-sloth-my-laptop-writes-my-daily-standup-before-i-finish-my-chai-59b4</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I've been building React Native apps for over five years, and I currently lead development on features like Redux state management, map integration, and UI/UX improvements. That means my day is spread across several repos: the mobile app, a shared component library, sometimes a backend.&lt;/p&gt;

&lt;p&gt;And every morning I do the same small, annoying thing. I open my laptop, scroll through yesterday's commits across all of them, try to remember what "fix stuff" meant, and turn it into a standup message my manager can actually read.&lt;/p&gt;

&lt;p&gt;It takes ten minutes. It is ten minutes of being a human &lt;code&gt;git log&lt;/code&gt; parser.&lt;/p&gt;

&lt;p&gt;So for Slow and Steady week, I gave that job to a sloth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standup Sloth&lt;/strong&gt; is a tiny Python tool that reads your recent git activity, hands it to &lt;strong&gt;Gemma running locally through Ollama&lt;/strong&gt;, and gives you a clean update:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gs"&gt;**Yesterday**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [mobile-app] Fixed Google sign-in crash on Android 14
&lt;span class="p"&gt;-&lt;/span&gt; [mobile-app] Moved cart state to a Redux slice
&lt;span class="p"&gt;-&lt;/span&gt; [ui-kit] Added dark mode to the map marker component

&lt;span class="gs"&gt;**Today**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [mobile-app] Finish the store locator map screen

&lt;span class="gs"&gt;**Blockers**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; None
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then it copies the result to your clipboard. And if you are truly committed to laziness, one command schedules it to run itself every weekday morning and send you a notification when your standup is ready. You walk in, paste, and go back to your chai.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Here's what a run looks like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python3 standup_sloth.py --scan ~/Projects --copy
🦥 Reading 3 repo(s) and asking gemma3:4b on this machine…

**Yesterday**
- [mobile-app] Fixed Google sign-in crash on Android 14
- [mobile-app] Moved cart state to a Redux slice

**Today**
- [mobile-app] Finish the store locator map screen

**Blockers**
- None

— Written by gemma3:4b locally · cost: ₹0 · bytes sent to the cloud: 0
📋 Copied to clipboard. Paste it into Slack/Teams and go back to your chai.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Want to see what the model sees before trusting it? &lt;code&gt;--dry-run&lt;/code&gt; prints the exact activity log and stops.&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/rutvi-senjaliya-shivalik" rel="noopener noreferrer"&gt;
        rutvi-senjaliya-shivalik
      &lt;/a&gt; / &lt;a href="https://github.com/rutvi-senjaliya-shivalik/standup-sloth" rel="noopener noreferrer"&gt;
        standup-sloth
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Your daily standup, written by Gemma running locally via Ollama. Reads your git commits, nothing leaves your machine.
    &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;Standup Sloth 🦥&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Your daily standup, written by a local open-weight model while you sip chai.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Standup Sloth reads yesterday's git commits and your unfinished changes, hands them to &lt;strong&gt;Gemma running locally through Ollama&lt;/strong&gt;, and gives you a clean &lt;em&gt;Yesterday / Today / Blockers&lt;/em&gt; update. It can run itself every weekday morning, copy the result to your clipboard, and ping you with a notification.&lt;/p&gt;

&lt;p&gt;Your code and commit messages never leave your machine. No API key, no account, no bill.&lt;/p&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;$ python3 standup_sloth.py --scan ~/Projects --copy

**Yesterday**
- [shop-app] Fixed login crash on Android 14
- [shop-api] Added pagination to the orders endpoint

**Today**
- [shop-app] Finish the cart screen redesign

**Blockers**
- None

— Written by gemma3:4b locally in in a few seconds · cost: ₹0 · bytes sent to the cloud: 0
📋 Copied to clipboard.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Setup (5 minutes)&lt;/h2&gt;

&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;Install &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; and pull Gemma

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;ollama pull gemma3:4b&lt;/pre&gt;

&lt;/div&gt;


&lt;/li&gt;

&lt;li&gt;…&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rutvi-senjaliya-shivalik/standup-sloth" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;p&gt;The whole thing is one Python file with &lt;strong&gt;zero dependencies&lt;/strong&gt;. That was a deliberate choice: a lazy tool should be lazy to install too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Collect the facts.&lt;/strong&gt; For each repo, the sloth runs &lt;code&gt;git log --all --no-merges --since=&amp;lt;last working day&amp;gt; --author=&amp;lt;your email&amp;gt;&lt;/code&gt;. It also checks &lt;code&gt;git diff --shortstat&lt;/code&gt; and untracked files, because unfinished work is the best hint for what you will do &lt;em&gt;today&lt;/em&gt;. On Monday, it automatically looks back to Friday, because nobody wants a standup about their Sunday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Ask the local model.&lt;/strong&gt; The activity is sent to Ollama's local API at &lt;code&gt;localhost:11434&lt;/code&gt; with Gemma (&lt;code&gt;gemma3:4b&lt;/code&gt;). The prompt is strict: use only the facts in the log, group related commits, keep bullets short, and never invent work. Low temperature keeps it boring in the good way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Do the chores for me.&lt;/strong&gt; The result is printed, saved to &lt;code&gt;~/.standup-sloth/history/&lt;/code&gt;, optionally copied with &lt;code&gt;pbcopy&lt;/code&gt;, and announced with a macOS notification. &lt;code&gt;--schedule 09:30&lt;/code&gt; writes a small &lt;code&gt;launchd&lt;/code&gt; job so it runs every weekday without me lifting a finger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Build trust.&lt;/strong&gt; &lt;code&gt;--dry-run&lt;/code&gt; prints exactly what the model will see before anything runs. If &lt;code&gt;OLLAMA_HOST&lt;/code&gt; ever points to a machine other than your own, the sloth warns you. Every run ends with a small receipt, like this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;— Written by gemma3:4b locally in a few seconds · cost: ₹0 · bytes sent to the cloud: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trickiest part was not the code. It was the prompt. Small models love to fill gaps: hand one a commit called &lt;code&gt;wip&lt;/code&gt; and it may write a confident sentence about features you never built. So the prompt says "use ONLY the facts", tells the model exactly what to write when there is nothing unfinished ("Pick up the next task"), and only allows a blocker when the log clearly shows one. A standup that invents work is worse than no standup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Matters for This
&lt;/h2&gt;

&lt;p&gt;This project only makes sense with an open-weight model running locally, for three reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My commits are not mine to share.&lt;/strong&gt; As a mobile developer, most of my commits belong to client and company apps. Commit messages leak a surprising amount: feature names, bug details, sometimes customer names. Pasting them into a cloud chatbot every morning is the kind of thing that quietly breaks an NDA. With Gemma on my own machine, nothing leaves the laptop. I can prove it: turn off Wi-Fi and it still works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A daily habit should cost nothing.&lt;/strong&gt; A standup is twenty runs a month, every month, forever. With a hosted API that is another subscription and another key to rotate. Here it costs ₹0 after a one-time model download.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I can change the sloth.&lt;/strong&gt; Gemma too formal? Swap in another model with &lt;code&gt;--model&lt;/code&gt;. Want the standup in Gujarati for a local team? Edit one line of the prompt. A closed tool would give me its format. An open one lets me make it mine.&lt;/p&gt;

&lt;p&gt;Where closed models would win: a large hosted model writes slightly more polished sentences. But for a three-bullet status update, a 4B model on a Mac mini is more than enough, and "good enough, private, free, and offline" beats "perfect but on someone else's server."&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A React Native companion widget, so the standup is waiting on my phone's home screen&lt;/li&gt;
&lt;li&gt;A Slack/Teams mode that posts the standup straight to the right channel (still drafted locally)&lt;/li&gt;
&lt;li&gt;Reading Jira/Linear ticket IDs from commit messages so bullets link to tasks&lt;/li&gt;
&lt;li&gt;A weekly "what did I even do this week" summary for performance reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sloth moves slowly. But it moves every morning, so I don't have to. 🦥&lt;/p&gt;

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