{"slug": "git-out-a-local-voice-companion-that-helps-developers-touch-grass", "title": "Git Out: A Local Voice Companion That Helps Developers Touch Grass", "summary": "A developer has released Git Out, an open-source, local-first Android voice companion that lets developers ask technical questions out loud and receive spoken answers without sending audio to the cloud. The app runs Qwen2.5-1.5B-Instruct Q4_K_M GGUF on-device via llama.rn, uses Android on-device speech recognition and TextToSpeech, and includes an optional FastAPI-backed read-only GitHub workspace that keeps the token server-side.", "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\nGit Out is a local-first voice companion for developers who want to think through\n\ntechnical problems without staying glued to a screen.\n\nThe idea is simple: take a walk, ask a question out loud, and get a useful answer\n\nwithout opening a laptop, sending your voice to a cloud service, or losing your\n\ntrain of thought to a dozen tabs.\n\nGit Out is built for developers who are walking, commuting, taking a break, or\n\nworking away from their desk. It can help with questions such as:\n\nThe app records one deliberate voice turn, transcribes it on the Android device,\n\ngenerates an answer with a local Qwen model, and reads the completed answer aloud\n\nwith the installed Android voice.\n\nThe screen is intentionally the shortest part of the experience. Pocket Mode has\n\nlarge, high-contrast controls and explicit states for **Ready**, **Listening**,\n\n**Transcribing**, **Thinking**, **Speaking**, and **Error**. There is no wake word,\n\nno always-on microphone, and no automatic microphone restart in the background.\n\nGit Out also includes an optional read-only GitHub workspace. When the backend is\n\nconfigured, the app can show the connected account, repositories, assigned issues,\n\npull requests, and recent commits. The GitHub token stays on the server and is\n\nnever bundled into the mobile app.\n\n**Video demo:** \n\nThe demo should show:\n\nThis is an Android development build, so a short screen recording is the most\n\nuseful demo format. The project is designed to be tested on a physical Android\n\ndevice because installed speech packs, TTS voices, audio focus, headset events,\n\nand lock-screen behavior vary by device.\n\nThe complete open-source project is available here:\n\nThe repository contains the React Native/Expo mobile app, the FastAPI backend,\n\nthe local AI abstraction, the Android speech and TTS integrations, GitHub API\n\nservices, tests, and setup documentation.\n\nGit Out is an Android-first React Native app built with Expo and a small FastAPI\n\nbackend for the optional GitHub workspace.\n\nThe core model is **Qwen2.5-1.5B-Instruct Q4_K_M GGUF**, loaded on the Android\n\ndevice with [`llama.rn`](https://github.com/mybigday/llama.rn). The model file is\n\nselected and stored locally by the user; it is not bundled into the repository or\n\ndownloaded automatically by the app.\n\nThe mobile conversation path is:\n\n```\nVoice question\n    ↓\nAndroid on-device speech recognition\n    ↓\nLocal transcript\n    ↓\nQwen GGUF through llama.rn\n    ↓\nReadable answer + optional Android TTS playback\n```\n\n`expo-speech-recognition` checks for an installed Android on-device language\npack before recording.`GitOutTts` Expo module wraps Android `TextToSpeech`.\nPocket Mode is a one-shot voice workflow rather than a continuous assistant. Each\n\ntap starts one question, and the lifecycle is guarded so stale recognition or TTS\n\ncallbacks cannot submit an accidental second turn.\n\nThe state machine makes the interaction understandable while the user is moving:\n\n```\nReady → Listening → Transcribing → Thinking → Speaking\n                         ↘ Error\n```\n\nThe FastAPI service uses a server-only `GITHUB_TOKEN` and GitHub's REST API. It\n\nexposes sanitized read endpoints for the authenticated user, repositories,\n\nassigned issues, pull requests, and commits. The mobile app only receives\n\nwhitelisted response fields; it never receives the token.\n\nGitHub is intentionally separate from local inference. Local conversation keeps\n\nworking when the backend or network is unavailable.\n\nThe app uses a dark, minimal skeuomorphic interface: raised cards, recessed input\n\nwells, tactile buttons, subtle shadows, and clear status pills. This gives the\n\ncontrols a physical-device feel without adding a heavy UI library or image assets.\n\nOpen innovation is what makes Git Out fit the Touch Grass theme instead of becoming\n\nanother cloud chat interface.\n\nThe open-weight Qwen model lets the main conversation run locally on the phone.\n\nThat makes several important things possible:\n\n`llama.rn`, Expo modules, native Android speech APIs, and a local-first state\nmachine in a way that can be inspected and changed.\nA closed hosted API could make a quick prototype, but it would move the central\n\nconversation onto a remote service and make a no-signal walking workflow much less\n\nreliable. Open components gave me the control needed to make privacy and offline\n\nbehavior product features rather than marketing claims.\n\nThe trade-off is honest: a small on-device model has less capacity than a large\n\ncloud model, and loading a GGUF requires enough memory on the Android phone. Git\n\nOut chooses that trade-off because a private, available answer while walking is\n\nmore useful here than a larger answer that requires a network connection.\n\nI am entering the overall Hacktoberfest Open-Source AI Challenge. I am not claiming\n\na partner category because Git Out does not currently use partner-specific\n\ntechnology.\n\nThe repository includes automated checks for the local AI guards, speech\n\nrecognition behavior, TTS lifecycle, voice-conversation transitions, Pocket Mode\n\nstate changes, and duplicate media-command handling.\n\nThe final frontend checks passed:\n\n```\nnpm run typecheck   ✓\nnpm test            ✓ 50 tests passed\nnpx expo export --platform android   ✓\ngit diff --check    ✓\n```\n\nFor the final device demo, I will report the phone model, Android version, speech\n\nservice, and TTS engine used. Device-specific speech, headset, background\n\nplayback, and lock-screen behavior can vary by device, so those details are part\n\nof the demo notes rather than assumptions about every Android phone.\n\nGit Out is a small experiment in making developer tooling less desk-bound. The\n\ngoal is not to keep people in an AI chat window. The goal is to let them ask one\n\nuseful question, hear a practical next step, and get back to the world outside\n\nthe screen.", "url": "https://wpnews.pro/news/git-out-a-local-voice-companion-that-helps-developers-touch-grass", "canonical_source": "https://dev.to/thshivam/git-out-a-local-voice-companion-that-helps-developers-touch-grass-1m87", "published_at": "2026-10-11 10:10:16+00:00", "updated_at": "2026-10-11 10:21:29.956727+00:00", "lang": "en", "topics": ["ai-tools", "large-language-models", "ai-agents", "developer-tools", "ai-infrastructure"], "entities": ["Git Out", "Qwen2.5-1.5B-Instruct", "llama.rn", "FastAPI", "React Native", "Expo", "GitHub", "Android"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/git-out-a-local-voice-companion-that-helps-developers-touch-grass", "markdown": "https://wpnews.pro/news/git-out-a-local-voice-companion-that-helps-developers-touch-grass.md", "text": "https://wpnews.pro/news/git-out-a-local-voice-companion-that-helps-developers-touch-grass.txt", "jsonld": "https://wpnews.pro/news/git-out-a-local-voice-companion-that-helps-developers-touch-grass.jsonld"}}