Releases: kiril6/vibeaudio
Release list
v0.15.0 — Antigravity hooks
Antigravity is now a hook target. Music follows Antigravity's own lifecycle, as it does for Claude Code, Codex and Gemini CLI, instead of relying on the model to call the MCP tools.
New
- Antigravity hooks (#47).
vibe --install-hooksdetects Antigravity (~/.gemini/antigravity/exists, oragyis on yourPATH) and adds VibeAudio's hooks to~/.gemini/config/hooks.json, Antigravity's global customization folder. Or name it:vibe --install-hooks --tools antigravity.- Your other hooks in that file are never touched: Antigravity's hook file is a map of named hooks, and ours sit under their own name,
vibeaudio. - The music starts on the first model call of each prompt. Antigravity has no prompt event; its start event fires before every model call, and later calls in the same turn are ignored, so the music never restarts mid-turn.
- Stopping plays the chime. It plays the failure chime when Antigravity reports an error or hit its step limit.
- No reactive mode for Antigravity. Its pre-tool hook has to approve or deny every tool call, and one that gives no answer blocks the tool, so VibeAudio never installs one.
--reactiveis switched off for Antigravity and the installer says so. - No "your turn" chime or stuck heartbeat: Antigravity has no permission-dialog event, and doesn't report a failing command as a failure.
- Your other hooks in that file are never touched: Antigravity's hook file is a map of named hooks, and ours sit under their own name,
- "Antigravity CLI" in the
vibemenu.
Verified live with the agy CLI 1.1.25. The Antigravity desktop app reads the same file according to Antigravity's documentation, but hasn't been checked live yet. If you use it, run vibe --install-hooks --tools antigravity, start a new session, and report on #47.
The MCP server still works for Antigravity if you prefer it, and remains the route for Claude Desktop and other clients without hooks.
Fixed
vibe --install-hooks --reactiveno longer crashes for an agent that has no pre-tool event.
Upgrade: npm i -g vibeaudio, then vibe --install-hooks to add Antigravity. Plugin users: claude plugin update vibeaudio@vibeaudio or codex plugin marketplace upgrade vibeaudio. The Gemini extension is attached as usual.
v0.14.2
A small packaging release: VibeAudio no longer has an install script.
Changed
- No more
allow-scriptswarning on install. Recent npm (seen on 11.17) skips packages' install scripts unless you allow them, so VibeAudio'spostinstallnever ran there. All it did was print the starting commands, and eachnpm i -g vibeaudioended with a warning instead. The command that warning suggests,npm install -g --allow-scripts=vibeaudio, also names no package, so it installs whatever is in your current directory. The script is gone;npm i -g vibeaudionow installs quietly. - To get started, run
vibeon its own (the guided menu) orvibe --install-hooks, as the README and site already say.
If you added allow-scripts=vibeaudio to your npm config for this, it is now unused. Remove it with npm config delete allow-scripts --location=user, or leave it.
Upgrade: npm i -g vibeaudio. Plugin users: claude plugin update vibeaudio@vibeaudio or codex plugin marketplace upgrade vibeaudio. The Gemini extension is attached to this release as usual.
v0.14.1
A patch release: one playback fix, plus test hardening and docs.
Fixed
- Two prompts at once no longer play the music twice (#42). When two sessions submitted a prompt together, each could find no player running and start one, so you heard two streams layered for the length of both turns. That happened in 6 of 10 concurrent runs. Now a player stops as soon as
daemon.pidno longer names it, so at most half a second overlaps. Nothing to do on your side: hooks call the installedvibe, so upgrading is enough.
Tests
- Tests that wait for a process to exit, or for the audio backend to record a play, now poll against a deadline instead of sleeping a fixed time (#44). They pass with every CPU core saturated.
Docs
- The README and site describe the footprint as checkable facts: each loop is rendered once and cached, the OS's own player does the playback, and with hooks nothing keeps running between turns.
.gitignorecovers local agent settings, the Gemini extension build andnpm packoutput.
Upgrade: npm i -g vibeaudio. Plugin users: claude plugin update vibeaudio or codex plugin marketplace upgrade vibeaudio. The Gemini extension is attached to this release as usual.
v0.14.0
More ways to install, with no npm step, and an event stream you can trust.
Added
- Codex plugin. The plugin is no longer Claude Code only. In Codex:
Codex asks you to approve the hooks once, as it does for any hook. It includes Codex's interrupt and session-end events. Verified live on Codex 0.160.
codex plugin marketplace add kiril6/vibeaudio codex plugin add vibeaudio@vibeaudio
- Copilot CLI and Qwen Code can load the same plugin, and it carries their events. Neither has been run with it yet, so
vibe --install-hooksremains the documented path there (#39). - Gemini CLI extension (preview). Every release, starting with this one, carries a Gemini extension, so
gemini extensions install https://github.com/kiril6/vibeaudioinstalls VibeAudio's hooks without npm. Checked against Gemini CLI 0.62 locally, but not yet in a signed-in session or from this release, sovibe --install-hooksstays the documented path for now (#40). - Plugin and installed hooks don't double up. If
vibe --install-hookswas also run for the same agent, the plugin steps aside and the installed hooks play, once.
Fixed
vibe --stopand--uninstall-hooksnow say so invibe --events. Each session they end gets anendedevent with areason. Before, a light or menu bar watching the stream kept showing "working" (#24).vibe --muteno longer forgets turns in progress. It silences the music and nothing else. Muted turns still finish, show invibe --stateand count invibe --report.- No more "clamping hook timeout" warning in Codex. Codex caps its session-end and interrupt hooks at 3s. Run
vibe --install-hooksonce to rewrite existing Codex hooks. - The test suite no longer touches your real audio cache or mute setting (#38). It could fail intermittently inside a live agent session, and could evict a project's cached audio.
v0.13.1
VibeAudio is built as calm technology: in the background by default, at the front only when it matters. This release makes that hold in more setups.
Fixed
- Moved config folders are followed. If you set
CLAUDE_CONFIG_DIR(Claude Code) orCODEX_HOME(Codex), hooks and/vibenow go where your agent actually reads them. Before, VibeAudio installed into the default folder and stayed silent, with no error.
Added
- Codex: Esc and closing a session end the music silently. VibeAudio now listens for Codex's
Interrupt(Codex 0.150+) andSessionEnd(0.145+). An interrupt shows up asinterruptedinvibe --events. Safe on older Codex versions, which ignore events they don't know. vibe --doctorandvibe --statustell you when your hooks predate a feature. Hook files are written once at install time and an upgrade doesn't touch them. Both commands now name any event the current version would add.
Codex users: one step
Run vibe --install-hooks, then approve the two new hooks once in Codex (/hooks). vibe --doctor shows whether anything is still missing or unapproved.
Docs
- README and site: the calm-technology design principle (#34).
Follow-ups: #37 (config-folder overrides for the other agents), #38 (test cache isolation).
v0.13.0
Added
- A heartbeat when an agent looks stuck. When 4 of a session's last 8 tool calls fail — the test-edit-test loop that goes nowhere — a soft pulse on the genre's tonic joins the music until calls start succeeding again. With
--notifyon, one banner fires when it happens. The threshold was measured on 4,497 real turns: it fires in under 1% of them, around minute 3, and those turns typically ran 3 more minutes. Works on Claude Code (verified live), Copilot CLI and Qwen Code; other agents report no tool failures to hook into (#22). vibe --stateandvibe --events. Every agent's state —working,stuck,waiting— as one line of JSON, or as a live stream of changes (started,waiting,resumed,stuck,recovered,finished,interrupted,ended). Build a light, a menu bar icon or a tmux status line on the same cross-agent mapping the music uses. Local file only, never leaves the machine.- "Back to it" in
vibe --report. The median time from a finished turn to your next prompt, and — once there's enough of each — with a chime vs without. - Claude Code plugin.
claude plugin marketplace add kiril6/vibeaudio, then installvibeaudio. It steps aside when hooks from--install-hooksare already installed.
Notes
- Audio is re-rendered once after upgrading (the synth changed); nothing to do.
- Turn history lines now carry
sessionandchimed. Older lines still work.
v0.12.0
Added
- A saved volume reaches music already playing.
vibe --volume 60now eases the playing music to the new level within a second (macOS; other backends take it at the next loop). Hook daemons follow the saved volume unless one is pinned or typed. (#12, #18)
Docs
- README and the site now cover fades, live volume and blocked prompts; the README's genre count is corrected.
v0.11.1
Fixed
- Music started (and kept playing) for a prompt that another hook, such as token-ninja, had already blocked. A fast native blocker can write its transcript entry before VibeAudio's hook measures where to read from, so the daemon never saw it. VibeAudio now checks the end of the transcript for a fresh "prompt blocked" entry when a turn starts and plays nothing for it.
v0.11.0
Added
- macOS fade in/out. One long-lived AVAudioPlayer helper replaces an afplay per loop: music fades in on start and out over 0.3s on stop, and a daemon killed without cleanup can't orphan audio. afplay stays the fallback;
VIBE_NO_FADE=1forces it. (#12, #18 — live volume, in-process crossfades, Linux #16 and Windows #17 still open) - Windsurf as a hook target (
vibe --install-hooks --tools windsurf). Written from Windsurf's docs only; not yet confirmed on a real install. (#14)
Fixed
- Music kept playing when another hook blocked the prompt. The daemon now stops on Claude Code's "prompt blocked" transcript entry.
v0.10.0
Added
vibe --report [days] — how long you waited on agents, and where. Hooks now log each finished turn (project, duration, time the agent spent blocked on a dialog of yours, outcome) to ~/.vibeaudio/history.jsonl; the report totals it: turns and failures, You waited (the agent's own working time), Agents waited (blocked on you, shown separately because they are different problems), median and longest turn, time per project, and a by-day chart. The log stays on your machine, is capped at about 1 MB, and VIBE_NO_HISTORY=1 turns it off. Only hook-driven turns are logged; a command wrapped as vibe <command> is not.
The success chime is in the music's key. It is now the tonic chord of the genre you were hearing — C major for lofi, 8bit, jazz and piano; D minor for synthwave and electronic; D major for zen; A minor for drone — so it lands as the resolution of the piece instead of a bell over it. The default chime is byte-identical to before, and random, rain and ocean (which have no single key) keep it.
vibe --doctor shows where sound is going (macOS). afplay plays on the default output device, which moves when a monitor or headphones connect, and a display often has no system volume at all and quiet speakers — so VibeAudio could be playing and still be inaudible. Doctor now names the device and warns when it is muted, has no volume control, or the system volume is under 10%. It reports facts only, never a guess about whether a setting is "too quiet".
Docs
README troubleshooting covers the monitor case. The site describes the keyed chime and --report.
Not in this release
Predictive resolution (#19), long-tool earcons (#20) and a fleet-audio design note (#21) are filed, not built.