1# Voice input
2
3Transcription edits a composer draft. It does not submit an agent turn. Audio is
4temporary client input, and only normal message submission sends the resulting
5text. The current implementation transcribes locally on supported iOS devices;
6environment-backed transcription is not implemented.
7
8The [shared controller](../../packages/client-runtime/src/voice-input/controller.ts)
9owns the operation while the client supplies capture and transcription. Preparation
10binds the transcriber and resolved locale for the whole recording. Draft ownership,
11text, and revision are captured before recording and checked before insertion, so
12a late transcript cannot overwrite a draft that was edited or replaced.
13
14Cancellation invalidates a result immediately, but resources stay owned until the
15underlying work settles. Apple's native transcription call cannot be interrupted
16once started. Releasing the session or deleting its recording when the abort signal
17fires would race that work. The [transcription contract](../../packages/client-runtime/src/voice-input/transcription.ts)
18therefore requires implementations to settle only after their work has stopped;
19the [Apple binding](../../apps/mobile/src/native/voiceTranscription.ios.ts) checks
20cancellation between native calls and discards late results.