Approvals & Questions by VoiceNEW
How Sophon reads an approval or a question out loud, exactly what it says, how your spoken answer is matched, the timeouts, and what happens when nobody answers.
A voice request is gated exactly like a typed one. When the agent needs a decision, the prompt takes over the voice surface: the mic closes, the prompt is read out, and the mic reopens for your answer once it has finished speaking.
Nothing here guesses. An answer that is not clearly one thing is asked again, and an approval nobody answers is rejected.
Where prompts are read out
| Surface | Approvals | Questions | How you answer |
|---|---|---|---|
| Voice page | Read out, card on screen with a countdown | Read out with numbered options | Voice or tap |
| Chat voice ribbon | Never read out | Never read out | On the chat's own cards |
| Command Bridge | Read out, shown in the transcript strip | Read out with option chips | Press the mic to answer, or tap |
| Sophon Mobile, Voice tab | Read out in your phone's voice | Not read out — shown on screen | Voice or tap for approvals, tap for questions |
| Paired Sophon Node | Not spoken to the node | Not spoken to the node | Not available |
The ribbon is deliberate: voice started inside a chat never speaks prompts, because that chat already has its own approval and question cards a few centimetres away.
Which voice reads them
Approval and question prompts are read by the browser's built-in speech — or your phone's, on Mobile. They are never read by the text-to-speech provider voice you picked, even when one is active and speaking the replies. That covers the prompt, both re-asks and the timeout lines.
It follows that prompts are silent when the browser voice is switched off: speech output set to Configured provider only, or Native speech fallback turned off. You still get the card and the mic, and the prompt is never read aloud. Check Settings if you expect to hear prompts and do not.
What Sophon says
An approval, at None, Low or Medium risk:
I need your approval. {description}. This is {risk} risk. Say yes to approve or no to reject.At High or Critical risk the last sentence changes:
I need your approval. {description}. This is {risk} risk. Say 'yes, approve' to approve, or no to reject.The description is the tool's own one-line description, and the risk word is the level. The prompt names the kind of action and its risk, not its arguments — read the card for those.
When an answer is unclear, the re-ask is one of:
Sorry, I didn't catch that. Say yes to approve or no to reject.
Sorry, I didn't catch that. This needs you to say 'yes, approve', or no to reject.And when a request runs out of time:
The approval timed out, so I didn't go ahead.
I didn't get an answer in time, so I'm continuing without it.How your answer is matched
A keyword counts when it is the whole answer, or when the answer starts with it followed by a space, a comma or a full stop.
| Intent | Keywords |
|---|---|
| Approve | yes, yeah, yep, sure, go ahead, approve, do it, proceed, confirm, ok, okay |
| Reject | no, nope, nah, reject, deny, cancel, stop, don't, negative |
On top of that:
| Risk | What approves |
|---|---|
| None, Low, Medium | Any approve keyword |
| High, Critical | Only "yes, approve" or "yes approved". A bare "yes" is not enough |
- A reject intent always rejects, at every risk level. A plain "no" rejects straight away and is not asked again.
- The negation rule. An answer that starts as an approval but also contains any of no, not, nope, nah, don't, dont, cancel, stop, wait, deny, reject, negative, never is treated as unclear, so you are asked again. "Yes — wait, no" is never an approval.
- A plan's risk is its highest step's risk, so a plan containing one Critical step asks for the phrase.
Sophon Mobile applies the same rules, and answers approvals only for its own voice conversation.
Two re-asks, then a tap
An unclear answer is re-prompted at most twice. After that the mic closes and a hint appears in place of another attempt:
| Prompt | Hint |
|---|---|
| Approval | "I didn't catch an answer. Tap Approve or Reject, or press the mic to answer." |
| Question with options | "I didn't catch an answer. Tap an option or press the mic to answer." |
| Question without options | "I didn't catch an answer. Press the mic to answer." |
On the Voice page and the Command Bridge a fresh mic press reopens capture for one more attempt. The card stays on screen throughout.
The prompt's own timer keeps running while it waits. Reaching the re-ask limit, or pressing Stop on the Command Bridge, does not pause it. If nobody taps the card, the request ends on its timeout.
Timeouts
| Request | Default | What a timeout means |
|---|---|---|
| Approval | 5 minutes | Rejected. A timeout is never an approval |
Question (the questions schema) | 15 minutes | The agent continues without an answer |
| Legacy single-question ask | 5 minutes | The agent continues without an answer |
| Raised inside a plan step, or by a sub-agent | The longer child timeout, 15 minutes by default | As above |
The child timeout only extends a request that left its timeout at the default, and it only ever makes the request wait longer for you, never less.
The hint under the buttons
The Voice page's approval card always reads:
Tap a button, or say "yes" / "no"It says that at every risk level, including High and Critical, where a bare "yes" will in fact be re-asked. Sophon Mobile's card is risk-aware — Tap a button, or say "yes, approve" or "no" for High and Critical, Tap a button, or say "yes" or "no" otherwise.
This mismatch is real and known: the Dashboard hint understates what High and Critical need. The spoken prompt is correct on both surfaces, so listen to it rather than the hint. Bringing the Dashboard card in line with Mobile's is on the roadmap.
Answering by voice does not start a turn
Pressing the mic to answer a waiting prompt opens capture in answer mode: your audio is transcribed and handed back, and no agent turn is started. Your words are matched against the prompt, the decision or the answer is submitted, and only then does the agent carry on. That is why answering an approval out loud does not leave a stray message in the chat.
On the Command Bridge the single mic button becomes "Answer by voice" while a prompt is waiting, and a separate Stop voice button appears next to it. Stop turns voice off without answering; the prompt stays on its chat card and its timer keeps running.
Questions
Questions are read out on the Voice page and the Command Bridge. Mobile shows them on screen without reading them, and the chat ribbon never reads them.
How one is asked
Question 1 of 2. {question} Your options are: one, {A}; two, {B}. Say a number, or answer in your own words.- The "Question N of M" lead appears only when there is more than one question. Questions are asked one at a time, and every answer is submitted together after the last one.
- The closing line above is the default, because questions accept free text unless they say otherwise. A fixed-choice question ends "Say the number of your choice." instead.
- A multi-select question adds "You can choose more than one." and takes every option you name.
- A question with no options at all ends with "Say your answer."
Answering by number
Spoken numbers cover one to four — one/first/1, two/second/2, three/third/3, four/fourth/4 — and only in a short answer of four words or fewer. "Two" picks option 2; "I think option two is best" is five words, so the number counts as an ordinary word and the answer is treated as free text.
"One" counts as the number 1 only as the first word, or directly after option, number, choice, and or or, because "the green one" is a pronoun.
Options five and up are read out with their numbers, but can only be chosen by name or by tapping. Wider number matching is roadmap.
Answering by name
Say the option's name. Symbols in a label are both read and matched as the words people say for them:
| In the label | Spoken and matched as |
|---|---|
++ | plus plus |
# | sharp |
+ | plus |
& | and |
@ | at |
% | percent |
So "C plus plus" picks C++ and "C sharp" picks C#. If your speech recognizer writes the symbol instead of the words, the option will not match and you are asked again — tap it instead.
When two names match on a single-select question and one contains the other, the longer one wins: saying "Visual Studio Code" cannot help also saying "Visual Studio". Two genuinely rival names, or a spoken number naming a different option than the one you said, is ambiguous and is asked again.
Negating an option
If you negate an option, Sophon will not pick it. "Don't send" against Send and Archive never returns Send.
- On a question that accepts free text, your own words are passed to the agent as the answer instead.
- On a fixed-choice question, you are asked again. The cost is real: "Email, no rush" re-asks on a fixed-choice question even though you named an option.
- Negation words that are part of an option's own name do not count, so "never ask again" still answers an option called "Never ask again".
Where question cards come from
Plans and other tasks raise them. A voice turn does not raise one itself: the voice tool set has no ask tool, so a voice agent is set up to ask you conversationally instead.
Answer once, and it closes everywhere
When an approval is decided — by voice, on a chat card, in another tab, in the mobile app, or by replying in the channel it was delivered to — the resolution is broadcast with its outcome: approved, rejected, timed out or cancelled. Any other open chat card, Mobile card or voice prompt for it closes on its own. Questions close the same way when they are answered or cancelled.
The Dashboard's Approvals page is not on that broadcast. It catches up on its own poll, every 5 seconds.
Each approval is recorded exactly once. A timeout or a cancel is never recorded as an approval, and no client may assert one.
Outcomes
| Pill | Meaning |
|---|---|
| Approved | Someone approved it |
| Auto-approved | An approval policy approved it without asking; no card was ever shown |
| Edited & Approved | Someone approved it with changes |
| Rejected | Someone rejected it |
| Cancelled | The work that asked was cancelled before anyone answered |
| Timed out | Nobody answered before the timeout. For an approval, that means not approved |
The live broadcast carries only four of these — approved, rejected, timed out or cancelled. An auto-approval is broadcast as approved, and an edit resolves the wait as an approval too; both keep their own label in the approval history.
Cancelled is new. A cancelled approval or question used to be recorded and announced as "timed out". It is now recorded as cancelled, voice does not read the timeout line for it, and the cards show Cancelled — including after a reload.
Only your own conversation
Voice reads out only prompts whose chat session, or escalation session, is the one the voice conversation is attached to. An approval raised by an unrelated session never interrupts you. Sophon Mobile applies the same scoping.
A plan that finishes after you approve it
If a plan pauses for a durable approval and finishes later, its result is spoken to a voice session still attached to that chat — but only when no voice turn of that session is in flight at that moment. If you are mid-conversation when the plan lands, the result goes to the chat thread only, so it never talks over the reply you are waiting for. It is in the chat thread in both cases.
Where to go next
- Conversations — how a voice turn runs, hands-free, and interrupting
- Spoken Replies — which voice speaks what, and when a reply is silent
- Surfaces — what each of the four surfaces does differently
- Approval Gates — the risk levels and thresholds behind these prompts
- Limits — what voice does not do yet
Spoken Replies
What it takes for Sophon to speak a reply, how sentence-by-sentence speech and progress lines work, what Markdown becomes for the ear, and why a reply is sometimes not spoken at all.
Set Up Voice
The shortest path from nothing to a working setup — the zero-provider start, turning on Conversation mode, adding and testing speech providers, verifying with sophon voice status, and the two preferences everyone should set.