Dev.to AI πŸ€– Ai πŸ‘ 0 πŸ“– 5 min read

Yard Sloth: walk your yard once, let open agents babysit the garden

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 pa

Yard Sloth: walk your yard once, let open agents babysit the garden

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:

  1. 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).
  2. Care calendar β€” spreads prune, feed, and protect tasks across the season and exports an .ics you can drop into any calendar app.
  3. 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

GitHub logo myluco / YardSloth

App that advises what to do in the yard

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

Yard Sloth Week 3 β€” LangGraph judge pipeline
You

Save your agent session with DevRelay and embed it in your post, or link to it. It's optional, but it helps the judges understand your process.

How can I do that?

Agent

Explained DevRelay Agent Sessions: save via Cursor + DevRelay (submit_agent_session), optional CLI (devrelay sessions submit), embed on DEV with {% agent_session id_or_slug %} or message ranges/slices, or link to a published session. Noted MLH/DevRelay auth requirement and scrubbing secrets before upload.

You

Save this agent session to DEV as 'Yard Sloth Week 3 β€” LangGraph judge pipeline'

Agent

Prepared normalized transcript for DEV upload with title matching the Week 3 submission. Context: Yard Sloth uses LangGraph dual-gather + judge in agents/llm/graphs/dual_judge_graph.py (parallel gather_a/gather_b on Ollama, then judge merge).

β–Έ read_file agents/llm/graphs/dual_judge_graph.py
Input
agents/llm/graphs/dual_judge_graph.py
Output
LangGraph StateGraph: DualJudgeState with parallel _gather_a/_gather_b (chat_completion to model_a/model_b), warnings on single-gather failure, judge node merges candidates into final_text + judge_rationale.
4 of 4 messages

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-cloud via 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.

πŸ“° Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.