Voice notes on macOS no longer turn into gibberish. Sometimes macOS recorded the sound correctly but wrote the microphone's format into the file header (“48 kHz float”, or “24 kHz” with AirPods), and transcription heard only noise. About 6% of recordings were affected. The header is now checked and fixed after recording, before transcription and before playback; the sound itself is left as is. Old broken recordings are fixed by “Transcribe again”
Transcription on macOS no longer cuts off the last words: the second of silence at the end of the transcription copy is now added to recordings macOS saves in the “extensible” WAV format — that is, to all of them
On macOS the project folder picker now has a “New Folder” button: start a new project right there without opening Finder. The picker opens next to the current project, so the new folder lands where the others are
Typing a path to another project is easier: type ~/ in the chat field and the folders of your home folder appear above it. Start a name to narrow the list (case does not matter: “live” finds LiveProject). The right arrow or Tab inserts the folder and shows what is inside, ↑↓ choose, Esc hides the list
The app no longer “hits the limit” when there is no limit. If the agent mentioned Claude Code’s limit message in a normal reply — say, describing a screenshot or a video — the app took the quote for a real limit and scheduled “Continue” for the next morning. Now only Claude Code’s own notice counts as a limit: a short service line that the CLI marks as its own
In the English interface the countdown to the limit reset used Russian letters: “Sending “Continue” in 3ч 12м”. Time units now follow the interface language — “3h 12m”
You can compact the context by hand: a long press or right click on the “Context” chip in the chat asks “Compact the context now?” and on “Yes” sends /compact to the agent. If the agent is working at that moment, the command waits for the turn to finish
Attachments no longer jump between projects: a file or image dropped into a chat of one project goes to that chat only. Previously the chats of every open project received it at once — and after sending in the right chat it kept hanging “waiting to be sent” in the others
Auto-resume after a limit wakes subagents too: if the limit interrupted subagents the agent had started, “Continue” gets a request to resume each one via SendMessage — with its context and from where it stopped, instead of starting the task over. The waiting line shows how many subagents will be woken
When Claude Code compacts the context, the feed shows a “compacting” line and then how many tokens there were and how many are left. With a large window compaction takes minutes, and it used to look like a hang
Each answer shows how many tokens the request took: ↑ read and ↓ written, subagents included. The tooltip shows how much came from cache and what it would cost at API prices
At the bottom right of the chat, in the same row as quick commands, you see how much context is used: a ring and a percentage. Above 80% the ring turns yellow, above 90% red — past that Claude Code starts compacting by itself
In the git panel you can click a commit in the history: a window shows the files it changed and the diff of the selected one. Arrows (and the ← → keys) take you to neighbouring commits so you can see how the project changed step by step
A renamed file shows in the commit with an arrow from its old name, and a binary file honestly says there is nothing to show
The website was rebuilt for search engines: the changelog, the version number and the latest changes now live right in the HTML instead of being drawn by a script. New pages “Claude Code GUI”, “Codex and Koda” and “Local agent on LM Studio”, an FAQ and structured data for search engines
The unread badge on a project tab disappears as soon as you switch to the project where that chat is open. Previously it stayed until you clicked the chat itself: switching projects did not make the open chat current — and notification toasts also kept treating the previous project’s chat as the current one
Windows: the local model can no longer step outside the project folder with paths like “/etc/hosts” or “C:\Windows\…” — Windows did not recognise them as absolute before. The Windows build works again: since 1.1.7 it was failing on exactly these checks
The app no longer hogs the CPU while an agent works: the busy spinners (on the project tab, the pinned task, under the input box, in the terminal and build panel) forced the whole window to repaint 60 times a second — each now spins in its own layer
While a reply streams in, the feed no longer re-parses the markdown of every visible message on each tick — only what actually changes is parsed
Agent notifications stopped rebuilding every open project and all right-hand panels at once: screens and panels keep single instances and refresh themselves only when they have something to change
The pinned task is measured once instead of on every feed rebuild
Tapping the pinned task now shows it on the first try. The feed used to miss it often, so you had to tap a second and third time
The cause was the lazy list: a message that has not been built yet has no real height and no place — the feed length there is only an estimate from its neighbours, and a jump based on it landed elsewhere. The jump now goes in steps and checks each time whether the task is actually visible
The task lands at the top edge rather than the bottom: what the agent replied to it is visible right below
Jumping to the task no longer hides newer messages — the feed window only grows, so scrolling back to the end still works
A pinned task can be expanded in full: when it does not fit into four lines, a chevron appears in the pin's header. A task taller than the screen is not expanded — the pin would take over the whole chat; tapping the bar still takes you to it
The next task arrives collapsed: the expansion belonged to the previous one
The task you send the agent is pinned above the chat: the agent works for a long time and what you asked scrolls away with its first reply — now it stays in view without scrolling back
The pin is at most four lines, and tapping it scrolls the chat to the task itself while the pin stays where it is
The × removes the pin, and the next task brings it back. Every chat has its own
Jumping to an old message — from the pin or from favourites — now actually arrives: a message far up the chat used to be out of the scroll's reach
Commands from the local model see a normal environment again: an app launched from the dock inherits a bare PATH, so “npm test” answered “command not found” even though it works in a terminal
A long command is now actually killed instead of abandoned: the app used to stop waiting while the command lived on and did its job long after everyone forgot about it. Child processes are killed too
“Stop” during a permission prompt no longer freezes the chat: the turn used to keep waiting for an answer nobody would give, and the chat looked busy forever
A permission granted to the local model no longer writes rules into Claude Code settings: the “Always” button there would have handed the cloud agent permanent access to whatever you allowed the local one
Small things: the tool name is no longer duplicated in the permission prompt, and local build markers such as “<|begin_of_box|>” no longer leak into the chat
The local model now really works with the project: it reads files, searches by name and by text, edits them and runs commands. A turn became a normal agent loop — the model asks for a tool, the app runs it and hands back the result, until the work is done
Permissions use the same banner as cloud agents: reading and searching happen silently, while editing a file or running a command needs your approval. “Allow everything” and pause work here too
The model cannot step outside the project folder: every path is checked, so “read ~/.ssh/id_rsa” fails even by accident. A command that runs longer than two minutes is given up on and the model is told so
If the model cannot call functions, the conversation does not break: the app asks again without tools and says in the chat why files are invisible to it
A new chat kind — a local model via LM Studio. No cloud, no account: the model runs on your machine and the app talks to it over HTTP. The answer streams into the feed as it is generated, “Stop” cuts it off and whatever was said stays
The gateway is configured once for the whole app: address and model in settings, and a “Check” button asks LM Studio what is loaded and fills the name in. With no model picked we use whatever is loaded right now
An honest limitation: the local model only sees the conversation. Project files and commands are out of its reach — this is stated both in settings and in the new chat dialog
If the gateway does not answer, the message is not lost: it stays in the chat with the reason and a “Send again” button
A message no longer disappears when the agent refuses it. Previously “agent is not logged in” took the typed text with it: the input box was already cleared and the chat stayed empty. Now the message goes into the conversation first and to the agent second
An undelivered message gets a red mark with the reason and a “Send again” button — log in and resend the very same text without retyping it. The mark survives an app restart
If the login expires mid-run, the mark lands on the message the agent was working on, so it is clear what needs resending
The microphone level bar is alive again: loudness is now measured from the recording itself instead of asking the system — on macOS it reported silence no matter how loud you spoke. It is also more honest: you see exactly what landed in the file and will go to transcription
Dictated tasks now show transcription progress — a percentage and a progress ring instead of an endless spinner. Recordings still waiting are labelled as such: transcription runs one at a time
The companion no longer loses messages or lags on a bad connection: the relay holds them and hands them over as soon as the other side is back — in order and in one batch. Encryption is unchanged and end-to-end: the relay has no keys, and held frames live in memory for minutes only
Pause for the agent: a button next to “Stop”. The agent finishes the action it started and freezes before the next one — no half-done work on disk. Typed messages wait in the queue, “Resume” puts everything back and the agent carries on as if nothing happened
The pause even survives closing the app: come back and the chat is still paused, the queue is intact and nothing was sent to the agent on its own
The chat feed pins the date at the top: while scrolling you always see which day is in front of you — “Today”, “Yesterday” or the date. At a day boundary the chip gives way to the previous date
Linux: updates install themselves. A copy installed from .deb is updated by the package itself — the app downloads it, asks for the password with the system dialog and installs it over the current version; the launcher entry, icons and apt all learn about the new version
Linux: the running app now shows its own icon in the GNOME dash instead of a generic gear — the window is finally linked to its launcher entry
A Claude Code chat now picks effort next to the model: low, medium, high, xhigh, max. New chats can get a default from settings
Dictation no longer appends “To be continued” and other credits the model invents while you stay silent
When an in-place update is impossible, the update window says why and where the app is running from instead of just pointing at the site
The microphone level bar is now in tasks too — both in the main field and in a group row. The mechanism is shared across the app: the same bars, the same “microphone is silent” warning and the same timer label
When a recording fails, the toast names the reason instead of just “recording failed” — in the chat and in tasks alike
The microphone level is visible while dictating: the bars move as long as it hears you. Previously “recording” with a timer looked the same whether the microphone worked or the wrong input was selected
If the microphone stays silent for more than three seconds, the recording line says so — both in the chat and in tasks
An empty transcript no longer becomes an empty bubble: the app says no speech was heard and does not mark the recording as transcribed, so you can try again
If the microphone captured nothing at all, the reason is named along with what to check in sound settings, instead of silently doing nothing
In the Files section, right-clicking a file or folder opens a menu: copy the name, copy the full path, show it in the file manager. On macOS the file is revealed in Finder, on Windows in Explorer, on Linux the containing folder opens
Windows: voice transcription fixed. The whisper.cpp archive ships a main.exe stub next to the real tool — it only prints “binary is deprecated” and exits with an error, and the app was launching exactly that. It now picks whisper-cli.exe, and a wrong path saved by earlier versions is repaired on startup
The post-install check no longer mistakes the stub for a working binary: a binary that cannot transcribe is caught right away, not after a note has been dictated
A prompt from the catalog now asks for a clarification before sending: a prompt is written in advance and knows nothing about today's product — you can add a couple of words and they go before the prompt. If the prompt text contains {input}, what you write goes exactly there
The same question is asked for a prompt returned by the agent, on the Send to the agent button under the reply
Prompt catalog — a new button next to the skill store. A long prompt you reuse is saved here once and lives across all projects: search, editing, copying, and sending to the agent in one click
A prompt can be adapted to a new task by the agent: pick a prompt, say what to change — for example “this is notes, not a game” — and the agent returns the rewritten version
Such a reply grows three buttons, like a voice transcript does: To catalog, Edit and Send to the agent. A saved prompt is marked, so a second click will not create a copy
The prompt that asks the agent to rewrite prompts is configurable in settings, next to the tasks prompt
Fixed: after a few hours the app stopped starting the agent and reported “agent command not found”, while the agent was in place and answering in another chat. The cause was file descriptors: the app hit the limit macOS gives an app launched from the Dock. The limit is now raised at startup, and the two leaks that led to it are closed
The phone companion no longer leaves sockets behind: every reconnect to the relay used to leak one, and they piled up over a day
Project databases are opened once instead of anew on every task event
If the agent still fails to start, the app reports the real reason from the system, and “command not found” is used only when it truly is missing
Fixed: in the PDF report the legend of the messages chart showed a project's folder path instead of its name when the project had no tasks in the period. Names now come from the list of open projects, and an unknown path is shortened to its last folder
Task history now shows two charts: task activity and, next to it, how many messages you sent to the agent. Both are hourly for a day and daily for a range, in project colors, and follow the same filters
Fixed: the PDF export took only the first day of a selected date range — the whole range is now exported. The header carries both dates, the table adds the day to each time, both charts are included, and the file name holds the start and the end
With no dates selected the PDF matches what is on screen: from the earliest entry to the latest
macOS: the app is now signed with a developer certificate instead of an ad-hoc signature. Previously every update made the system forget granted permissions and ask again for access to Downloads, Documents and Photos — now a permission is granted once and survives updates. This version will ask for the last time
Claude Code limits: the reset time is now written under each bar instead of a hover tooltip — “resets today, 20:00”, “resets tomorrow, 22:00” or with a date, in the interface language
Version 1.0: the beta is over. From here on, plain version numbers without the leading zero
Task history: an activity histogram sits under the filters. Hourly for a single day, daily for a range, bars colored by project; the project and action filters apply to it too. Today, Yesterday and 7 days buttons switch the range in one click
The daily PDF report now opens with the same hourly histogram, ahead of the task list
Project tabs switch from the keyboard: ⌘1…⌘9 on macOS, Ctrl+1…9 on Windows and Linux
Website refreshed: new screenshots — attachments and PDF, voice and transcript, agent questions, phone companion, files, git and the skill store — in Russian and English, plus phone companion screens. The feature list now matches the current version
An attachment chip shows the file name without the internal timestamp prefix
Agent questions bar: “(+1 more)” instead of “(+1 question(s))”
Phone companion: chat bubbles no longer start with blank lines and an indented first line
Windows: attachments work properly again — the file name was taken only up to a backslash, so a file with mixed separators in its path was copied into a non-existent folder and the chip showed the whole path. This is what kept the Windows build from shipping since 0.35.0; it now ships with the others
A long file name in an attachment chip is trimmed with an ellipsis instead of spilling past the message edge
Long PDFs are no longer cut off at a hundred pages: pages are prepared in batches while you scroll, so a document of any length opens and memory goes only to what you have seen. The header counter shows how many pages are ready, with a plus while more remain
If a batch fails to render, nothing is lost: a Try again button appears at the end and the pages already shown stay in place
PDFs now open inside the app — both a chat attachment and a file from the Files section: pages one under another, zoom buttons, a page counter. If rendering fails, a button hands the file to the system app
SVG is now shown as a picture rather than markup: a thumbnail in the chat and a rendered, zoomable view full-screen. The source is still there, behind the Edit button in the same window
A file sent to the chat opens full-screen when you click its chip — just like a file in the Files section: highlighted text with Cmd/Ctrl+F search and editing, the project-relative path in the header. Binary and oversized files are not opened, as there, and a notice is shown instead
Fixed: a file dropped or attached in one chat showed up as pending in every chat of the project. The attachment now waits only in the chat where it was added and is still there after switching away and back
Images in the chat can now be examined: clicking a thumbnail opens it full-screen with wheel and pinch zoom and panning. Close with a click outside, Esc or the cross
Attachments now go to every agent the same way: the file is copied into the project folder and the message carries a link the agent reads itself. Works for Claude Code, Codex and Koda alike — the base64 block was understood only by the first
As a bonus, the agent's session log no longer grows by megabytes with every image — it keeps a line with the path
Attachments are sorted into project folders like voice recordings: images into .vibecoder1147/image, other files into .vibecoder1147/files. The feed draws thumbnails and chips from them even after the original is gone
Any attachment can be deleted with a cross right in the message — with confirmation: the file leaves both the chat and the disk. An empty wordless message goes too, like a voice note. Deleting a message takes its files along
The chat got attachments: a paper clip next to the tasks button attaches a file or an image to the message. An image goes straight into the model's context — the agent sees it itself, without reading from disk; a file is copied into the project and the agent reads it by path
A file can simply be dropped onto the chat window: it lands as an attachment above the input, and you type in the field what to do with it. Attachments are visible in the sent message — as a thumbnail or a chip with the name — and stay in the history
An image can be sent without any words; a small text file is inlined as text right away, a big or binary one goes as a path for the agent
Pressing any other microphone now counts as Stop for the running recording: it goes where it belongs — a draft into its own group or a voice note into its own chat — and the new recording starts right away. Before, this produced a “recording failed” message and lost what had been dictated
In a group's new-task row the plus, the input field and the microphone now sit on one line — the icons used to cling to the field's frame and float above the text
A task draft dictated into a group is now shown inside that group — under its header instead of piling up at the top of the list. A collapsed group with a draft opens by itself: what you just dictated and are waiting for must not be hidden
The microphone is now in task groups too — on the desktop in each group's input row, in the companion in the group header. Dictation becomes a draft labelled with the group and goes into that group on “To tasks”; same transcription queue, dictate one after another
Tasks can be dictated: a microphone next to the new-task field, both on the desktop and in the companion. Speak — a draft with a spinner appears at once, transcription runs in a queue, and the microphone is free for the next task right away
The text lands in its own draft when it arrives: you can see it, fix it and only then press “To tasks”. Nothing becomes a task by itself — transcription gets names and numbers wrong
The Add button in the tasks panel is now an icon: the word ate a third of the narrow panel
Project tasks are now in the companion: the ☑︎ button in the header opens the full list by groups — with checkboxes, inline editing and adding a new task to any group
From a chat the same list opens as a bottom sheet — a button next to the message field, without leaving the conversation
Deleting a task always asks for confirmation. Every edit goes to the computer and lands in the same task history as desktop edits; the phone list refreshes itself when tasks change on the computer
The companion header got a refresh circle: the screen opens instantly from the cache, and while the fresh version travels from the computer you can see it is on its way. Once it arrives, the circle goes out
The companion no longer stalls on navigation: project lists, chat lists and the feed open instantly from the on-phone cache, and fresh data quietly redraws when it arrives from the computer. The loading circle remains only for the very first open
On pushes: Firebase is not and never was involved — it is the plain Web Push standard with our own keys, and notifications are encrypted with the end-to-end key right on the computer
The companion got push notifications: a bell at the top of a chat — and the agent's replies arrive on the phone as regular notifications with the same text as the desktop toast clouds. Works with the app in the background (on iPhone — for the home-screen install only)
Chat and project lists show unread-reply counters; what is read, the phone remembers itself. Projects and chats with a working agent show a loading circle, desktop-style
Notifications are encrypted with the same end-to-end key: the relay and Google/Apple push services see only the ciphertext, and the app on the phone decrypts it
Phone pairing is fixed: scanning the QR opened a blank page. The culprit was a chat feed variable named history — it shadowed the system window.history, and the page crashed exactly while parsing the code from the address
There is now a way out of an orphaned pairing: if the computer is unreachable or revoked the device while it was offline, tap the banner at the top — the companion unpairs, wipes its data and returns to the pairing screen
Page errors no longer look like a blank screen: the reason is written right on the banner — a phone has no developer console
Several phones can now be paired: the settings show a device list with labels, each shows when it was last seen, and any one can be renamed or revoked individually
The QR code is no longer permanent — it is a one-shot invite. As soon as a phone pairs, the code changes; an unclaimed code dies by itself in 5 minutes, photographing it “for later” is pointless
Devices label themselves when pairing — iPhone, iPad or the Android model; the label can be changed on the computer
Unpair on the computer now reaches the phone: the companion gets the signal, wipes the pairing and the queue and returns to the pairing screen — instead of showing stale folders
The companion got its own QR scanner — the camera opens right on the pairing screen. Before, only the system camera or pasting the code by hand would do
On a phone the companion now requires installing to the home screen — with iPhone and Android instructions, Time to Sport style: the browser can evict a tab together with the queue of dictated notes, an installed app keeps it
“Allow everything” reaches the agent again. The flag lives in the chat object, and there must be a single one — but a session started outside the screen (dictation, a message from the phone) made itself a second copy: the switch set one while the agent asked permission from the other
The shared chat object is now handed out from one place, so any session — from the screen, the phone or a voice note — gets exactly that one. The draft and the session id stopped getting lost when a chat was opened outside the screen too
Agent questions with answer options still do not pass under “allow everything” — the choice is yours to make, and answering silently for you is not an option
The phone companion follows the device theme: it no longer stays dark on a light system
Messages on the phone got the same buttons as in the app: “Transcribe again” under a recording, “To tasks”, “Edit” and “Send to agent” under a transcript — with editing right in the feed
Sent and received times are visible in the feed, and tool commands are shown just like on the desktop
The chat header now names the project, and the project and chat lists show a loading spinner instead of “no chats yet” while they travel from the computer
Phone companion: open Settings → Phone companion, scan the QR with your phone camera — and vibecoder.1147.org/app shows your open projects and chats. Dictate and type into them right from the phone: voice lands in the chat as a recording and is transcribed on the computer at once
Everything is end-to-end encrypted with a key from the QR code: the site server is just a relay — it sees ciphertext and stores nothing. History lives on your computer and the phone asks it every time
The companion page keeps working offline: what you typed and dictated waits in a queue on the phone and leaves as soon as the computer is reachable again
No accounts, no passwords: the QR code itself is the access. Unpair in the settings cuts the phone off instantly
The “Update now” button works on Linux and Windows — before, the app could only update itself on macOS and everyone else had to download the installer from the site
On Ubuntu this covers the .deb install in /opt too: the system asks for your password with its own dialog, the swap runs as root, and the app restarts under your account
In every case the old copy is not removed until the new one is in place: if anything fails, the previous version stays put
Long recordings no longer lose chunks of text in transcription. Whisper carried the previous 30-second window's text into the next one, and a single misheard phrase dragged its neighbours down — recordings over a couple of minutes lost their middle. The windows are now independent
The last words are no longer cut off when Stop is pressed right after speaking: a second of silence is appended to a copy of the recording for transcription. The recording itself is untouched
The agent's commands now show when they were sent — right next to the copy button once the line is expanded. Collapsed lines are unchanged: there are dozens of them in a feed, and the timestamps would turn into a picket fence
The agent can ask with options — and now those options are visible: an “The agent is asking” bar appears above the input, and the Answer button opens a window with every question, option and explanation
There can be several questions at once, each with its own options; some accept more than one answer, and any of them accepts your own wording
The answer goes back through the very call the agent asked with, so it continues instead of starting over. A line in the feed records what was chosen
Don't want to choose — press Skip: the agent decides and says what it picked. Before, such a question showed up as raw json with only Allow/No
If the agent asked in plain text instead, an Answer button appears under the message — same options, the answer goes as a message
Once the tasks from a breakdown are taken, the Add button under the agent's reply disappears and a “Tasks added” mark takes its place. The tasks already exist — some in work, some waiting in the list — and there is no reason to create them twice
The mark is stored with the message: the button does not come back after a restart
The microphone moved from the tasks panel into the chat input row, next to the send button. Press it and recording starts: the button turns into Stop, a timer ticks next to it, and typing into the chat is off until you finish
Stop puts the recording into the same chat and sends it straight to transcription — no separate Transcribe button to press
The separate “Dictation” chat is no longer created: the recording and its transcript stay in the chat where you pressed the microphone
The finished transcript still offers three actions: turn into tasks, edit the text, or send to the agent. It is not sent to the agent until you press “Send to the agent”
The transcript now has a third button — “Send to the agent”: the text goes into the chat as it is, as a regular message. Dictate an instruction and it goes straight to work, no task parsing and no copy-pasting
Next to “Turn into tasks” there is now an “Edit text” button: the transcript opens as it is, you fix it and save — the chat keeps the corrected text, and tasks are made from that
Before, there was nowhere to fix a misheard name, title or number: the tasks inherited every error of the transcript
Install commands in the error window are now separate lines — for Ubuntu/Debian, Fedora and Arch, each with a Copy button. No more retyping them from the screen
“Transcription failed” no longer comes without an explanation: the window shows whisper's exit code, the exact command and the tail of its log. Before, the reason could end up empty, and a long one did not fit in a toast
If whisper does not start at all (no execute permission, a build for another system), that reason is shown in full too
On Linux recording no longer blames “microphone access” when the cause is different: sound there is captured by parecord and ffmpeg, and if they are missing the app says exactly that — with an install command you can copy
The reason is shown in a window rather than a toast: an install command did not fit in a toast and vanished after six seconds
On Windows the message now points at Settings → Privacy → Microphone: the system reports access silently and refuses only when recording starts
On macOS a refusal now points straight to System Settings → Privacy & Security → Microphone
Agreeing to install the transcriber now opens settings scrolled straight to its section. Before, nothing visibly happened after you agreed and there was no telling whether anything was installing: the progress is only shown there
Fixed “allow everything”: since 0.32.0 the flag could stop working in an already open chat — the switch set it on one copy of the chat while the agent asked permission from another. There is a single chat object again, as intended
The split happened after the chat list was reloaded outside the screen — for instance when the first voice note created the “Dictation” chat. It could also hand the agent a stale session id
In the tasks panel the new-group button is now separated from “Tasks from text” and the microphone: the group is about the list itself, those two are about filling it
Installing the transcriber is a single button on Windows and Linux too: we download a prebuilt whisper.cpp and the model, unpack them and fill in the paths. The settings hint used to claim otherwise — it was simply wrong
Right after installing, the binary is run once as a check: if a prebuilt build does not start on this system (an old library, a broken archive), you see why in settings instead of finding out later with a note already recorded
“Transcribe”, “Turn into tasks” and “Add” under messages are now proper buttons with an icon and a label — the same kind as “Continue” above the input field. As bare icons they were easy to miss, though they are the main action on the message
The buttons moved to their own row under the message; only deleting a recording stays a small icon, next to the timestamp and copy
Voice notes: a microphone sits next to “Tasks from text”. Press it and recording starts, with pause and stop; on Stop the recording lands in a separate “Dictation” chat that is created for you
The agent never sees the recording: both the audio and its transcript live only in the chat history — they are notes to self, not a conversation
A recording can be played back, deleted together with its file, and transcribed. Transcribed ones are ticked, and progress is shown in percent
Transcription runs on your machine, offline: whisper.cpp with the large-v3-turbo model. Install it from settings or on the first press of the microphone — via brew on macOS, from a prebuilt GitHub release on Windows and Linux
Under a transcript there is a “Turn into tasks” button: the agent breaks the text into tasks and sorts them into groups, reusing existing groups instead of inventing near-duplicates. The result is shown as a checklist, and only ticked items are added
The parsing prompt is yours to rewrite — it sits in settings next to the transcriber installation
Recordings live in the project service folder .vibecoder1147/audio and stay there until deleted
Your own messages got a Copy button — it takes the whole task text, handy for repeating it in another chat or project
Copying now has a hover tooltip, while “To the quote book” stays only under agent replies: quotes on the site are attributed to the model, so your own text does not belong there
Tasks from text: a sheet icon under the input field opens a full-screen window where a list of tasks can be dictated or pasted whole. One line — one task, blank lines are skipped, list markers (“-”, “•”, “1.”) are stripped for you
The same window picks the group the whole dictated list goes into
The new-group button moved from the bottom to under the input field and became an icon, next to the tasks-from-text one
Task order is now set by dragging: drop a task onto another and it takes its place. Tasks are sent to the agent top to bottom, so the important one can be lifted to the front — a single pass rarely covers everything
Dropping onto a task inside a group moves the task into that group as well
The calendar in the task history now follows the app language: month and weekday names are localized, and the week starts on the day your locale expects
Other built-in Material dialogs are localized too — the text selection menu, for one
The update download bar now shows actual progress instead of a solid fill: the track used to be the same colour as the filled part, so the line always looked complete
Progress updates once per hundred kilobytes rather than on every network chunk, cutting the number of window repaints during a download
The calendar in the task history no longer takes over the whole screen: it is a regular centered window with rounded corners, like every other dialog. In a small app window it shrinks to fit
The calendar labels now follow the app language: “Pick a day or a range”, “Save”, “Cancel”
Tasks now have a history: next to the projects overview there is a “Task summary” showing, across all open projects, what was created and what was completed, in chronological order with exact times
A task counts as completed when it is sent to the agent or ticked off; sending and ticking are shown differently. Unticking is recorded too
Filters on top: by project, by status (created, completed, unmarked) and by date — a single day or a range from the calendar
Export a day to PDF: time, project, task and action in a table, signed “Task history from VibeCoder.1147.org”. The file goes to “Documents/VibeCoder” and is revealed in the file manager right away
Settings now hold the retention period: 30, 60, 90, 180 days or forever. Old entries are pruned automatically when a project opens
The history lives in the same project database as the tasks
The update now downloads in the background: the window closes at once, nothing is blocked, and you can keep working as usual
The progress moved to the footer under the version line — a thin bar with a percentage. Once everything is downloaded and verified, a green “Update” button appears in its place, opening a window with “Update and restart” or “Later”
Checking for updates stays available during the download: press it again and, if the new version is already downloaded, we offer to install it; if an even newer one has appeared on the site meanwhile, we fetch that one
The green button at the top shows the same thing: the percentage while downloading and “Update” when ready — which matters when no project is open and there is no footer on screen
The update check in the footer is now an icon instead of a labelled button — it used to take up half the line. Hover it and the tooltip says what it does; while checking, the icon turns into a spinner
Once a new version is found the icon turns green and leads straight to the update window, with the version number in the tooltip
The app updates itself: next to the version in the footer there is now a “Check for updates” button, and once a new version is found — “Update”
The green button at the top and the footer button lead to the same window: “A new version is out (number)” with three answers — “Close”, “Download from site” (as before) and “Update now”
“Update now” downloads the archive from the site with a progress bar, unpacks it and asks about closing — if an agent is working right now, it says so plainly. Agree, and the app closes, the new version takes the place of the old one, the app opens again and the downloads are cleaned up
No more releasing the app from quarantine on macOS: quarantine is set by whoever downloaded the file, and since the app downloads it itself rather than a browser, no such mark appears (verified on a live build)
If the replacement fails for any reason, the old version is put back — you can never end up with no app at all
On Windows and Linux everything stays as before: they have their own installers, and the window offers to download them from the site
The projects overview now slides in from the right as a panel — like the skills store and settings: the button works as a toggle, an open panel is highlighted, and “back” closes it
The “New project” button is now first in the row, and the overview moved next to the other panel buttons
Jumping to a project from the overview closes the panel instead of leaving a separate screen behind
Tasks can be dragged between groups: press a task, hold, and drag it onto the header of the group you want
To take a task out of a group there is a “No group” row — it appears above the list as soon as the project has at least one group, and works as a place to drop the task
While a task is being dragged the places it can be dropped are highlighted, and the task itself stays in place dimmed — so you can see where it came from
A plain click on a task still opens it for editing and the checkbox still marks it done: dragging only starts after a hold
Everything the app knows about a project now lives in a database: tasks with their groups, build commands, the project name and colour are no longer kept in json files next to it
There are two databases: chats.db for the conversation and project.db for the rest — the chat is written in a stream while the agent works, while tasks are edited by hand, so the writes no longer compete
Old files are migrated automatically when the project is first opened and stay next to the database as backups with a .migrated suffix — nothing to do by hand
Fixed along the way: a task added in the first moments after opening a project could silently disappear — the disk read used to overwrite it
Tasks got groups — lists, like reminders on a phone. The “New group” button at the bottom of the tasks panel asks for a name, and the group gets its own input line: type there and the task is created inside that group right away
A task still has no group by default, and while there are no groups the panel looks exactly as before
In the task picker groups are shown expanded, and the checkbox next to a group name selects or clears every task inside at once
Next to the send button there is a “By groups” checkbox: without it the list is sent as plain numbering as usual, with it the group gets its own number and its tasks become sub-items: “1. Layout”, “1.1 fix the button”, “1.2 …”, “2. Database”, “2.1 …”
A group can be renamed (its tasks move along with it) or deleted — the tasks are not lost, they simply leave the group
A projects overview: a list button next to the plus at the top right, with a badge showing how many tasks are pending across all projects
For each project the page shows only its open tasks, when something last happened there (“3 min ago”, “12 d ago”) and how the conversation ended: the chat name and the last line
Projects are ordered from freshest to forgotten, and those untouched for a week are marked in red — you can see at a glance what you are working on and what is idle
The task picker got a “Note after the list” field: its text is sent to the agent after the tasks themselves, as a separate paragraph — for example “/loop keep going until the whole list is done”
The note is remembered: close the sheet, open it again and the phrase is still there. An empty note changes nothing — the message stays the plain list
“Allow everything automatically” is now a property of a single chat rather than the whole app: turn it on in a sandbox and your production projects keep asking
The switch moved to chat settings (long-press or right-click a chat), and the yellow lock moved from the input box to the chat name in the left list — you can see exactly where the agent is allowed everything
The flag can be flipped mid-work: whatever was already waiting for confirmation is granted at once, no agent restart needed
Settings got an “Allow everything automatically” switch: the agent edits files and runs commands without asking. Turning it on takes a separate confirmation — a switch brushed by accident will not silence the questions
Every automatically granted permission is visible in the chat feed as “✅ Allowed … (automatically)”, and a yellow open lock sits next to the input box — click it to jump back to settings
The flag writes no rules into project settings: turn it off and the questions are back at once. The blocked-tool and MCP permission banners are also resolved automatically while it is on
Fixed the chat list layout: when another chat in the project had unread messages, the count badge stretched across the whole row and the chat title was squeezed to one character, stacking into a column
Tab completion understands escaped spaces again: «два\ сло» was completed incorrectly and matched nothing
Closing the command line while it is still starting no longer leaves an orphaned shell process behind
You can see what the agent is actually doing: instead of a bare “🔧 Edit”, the feed now shows “🔧 Edit: lib/main.dart”, “🔧 Bash: flutter build macos”, “🔧 WebFetch: https://…” — the file, the command, the URL, the search query
Clicking a line expands the details: the full multi-line command with its description, before/after for a file edit, the size of what was written, the task list — with a copy button
Paths are shown relative to the project (lib/main.dart, not the whole path from the disk root); files outside the project are shown in full so it stands out
Unknown tools, including MCP ones, are handled too: the gist in the feed, all call parameters under the expander
Details are stored in the chat history and survive a restart
The command line no longer hangs silently on programs that need a real terminal: claude, vim, htop, less and the like are caught before they start
Instead of a hang you get a clear explanation and an “Open in terminal” button: the program opens in the system terminal, in the same folder, where everything works — including agent sign-in (/login)
Non-interactive calls are left alone: claude -p, claude auth status, git status and others run as before
Claude's reply now types out live in the chat as it is generated — like in real Claude Code, instead of appearing all at once at the end
The feed updates gently (at most ~10 times per second), and once a block is finished the text is reconciled with the agent's full reply — no drift, no duplicates
The agent's thinking and internal streams stay out of the bubble; if the process dies mid-sentence, the unfinished text is kept in history
Claude tool permissions are now a live dialog: when the agent needs a tool (web search, a command, files outside the project), the chat shows a request with “Allow”, “Always” and “No” buttons — right as it works, without restarting the session
“Always” writes the exact rule Claude Code itself suggests (e.g. WebFetch(domain:example.com) — just that domain, not the whole web) into the project's .claude/settings.local.json
Declining doesn't break the run: the agent sees the reason and finds another way; several requests queue up
Under the hood the app speaks the CLI's control protocol (--permission-prompt-tool stdio) — no more guessing refusals from reply text; the old detection remains as a fallback
The “Allow” button no longer crashes with “Cannot add to an unmodifiable list”: the error appeared on the first grant in a project that had no .claude/settings.local.json yet (and when the file was corrupted)
Claude's built-in tools — WebSearch, WebFetch, Read, Task and others — are now granted with the correct rule, by their own name: previously it wrote Bash(websearch:*), which allowed a shell command of that name while the tool itself stayed blocked
The tool name is written with its real casing (WebSearch, not websearch) — permission rules are case-sensitive
The wording Claude Code itself uses when asking for tool access is now recognised
Tab now works in the command line: it completes file and folder names, and program names from PATH at the start of a line
A single match is completed in full (folders get a trailing slash so you can keep typing the path), several are completed to their common prefix, and when there is nothing left to add the options are listed
Understands paths relative to the current folder, absolute ones and «~», names with spaces and in quotes; on macOS “desk” finds “Desktop”
Quick commands in chat: buttons next to “Continue” insert their text into the message field at the cursor; /loop, /goal and ultrathink come pre-configured for Claude
Each agent has its own set, editable in Settings under “Quick commands” — one per line
Chat drafts: typed but unsent text no longer disappears — it survives switching chats and projects, and app restarts
Big performance cleanup: the app barely uses CPU when idle — the git panel updates on file-system events instead of polling with nine git processes every 5 seconds
Agent, terminal and build output streams no longer redraw the whole UI for every line — updates arrive in batches a few times per second
Chat history is saved to disk incrementally: only the tail is written, not the entire conversation on every reply
The chat feed no longer re-parses markdown of every visible message when a new one arrives; hidden panels — skills, settings, inactive projects — are no longer built in vain
The project file tree is read in the background and no longer freezes the window on large repositories
Unread counts now appear inside the app: on the chat in the left list and on the project tab — you can see where the agent replied without clicking through
On Windows the unread count is shown as an overlay badge on the taskbar button — same as the Dock badge on macOS
One counter drives them all: opening the chat or returning to the window clears the number on the tab and on the icon alike
On macOS the Dock icon shows the number of unread agent replies — you can see the work is done even with the window minimised
Only what you truly missed is counted: a reply in the open chat with the window focused is read at once, while replies in other chats or with the window in the background add up. Opening the chat or returning to the window clears the count
The badge uses the system's own facility and needs neither an Apple signature nor notification permission
A command line inside the project: a round button under the magnifier opens a black terminal taking half the chat, between the chat and the right panel. It is your real shell with full rights and environment — cd, variables and history persist between commands
A normal click hides the terminal without interrupting it: the command keeps running while the panel is closed, and the button shows a marker — grey when the terminal is simply alive, green when new output arrived
Right-click or long-press closes the terminal for good — with a confirmation, since the process and its output are dropped
In the terminal: command history with arrow keys, Ctrl+C and a Stop button kill a stuck command with its children (the shell survives), the exit code is shown next to the prompt, and input typed while a command runs goes to its stdin
Mermaid diagrams in markdown files are drawn right in the preview: flowcharts (graph TD/LR with boxes, diamonds, circles, edge labels) and sequence diagrams with notes. Rendered by the app itself — no embedded browser, nothing sent to a third-party server; unsupported types are shown as code
Settings in the panel no longer collapse into a column: the “Theme”, “Language” and “Default agent” labels moved above their buttons, and the buttons stay in a row
Doctor opens in the same panel instead of full screen; back returns to settings
The skill store button is short again — “Install into project”, with the project name moved to the tooltip
The agent no longer loses programs: go, node, flutter, cargo and others resolve by name. An app started from the Dock or a shortcut used to hand the agent a bare system PATH (/usr/bin:/bin:/usr/sbin:/sbin), so it reported “command not found” even with Bash(go:*) allowed — the problem was never permissions
We now build the PATH ourselves: ask your shell (profile, nvm, pyenv, asdf) and add the usual install locations — homebrew, /usr/local/go/bin, ~/go/bin, ~/.cargo/bin, ~/.pub-cache/bin and more
The same PATH goes to Build tab commands, git, agent installs and Doctor checks
Doctor now lists the PATH directories at the bottom with a Copy button — you can see whether the right directory made it in, and show it to the agent
Model choice (opus, sonnet, fable, haiku) moved into chat settings — long-press or right-click the chat tab; the input row is cleaner now
The same dialog shows which model actually answers; while the chat is busy the choice is locked, and the selected model is still labelled under the chat name
The rename dialog became “Chat settings”: name, model, tool permissions and skills in one place
Purple buttons now have white labels everywhere: the label used to default to black — that hit “Allow” in the tool and MCP permission prompts and the buttons in the login and silent-agent banners
Same fix whitened labels on selected toggles (theme, language, agent) and selected filter tags, which used the same color
Markdown files open rendered — headings, lists, links and code; a button switches to the source and back, saving works as before
Fullscreen file view got search on Cmd/Ctrl+F: highlighted matches and lines, a match counter, arrow and Enter navigation
Syntax highlighting now knows Dart, Go, JavaScript/TypeScript, PHP, GDScript, Makefile and nginx configs (nginx is also detected by content when the name says nothing)
Fixed random system permission prompts (Documents, Apple Music): background limit and login checks used to start claude in the app's working directory — now in a neutral empty one
Skill store tags are collapsed to four rows; a big arrow smoothly expands the full list and scrolls it to the top of the page
The “Submit to catalog” button is hidden for skills that are already in the catalog
The server keeps only the latest build per platform, older ones are removed automatically (4 GB of old versions cleaned up)
Settings open in the same right-side sliding panel as the skill store
The store and settings buttons in the header act as toggles and glow purple while their panel is open
In the store, installed skills come first, before search and tags; install buttons are explicit now: “Install globally” and “Install into project” (white text)
The first VibeCoder-made skill — PWA: manifest, service worker, offline, install prompt, push and a Lighthouse checklist; it lives in the public vibecoder-skills repo, which will also host community skills
The catalog gains a web development block (86 skills total): Vue 3 and Composition API, Vue+TS testing-first, Nuxt, Tailwind, Vitest, Playwright, Next.js, NestJS, GraphQL, WebSocket, API design and official Anthropic web skills
The store catalog grew to 71 skills: 14 for Three.js and WebGL, 12 for Godot, browser 2D engines (Phaser, PixiJS), game design, genres, official Anthropic skills and general developer ones
The catalog is open to other apps — zloy.studio can use the same store
Skill store (the ✨ icon in the header): a catalog of ready-made agent skills — gamedev, Blender, shaders, 3D, office documents — with descriptions and source links
A skill installs in one click globally or into a project, and the agent picks it up in new sessions; your own skills are added from a git link
Installed skills are listed and removed with a single button
The macOS build no longer fails with “hdiutil: create failed — Resource busy”: the volume name now includes the version, leftover volumes are detached and the installer is retried on failure
New “Build” tab on the right: your own project commands (flutter build, make deploy) run at the push of a button, with the output below and a full-screen view
Commands can be created, edited and deleted; each has a name and runs in the project folder
An expired login (“OAuth session expired”) is now recognized — the app offers to sign in right away
Limits are shown as progress bars, like the agent itself does: session, week and per-model limit — green below 80%, yellow below 90%, red above; reset time in the tooltip
Claude Code limits moved to the bottom left, above the version line: a speedometer, session and week percentages, a refresh button and the full picture in the tooltip
Tool access can be set up upfront, without waiting for a refusal: “Tool access” at the bottom left — checkboxes for 40 tools plus a field for your own
Detection of an unavailable tool is universal now: the name is taken from the error wording itself, so besides npm, flutter, go and python it catches anything else — terraform, protoc, ffmpeg and more
The batch-allow list grew to 40 tools: python, pip, java, docker, kubectl, gcc, brew and others
After installing a new version the app shows a “What's new” window with that version's changes — once per version
When the agent lacks access to a tool (go, npm, python, cargo and others), an “Allow” button appears in the chat — the rule is written to the project settings, and “More…” opens the full tool list with checkboxes
The model can be switched inside an ongoing chat — with the button left of the input. History is kept and the chat continues with the new model, handy when one model's limit runs out
The button's tooltip shows both the selected model and the one the agent actually answers with
Claude Code limits are visible right in the header: the percentage of the tightest window, colored from green to red, with session, week and reset time in the tooltip. Refreshed at startup, every 10 minutes and after each agent reply; fetching limits costs no tokens
The Claude model is chosen when creating a chat — opus, sonnet, fable or haiku (plus “agent default”). The choice is remembered per chat, and there is a default-model setting for new chats
Merged branches in the git panel are grouped by commit (branches from the same merge share a line), the total is shown next to the label, and long lists scroll within five rows
Chat history moved from JSON to SQLite: faster on long chats and safer on sudden shutdowns; old chats are picked up and migrated automatically (with a backup)
In-chat search: a magnifier at the top right or Cmd/Ctrl+F — the feed filters as you type, with a match counter
Pressing Enter while the agent is busy no longer loses your text: the message is scheduled and sent automatically once the agent is free (with a cancel button); scheduled text survives even a sudden app shutdown
The scary “agent is silent, check your CLI version” message is gone: a 90-second pause shows a calm slow-connection note, and only after 5 minutes of silence a banner with an “Open Doctor” button appears
When the agent hits MCP tool permission limits, VibeCoder offers a one-click fix: with your approval it adds the permission to the project's .claude/settings.local.json and restarts the agent