Voice

You can talk to your bots two ways:

  • Voice call: a hands-free conversation with a bot or a group chat. You speak, the bot's replies are read aloud.
  • Dictation: speak into the message box, check the text, then send it yourself.

Both work in the iPhone, Android and desktop apps. The terminal UI has no microphone, so it has neither, but it shows the line a call leaves in the chat (press o on it to read the call).

A call doesn't change the bot. It's the same agent on your computer; you're just talking to it instead of typing.

Start a call

When the message box is empty and the bot isn't working, the send button becomes Call (a waveform). Press it.

The call bar floats at the top of the chat, and the chat stays readable and usable underneath. From left to right:

  • the bot's avatar: it pulses while the bot speaks, and tapping it then interrupts the reply
  • a line of dots that follows your voice while you speak, ripples while the bot speaks, and breathes slowly while it works; while the call connects, a line gliding back and forth takes its place until the voice can really hear you
  • the provider's name, whenever audio leaves your device (see "What goes where" below)
  • Call settings (the gear), Mute, and End call (the red ✕)

Most bots wait for you to speak. Your lead bot speaks first: once the call connects, it tells you in a sentence or two what deserves your attention, or greets you. If it's busy working, its reply comes when the work is done instead.

What you say on a call, and the bot's replies during it, don't fill up the chat. When the call ends, the chat gets one line instead: a waveform, a short title for what the call was about (such as "Release plan · 03:12"; "Voice chat" until the title is written), and its length. Tap it to read the whole call: what you said, what the voice said, and what went to the bot and back. Your other devices keep the call out of the chat too. If the app closes before the call ends (or loses its connection), the line appears once the call has been quiet for 2 hours.

The bot remembers what matters from the call like from any conversation: its memory picks up what you said, not the voice's wording.

On the iPhone, the first call asks for Microphone and Speech Recognition access. The call keeps going if you leave Codync for the Home Screen, and the bot's Live Activity on the Lock Screen and in the Dynamic Island shows the call, how long it has run and what the bot is doing while you talk, with buttons to mute or end the call without opening Codync.

On Android, the call's notification shows the same: the call's state and what the bot is working on, with Mute and End call.

From Shortcuts (iPhone)

In the Shortcuts app, add Codync's Open Live Mode action and pick a Bot, or leave it empty to call your lead bot. Running it opens that bot's chat and starts a call. Siri runs it too: say "Talk to Codync" or "Open Live Mode in Codync" to call your lead bot. The computer has to be online; otherwise the action stops with an error instead of starting a call.

Choose a voice engine

Open Voice chat settings from the call bar's gear, or:

  • iPhone: Computers & settings → Voice chat → Voice and API keys.
  • Desktop app: Settings → Voice chat.

Under Engine, pick one. The choice is kept on this device. Changed during a call, it takes over that call once you close the settings; the call goes on, still muted if it was.

EngineNeedsHow it works
On device (default)NothingYour device turns speech into text and reads replies with the system voice
OpenAIYour OpenAI API key, kept on the computerOpenAI's models hear you and speak
GeminiYour Google AI Studio key, kept on the computerGoogle's models hear you and speak

On device

  • You speak in the language set under Language (by default, your device's first language).
  • A pause ends what you said and sends it to the bot as part of the call. If the bot is busy, it's queued like any other message. Set the pause under Send after a pause of (1 s, 1.5 s or 2.5 s).
  • Each reply is read aloud in the language it's written in, skipping code blocks and formatting. Set Reading speed to Slower, Normal or Faster. The microphone pauses while a reply is read.
  • When the bot asks for approval, the call tells you what it asks; answer it in the chat. If it runs into a problem, the call tells you that too.
  • A reply that arrives while the call briefly loses its connection is read once it's back.

In the desktop app, on-device speech is available on macOS only. On Windows and Linux, calls use OpenAI or Gemini; without a key, the call asks you to add one in call settings.

OpenAI or Gemini

Each provider has two modes, under Mode:

  • Realtime: a live conversation with the provider's realtime model. You can talk over replies.
  • Speech: the same loop as On device, using the provider's speech-to-text and text-to-speech models instead. What you say is sent when you pause, and replies are read aloud.

In Realtime mode, the voice model is the bot's voice line, not the bot: it talks with you, and the bot does the work. It passes your requests on to the bot (along with your own words, so nothing gets lost in its wording), reads the bot's replies out in shortened form, keeps you posted while the bot works (and tells you what it's doing when you ask), lets you know when an approval is waiting, answers an approval for you once you've said which option, can stop the bot, and can look up what the bot remembers.

Before a Realtime call, your computer gives the voice model the background it needs: the date and time, what your bots remember about you, this bot's settings and memory, the project's git branch and recent changes, what the bot is working on, the recent messages and calls in this chat, your other bots, and the files shared in the chat. When the call reconnects or you switch engine mid-call, the voice model also gets what was said on the call so far. Like your audio, it goes to OpenAI or Google on your own key.

Below the key you can pick the Model (or, in Speech mode, Speech to text and Text to speech) and the Voice. The default models follow each provider's newest ones. This month shows an estimate of the minutes used, counted on each device. The provider bills you; it isn't a bill.

If the connection drops mid-call, the bar shows the connecting line with "Reconnecting" and the call picks up where it left off, usually within a few seconds, without hanging up. A phone call, Siri or another app taking the audio pauses the call; it picks up again when that ends, or tap Audio paused by another app. Tap to resume. under the bar. On the iPhone and the computer, plugging in or removing a headset moves the call to the new microphone; on Android, removing the headset pauses the call until you tap to resume.

If a provider can't start, or the connection doesn't come back after a few tries, the call switches to on-device voice without hanging up and says so under the bar. (In the desktop app this happens on macOS, where on-device speech exists.)

Add your API key

Keys are entered on the computer, never on the phone:

  1. In the desktop app on that computer, open Settings → Voice chat. For a computer you reach over SSH from the desktop app, use the Voice chat button (waveform) on its card in Settings → Computers & devices.
  2. Pick OpenAI or Gemini as the engine. Use Get a key from OpenAI (or Gemini) if you need one.
  3. Paste the key and press Save. The computer checks it with the provider and keeps it only if it works; otherwise you see the provider's error.

Once saved, the section shows Key saved with Test key, Replace key and Remove key. The iPhone shows whether the computer has a key and can test it, and tells you where to add one if it doesn't.

The key is stored encrypted in Codync's vault on the computer (with the system keychain, as for connector credentials), so one key serves the iPhone and the desktop app. It's never logged and never sent to the relay or to Codync's cloud.

What goes where

You useYour audioYour key
On deviceStays on your device. Only the recognized text goes to the computer, as a message. Apple's speech recognition may use Apple's servers when on-device recognition isn't available for your language.Not needed
RealtimeStreams directly between your device and the provider (OpenAI over WebRTC, Gemini over a WebSocket). It doesn't pass through your computer or the relay. The written transcript of the call is kept on your computer.Stays on the computer, which gives your device a short-lived credential for each call
Speech mode, or dictation with a providerRecordings go to your computer over the encrypted connection, and the computer sends them to the provider, with the names of the bots on the computer as spelling hints. The spoken replies come back the same way.Stays on the computer

The relay only ever sees encrypted data. Whenever audio leaves your device, the call bar names the provider.

Dictation

The microphone button (Dictate) sits beside the send button. Press it and speak: the words go into the message box, after anything you've already typed. Nothing is sent until you send it.

While it listens, the microphone becomes a recording pill with a stop button, the time, and dots that follow your voice.

Pick the dictation engine

The small arrow beside the microphone (Dictation engine) chooses On device, OpenAI or Gemini. It's kept on this device, separate from the call engine.

  • On device: words appear as they're recognized, in the language set for calls. On the iPhone, stop keeps what was recognized so far. In the desktop app, dictation keeps listening through pauses until you press stop.
  • OpenAI or Gemini: Codync first checks that the computer has the provider's key (if not, you get an error before anything is recorded). The pill appears once the microphone is open, so nothing you say is lost. Nothing is typed while you record. When you press stop, the pill shows "Transcribing…" and the text lands in the box when it arrives. It uses the Speech to text model from Voice chat settings, and the recording counts toward that provider's minutes this month.

If dictation uses a provider that your calls don't, Voice chat settings show a separate section for it ("For dictation in the message box.") with its key status and speech-to-text model.

Sending a message, starting a call or switching chats drops a dictation that is still recording or transcribing. A call takes the microphone.

In the desktop app on Windows and Linux, the microphone works with OpenAI or Gemini; with On device picked, it tells you on-device speech isn't available there.

Voice input shortcut (Mac)

In the desktop app on macOS, Settings → General → System → Voice input shortcut lets you dictate from any app: Right ⌘ twice (the default), Left ⌘ twice, or Off.

Double-tap the key and dictation starts in the chat window's message box (the top bot's chat when none is open). Tap the key once more to stop and send what you said, once the last words are in. Press the pill's stop instead to keep the words without sending. If the notch island is on (Settings → General → System → Show in Notch), dictation goes into the island's message field instead. During a call the shortcut does nothing.

The shortcut needs no Accessibility or Input Monitoring permission, and the app never sees what you type.