This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass (https://dev.to/challenges/hacktoberfest-week1-2026-10-05)
Heyaaaa!
So a great person (my plumber) said to me that "Tech people rarely touch grass" and honestly he was right so I decided to build Beargrass agent dont judge the name as i have just use the cover image of we bear, so decided to use bear and grass word (see the sideeffect of not touching grass !)
It pops a window up on your desktop that names a real, walkable green spot near you, tells you how far it is and how long it takes to get there on foot, and refuses to be ignored until you decide to go or to explicitly tell it no.
The flow is simple and honest:
A tiny client on your computer tracks how long you have been actively typing or moving the mouse. It uses the OS idleness API directly, so it works without admin rights and without hooking into everything you do.
When you cross the threshold you set (default is two hour of continuous screen time), it sends a single POST to a local server with your coordinates from .env. For video purpose I have kept it to 1 min
The server runs an agent loop that geocodes your location, searches OpenStreetMap for actual parks, gardens and grass patches, picks the best one, estimates a walking route at human pace, and composes a message.
Your desktop shows a popup window: the place name, the distance, the walking time, and a small nudge. There are four alert backends in order, because Windows notifications are a mess: native window first, then a dialog, then a toast, then a tray balloon.
Who is it for? Anyone who works at a computer all day and knows they should go outside but never will on their own. You need a boss, and this one is an AI that cannot be muted by clicking "later".
Demo Video : [https://www.youtube.com/watch?v=eItxfwWAIq0](https://www.youtube.com/watch?v=eItxfwWAIq0)
[https://github.com/AarishMansur/Beargrass](https://github.com/AarishMansur/Beargrass)
The whole thing is one repository, one FastAPI server, one stdlib only client, and 60 tests. No frontend framework, no database, no build step.
This is the open source AI heart of the project. It is a Hermes-style tool-calling loop written against the OpenAI compatible chat completions dialect, which means the same code talks to any open weight Hermes model through OpenRouter, through Gemini's OpenAI compatible endpoint, or through anything else that speaks the protocol. It ships with a system prompt that tells the agent it is a wellness coach with a mission, and a set of typed tools: geocode me, search parks nearby, get a walking route, pick the best place, compose the nudge. The loop is defensive. If the API key is missing, malformed, or rejected with a 401, it logs the reason and falls back to an offline planner that still picks a real park from cached Overpass data, so the agent degrades instead of dying. The key never leaves the server, and .env is gitignored.
Everything the agent knows about the outside world comes from free, open data. Nominatim turns your coordinates into a place name. Overpass queries for leisure=park, garden, grass, and pitch tags around you with a radius you configure. The OSRM foot routing mirror (routing.openstreetmap.de) returns a real walking route, and a human-pace guard makes sure a 40 km "walk" never shows up as a 5 minute one. Every response goes through a TTL cache so repeated nudges in the same hour do not hammer public infrastructure, and every network call has a timeout and a graceful "I could not find grass near you" path.
Zero dependencies, deliberately. tracker.py reads idleness through GetLastInputInfo on Windows, get_idle_seconds semantics on macOS and X11, so it runs anywhere Python runs. monitor.py loads .env with a stdlib parser that never overrides your shell variables, then offers --once for a single check, --dry-run to print what would happen, --simulate to force a trigger, and --alert to test the popup by itself. alerts.py holds the four backends and a format_alert that builds the message, and it picks the first backend that actually works on your machine. On my box, Windows toasts fail because the AUMID is not registered, so the code falls through to a tkinter window that genuinely grabs focus.
The development itself happened in seven small phase branches, each reviewable on its own : core setup, Hermes plus OSM, screen time tracker, local trigger client, render blueprint and docs, then the Windows desktop alert.
A closed version of this is easy to sketch: a proprietary app that knows your screen habits, your location, and your schedule, all uploaded to someone else's cloud. That is exactly the thing that would make you touch grass less, because you would not trust it with the two most personal numbers you own: where you are and how long you have been awake.
Open innovation made three things possible here that a closed API would not:
Privacy by default. Idle time detection and the desktop popup never leave your machine. The location you type into .env stays there. OpenStreetMap, Nominatim, Overpass, and OSRM give real place names, real parks, and real walking routes with no API key, no telemetry, no pricing tier, and no terms of service that change next quarter.
Model choice. The harness speaks the open OpenAI-compatible dialect, so the same code runs on an open-weight Hermes model today and anything else tomorrow. When one provider rejected my key with a 401, I did not rewrite anything. I pointed the base URL at a different provider and kept the offline planner as a safety net. A closed API would have hard-coded my dependencies for the year.
Zero cost, forever. FastAPI, a stdlib client, free OSM infrastructure, and a free Render tier mean the whole project costs $0 to run, which is the only budget I had. Nothing about that changes if a startup gets acquired or a free tier disappears, because every piece can be self-hosted.
I would update this later as later I would work more on it