Two-channel capture
The microphone becomes YOU and system audio becomes THE OTHER PERSON. On Windows capture uses WASAPI loopback; on macOS, ScreenCaptureKit.
A desktop app that transcribes both sides of the conversation, notices when a question arrives and suggests an answer grounded in what was said and in your documents.
v2.22.3 · Windows 10/11 x64 and macOS Apple Silicon

Six steps between someone speaking and the suggestion showing up on screen.
The microphone becomes YOU and system audio becomes THE OTHER PERSON. On Windows capture uses WASAPI loopback; on macOS, ScreenCaptureKit.
Each channel can use a different provider, local or cloud. Deepgram Flux delivers end-of-turn events, and the connection is re-established on its own if it drops.
Utterances are grouped into turns and the question is recognized by rules in Portuguese and English, with no AI. The copilot waits for the question to settle and generates at most one automatic answer per turn.
The prompt is built with a token budget from the transcript and the meeting documents. A guard blocks the call when the question refers to something never established in the conversation.
A priority queue lets "Answer now" jump ahead of automatic answers. If a provider fails or hits its limit, the request moves to the next one, with an honest notice on screen.
The answer streams into the overlay and can be shortened, adapted or translated. The Focus window is native in Slint on Windows and in React on macOS.
Turns derived from the transcript, answer opportunity in PT-BR and EN, revalidation at dispatch time and per-turn consumption, so the same question is never answered twice.
Referent guard, a rule against inventing candidate experience and answers anchored in the transcript. The "Context used" panel shows where each answer came from.
Streaming with turn events, a ledger of speech boundaries and transcription fallback when the connection drops mid-meeting.
On Windows, WASAPI and Credential Manager, with installer and automatic updates. On macOS, ScreenCaptureKit, Keychain and a .pkg installer for Apple Silicon.
A lean surface to follow the answer during the conversation, in Slint with software rendering on Windows. The logic stays in the app; the window only displays and forwards actions.
Resume, job description and notes become context for that meeting only, isolated from the others.
Demo mode and full version, activation by a code sent by email and a device limit, with a server on Cloudflare Workers. CI release pipeline with signed automatic updates on Windows.
There are 223 files and 1,773 TypeScript tests, plus Rust tests, covering turns, queue, guards, i18n and updater configuration.
eloQ screens. The interview conversation is a fictional example.

It depends on the providers you choose. The app uses your own API keys and has no intermediate server for audio or text.
Deciding whether something is a question runs on deterministic rules. It is predictable, costs no call and can be tested case by case.
Only the turn boundary coming from the provider counts as reliable. That avoids answering half a sentence or answering twice.
When the question depends on something the conversation never established, the app does not call the model. Silence is better than suggesting an invention.
Execution lives in the React and Tauri app. The native Focus window only displays state and forwards actions, which avoids two diverging implementations.
The commits were made with Cursor and Claude as a pair, with an agent review flow documented in the repository. Architecture decisions, review and what goes into each release are mine.
The repository is private. I can walk through the architecture, the code and the development flow in a call.
Provider names and trademarks belong to their owners and do not imply partnership.