DEV Community

Aarya Shirsath
Aarya Shirsath

Posted on

sloth-standup: a standup writer that reads my git log so I don't have to

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 🦥

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

sloth-standup reads the git history of my active repos and writes my standup for me: what I did yesterday, and what I'm continuing today. One command, under 30 seconds, and the result is saved as a markdown file.

I contribute to several open-source repos at once, and every morning I'd stare at git log trying to remember what I'd actually done. Now I don't have to. It's for anyone who juggles multiple projects or has to post a daily update and would rather not write it.

Demo

Real output from my own repos, generated by a 3B model running on my laptop CPU:

PS> python -m sloth_standup --since "30 days ago"
Yesterday:
- SecureFlow: Fixed insufficient VRAM handling; Added LLM explanation caching
- iloveAgents: Updated agent categories; Added documentation
- hiero-bot-py: Fixed DCO logic sharing; Added empty-check label verification; Updated test-file regex anchoring

Today:
- SecureFlow: continue fix/local-model-graceful-degradation
- iloveAgents: continue docs/update-category-list
- hiero-bot-py: continue fix/pr-quality-gates

(saved to standups\2026-10-22.md)
Enter fullscreen mode Exit fullscreen mode

Code

GitHub logo Aarya0706 / sloth-standup

Writes your daily standup from your git commits. Runs on a local open-weight model (Qwen2.5), no API key, nothing leaves your machine.

sloth-standup

A lazy, fully local git standup bot. It reads your commits, uncommitted work and open PRs, then an open-weight model running inside Python writes a two-line standup. No Ollama, no server, no API key, no data leaving your laptop.

sloth-standup demo

Setup

pip install -r requirements.txt
copy config.example.json config.json      # then edit your repo paths
python -m sloth_standup --dry-run         # check what the model will see
python -m sloth_standup                   # first run downloads ~1 GB, once
Enter fullscreen mode Exit fullscreen mode

If pip install llama-cpp-python tries to compile and fails on Windows, use the prebuilt CPU wheels:

pip install llama-cpp-python --extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cpu
Enter fullscreen mode Exit fullscreen mode

Already have a GGUF file? Set "model_path": "C:/models/your-model.gguf" in config.json instead of model_repo/model_file.

Make it lazy (Windows)

schtasks /Create /SC DAILY /TN "SlothStandup" /TR "\"%cd%\run_standup.bat\"" /ST 08:30
Enter fullscreen mode Exit fullscreen mode

Your standup lands in standups/YYYY-MM-DD.md every morning.

Options

python -m sloth_standup --since "2 days ago" --repo
…

How I Built It

  • Model: Qwen2.5-Instruct in GGUF (q4_k_m), run locally on CPU. I tested the 1.5B and 3B versions.
  • Git layer: gitdata.py pulls commits and diff stats from each repo listed in config.json, filtered to my author name and capped at 2,500 characters per repo so the prompt stays small.
  • LLM layer: llm.py summarizes each repo's work at temperature 0.2 with a tight token limit, in a fixed "short items separated by semicolons" format.
  • CLI: cli.py assembles the Yesterday/Today output and saves it to standups/. The "Today" section comes from each repo's current branch name, so it costs zero tokens.
  • Config: one JSON file holds the repos, the author, and the model. Swapping models is a two-line edit. A run_standup.bat lets me double-click it each morning.

1.5B vs 3B, on my real repos

Qwen2.5-1.5B Qwen2.5-3B
Download ~1 GB ~2.1 GB
Run time (3 repos, CPU) 18.6 s 28.1 s
SecureFlow Fixed VRAM issue; Added Redis cache for LLM explanations Fixed insufficient VRAM handling; Added LLM explanation caching
iloveAgents Updated agent category list; Fixed typo in documentation; Added new feature for user authentication Updated agent categories; Added documentation
hiero-bot-py Fixed PR health and quality gates; Improved DCO logic and cache commits; Fixed empty-check label audit, verified DCO trailers, anchored the (cut off) Fixed DCO logic sharing; Added empty-check label verification; Updated test-file regex anchoring

The 1.5B is about 10 seconds faster, but it invented two items for iloveAgents ("fixed a typo", "added user authentication") when my only commit there was a docs update to the category list. One of its hiero-bot-py items also ran out of tokens mid-sentence. The 3B was vaguer in places ("Added documentation") but didn't make anything up and stayed in the format. For something I'd paste into a standup without rereading closely, the 3B is the one I keep.

Things I learned

  • Filter by author. My first version summarized everyone's commits in the repo, so my standup claimed other contributors' work as mine. My identity was also split across two emails (one a GitHub noreply address), so matching on my name worked where matching on email didn't.
  • Small models need a rigid format. Early output was full of colons and stray punctuation until I forced short semicolon-separated items.
  • Check the output against your real data. Both models looked fine at a glance, and the difference only showed up when I compared them to my actual commit log.

Why Does Open Innovation Matter?

My commit history is my private working record: unreleased branches, half-finished fixes, repo names. With a closed API, every standup would send that to a server I don't control, and I'd be paying per call for a task I do daily. With an open-weight model, the whole pipeline runs on my laptop. No account, no API key, no cost, and it works with no wifi after the first model download.

Open weights also let me swap models by changing one line and compare 1.5B and 3B on my own repos rather than trusting a leaderboard. That comparison is how I caught the 1.5B's invented feature. A small quantized model turned out to be good enough for this job, and I could only learn that because I could run both.

The Lazy Payoff

Instead of digging through git log across three repos every morning, I run one command and wait about half a minute. It costs nothing per run, and I used it for my own updates this week.

Top comments (0)