Hark Overview
Hark is the open-source voice assistant that discovers and controls Android apps using on-device AI.
The name "Hark" means "to listen", and it is also short for Harkirat.
Hark is the open-source assistant built on OACP. It discovers what installed apps can do and lets you control them by voice on-device.
How it works at a glance
- Wake - on-device wake word detection listens for "Hey Hark" and activates the assistant hands-free.
- Listen - on-device speech-to-text captures your voice command.
- Discover - scans installed apps for OACP capability manifests via Android
ContentProvider. - Resolve - two-stage on-device AI pipeline matches your command to the right app action and extracts parameters.
- Dispatch - fires an Android
Intentto the target app (broadcast for background, activity for foreground). - Respond - receives async results from the app, shows them in chat, and speaks them aloud.
The user never leaves Hark. Apps do the work in the background and send results back.
On-device AI pipeline
The shipped local pipeline has two stages:
Stage | Model | What it does |
|---|---|---|
Intent selection | EmbeddingGemma 308M | Semantic similarity ranking against all discovered capabilities. Confidence-gated at 0.35. |
Slot filling | Extracts parameters (numbers, names, durations) from the matched utterance. |
This keeps the matching step cheap and only sends the selected action schema to the generative model. For the full reasoning, see NLU architecture.
Assistant overlay
Long-pressing the home button launches a lightweight overlay panel that floats on top of whatever app you are using. This is the fastest way to interact with Hark because the overlay loads zero AI models on its own. It is a thin UI shell: instant startup, no lag.
Under the hood, Hark uses FlutterEngineGroup to spin up two Flutter engines. The main engine runs the heavy lifting (STT, NLU, TTS, model inference). The overlay engine only renders the chat UI. State is relayed between the two engines through a Pigeon-generated bridge that passes through the native OverlayActivity on Android.
The overlay shows chat bubbles decorated with the target app's icon, and you can toggle between keyboard and microphone input. By default, the mic starts listening automatically when the overlay opens. If you want more space, tap "Open full app" to continue the same conversation in the full Hark chat screen with no context lost.
The session persists when you switch between apps (the overlay stays on screen). Pressing back dismisses the overlay and resets the session.
OACP-enabled apps
Hark works with any app that implements OACP. These are tested and working today:
App | What you can do |
|---|---|
"What's the weather?" - async result spoken back | |
"Open the QR scanner" / "Create QR code for hello world" | |
"Start audio recording" | |
"Increment counter" / "What's the counter at?" | |
"Search Wikipedia for Flutter" | |
"Play Lonely by Akon" - music playback by voice | |
"Take a photo" - camera launch by voice | |
"Play live kirtan" - Sikh devotional streaming |
Each is a fork showing exactly what was added to support OACP. Check the diff against upstream to see how simple the integration is.
See the full list on the ecosystem page. Want to add OACP to your own app? See Add OACP to Your App.
Getting started
Prerequisites
- Flutter (stable channel, >= 3.11)
- Android device (a physical device is recommended because assistant integration and speech flow are more realistic there)
- enough storage for the local model downloads
Build and run
First launch
- Grant microphone permission when prompted.
- Download the on-device models from the Local Models screen (EmbeddingGemma + Qwen3).
- Install any OACP-enabled app.
- Tap the mic and try a voice command.
Roadmap
The short version: the protocol and Kotlin SDK ship today, and the lightweight assistant overlay is shipped. Wake word detection ("Hey Hark") is in progress with in-app listening working now and a background service coming next. Hark is also focused on self-hosted inference, better speech input, and chat persistence. See the roadmap for the tracked priorities.