feat: Codex voice conversations on web, desktop, and mobile - #13168
Open
jakeleventhal wants to merge 678 commits into
Open
jakeleventhal wants to merge 678 commits into
jakeleventhal wants to merge 678 commits into
Conversation
Contributor
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds a substantial cross-platform Codex voice workflow with WebRTC, microphone permissions, native entitlements, new server orchestration, and an authenticated streaming RPC. It also changes the default F8 shortcut and adds static-analysis suppressions, so the scope and side effects warrant human review. You can add or adjust custom eligibility rules. Learn more. |
Contributor
|
Ignore my attempted follow-up review submission; it was not posted. The submitted inline comment on Posted via Macroscope — UI Consistency |
juliusmarminge
force-pushed
the
t3code/codex-turn-mapping
branch
from
September 23, 2026 00:50
a419382 to
f2bdd9f
Compare
jakeleventhal
force-pushed
the
t3code/codex-voice-mode
branch
from
September 23, 2026 00:59
2ace4c3 to
b2614fe
Compare
juliusmarminge
force-pushed
the
t3code/codex-turn-mapping
branch
5 times, most recently
from
September 23, 2026 23:24
6ca6a24 to
3e4ca4c
Compare
4 tasks
juliusmarminge
force-pushed
the
t3code/codex-turn-mapping
branch
2 times, most recently
from
September 24, 2026 21:34
9fc8676 to
ae065ff
Compare
…sts (pingdotgg#13459) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…dotgg#13461) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…gg#13462) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ingdotgg#13467) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…gg#13476) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#13470) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…g#13471) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…oval (pingdotgg#13486) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…fallback (pingdotgg#13494) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…base (pingdotgg#13502) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…gg#13499) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ingdotgg#13493) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…13509) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
pingdotgg#13505) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ingdotgg#13508) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
juliusmarminge
force-pushed
the
t3code/codex-turn-mapping
branch
from
September 24, 2026 23:21
6448cfe to
1563a64
Compare
Codex 0.156 voice mode for T3 Code: talk to a realtime voice model that hands work to Codex in the thread and reads its answers back. Audio runs over WebRTC between the client and OpenAI; the server relays only SDP and captions over provider.voice.session, and ending the stream stops the conversation. On orchestrator V2, Codex's self-started voice turns are interrupted and resubmitted as ordinary user runs, since V2 has no provider-initiated runs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Resubmit a Codex-started voice turn only once it reports interrupted, so a turn that finished before the interrupt landed never runs twice. - Carry each pending resubmit's own provider thread, and keep a replaced voice stream from clearing its successor's thread. - Mobile: gate voice on the provider thread existing, keep the voice strip reachable while a question card hides the composer, and keep a newer conversation's wake lock. - Drop unused exports flagged by knip and update the Codex settings fields test. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…versation - Resubmit a Codex-started voice turn that failed, not only one that was interrupted, so the spoken request is never silently dropped. - /voice stops an active conversation even if the provider no longer reports voice support. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
jakeleventhal
force-pushed
the
t3code/codex-voice-mode
branch
from
September 24, 2026 23:42
46603d5 to
9d8c964
Compare
…ional shortcut Startup default sync only treated identical `when` strings as conflicts, so a default like `f8 voice.toggle when !terminalFocus` was appended after a user's bare `f8` binding and won whenever the terminal lacked focus. A default is now skipped when its shortcut matches a user rule and either side is unconditional. Also corrects the voice lifecycle comment: screens pushed over the thread keep a conversation running. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
juliusmarminge
force-pushed
the
t3code/codex-turn-mapping
branch
from
September 25, 2026 05:55
fe4f6ad to
87c67bd
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Screen.Recording.2026-09-22.at.8.13.50.PM.mov
ScreenRecording_09-22-2026.20-15-53_1.MP4
Codex 0.156 shipped voice conversations: you talk to a realtime voice model, it hands coding work to Codex in the thread, and it reads Codex's answer back. T3 Code had no way to do this.
How it works
oai-eventsdata channel), and audio flows directly between the client and OpenAI. The newprovider.voice.sessionstream RPC carries only the SDP handshake, captions, and lifecycle, so voice costs the same locally, over a relay, or through a tunnel.CodexVoice.ts,CodexAdapterV2). Startsthread/realtime/startwith the same V3 WebRTC, client-managed-handoff settings the Codex TUI uses. When a voice turn finishes, its final answer goes back throughthread/realtime/appendSpeech; commentary and reasoning are never spoken.voicecontinuation. The request then runs as an ordinary user message. The tradeoff: Codex's own history keeps a stub of the interrupted turn. First-class provider-initiated runs would remove this.VoiceModeControllerinclient-runtimehandles negotiation, mute, captions, mic/speaker levels, the connect timeout, and teardown. Browsers and react-native-webrtc share the same structural peer API./voice, F8 (voice.toggle), an unboundvoice.toggleMute, command palette actions, and a voice strip with status, meters, mute/stop, and live captions. Captions are ephemeral.NSMicrophoneUsageDescriptionand the audio-input entitlement.react-native-webrtc(native rebuild required), AndroidRECORD_AUDIO, loudspeaker routing, and the same button and strip. Conversations stop on background or when leaving the thread.ServerProvider.supportsVoice) and needs a thread whose provider session is running.Verification
🤖 Generated with Claude Code (Claude Opus 5.5, running in T3 Code)