Changelog
What changed in each release, for the people running it.
Written for users rather than for the repository: a line earns its place here if somebody would notice it, or if it changes something they had already worked around. Refactors, tests and internal renames do not appear, however much work they were.
The format is Keep a Changelog, and versions follow Semantic Versioning.
Each released version is also the releaseNotes in the update feed, which is
what an installed copy shows when it offers an update — so these are read in the
app, not only here.
Unreleased
Added
- The other side can arrive on an audio input instead of your computer's
sound. For a call that is not on this machine — a phone wired in through a
USB audio interface, a mixer, a conference phone. Your microphone stays you,
so both sides are still told apart by which wire carried them, with nothing
guessed from the audio. Pick it under Settings → Your microphone, or
whispr audio-devices --set-system <id>. Screen Recording is not used at all on that setting.- Whispr refuses to start that channel if the device is unplugged rather than quietly recording your own computer instead, and refuses to use one device for both sides.
- Echo cancellation is switched off on both inputs while it is in use — measured, because leaving it on for one silences the other — so wear headphones.
0.1.4 — 2026-09-05
Fixed
- Things the other person said were being recorded as things you said. When their voice comes out of your speakers it is picked up by your microphone, and your microphone is structurally you — so their words were stored as yours, fed to the engines as yours, and could cut their question in half. Whispr already tried to spot this and was missing the commonest shape of it: the two channels break speech in different places, so the copy through your microphone arrives as a short fragment of the longer line. Measured on a real recording, the old check caught none of them.
- Whispr now says when it cannot tell your voice from the room. The guard that keeps a television, a colleague or a call on another device out of your transcript needs to have measured your voice once, and does nothing until it has. That was true silently, on a screen you may never have opened; it now says so during the meeting, once.
- And when the other side never arrives at all. If you have been speaking for a while and nothing has come in on their channel, Whispr says so. That is the shape of failure where everything looks alive — transcript scrolling, meters moving — and no question is ever detected, because their side is not reaching this computer at all.
- The install and troubleshooting pages say where the boundary is. Whispr
hears the other side from what this computer plays; a call held on a phone is
not, and nothing said so. There is now a section on what to do about it, and
whispr doctorno longer claims their audio can be captured when all it checked was a permission.
0.1.3 — 2026-09-04
Added
- A CV written for one job. Tick Written for this meeting when you add a
CV and it stays with that meeting instead of following you to the next one,
while your general CV carries on as before. It is still filed as a CV, so it
still ticks the checklist and still reaches every answer — you no longer have
to file a tailored version as "other" and lose both. Add both if you have
both. From a terminal it is
whispr prep add … --tailored. - Rehearse without a second device. The setup wizard asked for a phone. Whispr listens to whatever your computer is playing, so a browser tab, a video or a voice note all count, and the wizard now says so. You can also press I am speaking as the other side during the test and play both parts yourself — a control that existed but could not be reached from that screen.
- A meeting has its own page. Press its title, or Open on its card, and you get that meeting on a page of its own: details, goals, and every piece of its material, with room to read them. What it asks for follows the kind of meeting — a CV, the advert and research for an interview; what you sell and who you are meeting for a sales call; nothing in particular for a working meeting. Editing used to open a six-field strip inside the card, which also hid the buttons that led to the documents, so a meeting you were editing was a meeting whose CV you could not reach.
- Its details are also at the top of Prep, the page that holds its documents, for the same reason.
- Every item of prep says whether you have it. On a meeting's page each thing it asks for — the advert, the research, your CV — is its own block that names what is loaded, how much of it is actually searchable, or says nothing yet. Anything you added that this kind of meeting does not ask for is listed too, rather than disappearing from the page.
- Which round it is can be changed after setup. The manual said you could change it whenever you liked; in fact only the setup wizard could set it, so a second round that turned out to be systems design could never be told so. It is on the meeting's details now.
- "no advert yet" is now the way to fix it. The chips on a meeting card that say what is missing select that meeting and open its prep when pressed, instead of naming the gap and leaving you to find the page.
- Whispr can ask the questions during setup. The rehearsal step now offers the practice run directly: questions written from your own material, asked out loud, with a critique afterwards. It says plainly what it does not prove — the other side's voice reaching your machine, because the voice is Whispr's own.
Fixed
macOS called the app "damaged" when you downloaded it. The build was not merely unsigned — it shipped a broken signature, so macOS refused it with "Whispr is damaged and can't be opened" rather than "Apple could not verify…", and the Open Anyway route in the install guide could not clear it. It never showed up in testing because an app built on your own Mac is never checked; only a downloaded one is. The bundle is now signed properly for an app without a developer certificate, so the documented first launch works.
The meeting record wrote nothing, and said it was fine. The watcher that keeps the record, the objection rail and the goal checklist asks its model for a small JSON reply — and the model Whispr ships with by default leaves the value out where the answer is "nothing", which is not valid JSON. Every reply was discarded, and because an unreadable reply is treated as "nothing to say", the rail reported itself healthy throughout. Measured on a real install: zero record lines across 457 turns, and not one sales objection ever raised. Whispr now reads those replies, writes a repeated line only once, and says plainly when it cannot read several in a row.
The browser app says which half of the product it is. It answers live on all three meeting kinds and has none of the apparatus around a meeting — pausing, a tailored CV, the round format, the record, goals, speaker names, steering. The marketing page describes one product and never mentions this app, so somebody arriving from a signup link had no way to know. The claim is checked against the app's own source, so building one of those here fails the suite until the sentence is corrected.
The quick-answer row names the model, not just the engine. An id is whatever you typed; on a real install "answered by workers-ai-fast alone" meant an 8B, while the answer engine on the same Cloudflare account ran the 70B.
The install page says what happens on first launch, on both platforms. It covered the Windows SmartScreen panel and said nothing about macOS, which refuses an unsigned app outright and offers only Done — leaving the one route through it (System Settings → Privacy & Security → Open Anyway) undocumented. The landing page now names the trade before you download: no App Store, no developer account, one warning to click through once.
Rate a cue from the overlay with one key (
⌘⇧L/Ctrl+Shift+L). The vote was previously a button on a card in the main window, which nobody looks at mid-meeting — so on a real install no cue had ever been rated, and the recommendation that picks a better cue engine could never fire.whispr cuesis the headless view of the same table.Answers say how soon they started, not just how long they took. An engine that thinks fast and writes a long good reply used to look identical to one that starts too late to help — one number covered both. Cards now mark a late answer, engine cards in Settings carry the median time to the first word, and
whispr engines statsandwhispr preflightprint it. Nothing is capped: a late answer is still an option worth having.Refused cues say which rule they broke, per engine, in Settings and in
whispr cues. Two engines can refuse the same number of cues for opposite reasons — one writing prose wants replacing, one writing good cues that are too long for the overlay wants a shorter prompt — and a bare count sent you to whichever you guessed.whispr doctorsays why cues are being refused, not just how many. A model writing prose and a model writing good cues that are too long for the overlay looked identical before, and they need opposite fixes — a different engine, or a shorter prompt.History says which cards you actually read out. Marking an answer with use this is a button almost nobody presses while talking — measured, 1 of 175 answers — so the most useful line in a debrief was empty. Whispr now compares what you said against the cards that were on screen and reports the match. It is a measurement, never a judgement: answering in your own words is the point, and your own use this mark is never overwritten.
whispr meeting— list, create and select meetings from a terminal. Until now a meeting could only be made in the window, so a headless install had nothing for per-meeting features to attach to,whispr prep add --tailoredincluded.Working meetings in the browser were coached as job interviews. The browser app had prompts for interviews and sales calls and nothing else, so a team sync was told to answer in STAR structure, addressed the other side as an interviewer, and was asked to align a CV against a job advert it never had. It has its own wording now, and offers no alignment where there is nothing to align.
Preflight says which engine answers the quick questions, and warns on a sales call — where that lane carries pricing, contract and procurement.
An engine that fails to start now gets a second chance. Starting an answer engine happened once, at the beginning of a meeting, so one that lost a race with a cold server was gone for the whole call. Measured on a real interview: it was eligible for 35 questions, answered none, and worked perfectly when tried afterwards. It now retries once, on the next question.
A meeting keeps a record of what went wrong with Whispr itself. An engine that would not start, a watcher that stopped: these were on-screen notices that vanished with the window, so nothing afterwards could say why a meeting had thin answers. They are on the meeting now — in History, and in
whispr history <id>.Fewer cards for things nobody asked. When Whispr splits a long turn into separate questions, each part now has to look like a question on its own. Measured on a real interview: a quarter of the cards were statements — "I kinda prepared a couple of questions", "Yeah. I think by the end" — and each one spent model calls on your own account. A turn that was not split is judged exactly as before, and being addressed by name still always counts.
A working meeting answers what was asked, and records the rest. A general meeting now offers an answer only for a real question — a question mark, or an opening like what, how, should we. "Tell me about the migration" is an interview's question and a colleague's sentence, so it is recorded rather than answered. Measured: 257 cards across six general meetings, on the meeting type whose whole point is keeping a record instead.
whispr engines testnow checks the classifier can return JSON, so a model that cannot drive the record is caught before a meeting instead of during one.A meeting could stop dead when the other side said your name. Being addressed by name is meant to count as being asked a question; instead it crashed the background service — four minutes into a real interview, taking the recording with it. The name check had been reading a clock that was not connected to anything, and it was only ever consulted when your name actually came up, so it waited for the one thing the feature exists for.
And a turn that cannot be read now costs that turn, not the meeting. The failure came from a timer, which has no caller, so it ended the whole service rather than being reported. Any future failure there is a notice and the meeting keeps recording.
The background service is restarted when it stops. If it died — a crash, an update replacing it underneath — the window said "Not connected to the core daemon — retrying" and nothing was retrying it, so the message was permanent and quitting the app was the only cure. It now restarts on a backoff, the banner says which of three things is happening, and if a meeting was being recorded it says that the recording stopped and that what was captured is saved.
The service keeps a log.
core.log, beside the database. Until now a service that died left nothing behind at all. Safe to paste into a bug report; truncated each time the app starts.A meeting that was never closed reported the wrong length — and a longer one each time you looked. If the app was force-quit or froze mid-meeting, nothing recorded the end, and History filled the gap with the current time: a real 31-minute interview read as 2h00m and grew. The length now comes from the last thing anybody said, and a session left open is closed properly the next time Whispr starts.
Pause is now in the title bar, beside Stop. It existed only on the meeting screen's own bar, so from Prep, Meetings or History mid-call you could stop a meeting but not pause it — and pausing is the one you want in a hurry.
Pasting a link stored the link instead of the page. A URL typed into the "paste it here" box was saved as the document — twenty characters of text — and reported only as not searchable, so a company's research slot looked filled and grounded nothing. A pasted link is now fetched and read, the way the link box always did it. Measured on the site that exposed it: the page gives about 8,000 characters of text, and always could.
"Not searchable" now says how little text there was, and what to try. It was a red label with no cause, which is a message you cannot act on.
A document with nothing searchable in it is no longer offered for review. A model was being asked, on your own account, to summarise twenty characters — and answered, correctly, that there was nothing there.
The setup rehearsal could fail with no way to find out why. If Screen Recording was not granted, nothing the other side said could reach the Mac — and the screen said "listening, talk into the other device", which is advice to keep talking into a channel that cannot carry anything. It now says which permission is missing, offers to ask for it, and warns that macOS needs Whispr restarted afterwards.
0.1.1 — 2026-08-30
Added
Which round it is. A meeting can now say whether it is behavioural, technical, system design or mixed; discovery, demo or pricing for a sales call. Behavioural makes every answer STAR-shaped — the four parts audible, the first person singular, and a result with a number on it. Unlike the meeting kind, this stays editable.
A record for meetings that are not interviews. A working meeting now keeps what was decided, what somebody owes, and the figures, instead of producing an answer card per sentence. It costs no extra model call — it rides on the watcher that was already reading every turn.
Say who is speaking. Hover any turn from the other side and name them, either just that turn or from there on. Names reach the debrief, the commitments and the suggestions — so "Ana said she would send the contract" is an action item with an owner rather than a sentence.
Whispr notices your own name. Being addressed by name now counts as being asked, even with no question mark — "Intars, over to you" or a flat "Intars?". It handles the question arriving before the name, after it, or in the next turn.
⚙ Quick settings, on the meeting screen: microphone and its input level, output device, whether Whispr speaks, the languages spoken, and the transcriber. The things that go wrong in a live meeting, reachable during one.
Languages spoken. Naming them stops a transcriber inventing words in a language nobody in the room speaks. Empty still means detect.
Add-on packs. Extra methodologies, bought once. Everything ships inside the app; a key switches it on, so packs work offline and there is nothing to install or update separately. Nothing in the base app is locked behind one.
In-app update, with release notes. It never downloads while a meeting is being recorded and never installs itself. If an update resets a macOS permission, Whispr notices and says which one and how to restore it, rather than capture quietly not working.
Windows. Whispr runs on Windows, capturing both sides of the call with no helper to install and nothing to grant. The one difference worth knowing: on Windows the app window has to be open, because the audio is captured there.
Add-ons are free. The extra methodologies — executive and stakeholder rounds, consulting cases, MEDDIC, Challenger, SPIN — are switched on for everybody while we find out which are worth keeping. Nothing to buy and nothing to paste; turn any of them off in Settings.
The
whisprcommand. Everything in the window can also be done from a terminal. Install it once from Settings → The whispr command; the manual uses it throughout, and nothing else needs it.Connect Claude from the window. Settings → Claude as the brain now registers Whispr with Claude and installs the answering skill for you, instead of asking you to type two commands.
Bought on Gumroad? Paste that licence key in Settings and Whispr is licensed on this machine, whether or not you sign in.
Fixed
A failing engine could take the whole app down mid-meeting. One engine erroring ended the session, stopped the transcript and silenced the engines that were working. It now fails on its own and the others answer.
Uploading prep said nothing. A document going in now confirms what it was filed as, how much text was indexed, and whether it is scoped to this meeting or follows you everywhere.
The app looked fine while doing nothing. If the background service stopped, only the meeting screen said so — every other tab quietly accepted work that went nowhere. Every screen now says it, and says what it means.
Setup assumed you were interviewing. The first screen now asks what you are using Whispr for, because a meeting keeps the kind it was created as.
Signing in could lock you out of software you had bought. A Gumroad purchase now entitles you, and a refund is noticed rather than assumed.
Buttons stopped responding during long meetings. One internal message was being echoed back to the window that sent it, at nearly six thousand a second, which pegged a processor core. Measured before and after: 126% CPU to 0%.
A television in the room was recorded as you. A microphone hears the whole room, and anything it heard was filed as something you said. Whispr now compares each turn against how loud you were in the level check. Run that check to switch it on; without it nothing is dropped.
Whispr answering itself. With reading-aloud on and no headphones, a spoken answer was heard by the microphone, transcribed, treated as a question and answered again. It now recognises its own voice coming back.
"Right?" and "okay?" are no longer questions. They are punctuation of speech, and they were producing a card per sentence. "Any questions?" still is one.
A general meeting demanded a company before it would let you continue, an item a team sync can never supply. It now requires nothing.
A team sync was told it was an interview in several places — the setup step called "The job", question cards tagged behavioral, and a debrief that opened "you are debriefing a candidate".
History showed Loading for ever after the app reconnected.
Two mode buttons stated their own state, so it was never clear whether the label was what they were or what they would do. Both are now two-position switches.
0.1.0 — 2026-08-28
First release.
Added
- Live transcription of both sides of a call, with speakers told apart structurally — system audio is them, your microphone is you. No voice fingerprinting, and it works on any meeting app.
- Question detection, and an answer on screen from every engine you enable, in parallel — grounded only in your own material, never invented.
- Interviews, sales calls and meetings, each with its own prompts, its own material and its own vocabulary.
- Prep — CV, job advert, offering, prospect research, STAR stories. PDFs and Word documents included.
- Practice, with a spoken interviewer, and a critique afterwards that measures how long you ran, your filler density and when your point arrived.
- The overlay — a short cue near the camera, so you can look at the lens instead of a second screen.
- Preflight, which checks this call: the microphone, its level, the material, what your accounts have left, and what it will cost.
- History and debriefs — what was said, which answers you used, and what to do differently next time.
- Your own accounts throughout. Deepgram, Gemini, OpenAI, Anthropic, Cloudflare Workers AI, AWS Bedrock, Azure, or entirely local with Ollama and whisper. Keys stay in your Keychain. We never bill you for AI and take no cut.
- A Claude session can prepare with you over MCP, and push what you write together straight into a meeting's prep.