Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Hold the VibeNew to Visual Studio Code? Get it now.
Hold the Vibe

Hold the Vibe

Joen Berg

|
1 install
| (0) | Free
Elevator hold music while your AI agent works — because watching it grind is boring. A ding when it's done is just a bonus. VS Code & Cursor.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

🎵 Hold the Vibe

You're on hold. The agent is working. Might as well lean into it.

Hold the Vibe plays looping elevator music the moment your AI agent starts grinding — because watching tokens scroll is dull, and you're just sitting there anyway. When the agent wraps up, the music stops and you get a little ding. That's the cherry on top, not the point.


Marketplace Installs CI MIT License VS Code Cursor Advanced Mode


Install from Marketplace · How it works · Contributing · Report a bug


✨ Why this exists

You kicked off an agent. Now you're watching it think, edit, run commands — and there's nothing for you to do but wait. It's boring.

Hold the Vibe leans into that dead time with a joke: classic elevator hold music while the agent works. You're not really "on hold" with a call center — you're on hold with a language model — but the vibe fits. Sit back, let the muzak play, twiddle your thumbs, glance away from the screen.

The ding when it's done? A small bonus so you know the turn finished. The extension isn't a reminder app for people who forgot they sent a prompt. The music is the whole bit.

Moment What you hear Role
Agent starts working Looping elevator hold music The main event
Agent finishes A short completion ding Nice extra

Less silent staring. More please-hold energy.


🎬 How it works

By default the extension runs in Advanced Mode. Here's what happens during a single agent turn:

sequenceDiagram
    participant You
    participant Agent as AI Agent
    participant Hook as Editor Hook
    participant Bridge as Local Bridge
    participant Vibe as Hold the Vibe

    You->>Agent: Submit prompt
    Agent->>Hook: beforeSubmitPrompt / UserPromptSubmit
    Hook->>Bridge: POST /activity/start
    Bridge->>Vibe: ▶ Start hold music
    Note over Vibe: 🎵 elevator muzak — the whole joke
    Agent->>Hook: stop / Stop
    Hook->>Bridge: POST /activity/stop
    Bridge->>Vibe: ⏹ Stop music + ding
    Vibe-->>You: 🔔 Music stops, little ding (bonus)

In plain terms:

  1. You send a prompt to your AI agent.
  2. Your editor (VS Code or Cursor) fires a lifecycle "hook" the instant the agent starts working.
  3. A small script forwards that as a message to a tiny local server the extension runs on your own machine — nothing ever leaves your computer.
  4. The extension starts the hold music — that's the experience you're here for.
  5. When the agent finishes, the music stops and you hear a ding. Helpful, but secondary.

The Hook, the Bridge, and the music player are all just parts of this one extension — the diagram splits them into separate boxes only to make the order of events clearer.

Advanced Mode (shown above, and on by default) hooks directly into your editor's agent events, so the music and ding fire reliably on every turn. There's a small, real startup delay the first time audio plays each turn — spinning up the player takes a moment — but it never blocks or slows down the agent itself.

Notify Mode is a zero-install fallback for editors or setups where hooks aren't available. Instead of hooks, the AI can call a small "let the user know" tool built into the extension, and a backup check listens for terminal commands wrapping up. No files get written and nothing needs installing — but since it relies on the AI remembering to call that tool, it can occasionally miss a turn, which Advanced Mode doesn't.


⚡ Install

Option A — Marketplace (easiest)

Search Elevator Music in the Extensions panel, or install directly:

marketplace.visualstudio.com/items?itemName=joenberg.elevator-music

Or from the command line:

code --install-extension joenberg.elevator-music
# Cursor:
cursor --install-extension joenberg.elevator-music

Cursor users: if it's not in Cursor's built-in search yet, use the command above or grab the .vsix from Releases and Command Palette → Extensions: Install from VSIX…

Option B — Download a release

Grab the latest .vsix from GitHub Releases, then Command Palette → Extensions: Install from VSIX… → select the file. Reload once.

Option C — Build from source

git clone https://github.com/joenb33/hold-the-vibe.git
cd hold-the-vibe
npm install
npm run compile
npm run package

Install the generated .vsix as above.

Option D — Hack on it

git clone https://github.com/joenb33/hold-the-vibe.git
cd hold-the-vibe
npm install && npm run compile

Open the folder, press F5, and use the Extension Development Host window that opens.

Heads up: While developing, run agent tasks in the new window — not your main editor.


🚀 Try it right now

  1. Look at the status bar (bottom-right) → Advanced (Cursor) or Advanced Mode
  2. Click it → Test hold music (3s) 🎵 then Test ding 🔔
  3. Ask your agent to do something real — refactor a file, run tests, whatever
  4. Enjoy the hold music while it runs; the ding is just the outro

If the muzak starts when the agent starts, it's working.


🎛 Two modes

Advanced Mode Notify Mode
Setup One-time hook install (automatic) None
Hold music ✅ Guaranteed Best effort
Completion ding ✅ Guaranteed Best effort
Writes hook files Yes (~/.cursor or ~/.copilot) No

Advanced Mode is on by default — reliable hold music on every agent turn. Toggle via the status bar menu or elevatorMusic.advancedMode in settings.


🖥 Works where you code

Editor Hook support Status
Cursor beforeSubmitPrompt, stop, subagent events ✅ Fully supported
VS Code + Copilot Chat UserPromptSubmit, Stop, subagent events ✅ Requires 1.109+

Both editors on one machine? Set elevatorMusic.installHooksForAllEditors to true when enabling Advanced Mode.


🔧 Settings worth knowing

Setting Default What it does
elevatorMusic.enabled true Master on/off
elevatorMusic.advancedMode true Hooks + bridge vs Notify Mode
elevatorMusic.volume 80 Playback volume (%)
elevatorMusic.dingCooldownMs 2500 Anti-spam between dings

Search elevatorMusic in Settings for the full list.


🎶 Sounds

Royalty-free audio, included:

File Source License
Hold music Short Elevator Music Loop by BlondPanda CC0
Ding CHIMES - 4 by SamuelGremaud CC0

Full credits: media/ATTRIBUTION.md. Swap in your own WAVs anytime via elevatorMusic.dingPath / holdMusicPath.


🛟 Troubleshooting

Ding works but no hold music

Large WAV files can take a moment to start on Windows. Check Output → Log (Extension Host) for [Elevator Music] Starting hold loop. Try Test hold music (3s) from the status bar menu.

No status bar item after F5

The extension loads in the Extension Development Host window (the second window), not the one where you pressed F5.

Agent stops responding mid-turn

Unrelated VS Code bug — see microsoft/vscode#301795. Try disabling Advanced Mode temporarily to compare.

Multiple editor windows open

One window owns the localhost bridge; others connect passively. Disabling Advanced Mode sends a clean shutdown to all windows.

More help? Open an issue — we actually read them.


🤝 Contributing

Ideas, sounds, platform fixes, docs — all welcome. See CONTRIBUTING.md. Release process: RELEASE.md.

Good first PRs: alternative hold loops (CC0), macOS/Linux playback polish, README improvements.


📄 License

  • Code: MIT
  • Bundled audio: CC0 — use freely, attribution appreciated

Hold the Vibe · Elevator music while your agent works. The ding is just the outro.

⭐ Star the repo if the joke landed · github.com/joenb33/hold-the-vibe

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft