<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luiza</title>
    <description>The latest articles on DEV Community by Luiza (@myluco).</description>
    <link>https://dev.to/myluco</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F505231%2F6c7981a2-0d11-4d70-97c7-2130bcb73af2.jpeg</url>
      <title>DEV Community: Luiza</title>
      <link>https://dev.to/myluco</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/myluco"/>
    <language>en</language>
    <item>
      <title>The Culpeper Séance: An Offline RAG Séance with Nicholas Culpeper</title>
      <dc:creator>Luiza</dc:creator>
      <pubDate>Fri, 30 Oct 2026 01:00:07 +0000</pubDate>
      <link>https://dev.to/myluco/the-culpeper-seance-an-offline-rag-seance-with-nicholas-culpeper-4dfn</link>
      <guid>https://dev.to/myluco/the-culpeper-seance-an-offline-rag-seance-with-nicholas-culpeper-4dfn</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Culpeper Séance&lt;/strong&gt; is an offline séance that channels Nicholas Culpeper (1616–1654)—the English herbalist and astrologer—so you can ask him about plants in the voice of a gentle, slightly eerie ghost. Answers are grounded in passages from his &lt;em&gt;Complete Herbal&lt;/em&gt; (Project Gutenberg, public domain), not in whatever the model felt like inventing tonight.&lt;/p&gt;

&lt;p&gt;When the ghost names a dangerous herb, a &lt;strong&gt;Beyond the Veil&lt;/strong&gt; panel stamps a modern verdict: Folklore, Plausible, Harmful, or Deadly. Those toxicity claims come from a hand-curated &lt;code&gt;verdicts.json&lt;/code&gt; file—they are never generated by the model at runtime.&lt;/p&gt;

&lt;p&gt;The UI is a candlelit séance circle with streaming ghost text, a browsable grimoire of parsed herbs, and a poison cabinet for the scary ones. It maps almost line-for-line to the challenge prompt’s “offline séance chatbot” idea, except the spirit is a real dead author and his actual book.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/PpPsyDkaf8M" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick try for judges (local):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/myluco/CulpeperSeance.git
&lt;span class="nb"&gt;cd &lt;/span&gt;CulpeperSeance
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
make setup
make ingest    &lt;span class="c"&gt;# one-time: download Gutenberg text, chunk, embed into Chroma&lt;/span&gt;
make dev       &lt;span class="c"&gt;# Flask API + Vite UI&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open the URL Vite prints (usually &lt;code&gt;http://localhost:5173&lt;/code&gt;). Ensure &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; is running, with &lt;code&gt;ollama pull nomic-embed-text&lt;/code&gt; and a chat model such as &lt;code&gt;gemma4:31b-cloud&lt;/code&gt; (after &lt;code&gt;ollama signin&lt;/code&gt; if you use cloud-tagged models).&lt;/p&gt;

&lt;p&gt;No login required. Sample questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“What herb might quiet a sleepless head?”&lt;/li&gt;
&lt;li&gt;“Tell me of foxglove”&lt;/li&gt;
&lt;li&gt;“What rules the stars over rosemary?”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/myluco" rel="noopener noreferrer"&gt;
        myluco
      &lt;/a&gt; / &lt;a href="https://github.com/myluco/CulpeperSeance" rel="noopener noreferrer"&gt;
        CulpeperSeance
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;The Culpeper Séance&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Summon the ghost of Nicholas Culpeper (1616–1654) and ask him for herbal remedies. He answers in
character, grounded in the actual text of &lt;em&gt;The Complete Herbal&lt;/em&gt;, and a "Beyond the Veil" panel
reports what modern science says (usually: please don't drink that).&lt;/p&gt;
&lt;p&gt;Built for the &lt;strong&gt;Ghost in the Machine&lt;/strong&gt; challenge with open pieces only: an open-weight model
served by Ollama, LangChain + LangGraph, Chroma, and a public-domain book.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Layout&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;ui/       React + Vite + TypeScript front end            (own package.json)
server/   Flask API, SSE streaming                       (own pyproject.toml)
agent/    LangGraph agent: guard -&amp;gt; retrieve -&amp;gt; grade -&amp;gt; generate -&amp;gt; verdict
rag/      download, parse, chunk, embed, persist, retrieve (+ one-time ingest CLI)
data/     artifacts only, never code
  raw/        downloaded Gutenberg text (git-ignored)
  processed/  herbs.jsonl (canonical parsed herbs) + parse_report.json
  chroma/     persisted vector DB (git-ignored)
  verdicts.json  hand-curated modern verdicts (toxicity claims are never model-generated)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dependencies flow one way: &lt;code&gt;server -&amp;gt;&lt;/code&gt;…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/myluco/CulpeperSeance" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;MIT licensed. Monorepo layout: &lt;code&gt;rag/&lt;/code&gt; (ingest + Chroma), &lt;code&gt;agent/&lt;/code&gt; (LangGraph), &lt;code&gt;server/&lt;/code&gt; (Flask + SSE), &lt;code&gt;ui/&lt;/code&gt; (React + Vite).&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Open-weight and open-source AI are the engine, not decoration:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Open stack&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Gemma 4&lt;/strong&gt; via Ollama (&lt;code&gt;CHAT_MODEL=gemma4:31b-cloud&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeddings&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;nomic-embed-text&lt;/strong&gt; via Ollama (local pull)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;LangGraph&lt;/strong&gt; + LangChain (&lt;code&gt;guard → retrieve → grade → generate → verdict&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vector store&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Chroma&lt;/strong&gt; (persisted under &lt;code&gt;data/chroma/&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Corpus&lt;/td&gt;
&lt;td&gt;Gutenberg &lt;em&gt;Complete Herbal&lt;/em&gt;—parsed into &lt;code&gt;herbs.jsonl&lt;/code&gt;, chunked, embedded once&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;RAG that respects the dead author.&lt;/strong&gt; The ghost’s system prompt forbids herbs, doses, or facts not present in retrieved passages. A separate &lt;strong&gt;grade&lt;/strong&gt; step asks the model yes/no whether the passages could answer the question; if not, the graph rewrites the query into 17th-century herbal vocabulary or falls back to a polite “the veil is too thick” refusal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safety without vibes-only guardrails.&lt;/strong&gt; Before any retrieval, deterministic regex guardrails refuse self-harm, harm-to-others, and dosage questions—instant, testable, and not negotiable via prompt injection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streaming séance.&lt;/strong&gt; &lt;code&gt;POST /api/ask&lt;/code&gt; streams tokens over SSE so the UI can render the ghost word-by-word while the graph finishes and attaches verdict metadata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why not a closed API?&lt;/strong&gt; The book is fixed public-domain text. Embeddings and the vector index live on your machine after &lt;code&gt;make ingest&lt;/code&gt;. Swapping &lt;code&gt;CHAT_MODEL&lt;/code&gt; or &lt;code&gt;EMBED_MODEL&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt; does not require rewriting application code—only re-ingest if you change the embed model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Culpeper has been dead for centuries; his book is public domain. A closed chat product could still hallucinate foxglove as harmless tea. This project ties the ghost to &lt;strong&gt;retrieved passages&lt;/strong&gt; and &lt;strong&gt;curated modern verdicts&lt;/strong&gt; so the spooky layer does not erase medical reality.&lt;/p&gt;

&lt;p&gt;Open pieces also mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy&lt;/strong&gt; — After ingest, your herbal index and embeddings stay local; you are not shipping health questions to a proprietary log by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Longevity&lt;/strong&gt; — Gutenberg and the repo outlive any single vendor API. If a hosted model tag changes, you point Ollama at another open-weight model and keep the same graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline-capable core&lt;/strong&gt; — Embeddings run locally; chat can run through Ollama with cloud-tagged Gemma or a fully local model if you prefer air-gapped inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspectable safety&lt;/strong&gt; — Guardrails and verdicts are plain code and JSON, reviewable in PRs, not hidden policy layers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The line between past and present really is thinner here: a 1654 voice, a 2026 embedding model, and a UI that looks like you lit a candle with ghosts, witches and black cats flying around.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;I built this because the Week 4 theme clicked for me all at once: &lt;strong&gt;mystery&lt;/strong&gt;, &lt;strong&gt;the past&lt;/strong&gt;, and that feeling that something old is still in the room with you. Ghost in the Machine is not only jump scares—it is memory, voices from another century, and stories that outlive the people who told them. A séance with Nicholas Culpeper fits that mood without forcing it. He is already a ghost in the historical sense, and his herbal is already a bridge between then and now.&lt;/p&gt;

&lt;p&gt;Then there are the &lt;strong&gt;plants&lt;/strong&gt;. I love them—the names, the folklore, the idea that a leaf or root once carried hope and danger in the same breath. Culpeper wrote the stars into every herb; the app lets me sit with that world for a while: candlelight, a question about foxglove or a restless night, and an answer that has to earn its place in the book before the ghost may speak it.&lt;/p&gt;

&lt;p&gt;When the demo finally streamed the first reply word by word, it felt less like “AI output” and more like &lt;strong&gt;opening a door&lt;/strong&gt;—uncertain, a little eerie, and rooted in something real that survived four hundred years. That is the moment I wanted. I am proud of this one.&lt;/p&gt;

&lt;p&gt;For this Hacktoberfest, 2026, all apps I built for the challenges are garden-related, representing my love for gardening and software development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prize category
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma 4 is the model used, relevance grading, query rewrite, and in-character generation, all through Ollama’s open-weight distribution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclosures
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Parts of this post were drafted with AI assistance&lt;/li&gt;
&lt;li&gt;AI-disclosure: some_ai &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemmachallenge</category>
    </item>
    <item>
      <title>Yard Sloth: walk your yard once, let open agents babysit the garden</title>
      <dc:creator>Luiza</dc:creator>
      <pubDate>Sat, 24 Oct 2026 16:37:33 +0000</pubDate>
      <link>https://dev.to/myluco/yard-sloth-walk-your-yard-once-let-open-agents-babysit-the-garden-364a</link>
      <guid>https://dev.to/myluco/yard-sloth-walk-your-yard-once-let-open-agents-babysit-the-garden-364a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Yard Sloth&lt;/strong&gt; is a local-first garden assistant for people who want a cared-for yard without becoming a part-time horticulture researcher.&lt;/p&gt;

&lt;p&gt;You enter the name of plants in your yard (in the future, you will take one &lt;strong&gt;yard walk&lt;/strong&gt; on your phone—snap photos), tag locations like &lt;em&gt;"front bed, left of steps"&lt;/em&gt;—and confirm the plant list. From there, three cooperating agents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Plant census&lt;/strong&gt; — 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).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Care calendar&lt;/strong&gt; — spreads prune, feed, and protect tasks across the season and exports an &lt;code&gt;.ics&lt;/code&gt; you can drop into any calendar app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frost watch&lt;/strong&gt; — pulls tonight’s forecast and raises a banner when tender plants are at risk, with a checklist instead of panic-googling at 9 PM.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The sloth branding is intentional: the app is built for &lt;strong&gt;slow, steady laziness&lt;/strong&gt;. 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Local demo:&lt;/strong&gt; clone the repo, run &lt;code&gt;python3 server/main.py&lt;/code&gt; and &lt;code&gt;npm run dev&lt;/code&gt;, open &lt;code&gt;http://localhost:3000&lt;/code&gt;. You will need Ollama running with the models configured in settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video demo:&lt;/strong&gt; &lt;a href="https://youtu.be/AV80gnBCeYw" rel="noopener noreferrer"&gt;https://youtu.be/AV80gnBCeYw&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/myluco" rel="noopener noreferrer"&gt;
        myluco
      &lt;/a&gt; / &lt;a href="https://github.com/myluco/YardSloth" rel="noopener noreferrer"&gt;
        YardSloth
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      App that advises what to do in the yard
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Yard Sloth&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;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.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;1. Project Directory Architecture&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The repository divides responsibilities into distinct subsystems:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;
├── agents/             # CrewAI Agent &amp;amp; MCP Tooling Subsystem
│   ├── agent/         # Census, Calendar, and Frost watch agents
│   ├── assets/        # Agent personas, prompt templates &amp;amp; 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 &amp;amp; network config
│   ├── main.py        # Python server entry point (python3 server/main.py)
│   └── README.md&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/myluco/YardSloth" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Public repo: &lt;a href="https://github.com/myluco/YardSloth" rel="noopener noreferrer"&gt;github.com/myluco/YardSloth&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All substantive work for this submission landed &lt;strong&gt;October 21–22, 2026&lt;/strong&gt; (initialize → LangGraph judge pipeline → task list polish), inside the Week 3 entry window.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Yard Sloth is &lt;strong&gt;open-source AI at the core&lt;/strong&gt;, not a thin wrapper around a single chat API.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM workflows&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;LangGraph&lt;/strong&gt; (&lt;code&gt;dual_judge_graph.py&lt;/code&gt;, plant-care workflow)&lt;/td&gt;
&lt;td&gt;Parallel &lt;strong&gt;gather&lt;/strong&gt; calls, then a &lt;strong&gt;judge&lt;/strong&gt; merge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inference&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; on your machine&lt;/td&gt;
&lt;td&gt;Open-weight models; swappable via settings/env&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;MCP web browse&lt;/td&gt;
&lt;td&gt;Live horticulture + &lt;strong&gt;Open-Meteo&lt;/strong&gt;—no static &lt;code&gt;care_rules.json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Pure Python &lt;code&gt;server/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;REST for the UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;td&gt;React + TypeScript&lt;/td&gt;
&lt;td&gt;Yard walk, confirm, calendar, tonight&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Default Ollama stack&lt;/strong&gt; (each role can be overridden):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt; (&lt;code&gt;gemma4:31b-cloud&lt;/code&gt;) — primary gather / care-profile draft&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen2.5 14B&lt;/strong&gt; — second gather (different model family, same excerpts)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama 3.1 8B&lt;/strong&gt; — judge merges the two JSON drafts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plant-care refresh is deliberately &lt;strong&gt;three Ollama calls&lt;/strong&gt;: &lt;code&gt;research_a&lt;/code&gt; and &lt;code&gt;research_b&lt;/code&gt; in parallel, then &lt;code&gt;judge&lt;/code&gt;. Terminal tracing (&lt;code&gt;[YardSloth LLM]&lt;/code&gt;) makes it obvious when the sloth is thinking vs. when Python is enforcing dates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model explains, code decides:&lt;/strong&gt; frost thresholds (36° / 32° / 28° F), old-wood vs. new-wood prune windows, and calendar spacing are &lt;strong&gt;deterministic Python&lt;/strong&gt;—not LLM guesses. That’s how you get trustable alerts without babysitting the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Closed garden apps want your photos, your address, and a subscription. Yard Sloth flips that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight models via Ollama&lt;/strong&gt; — you can run offline-capable stacks, swap Gemma for Qwen, or point at a local runner without re-architecting the app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open agent patterns&lt;/strong&gt; — LangGraph’s gather/judge graph is inspectable; you see &lt;em&gt;two&lt;/em&gt; drafts and a merge, not one black-box completion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mandatory cloud brain&lt;/strong&gt; — session state stays in memory on &lt;strong&gt;your&lt;/strong&gt; machine; the sensitive part is “what’s in my yard,” not a vendor’s training set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP instead of frozen JSON&lt;/strong&gt; — care guidance is fetched from live sources when needed, so you’re not locked to a vendor’s stale plant database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API could summarize a blog post about hydrangeas. It couldn’t give me &lt;strong&gt;reproducible frost math&lt;/strong&gt;, &lt;strong&gt;calendar exports I own&lt;/strong&gt;, and &lt;strong&gt;two-model disagreement resolved by a judge&lt;/strong&gt;—unless I paid forever and sent my yard data upstream. Open stacks made the lazy path &lt;em&gt;local&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This session is related to publishing the project to dev&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Codex"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Yard Sloth Week 3 — LangGraph judge pipeline&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;How can I do that?&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;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.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Save this agent session to DEV as 'Yard Sloth Week 3 — LangGraph judge pipeline'&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;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).&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-readfile"&gt;read_file&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;agents/llm/graphs/dual_judge_graph.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;graphs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dual_judge_graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;LangGraph&lt;/span&gt; &lt;span class="n"&gt;StateGraph&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DualJudgeState&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;parallel&lt;/span&gt; &lt;span class="n"&gt;_gather_a&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nf"&gt;_gather_b &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chat_completion&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;model_a&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;model_b&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;single&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gather&lt;/span&gt; &lt;span class="n"&gt;failure&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;judge&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="n"&gt;merges&lt;/span&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="n"&gt;into&lt;/span&gt; &lt;span class="n"&gt;final_text&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;judge_rationale&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        4 of 4 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;Before Yard Sloth, my “system” was: random Notes app bullets, one panicked frost search per cold snap, and pruning guilt.&lt;/p&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One yard walk&lt;/strong&gt; seeds the season (≈15 minutes once).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirm screen&lt;/strong&gt; is the only mandatory human gate for plant identity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar&lt;/strong&gt; spreads chores so I’m not cramming dormant pruning into a single overwhelmed Saturday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tonight&lt;/strong&gt; tells me if I need buckets and blankets &lt;em&gt;before&lt;/em&gt; I’m in pajamas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conservative estimate: &lt;strong&gt;2–3 hours/month&lt;/strong&gt; of tab-hopping and calendar thrashing replaced by a Sunday glance and an occasional frost checklist. The sloth wins by doing less, more reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;I'm entering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — primary gather model (&lt;code&gt;gemma4:31b-cloud&lt;/code&gt; via Ollama) drafts structured plant-care JSON from web excerpts before the judge step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm &lt;em&gt;not&lt;/em&gt; claiming categories for tools I didn't integrate (MongoDB Atlas, Render, Sentry tracing, etc.).&lt;/p&gt;




&lt;p&gt;Built for &lt;strong&gt;Hacktoberfest 2026 — Slow and Steady&lt;/strong&gt;. Questions welcome in the comments.&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
      <category>gemmachallenge</category>
    </item>
    <item>
      <title>Help My Garden</title>
      <dc:creator>Luiza</dc:creator>
      <pubDate>Sat, 10 Oct 2026 04:26:27 +0000</pubDate>
      <link>https://dev.to/myluco/help-my-garden-1c8a</link>
      <guid>https://dev.to/myluco/help-my-garden-1c8a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;It helps with your garden activities and chores. It tells you what can be planted, trimmed, propagated, fertilized, etc at the time of requesting the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://drive.google.com/file/d/1nRWGDABsHYLXATUK4peXaxWRfYPF3pat/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1nRWGDABsHYLXATUK4peXaxWRfYPF3pat/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/myluco/gardenHelp" rel="noopener noreferrer"&gt;https://github.com/myluco/gardenHelp&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;This project was built using google ai studio. I gave several specific prompts how to build and which tech stack to use. When running locally, I chose the online Ollama model gemma4:31b-cloud. As the agent framework, I chose crew.ai for its simplicity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;In this project, the open llm can save  money, if it can be loaded in a machine. Furthermore, your data will keep private.&lt;br&gt;
Regarding the agent framework, crew ai is so simple to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Best use of Gemma&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
