Paid proof of concept · Android · wake word

Wakes when
you mean it.

ENIGMA listens in the background on Android, wakes on a custom “Hey Enigma”, and ignores the “Hey Emma”s, the TV and the friend who says “he's an enigma”. Every claim on this page comes from a test you can re-run.

fewer false wakes
16×
real wakes caught
92%
false wakes on everyday speech
0
wake word runs
on-device
ENIGMA app listening screen with rotor and lampboard

Live · runs in this tab

Say it. Or try to fool it.

The same pipeline as the Android build, compiled to WebAssembly. A naive detector runs on the same audio, so you can watch it get fooled while ENIGMA holds. Nothing you say leaves this tab until a wake is accepted; then only the transcribed command goes to the assistant.

Engine not loaded

 

1 · Load the engine

41 MB speech model, cached by your browser. Decoding happens locally.

Tip: say “Hey Emma” first, then “Hey Enigma, what's a good name for a cat?”

2 · Or play a test clip

Real clips from the test corpus (Amazon Polly neural voices).

Naive detector

—

tiny grammar, no defences

ENIGMA

—

decoys · rules · verifier

01 Gate0%audio decoded
02 Spot0candidates
03 Rules0filtered
04 Verify0vetoed
Wake0accepted

Conversation

After a wake, ENIGMA transcribes your command locally, asks the assistant (an LLM on Amazon Bedrock, no keys in the app) and speaks the reply.

Every decision

  1. Waiting for audio…

Browser preview decides at the end of a phrase. The Android build triggers mid-sentence from partial results, so “Hey Enigma, what's…” wakes it while you're still talking.

Measured, not claimed

The false-trigger problem, in numbers.

A synthetic test corpus built for this PoC: Amazon Polly neural voices in seven English accents, clean, with fan noise, with crowd babble and far-field, plus about an hour of look-alikes and everyday speech. Each defence was added one at a time.

False wakes per hour of adversarial audio

“Adversarial” = mostly “Hey X” phrases that sound like the wake word. On everyday speech (TV, calls, kitchen) the count is zero for every arm.

Trade-off curve · threshold sweep

naive+ decoysENIGMA

Negatives that woke it

AudioNaiveENIGMA

Wakes caught, by voice

Weakest: crowd babble at 10 dB SNR. That is the first target for the production detector (see roadmap).

On an Android device · same code as the service

On-device benchmark results load here.

Where it still slips

    Working within Android's rules

    Background listening that survives Android 14 and 15.

    Most always-listening demos die when the screen goes off or another app needs the mic. These are the cases the PoC handles, and how.

    Foreground service · microphone

    Started from a visible screen and promoted with FOREGROUND_SERVICE_TYPE_MICROPHONE, as Android 14+ requires. Persistent, honest notification with a Stop action.

    Screen off & Doze

    A partial wake lock while listening keeps the 20 ms capture loop alive. Nothing is scheduled with alarms or jobs, so there is nothing for Doze to defer.

    Battery: the gate

    An adaptive noise-floor gate means the decoder sleeps through silence and steady noise. The app shows live CPU and the share of audio actually decoded.

    Mic sharing

    Calls and recorders take priority. ENIGMA watches AudioRecordingCallback, shows “mic busy” when Android silences it, and resumes by itself.

    After a reboot

    Android 14+ blocks microphone services from starting at boot. Instead of failing silently, ENIGMA posts a one-tap “resume listening” notification.

    OEM battery killers

    Optional, user-initiated battery-optimisation exemption for aggressive OEM task killers, behind a clear explanation (Play policy friendly).

    No self-wakes

    Detection is muted while ENIGMA speaks its reply, so its own voice can't trigger it.

    Privacy by design

    Wake word and transcription run on the phone. Only the command text, after a wake, goes to the assistant API. No audio is uploaded, and no API keys ship in the app.

    How it works

    Cheap first, careful last.

    Each stage is cheaper than the next and only passes on what it can't rule out. The expensive check runs on 1.75 seconds of audio, a handful of times a day.

    Mic16 kHz mono, 20 ms frames, VOICE_RECOGNITION source
    Gateadaptive noise floor +9 dB, 300 ms pre-roll
    SpotterVosk, grammar: wake phrase + 120 CMUdict neighbours + 150 filler words
    Rules“hey” right before · word ≥ 0.33 s · cooldown
    Verifierre-decode the candidate window against 1,500 words
    Wakechime + haptic, command ASR on-device
    AssistantAWS Lambda → Amazon Bedrock (Kimi K2.5, Nova Pro fallback) → Android TTS

    Why decoys work

    A decoder forced to choose between “enigma” and silence picks “enigma” for anything close. Give it “Emma”, “sigma”, “in a…” and it has somewhere better to put them. Decoys are generated from CMUdict by phonetic distance, not picked from the test set.

    Why a second pass

    The streaming spotter must be cheap. The verifier can afford a 10× wider vocabulary because it only ever sees a 1.75 s window around a candidate.

    Built to be replaced

    The detector sits behind one interface. Swapping in a trained neural keyword model (see roadmap) leaves the service, gate, rules and benchmark untouched, and the benchmark will show whether it's better.

    The Android app

    Native Kotlin · Jetpack Compose · one APK.

    Listen, Tune (every defence is a switch, with its measured effect), Bench (runs the corpus on the phone) and Log (every decision, explained).

    Install it

    1. Download enigma-poc.apk on an Android 8+ phone.
    2. Allow “install unknown apps” for your browser when asked.
    3. Open ENIGMA → Start listening → allow the microphone and notifications.
    4. Lock the phone. Say “Hey Enigma, tell me a fun fact.”

    Signed release · arm64 / armv7 / x86_64

    From PoC to product

    What comes after the proof.

    Now · this PoC

    Reliable listening + measured wake word

    Foreground mic service, 3-stage false-trigger defence, on-device benchmark, assistant loop.

    Next

    Trained neural wake word

    A small keyword model trained on “Hey Enigma” clips. The Polly corpus generator here doubles as the training-data pipeline. Target: lower latency and better recall in babble, at the same false-wake rate.

    Then

    Real-world tuning

    Opt-in false-wake reports (“That wasn't me”), per-device thresholds, a soak test across OEMs (Samsung, Xiaomi, Pixel) for battery and survival.

    Full app

    The assistant itself

    Streaming replies, tools (timers, calendar, messages), memory, optional speaker verification so only you can wake it.

    Honest notes