This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
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:
.ics you can drop into any calendar app.
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.
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
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.
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.
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 ajudge merge |
| Inference | Ollama on your machine | Open-weight models; swappable via settings/env |
| Tools | MCP web browse | Live horticulture + Open-Meteo —no staticcare_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):
gemma4:31b-cloud) — primary gather / care-profile draft
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.
Closed garden apps want your photos, your address, and a subscription. Yard Sloth flips that:
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.
This session is related to publishing the project to dev
Before Yard Sloth, my “system” was: random Notes app bullets, one panicked frost search per cold snap, and pruning guilt.
Now:
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.
I'm entering:
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.