pbakaus/impeccable · warning
[impeccable.voice] recognition error:
Error message
[impeccable.voice] recognition error:
What it means
The Web Speech API SpeechRecognition instance used by impeccable's voice mode fired its onerror handler. The raw browser error code (e.g. 'not-allowed', 'no-speech', 'network', 'audio-capture', 'aborted', 'service-not-allowed') is logged, then the recognition is stopped with a user-facing message derived by steerVoiceErrorMessage. It indicates the voice recognition session ended due to a browser/speech-service error rather than a transcript.
Source
Thrown at skill/scripts/live-browser.js:10626
rec.onstart = () => {
syncVoiceUi(true);
};
rec.onresult = (event) => {
if (!voiceCtx?.input) return;
let transcript = '';
for (let i = 0; i < event.results.length; i++) {
transcript += event.results[i][0]?.transcript || '';
}
voiceCtx.input.value = (voiceInterimBase + transcript).trim();
if (voiceCtx.mode === 'steer') syncPageChatVisual();
else syncConfigureInputChrome();
};
rec.onerror = (event) => {
const code = event.error || 'unknown';
console.warn('[impeccable.voice] recognition error:', code);
const message = steerVoiceErrorMessage(code);
stopVoice({ suppressSubmit: true, message: message || undefined });
};
rec.onend = () => {
if (voiceRecognition !== rec) return;
finishVoiceSession();
};
voiceRecognition = rec;
try {
rec.start();
} catch (err) {
console.warn('[impeccable.voice] start failed:', err);
stopVoice({
suppressSubmit: true,
message: err?.message?.includes('already started')
? 'Voice input already running'View on GitHub (pinned to 2bc2879276)
Solutions
- Grant the site microphone permission (padlock icon > Microphone > Allow) and retry voice mode.
- Use Chrome or Edge — Web Speech recognition needs a supporting engine.
- Check network access to the browser's speech service (proxies/VPN can block it; 'network' code).
- Verify a microphone is connected and not exclusively captured by another application ('audio-capture').
- For transient 'no-speech' or 'aborted', simply restart the voice session and speak promptly.
Defensive patterns
Strategy: try-catch
Validate before calling
// before starting recognition, check support and permission
if (!('webkitSpeechRecognition' in window) && !('SpeechRecognition' in window)) {
showToast('Voice recognition is not supported in this browser');
}
const perms = await navigator.permissions.query({ name: 'microphone' }).catch(() => null);
if (perms && perms.state === 'denied') showToast('Microphone permission is blocked'); Type guard
function isSpeechErrorEvent(event) {
return event && typeof event.error === 'string';
} Try / catch
rec.onerror = (event) => {
const code = isSpeechErrorEvent(event) ? event.error : 'unknown';
console.warn('[impeccable.voice] recognition error:', code);
const message = steerVoiceErrorMessage(code);
stopVoice({ suppressSubmit: true, message: message || undefined }); // degrade gracefully, never throw
}; Prevention
- Grant microphone access to the dev origin before using voice mode.
- Use Chrome/Edge; Web Speech recognition is unreliable or absent in Firefox.
- Ensure the speech service is reachable (VPN/proxy can cause 'network' errors).
- Close other apps holding an exclusive capture on the microphone.
- Retry the session on transient codes like 'no-speech' or 'aborted'.
When it happens
Trigger: rec.onerror fires during a live-mode voice (steer/configure) session — microphone permission denied ('not-allowed'/'service-not-allowed'), no speech detected within the timeout ('no-speech'), speech-service network failure ('network'), no microphone ('audio-capture'), or recognition aborted.
Common situations: Browser lacks microphone permission or the site was blocked; using a browser without a supported speech backend (Firefox); offline or corporate proxy blocking the speech service; mic in use by another app; user stayed silent past the no-speech timeout.
Related errors
- Live browser script part missing: ${part.name} (${part.path}
- [impeccable] Fallback injection failed:
- Copy failed
- ${cap.error}
- [impeccable] scan failed
AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08).
Data as JSON: /api/errors/0a7c25a8d9b49f72.
Report an issue: GitHub.