Skip to content

miniapp SDK: no way for a voice miniapp to suppress the host assistant sharing the same microphone #3893

Description

@skthegawd

Summary

A miniapp that is itself a voice assistant has no way to stop the host assistant from acting on the
same speech. Both hear the microphone, and both answer.

Observed on Mentra Live: our miniapp was told "stand down", stopped its playback and went quiet — and
MentraOS's own assistant then answered the question our miniapp had just been stopped mid-answer
on.
The user had not addressed it and had just explicitly asked for silence.

Why there is no workaround

We read all 90 values of MiniappRequestType in @mentra/miniapp@3.1.0-dev.27. There is no
exclusive-microphone claim, no wake-word handoff, no assistant enable/disable, and no "this miniapp
owns voice" mode. The only occurrence of the string "assistant" anywhere in the SDK source is a
comment in modules/camera.ts.

Foreground state does not help either — UI_FOREGROUND exists, but the conflict happens while the
miniapp's background layer is running with the UI closed, which is the normal state for a voice
miniapp on a device with no display.

Impact

For a voice-first miniapp on displayless hardware this is not a rough edge, it is disqualifying: the
user cannot tell which assistant is speaking, cannot stop both with one command, and gets two answers
to one question. On Mentra Live specifically there is no screen to disambiguate them.

Request

Any one of these would resolve it:

  1. A request type to suppress the host assistant for the lifetime of a miniapp session — symmetric
    with setVoiceActivityDetectionEnabled() and setLoudnessGateEnabled(), both of which are
    documented as per-miniapp overrides restored on disconnect.
  2. A manifest declaration (e.g. voiceExclusive: true) that the host honours while the miniapp runs.
  3. Failing either, a documented user-facing setting to disable the built-in assistant, so an app can
    at least tell the user what to turn off.

Note on the alternative

We understand the Bluetooth SDK path avoids this by not involving the Mentra app at all, and that is
the direction we are now taking. It is worth flagging that "build a voice miniapp" and "build a voice
app" currently have very different ceilings for this reason, and it is not obvious from the docs
which one a voice-first product should choose. A sentence in the miniapp docs pointing voice
assistants at the Bluetooth SDK would have saved us a week.

Environment

  • @mentra/miniapp 3.1.0-dev.27
  • Device: Mentra Live, MentraOS app staging.20260808.*
  • Miniapp declares MICROPHONE and runs a background layer with no UI open

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions