---
title: Voice Attachment (Omniscio Voice vs Session Voice indicator + pin)
---

# Voice Attachment (Omniscio Voice vs Session Voice indicator + pin)

## What it is

Voice can target two things, and until now you could not see which. **Omniscio Voice** is the app-level assistant (Layer 1 commands and the Layer 2 screen conversation). **Session Voice** is tied to one session (Layer 3 ask-about-a-thread and Layer 4 ask-the-live-agent). This feature makes the target visible with a small **chip**, and lets you **pin** voice to a session so it stays there while you browse elsewhere.

It exists because the voice target was recomputed silently on every utterance ("summarize this conversation" could brief the thread you were looking at, a fuzzy-matched thread, or nothing) and was only ever spoken, never shown. The chip shows what already happens; the pin gives you explicit control.

It is **off by default** and in development. Reveal and enable it at **Settings -> Voice Control -> Voice attachment indicator** (`voiceAttachmentEnabled`).

## Where to find it

The chip renders in the voice overlay header, the Voice Queue panel header, and (only while a pin is active) beside the toolbar mic on desktop. The feature itself is off by default: reveal and enable it at **Settings → Voice Control → Voice attachment indicator**.

## How it behaves

### The chip

- **Omniscio Voice** (no session target): an accent chip with a mic glyph and the label "Omniscio".
- **Session Voice**: a neutral chip with the session's real status dot and its name.
- **Pinned**: the same session chip with a pin glyph before the name.

The chip renders in the voice overlay header, the Voice Queue panel header, and (only while a pin is active) beside the toolbar mic on desktop. A per-utterance route receipt line under the overlay result shows where the last utterance actually went ("Omniscio voice", "Omniscio voice . conversation", "Session voice -> Mobile app", or "Session voice -> voice queue").

### How to use it

**Click the chip** to open a menu: pick "Omniscio Voice (home)" to unpin (voice follows your focus again), or pick any running session to pin voice to it. The currently attached target carries a check.

**By voice** (three commands):

1. "pin voice to this session" (the one you are looking at) or "pin voice to the mobile app" (by name) -> voice attaches to that session.
2. "unpin voice" (also "detach voice", "release voice") -> voice returns to following your focus.
3. "where is my voice attached" or "voice attachment status" -> Omniscio says and shows the current target.

### Precedence (the one behavioral rule)

A pin replaces only the "session you are looking at" fallback. A spoken session name and a deictic reference ("this / that / the current conversation") always win. The locked order is **named > deictic then focus > pin > focus**. A pin silently stealing "this conversation" while you look at another session would re-create the wrong-session confusion this feature is meant to remove.

The Layer 2 screen conversation keeps following the screen even while a pin is set: Layer 2 IS the screen conversation, so its delegated asks stay focus-scoped. The route receipt still shows where each delegated ask went, so nothing is invisible.

### Guarantees

- **Off by default, no surprises.** With the flag off there is zero difference: no chip, no receipt, no new behavior, and the voice commands are inert.
- **A pin never survives a reload.** Attachment is intentionally ephemeral (a stale pin after a restart would be a silent misroute). A fresh app always starts unpinned.
- **Auto-unpin.** If the pinned session archives or ends, voice unpins itself and you get one toast.
- **No new AI call and no new IPC.** The chip and receipt derive from state and pushes that already exist; the three voice commands ride the existing voice-intent path.

### Voice invocation model (how you start each mode)

Three distinct things a voice can do, each with its own labeled entry (all dark behind the `voice-invocation-model` flag):

- **Dictate** = speech to text into a field. Click the **Dictate** mic in the message composer. No assistant, no hotkey.
- **Omniscio Voice** = talk to Mission Control (app commands plus conversation), globally. Click the top-bar mic ("Talk to Mission Control") or press **Alt+V**, or say "Hey Omniscio".
- **Session Voice** = talk to the FOCUSED conversation (ask about the thread, ask the live agent). Click the **Ask this session** mic on the conversation header, or press **Alt+Shift+V**. Available only when a session is focused.

The listening popup shows ONE labeled target control that names where the voice is going ("Omniscio Voice" or "Session Voice - <name>") plus the pin state, follows a live cross-route, and opens the pin / switch menu on click. With the flag off the build is byte-identical: the top-bar mic stays "Start dictation", there is no session mic, no target badge, and Alt+Shift+V does nothing.

## Related

- [Voice L3 - Ask About a Thread](voice-l3-session-voice.md)
- [Voice L4 - Ask the Live Agent](voice-l4-ask-agent.md)
- [Voice History (Omniscio Voice + Session Voice)](voice-history.md)
