{"slug": "slothpulse-i-wrote-the-code-gemma-can-draft-the-standup", "title": "SlothPulse: I wrote the code. Gemma can draft the standup.", "summary": "A developer built SlothPulse, an open-source command-line tool that uses locally run Gemma models via Ollama to turn recent Git commits and a terminal error into a three-section Markdown standup draft. The tool enforces a JSON response contract with required source keys so every generated item cites its originating commit or error, retries an invalid plan once, and saves nothing if the second attempt fails. In testing on six real commits on an Apple M5 with 16 GB, full runs took 13.619 seconds with the model initially unloaded and 8.720 seconds on an immediate repeat.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady](https://dev.to/challenges/hacktoberfest-week3-2026-10-19).*\n\nAfter a day of writing code, “what did you do today?” shouldn’t require another Git archaeology session.\n\nI built **SlothPulse** to turn recent commits and a terminal error into a standup draft using **Gemma running locally through Ollama**. One command produces three Markdown sections: completed work, blockers, and suggested next steps.\n\nEvery item has a receipt pointing back to its source, so you can check anything suspicious before sharing the draft. The note stays in a local file.\n\n**[Open the recorded demo →](https://slothpulse.chicangel12.chatgpt.site)** — click a source badge to inspect its commit or error, or watch the 48-second video.\n\n```\npython3 slothpulse.py --since today --error-file error.txt\n```\n\nAn excerpt from the [actual saved draft](https://github.com/TengByte/slothpulse/blob/main/demo-assets/digest.md):\n\n```\n### 🛠️ What I Did Today\n- Fixed issue where export job IDs were lost during retries. [^C1]\n\n### 🐛 Blockers & Bugs\n- User-reported: KeyError: 'result' while downloading job results. [^E1]\n\n### 🚀 Next Steps\n- Suggested: Investigate the origin of the KeyError and potential data access issues in worker.py. [^E1]\n```\n\nThe full captured run summarizes five commits and one traceback in **10.33 seconds inside the CLI**. The fixture uses fictional authors and a deliberately fake key; the tiny worker really raises the captured error. The video replays timestamped output, including the measured wait.\n\n[Setup and source](https://github.com/TengByte/slothpulse) · [Exact input and output](https://github.com/TengByte/slothpulse/blob/main/demo-assets/run.json) · [Build log](https://github.com/TengByte/slothpulse/blob/main/BUILD_LOG.md)\n\nThe first version produced a tidy recap—and attributed a pasted error to SlothPulse itself, although its source was unspecified. That unsupported connection mattered more than the formatting.\n\nI moved the model’s response to JSON with **required source keys**. Every commit gets a `C` key. Each reported error gets an `E` object containing both its summary and investigation step. Python assigns their references and renders the Markdown.\n\nThat pairing came from another real failure: an error investigation cited an unrelated commit. Both IDs existed, so checking whether a source was known had missed the problem. Keeping the error and its follow-up together removes that particular mismatch.\n\nThe CLI validates coverage and reference types, retries an invalid plan once, and saves no digest if the second attempt fails. A valid reference still cannot prove that a sentence is correct; human review stays in the workflow.\n\nThe application uses Python’s standard library: `subprocess` for Git, `urllib.request` for Ollama, and `json` for the response contract. No external Python packages. The code is MIT licensed.\n\nCommit subjects and traces can contain private project details. Downloaded Gemma weights let the recap run on the same machine as that context, without a hosted inference account or API key. The model download needs internet access; generation stays local.\n\nSlothPulse checks model metadata before sending context, rejects cloud-backed models, and bypasses HTTP proxies. The tested Ollama server runs with `OLLAMA_NO_CLOUD=1`. These checks trust the local server and its metadata.\n\nBefore generating, `--preview` shows the sanitized input without a model call or file write. Common credential patterns are masked, but masking is best effort: preview it, and treat saved notes as potentially confidential.\n\nThe chore becomes **reviewing a draft instead of assembling one from scattered context**. To check this beyond the demo fixture, I ran SlothPulse on this project’s **six real commits**, using local Gemma on an Apple M5 / 16 GB:\n\n| Invocation | Whole process time | \n|---|---|\n| Model initially unloaded | 13.619 s | \n| Immediate repeat | 8.720 s | \n\nReview caught one important correction among the six completed-work items: Gemma turned **“submission handoff” into “submitted,”** while this entry was still a draft. The receipt made that mismatch easy to locate. The raw output and the corrected version are both preserved in the [repository trial](https://github.com/TengByte/slothpulse/tree/main/evidence/real-repo-2026-10-21).\n\nThis was an AI-assisted source check, not a human standup study. Manual preparation time and human editing effort remain unmeasured. The earlier [nine-run synthetic benchmark and 23 unit tests](https://github.com/TengByte/slothpulse/blob/main/BENCHMARK.md) check workflow behavior and failure boundaries; factual accuracy still needs review.\n\n*Codex assisted with implementation, testing, demo preparation, and this article. More engineering notes: [tengli.dev](https://tengli.dev/).*", "url": "https://wpnews.pro/news/slothpulse-i-wrote-the-code-gemma-can-draft-the-standup", "canonical_source": "https://dev.to/tengbyte/slothpulse-i-wrote-the-code-gemma-can-draft-the-standup-2bhp", "published_at": "2026-10-22 04:29:59+00:00", "updated_at": "2026-10-22 04:40:34.352413+00:00", "lang": "en", "topics": ["ai-tools", "large-language-models", "developer-tools", "ai-agents"], "entities": ["SlothPulse", "Gemma", "Ollama", "GitHub", "Apple"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/slothpulse-i-wrote-the-code-gemma-can-draft-the-standup", "markdown": "https://wpnews.pro/news/slothpulse-i-wrote-the-code-gemma-can-draft-the-standup.md", "text": "https://wpnews.pro/news/slothpulse-i-wrote-the-code-gemma-can-draft-the-standup.txt", "jsonld": "https://wpnews.pro/news/slothpulse-i-wrote-the-code-gemma-can-draft-the-standup.jsonld"}}