diff --git a/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt b/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt index 2f488b4686b..529085dbbc3 100644 --- a/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt +++ b/apps/android/app/src/main/java/ai/openclaw/android/NodeRuntime.kt @@ -361,7 +361,11 @@ class NodeRuntime(context: Context) { parseChatSendRunId(response) ?: idempotencyKey }, speakAssistantReply = { text -> - voiceReplySpeaker.speakAssistantReply(text) + // Skip if TalkModeManager is handling TTS (ttsOnAllResponses) to avoid + // double-speaking the same assistant reply from both pipelines. + if (!talkMode.ttsOnAllResponses) { + voiceReplySpeaker.speakAssistantReply(text) + } }, ) }