DEV Community

Arnulfo
Arnulfo

Posted on

Modo Tortuga: a local Gemma that turns a 30-item to-do list into three tiny first steps

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

This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 3.

What I Built

Modo Tortuga ("Turtle Mode") is for the days when the list is so long that the laziest option is to not start at all.

You give it a plain text file with up to 30 to-dos, one per line, written however you like. A Gemma model running on your laptop picks at most three and gives you a first step for each: something you can do in 15 minutes or less that leaves a small, visible result. Then it stops. It doesn't reschedule anything, send anything, or touch your calendar. It just points.

The effort it saves is the decision itself: reading the whole list, weighing dates against each other, and figuring out what "start" even means for a vague item like "prepare a presentation". Sloths don't plan the whole tree. They reach for the next branch.

I wrote it in Spanish because that's how I write my lists (I'm in Panama), so the output below is in Spanish with a translation.

Demo

A fictional list (no personal data), with optional [YYYY-MM-DD] deadlines:

[2026-10-24] Revisar lista de materiales para el taller del sábado
[2026-10-25] Preparar una presentación breve para el club de lectura
Ordenar fotos duplicadas de un viaje ficticio
Comparar tres recetas para una cena sencilla
[2026-10-23] Confirmar el horario del salón comunitario
Clasificar notas sueltas de un proyecto de jardinería
Escribir una lista de preguntas para la próxima reunión
Comprar cartulina para una actividad escolar ficticia
Enter fullscreen mode Exit fullscreen mode

Real output from gemma4:e2b on an Apple M3 laptop with 8 GB of RAM, in 32 seconds, offline:

Modo Tortuga · empieza por esto (propuesta; tú decides):
1. Confirmar el horario del salón comunitario · vence 2026-10-23
   Primer paso: Buscar el horario del salón comunitario en línea
   Motivo: Confirma la disponibilidad del espacio.
2. Revisar lista de materiales para el taller del sábado · vence 2026-10-24
   Primer paso: Abrir la lista de materiales para el taller del sábado
   Motivo: Desbloquea la revisión de la lista.
3. Preparar una presentación breve para el club de lectura · vence 2026-10-25
   Primer paso: Abrir un documento y redactar el título de la presentación
   Motivo: Inicia la preparación de la presentación.
Enter fullscreen mode Exit fullscreen mode

In English: "Turtle Mode · start with this (a suggestion; you decide): 1. Confirm the community hall schedule, due Oct 23. First step: look up the hall's hours online. 2. Review the materials list for Saturday's workshop, due Oct 24. First step: open the materials list. 3. Prepare a short talk for the book club, due Oct 25. First step: open a document and write the talk's title."

It picked the three dated items, in deadline order, and left the five undated ones for another day. That's the right call for this list. The first steps vary in quality, though. "Write the title" is a real, tiny start. "Open the materials list" is a step, but barely more than the task.

Code

GitHub logo yosef7 / modo-tortuga

Local first-step planner: Gemma in Ollama turns a long to-do list into three tiny first steps (Hacktoberfest 2026 DEV Challenge, Week 3)

Modo Tortuga

English: a local first-step planner. Give it up to 30 to-dos and a Gemma model running in Ollama on your laptop picks at most three, each with a first step of 15 minutes or less. Nothing leaves 127.0.0.1. Built for the Hacktoberfest Open-Source AI Challenge: Week 3.

Un prototipo local para esos días en que una lista de pendientes es demasiado larga para empezar. Lee hasta 30 líneas de texto y le pide a un modelo abierto que elija hasta tres primeros pasos. Muestra una propuesta; no cambia tareas, archivos ni calendarios.

Creado durante la ventana del Hacktoberfest Open-Source AI Challenge: Week 3, cuyo tema es Slow and Steady.

Código publicado bajo licencia MIT (ver LICENSE).

Probar

Requiere Python 3.10+, Ollama y un modelo compatible. No tiene dependencias Python de terceros.

ollama serve                         # en otra terminal, si no está activo
ollama
…
Enter fullscreen mode Exit fullscreen mode

One Python file of 138 lines, three unit tests, MIT license, and nothing to install from PyPI. It only uses the standard library.

ollama pull gemma4:e2b
python3 tortuga.py ejemplo.txt
python3 -m unittest -v test_tortuga.py
Enter fullscreen mode Exit fullscreen mode




How I Built It

The pipeline is short on purpose:

  1. Parse. Each line becomes {"id": "T3", "due": "2026-10-23", "text": "..."}. Dates only count if they're written explicitly. Comments (#) are skipped, lines are capped at 300 characters, and lists at 30 items.
  2. Ask Gemma. The list goes to Ollama's /api/chat at 127.0.0.1:11434 with temperature: 0, think: false, and a JSON Schema in the format field. Ollama constrains decoding to that schema, so the model can only answer with 1 to 3 objects of id, first_step, why_now. The prompt asks for steps under 15 minutes that produce something checkable, and gives one example, because without it the small model tended to just repeat the task title.
  3. Don't trust it. A schema can force the shape but not the content. So validate() rejects any id that isn't in the input, any duplicate, and empty or overlong text. The model never gets to invent a task, and the task text and date shown to you come from your file, not from the model.
  4. Show, don't act. The result is printed and that's it. The prompt also tells the model not to suggest sending, paying, deleting or publishing anything on its own.

Here's the rule I ended up with: the model interprets the messy free-form list, and plain code checks every claim it makes about that list.

I chose gemma4:e2b because it runs on a base 8 GB laptop alongside everything else I have open. A bigger model would probably write sharper first steps, but then it wouldn't run on the machine I actually use.

Why Does Open Innovation Matter?

A to-do list is one of the most personal files you have. Mine has health appointments, money, and names of people I owe a reply. I'm not going to paste that into a cloud chat every morning. That's why this works better open than closed:

  • It stays on my machine. The code refuses any host other than 127.0.0.1:11434. The only internet use is the one-time model download.
  • It works offline, which means it works on a bus or with bad Wi-Fi.
  • It costs nothing per run. No API key, no quota. A tool you're supposed to use when you're tired can't have a "your credits ran out" moment.
  • It can be checked. Open weights and an open runtime let me pin the model and set temperature 0. With the same list, I get the same answer, which is what I want from something that tells me what to do.

Gemma's open weights and Ollama's open-source runtime are what make this a 138-line script instead of a service with an account, a privacy policy, and a bill.

The Lazy Payoff

Honest version: I haven't timed it against picking tasks by hand, so I won't claim a number of minutes saved. What I can measure is that it takes 32 seconds on my laptop and turns an 8-item list into 3 actions, and the first of those can be done in under 15 minutes. The real payoff is psychological: the time it saves is the time I'd spend staring at the list not starting.

The next step, which I didn't get to this week, is to log for a few days how long it takes me to start with and without it.

Prize Categories

Best Use of Gemma. The whole project is gemma4:e2b running locally through Ollama, with schema-constrained JSON output and validation on top.

Top comments (0)