Skip to content

Releases: kiril6/vibeaudio

v0.15.0 — Antigravity hooks

Choose a tag to compare

@kiril6 kiril6 released this 04 Oct 01:01

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-hooks detects Antigravity (~/.gemini/antigravity/ exists, or agy is on your PATH) 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. --reactive is 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.
  • "Antigravity CLI" in the vibe menu.

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 --reactive no 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

Choose a tag to compare

@kiril6 kiril6 released this 03 Oct 23:57

A small packaging release: VibeAudio no longer has an install script.

Changed

  • No more allow-scripts warning on install. Recent npm (seen on 11.17) skips packages' install scripts unless you allow them, so VibeAudio's postinstall never ran there. All it did was print the starting commands, and each npm i -g vibeaudio ended 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 vibeaudio now installs quietly.
  • To get started, run vibe on its own (the guided menu) or vibe --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

Choose a tag to compare

@kiril6 kiril6 released this 03 Oct 21:56

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.pid no longer names it, so at most half a second overlaps. Nothing to do on your side: hooks call the installed vibe, 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.
  • .gitignore covers local agent settings, the Gemini extension build and npm pack output.

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

Choose a tag to compare

@kiril6 kiril6 released this 03 Oct 18:51

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 plugin marketplace add kiril6/vibeaudio
    codex plugin add vibeaudio@vibeaudio
    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.
  • 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-hooks remains 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/vibeaudio installs VibeAudio's hooks without npm. Checked against Gemini CLI 0.62 locally, but not yet in a signed-in session or from this release, so vibe --install-hooks stays the documented path for now (#40).
  • Plugin and installed hooks don't double up. If vibe --install-hooks was also run for the same agent, the plugin steps aside and the installed hooks play, once.

Fixed

  • vibe --stop and --uninstall-hooks now say so in vibe --events. Each session they end gets an ended event with a reason. Before, a light or menu bar watching the stream kept showing "working" (#24).
  • vibe --mute no longer forgets turns in progress. It silences the music and nothing else. Muted turns still finish, show in vibe --state and count in vibe --report.
  • No more "clamping hook timeout" warning in Codex. Codex caps its session-end and interrupt hooks at 3s. Run vibe --install-hooks once 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

Choose a tag to compare

@kiril6 kiril6 released this 03 Oct 16:54

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) or CODEX_HOME (Codex), hooks and /vibe now 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+) and SessionEnd (0.145+). An interrupt shows up as interrupted in vibe --events. Safe on older Codex versions, which ignore events they don't know.
  • vibe --doctor and vibe --status tell 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

Choose a tag to compare

@kiril6 kiril6 released this 03 Oct 11:30

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 --notify on, 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 --state and vibe --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 install vibeaudio. It steps aside when hooks from --install-hooks are already installed.

Notes

  • Audio is re-rendered once after upgrading (the synth changed); nothing to do.
  • Turn history lines now carry session and chimed. Older lines still work.

Follow-ups: #22, #23, #24, #25, #26.

v0.12.0

Choose a tag to compare

@kiril6 kiril6 released this 01 Oct 20:13

Added

  • A saved volume reaches music already playing. vibe --volume 60 now 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.

Still open on #12: Linux (#16) and Windows (#17) backends.

v0.11.1

Choose a tag to compare

@kiril6 kiril6 released this 01 Oct 19:34

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

Choose a tag to compare

@kiril6 kiril6 released this 01 Oct 19:05

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=1 forces 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

Choose a tag to compare

@kiril6 kiril6 released this 01 Oct 08:45

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.