Yard Sloth는 로컬 우선(local-first)으로 작동하는 정원 비서 앱입니다. 사용자가 마당을 산책하며 식물 정보를 입력하면, 세 가지 협력 에이전트가 자동으로 작업을 처리합니다. 이 시스템은 식물 조사, 관리 달력 생성, 서리 감시 등의 반복적인 가드닝 업무를 자동화하여 사용자에게 지속 가능한 경험을 제공하는 것이 목표입니다.
핵심 포인트
로컬 우선(local-first)으로 작동하며, 모든 처리가 사용자의 기기에서 이루어집니다.
식물 조사, 관리 달력, 서리 감시 등 세 가지 협력 에이전트가 핵심 기능을 담당합니다.
오픈 모델과 에이전트 워크플로우를 활용하여 가드닝의 정신적 부하를 줄입니다.
관리 일정은 `.ics` 파일로 내보내어 모든 캘린더에 통합할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
Yard Sloth는 정원을 가꾸고 싶지만 파트타임 원예 연구원이 되고 싶지 않은 사람들을 위한 로컬 우선(local-first)의 정원 비서입니다.
사용자는 마당에 있는 식물 이름을 입력하고 (미래에는 휴대폰으로 **마당 산책(yard walk)**을 하며 사진을 찍게 될 것입니다), _"계단 왼쪽 앞 화단"_과 같은 위치를 태그하고, 식물 목록을 확인합니다. 그 후, 세 가지 협력 에이전트가 작동합니다:
식물 조사 (Plant census) — 식물의 이름(미래에는 사진 + 실시간 웹 발췌 정보)을 후보 식물과 신뢰도 점수(confidence scores)로 변환합니다 (저장하기 전에 사용자에게 항상 과정을 알립니다).
관리 달력 (Care calendar) — 가지치기, 비료 주기, 보호 등의 작업을 계절에 걸쳐 분산시키고, 모든 캘린더 앱에 넣을 수 있는 .ics 파일을 내보냅니다.
서리 감시 (Frost watch) — 오늘 밤의 일기 예보를 가져와 연약한 식물이 위험에 처했을 때 경고 배너를 올리고, 심야 9시에 패닉하며 구글 검색을 할 필요 없이 체크리스트를 제공합니다.
슬로스(sloth) 브랜딩은 의도적입니다: 이 앱은 느리고 꾸준한 게으름을 위해 만들어졌습니다. 사용자가 한 번 산책하는 것만 하면, 오픈 모델과 에이전트 워크플로우가 반복적인 정신적 부하를 처리합니다. 매일 사용하여 마당 관리를 유지할 수 있습니다. 긴급한 작업은 긴급 아이콘으로 표시되므로 오늘 정말로 해야 할 일이 무엇인지 알 수 있습니다.
데모 (Demo)
로컬 데모: 리포지토리를 클론하고, python3 server/main.py와 npm run dev를 실행한 후, http://localhost:3000을 엽니다. 설정을 통해 모델이 구성된 Ollama가 실행 중이어야 합니다.
이 제출을 위한 모든 실질적인 작업은 2026년 10월 21일~22일에 이루어졌습니다 (initialize → LangGraph judge 파이프라인 → task list 다듬기). 이는 Week 3 항목 창 내에서 진행되었습니다.
구축 과정 (How I Built It)
Yard Sloth는 단일 채팅 API를 감싼 얇은 래퍼가 아니라, 핵심에 오픈 소스 AI입니다.
레이어
기술
역할
LLM 워크플로우
LangGraph (dual_judge_graph.py, 식물 관리 워크플로우)
병렬 수집(gather) 호출 후, 판단(judge) 통합
...
기본 Ollama 스택 (각 역할은 재정의 가능):
Gemma (gemma4:31b-cloud) — 주 수집 / 관리 프로필 초안 작성
Qwen2.5 14B — 두 번째 수집 (다른 모델 패밀리, 동일한 발췌 내용)
Llama 3.1 8B — 두 개의 JSON 초안을 통합하여 판단(judge) 수행
식물 관리 새로고침은 의도적으로 세 번의 Ollama 호출을 사용합니다: 병렬로 research_a와 research_b를 실행한 후, judge를 수행합니다. 터미널 추적([YardSloth LLM])을 통해 슬로스가 생각하는지 아니면 Python이 날짜를 강제하고 있는지 명확하게 알 수 있습니다.
모델이 설명하고, 코드가 결정합니다: 서리 임계값(36° / 32° / 28° F), 오래된 나무와 새 나무 가지치기 기간, 그리고 달력 간격은 LLM의 추측이 아닌 결정론적 Python입니다. 이것이 모델을 지속적으로 감시하지 않고도 신뢰할 수 있는 알림을 받는 방법입니다.
오픈 혁신이 중요한 이유 (Why Does Open Innovation Matter?)
폐쇄형 정원 앱들은 사용자의 사진, 주소, 그리고 구독료를 원합니다. Yard Sloth는 이 흐름을 뒤집습니다:
Ollama를 통한 오픈 가중치 모델(Open-weight models) — 오프라인 구동이 가능한 스택을 실행하거나, Gemma 대신 Qwen으로 교체하거나, 앱을 재설계할 필요 없이 로컬 러너(local runner)를 지정할 수 있습니다.
오픈 에이전트 패턴(Open agent patterns) — LangGraph의 gather/judge 그래프는 검사 가능합니다. 블랙박스 완성 결과 하나가 아니라, 두 가지 초안과 병합 과정을 볼 수 있습니다.
필수 클라우드 지능 부재(No mandatory cloud brain) — 세션 상태는 사용자 장치 메모리에 유지됩니다. 민감한 부분은 벤더의 학습 데이터셋이 아니라 “내 마당에 무엇이 있느냐”입니다.
고정된 JSON 대신 MCP(MCP instead of frozen JSON) — 관리 지침은 필요할 때 실시간 소스에서 가져오므로, 벤더의 오래된 식물 데이터베이스에 종속되지 않습니다.
폐쇄형 API는 수국에 관한 블로그 게시물을 요약할 수는 있습니다. 하지만 재현 가능한 서리 계산법(reproducible frost math), 내가 소유한 캘린더 내보내기 파일, 그리고 심판(judge)에 의해 해결되는 두 모델 간의 불일치는 제공할 수 없습니다. 물론 영원히 지불하고 마당 데이터를 업스트림으로 보내야만 가능하죠. 오픈 스택은 쉬운 경로를 로컬로 만들었습니다.
내 에이전트 세션(My Agent Session)
이 세션은 프로젝트를 dev에 게시하는 것과 관련되어 있습니다.
Yard Sloth Week 3 — LangGraph judge 파이프라인
당신
DevRelay를 사용하여 에이전트 세션을 저장하고 게시물에 임베드하거나, 링크할 수 있습니다. 필수는 아니지만, 심판들이 사용자의 프로세스를 이해하는 데 도움이 됩니다.
어떻게 할 수 있나요?
에이전트
DevRelay 에이전트 세션 설명: Cursor + DevRelay를 통해 저장(submit_agent_session)하고, 선택적 CLI(devrelay sessions submit)로 사용하거나, DEV에서 {% agent_session id_or_slug %} 또는 메시지 범위/슬라이스로 임베드하거나, 게시된 세션에 링크할 수 있습니다. MLH/DevRelay 인증 요구 사항과 업로드 전 비밀 정보 제거가 필요하다는 점을 알려드립니다.