{"slug": "outside-window-a-local-ai-agent-that-gets-you-off-the-screen", "title": "Outside Window: A Local AI Agent That Gets You Off the Screen", "summary": "A developer released Outside Window, an open-source, privacy-first personal agent that recommends a daily ten-minute outdoor break and logs the user's check-ins locally. The TypeScript/Hono app stores outing history in local SQLite with CSV import/export, uses Open-Meteo with coarse-rounded coordinates for weather, and generates micro-quests via a local Gemma 3 4B model through Ollama, with Zod validation and a deterministic fallback when model output is invalid or unavailable. The repository also includes a Python prediction sidecar evaluated leave-one-out against a fixed 6 PM baseline.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass](https://dev.to/challenges/hacktoberfest-week1-2026-10-05).*\n\nOutside Window is a privacy-first personal agent that helps someone take one realistic outdoor break today.\n\nMost wellness apps turn going outside into another dashboard to manage. Outside Window takes the opposite approach: the screen should be the shortest part of the experience.\n\nThe app gives the user:\n\nA recommended time window for today.\n\nA short ten-minute outdoor micro-quest.\n\nA one-tap **“I went outside”** or **“Not today”** check-in.\n\nA local outing log that can be exported as CSV.\n\nA learning loop that can eventually improve its recommendation from the user’s real outcomes.\n\nThe first recommendation is intentionally transparent rather than pretending to be a highly accurate model before enough personal data exists. The current demo uses a clear heuristic and records the outcome needed to train a personal model later.\n\nThe project is for people who work, study, or spend too much time online and want a gentle nudge rather than another productivity system.\n\nSynthetic seed rows are clearly labelled and are not presented as real user behaviour or model evidence.\n\n**Repository:** [github.com/BOTPranav-01/outside-window](https://github.com/BOTPranav-01/outside-window)\n\nRun the local demo:\n\nPowerShell\n\n```\ngit clone https://github.com/BOTPranav-01/outside-window.git\ncd outside-window\nnpm install\nCopy-Item .env.example .env\nnpm run seed\nnpm run dev\n```\n\nOpen:\n\nPlain text\n\n```\nhttp://localhost:8787/\n```\n\nThe demo flow is:\n\nLoad today’s recommendation.\n\nRead the generated ten-minute quest.\n\nTap **I went outside** or **Not today**.\n\nInspect the saved event at `/api/outings`.\n\nExport the user-owned log from `/api/export`.\n\nThe Gemma path can be enabled locally with Ollama:\n\n```\nollama pull gemma3:4b\nnpm run dev\n```\n\nWithout Ollama, the app uses a safe deterministic fallback quest so the core demo remains functional offline.\n\nA deployed URL and short screen recording should be added here before publishing. Do not submit a fake URL:\n\n```\nLive demo: TODO — add after Render deployment\nVideo demo: TODO — add a 60–90 second recording\n```\n\nThe complete open-source code is available here:\n\n[View the Outside Window repository on GitHub](https://github.com/BOTPranav-01/outside-window)\n\nThe repository includes:\n\nTypeScript Hono API\n\nNode SQLite persistence\n\nCSV import/export\n\nZod validation for model-generated quests\n\nOpen-Meteo client with coarse coordinate rounding and caching\n\nFeature builder for time, weather, and outcome data\n\nPython prediction sidecar\n\nLeave-one-out evaluation against a fixed 6 PM baseline\n\nDocker Compose configuration\n\nRender service and worker configuration\n\nTests for the contracts, database, weather features, and workflow recovery\n\nMIT license\n\nThe outing history is stored in SQLite on the machine running the app. The user can export it to CSV or import it again. There is no hosted user database in the default setup.\n\nThis makes the privacy boundary understandable:\n\nOuting history stays local.\n\nSynthetic seed data is explicitly labelled.\n\nOpen-Meteo receives only coarse-rounded coordinates when weather is enabled.\n\nGemma can run locally through Ollama.\n\nOptional external providers are isolated behind configuration.\n\nNo raw voice recordings are stored by the application.\n\nThe micro-quest generator uses a provider adapter pointed at Ollama:\n\n```\nOLLAMA_BASE_URL=http://localhost:11434\nOLLAMA_MODEL=gemma3:4b\n```\n\nThe prompt asks Gemma to return only a strict JSON object containing:\n\nquest title\n\none to three steps\n\nexactly ten minutes\n\na safety note\n\nThe response is parsed and validated with Zod. Invalid or unavailable model output cannot silently become a success-shaped response; the application falls back to a safe deterministic quest.\n\nThis is where open innovation matters technically. The model provider can run on the user’s machine, can be swapped through environment variables, and does not require sending a personal outing history to a closed AI API.\n\nThe prediction sidecar defines the intended features:\n\nhour\n\nweekday\n\ntemperature\n\napparent temperature\n\nprecipitation probability\n\nrain\n\nhumidity\n\nwind\n\neventual outing outcome\n\nThe evaluation script compares a fixed 6 PM baseline with a leave-one-out classifier and prints a Markdown table.\n\nThe included demo dataset is synthetic and labelled as synthetic. It is only a repeatable smoke test for the evaluation pipeline. It is not evidence that the model predicts real people accurately. Real accuracy requires real user-owned observations collected over time.\n\nThe user-day workflow stores its state locally and has a recovery test that simulates a worker restart without duplicating the user-day state.\n\nThe next production integration is Temporal: the same state machine will compute a window, sleep durably, send a nudge, wait up to 45 minutes for a check-in, record the outcome, and trigger a refit.\n\nI kept that distinction explicit rather than claiming a local state test is already Temporal Cloud.\n\nA closed wellness assistant could produce a polished recommendation, but the user would have little ability to inspect or own the system making decisions about their daily behaviour.\n\nOpen innovation makes several things possible here:\n\n**Local inference:** Gemma can run offline through Ollama.\n\n**Model choice:** the provider can be swapped without rewriting the application.\n\n**Inspectable features:** the recommendation inputs are visible rather than hidden.\n\n**User-owned history:** SQLite and CSV make the outing log portable.\n\n**Honest evaluation:** the fixed 6 PM baseline is included instead of reporting only a model score.\n\n**Community improvement:** the feature builder, validator, and workflow state are open to review and extension.\n\nThe project is intentionally modest about what it knows. It does not claim that a model can solve motivation. It creates a small feedback loop that respects the user and improves only when the user supplies real outcomes.\n\nThis section is optional. Add the public DevRelay session link after saving and making the session public.\n\n```\nTODO — add public DevRelay agent session link\n```\n\nI used AI assistance during implementation and will disclose that accurately in the DEV article settings.\n\nI am entering the Gemma category only when the submitted demo runs Gemma locally through Ollama. Gemma generates the structured ten-minute quest, and the application validates the output before showing it to the user.\n\nI am not claiming categories for integrations that are only configuration placeholders.\n\nThis is a new project built during the Week 1 challenge window.\n\nCurrent limitations:\n\nThe recommendation is still a transparent demo heuristic.\n\nThe included evaluation rows are synthetic and cannot demonstrate real-world accuracy.\n\nThe real TabPFN integration is not yet claimed.\n\nTemporal Cloud orchestration is not yet claimed.\n\nElevenLabs audio is not yet claimed.\n\nSentry tracing is not yet claimed.\n\nA public Render deployment still needs to be added before submission.\n\nVoice check-in is planned but not part of the current validated demo.\n\nThese limitations are deliberate. The goal is to show what works, identify what remains, and avoid presenting scaffolding as a finished integration.\n\nBuilt with TypeScript, Hono, Node SQLite, Zod, Vitest, Python, FastAPI, Open-Meteo, Ollama/Gemma, Docker, and Render configuration.\n\nThe project is MIT licensed. No non-trivial borrowed code is included without attribution.\n\nAI tools assisted with implementation. The repository, application structure, tests, documentation, and integration decisions were created for this challenge project.", "url": "https://wpnews.pro/news/outside-window-a-local-ai-agent-that-gets-you-off-the-screen", "canonical_source": "https://dev.to/ankush_1e9ea7893275e196a9/outside-window-a-local-ai-agent-that-gets-you-off-the-screen-ma7", "published_at": "2026-10-06 20:04:55+00:00", "updated_at": "2026-10-06 20:18:30.716204+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "large-language-models", "ai-products"], "entities": ["Outside Window", "Ollama", "Gemma 3 4B", "Open-Meteo", "Hono", "SQLite", "Zod", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/outside-window-a-local-ai-agent-that-gets-you-off-the-screen", "markdown": "https://wpnews.pro/news/outside-window-a-local-ai-agent-that-gets-you-off-the-screen.md", "text": "https://wpnews.pro/news/outside-window-a-local-ai-agent-that-gets-you-off-the-screen.txt", "jsonld": "https://wpnews.pro/news/outside-window-a-local-ai-agent-that-gets-you-off-the-screen.jsonld"}}