This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
Yard Sloth is a local-first garden assistant for people who want a cared-for yard without becoming a part-time horticulture researcher.
You enter the name of plants in your yard (in the future, you will take one yard walk on your phoneβsnap photos), tag locations like "front bed, left of steps"βand confirm the plant list. From there, three cooperating agents:
- Plant census β turns the name of a plant (in the future, turns photos + live web excerpts) into candidate plants with confidence scores (you stay in the loop before anything is saved).
-
Care calendar β spreads prune, feed, and protect tasks across the season and exports an
.icsyou can drop into any calendar app. - Frost watch β pulls tonightβs forecast and raises a banner when tender plants are at risk, with a checklist instead of panic-googling at 9 PM.
The sloth branding is intentional: the app is built for slow, steady laziness. You do the one walk; open models and agent workflows do the recurring mental load. You can use it every day to keep your yard in check. Urgent tasks are marked with an urgent icon, so you can see what you really need to do today.
Demo
Local demo: clone the repo, run python3 server/main.py and npm run dev, open http://localhost:3000. You will need Ollama running with the models configured in settings.
Video demo: https://youtu.be/AV80gnBCeYw
Code
Yard Sloth
Walk your yard once with your phone, confirm the plant list, and get a care calendar plus evening frost alerts. Everything runs locally on your own machine.
1. Project Directory Architecture
The repository divides responsibilities into distinct subsystems:
βββ agents/ # CrewAI Agent & MCP Tooling Subsystem
β βββ agent/ # Census, Calendar, and Frost watch agents
β βββ assets/ # Agent personas, prompt templates & roles
β βββ mcp/ # MCP tools (live web browsing for weather, frost, care rules)
β βββ memory/ # Ephemeral in-memory session state (zero disk storage)
β βββ main.py # CrewAI pipeline coordinator
β βββ README.md # Agents architecture documentation
β
βββ server/ # 100% Pure Python HTTP Backend
β βββ api/ # REST endpoint handlers (routes.py)
β βββ server/ # Multithreaded HTTP server engine & network config
β βββ main.py # Python server entry point (python3 server/main.py)
β βββ README.mdβ¦Public repo: github.com/myluco/YardSloth
All substantive work for this submission landed October 21β22, 2026 (initialize β LangGraph judge pipeline β task list polish), inside the Week 3 entry window.
How I Built It
Yard Sloth is open-source AI at the core, not a thin wrapper around a single chat API.
| Layer | Tech | Role |
|---|---|---|
| LLM workflows |
LangGraph (dual_judge_graph.py, plant-care workflow) |
Parallel gather calls, then a judge merge |
| Inference | Ollama on your machine | Open-weight models; swappable via settings/env |
| Tools | MCP web browse | Live horticulture + Open-Meteoβno static care_rules.json
|
| API | Pure Python server/
|
REST for the UI |
| UI | React + TypeScript | Yard walk, confirm, calendar, tonight |
Default Ollama stack (each role can be overridden):
-
Gemma (
gemma4:31b-cloud) β primary gather / care-profile draft - Qwen2.5 14B β second gather (different model family, same excerpts)
- Llama 3.1 8B β judge merges the two JSON drafts
Plant-care refresh is deliberately three Ollama calls: research_a and research_b in parallel, then judge. Terminal tracing ([YardSloth LLM]) makes it obvious when the sloth is thinking vs. when Python is enforcing dates.
Model explains, code decides: frost thresholds (36Β° / 32Β° / 28Β° F), old-wood vs. new-wood prune windows, and calendar spacing are deterministic Pythonβnot LLM guesses. Thatβs how you get trustable alerts without babysitting the model.
Why Does Open Innovation Matter?
Closed garden apps want your photos, your address, and a subscription. Yard Sloth flips that:
- Open-weight models via Ollama β you can run offline-capable stacks, swap Gemma for Qwen, or point at a local runner without re-architecting the app.
- Open agent patterns β LangGraphβs gather/judge graph is inspectable; you see two drafts and a merge, not one black-box completion.
- No mandatory cloud brain β session state stays in memory on your machine; the sensitive part is βwhatβs in my yard,β not a vendorβs training set.
- MCP instead of frozen JSON β care guidance is fetched from live sources when needed, so youβre not locked to a vendorβs stale plant database.
A closed API could summarize a blog post about hydrangeas. It couldnβt give me reproducible frost math, calendar exports I own, and two-model disagreement resolved by a judgeβunless I paid forever and sent my yard data upstream. Open stacks made the lazy path local.
My Agent Session
This session is related to publishing the project to dev
The Lazy Payoff
Before Yard Sloth, my βsystemβ was: random Notes app bullets, one panicked frost search per cold snap, and pruning guilt.
Now:
- One yard walk seeds the season (β15 minutes once).
- Confirm screen is the only mandatory human gate for plant identity.
- Calendar spreads chores so Iβm not cramming dormant pruning into a single overwhelmed Saturday.
- Tonight tells me if I need buckets and blankets before Iβm in pajamas.
Conservative estimate: 2β3 hours/month of tab-hopping and calendar thrashing replaced by a Sunday glance and an occasional frost checklist. The sloth wins by doing less, more reliably.
Prize Categories
I'm entering:
-
Best Use of Gemma β primary gather model (
gemma4:31b-cloudvia Ollama) drafts structured plant-care JSON from web excerpts before the judge step.
I'm not claiming categories for tools I didn't integrate (MongoDB Atlas, Render, Sentry tracing, etc.).
Built for Hacktoberfest 2026 β Slow and Steady. Questions welcome in the comments.
Top comments (0)