DEV Community

Dhanush N
Dhanush N

Posted on

standup-sloth: a local LLM drafts your standup, and a citation check keeps it honest

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

Writing my daily standup is the chore I keep putting off. The work is done, the commits exist, but turning them into sentences feels like homework.

standup-sloth is a small Go CLI that reads the last 24 hours of commits in a repo, hands them to a small open-weight model running locally in Ollama, and gets back a standup draft in markdown. The part that makes it usable: every bullet must cite the commit it came from, and a citation check throws out any line that cannot point at a real commit. Lines with invented citations, or no citation, land in a "Rejected" section with the reason. Commits the model skipped show up under "Not covered".

standup-sloth /path/to/repo > standup.md
Enter fullscreen mode Exit fullscreen mode

It can also pull in merged PRs via the gh CLI (--prs), filter by author (--author), and look back further (--since 168h for a weekly update).

Effort saved

Standup goes from "open git log, re-read my own commits, write 5 bullets" to "run one command, skim, edit". The check matters more than the drafting: small models invent work confidently, and without it I would spend the saved time fact-checking instead. In a real run, the model wrote "Implemented unit test for the add() method [#12]" citing a PR that does not exist - the check rejected it. That is the failure mode this tool is built around.

Demo

Real run against a scratch repo with 7 commits, qwen2.5:1.5b on 2 CPU cores, about 90 seconds:

## What I worked on

- Initial project scaffold with README added to master branch [733977d]
- Added math helper function "add()" and wire up CLI entry point for demo sum printing [fee7a3d]
- Created sub-function "sub()" with documentation update to README file [65f9558]
- Ignored node_modules directory and logs folder, updating .gitignore accordingly [aebe368]

## Not covered by the draft

- `f1d35af` Wire up CLI entry point printing a demo sum
- `d1039e8` Add unit test for add()
- `2faef3d` Add sub() helper

## Rejected by the citation check

- Implemented unit test for the add() method in a separate commit [#12] (cited hash/PR not in the source commits)
Enter fullscreen mode Exit fullscreen mode

Honest limits, also in the README: the model rephrases commit messages rather than understanding the work, and it can attach the wrong real commit to a line (the check only catches invented or missing citations, which is why every line keeps its citation visible). The 0.5B default model often echoes commit messages verbatim; the 1.5B writes noticeably better prose. It is a draft to edit, not a standup to paste.

Code

https://github.com/DhanushNehru/standup-sloth

MIT licensed. The citation checker and prompt builder have unit tests; the whole pipeline runs offline.

Why open innovation matters

This tool only exists because the model weights are open. A standup describes private work - client repos, internal names, unreleased features. With an open-weight model (Qwen2.5, Apache 2.0) running in Ollama, the whole pipeline stays on my machine: no API key, no usage bill, no git history leaving the laptop. Open weights also mean I could read the model card, check the license, pick a size that fits a small CPU, and swap it with one flag (--model). None of that is possible when the model is a metered black box behind someone else's endpoint.

Top comments (0)