Give vibe coding's in-between moments an outlet — without leaving the project you are building.
Claude Code is working. You have thirty seconds — or a few minutes. It is too short to start something meaningful, yet long enough to reach for your phone and lose the thread you had in the project.
Bubble is a sidecar for agents you open inside your terminal. While the agent works, it appears beside your terminal, reads the current conversation context, and uses its built-in lenny-skills to generate questions about the project at hand.
It gives the wait an outlet — questions that provoke thought about the project at hand — so you stop consuming a feed, and your focus and mental energy stay protected.
Demo:
bubble-demo.mp4
- Keep in Context. No opening a phone app, no reconstructing your train of thought later — avoiding Attention Residue.
- No productivity theatre. You do not have to answer, save, or act on every question — they are only prompts to think.
- Belong, don't stand out. In its visuals, language, and interactions, it quietly becomes part of the coding environment.
- You hand a task to Claude Code and it starts working.
- After about 32 seconds, an animated Bubble appears.
- Click it to see a question tuned to the current project; browse between questions, mark it as helpful, or just close it.
- When Claude Code is done, you are still in the context of the work.
- macOS
- Claude Code
- Node.js 18+ and npm
- Python 3.8+
- Git,
curl, and zsh - Accessibility permission for Electron, so Bubble can find your terminal window
git clone https://github.com/jmtom-io/bubble.git ~/.bubble/app
cd ~/.bubble/app
npm install
./install.shnpm install downloads Electron and may take a minute. The installer then:
- adds Bubble's four hooks to
~/.claude/settings.json, so it can sense Claude Code sessions globally; - installs the
bubblecommand into~/.local/bin; - adds an idempotent auto-start entry to
~/.zshrc.
Grant Accessibility permission
For Bubble's animation to appear, go to System Settings → Privacy & Security → Accessibility and enable Electron.
bubble start # Turn on Bubble; it also auto-starts in new terminals.
bubble stop # Turn it off completely; new terminals won't start it either.
bubble status # Check whether Bubble is running.The × in the floating window closes only the current question, not Bubble itself; bubble stop is the switch for turning Bubble off entirely.
How long until Bubble appears?
Bubble's countdown starts from Claude Code's first tool call in a turn
(PreToolUse) — not from the moment you hit enter on your prompt. There is
usually a real gap between the two that the countdown does not count.
10 seconds after that first tool call, Bubble starts drawing.
Based on 151 real turns from this project's own development conversations,
the gap between submitting a prompt and that first tool call has a median
of 22.2s (p90: 72.3s). So from your own perspective, Bubble typically
starts drawing around 32 seconds after you submit a prompt — sometimes as
late as ~82 seconds for slower-starting turns. Your own experience will
vary with how you use Claude Code.
I have several terminal windows open — why does Bubble only work in one of them?
Bubble binds to the first Claude Code session that triggers it, and stays
with that window from then on. While it is bound, waits in any other
terminal window are ignored; the binding releases only when the bound
window's session ends (/exit), after which whichever window next enters a
wait claims it.
bubble stop is a global switch and does not hand the binding over.
The UI sits against whichever terminal is on top, but the content it shows
stays with the bound window.
When do I get a skill-generated question, and when do I get a fallback one?
Each time you're waiting for the agent to reply, Bubble makes a Claude
call that picks the most relevant skill from its 86 built-in lenny-skills
for your current conversation and generates five questions. If that call
finishes before you open the animation, that is the skill-generated set
you see.
Otherwise you get the five built-in fallback questions (which are
carefully considered questions in their own right):
- the agent replies quickly, or the questions are still being generated:
Bubble shows the fallback right away, with no loading state;
- generation was never triggered this round: a previous question is still
open on screen;
- the call failed: not signed in to Claude Code, no network, timed out,
or the reply couldn't be parsed into questions.
If generation finishes while you're reading a fallback question, clicking
Next switches to the skill-generated questions.
~/.bubble/app/install.sh uninstallThis removes Bubble's hooks, CLI command, and auto-start entry. It leaves unrelated existing settings in ~/.claude/settings.json and ~/.zshrc untouched.