DEV Community

Kavya Chandak
Kavya Chandak

Posted on

Slothstart: a local Gemma agent that does the first two minutes of everything you're avoiding

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

Nobody avoids a task because the whole task is hard. They avoid it because of the first two minutes: the blank page, the empty file, the cursor blinking in a reply box. That's activation energy, and it's the only part of procrastination worth automating.

Slothstart is a small command-line agent that reads the tasks.md file you keep ignoring and does the starting for you. While you sleep, it picks the task that has been sitting there longest and produces a starter: a drafted email, an outline with the first paragraph written, a project skeleton with the folder structure and a TODO in every file, or a three-step checklist with step one already done. In the morning you open a folder called starters/ and every dreaded task is already 20% finished.

It doesn't try to finish your work. A model that finishes your work for you makes you lazier in the bad way, and the result is usually wrong anyway. Slothstart only lowers the cost of beginning, which is the one thing a sloth would approve of.

It's also deliberately slow. It processes one task at a time and watches the machine's thermal state. If the laptop starts to run warm, it pauses and waits. I run it on a fanless MacBook Air M1, and a fanless laptop is exactly where this design matters. Slow and steady is the engineering constraint, and it also happens to be the theme.

Demo

Code

How I Built It

Model. [Gemma 3, FILL IN exact size/quantization] running through [Ollama / llama.cpp, FILL IN]. Gemma is open-weight, so everything below happens on my own machine.

The loop. Slothstart is a small pipeline of narrow calls rather than one big autonomous agent:

  1. Parse. Read tasks.md. Each line is a task, and optional date tags give age, so old tasks surface first.
  2. Classify. Gemma labels each task with a starter type: draft, outline, skeleton, or checklist. This is a single short prompt with a constrained output, so the small model is reliable at it.
  3. Generate. A separate prompt per starter type, each with a hard rule: stop after the first step and leave a visible gap. This rule matters most. Without it, small models try to complete everything and produce confident filler. With it, the output is short, honest, and easy to continue.
  4. Write. The result is saved as a plain file in starters/, named after the task. No database and no app. Files you can open with anything.
  5. Cool down. Between tasks, a thermal check runs. If the machine is warm, the agent sleeps and retries. [FILL IN: how you implemented it, e.g. polling pmset -g therm on macOS, or a fixed delay between generations.]

What I learned. [FILL IN: one or two real findings from building it, e.g. which starter type Gemma handled best, where it failed, how prompt changes affected quality. Specific and slightly embarrassing findings read as more credible than polished claims.]

Why Does Open Innovation Matter?

A task list is one of the most private documents a person owns. Mine has emails to professors, internship applications, and things I haven't told anyone I'm putting off. A tool that needs this list has to be a tool I trust completely, and a cloud API asks me to upload my avoidance to someone else's server every single night.

With an open-weight model:

  • My data never leaves the laptop. The task list is read locally, processed locally, and written locally. There's no account, no upload, and no retention policy to read.
  • It works with wifi off. Slothstart runs at 2 a.m. whether or not the network does. [FILL IN: confirm you ran it with wifi disabled.]
  • It costs nothing per run. A nightly job over a long list is exactly the workload that gets expensive on a metered API. Locally it costs electricity.
  • I control the behavior. The "stop after step one" rule lives in prompts I own. I can tighten it, swap Gemma sizes, or change the model entirely without waiting for a provider to change a policy or deprecate an endpoint.

A closed API would likely write a nicer draft. But for a tool that reads my most private list and runs every night forever, a slightly weaker model that stays on my machine is the better trade.

My Agent Session

The Lazy Payoff

Prize Categories

Best Use of Gemma. Gemma is the only model in the pipeline. It handles both classification and generation, running locally on a fanless laptop, and the design is shaped around what a small local model is actually good at: short constrained outputs rather than long open-ended ones.

Top comments (0)