The day that got me started looked like this. I sat down at ten in the
morning, Claude Code was grinding through a refactor, and I was watching
the output scroll, answering a prompt here and there. When I next looked
at the clock it was past three. I had not stood up once. The agent did
its job. Mine, apparently, was sitting.
The embarrassing part: my first thought was not "I should fix this."
It was "I wonder if this window is worth money."
The week I tried to sell your wait
Think about what that wait actually is. A developer in front of a
terminal, mildly bored, eyes parked on a stream of tool calls. That is
an advertiser's dream slot. So I spent a week checking whether you could
sell it: show ads to developers in the terminal while their agent works.
It is not a crazy idea. Sourcegraph already ships Amp Free, an
ad-supported tier of their coding agent with real dev-tool advertisers
in the output. The slot exists and someone is selling it.
The numbers killed it anyway. EthicalAds, the biggest player in
developer advertising, paid out about $124K this January. That is the
market leader. CodeFund, the closest thing to a direct predecessor,
burned around $50K a month and shut down in 2020, a year or two short
of breaking even. And the one time somebody printed promo into other
people's terminals at scale, npm in 2019, the backlash was loud enough
that npm banned the practice in its terms of service. That lesson stuck
with me: the terminal is somebody's workspace. Printing ads into it
reads as vandalism.
Tiny market, dead predecessor, hostile audience. I wrote NO-GO in my
notes. But the window would not leave me alone. The wait is real, the
attention is real. I had spent a week trying to hand it to the wrong side.
Giving the window back
So I built the opposite thing. vibestretch is a Claude Code plugin that
watches how long the agent has kept you waiting and, once in a while,
prints one line:
🧘 Slow neck rolls. 5 each direction. · vibestretch · 7 min of agent time
One stretch, or a micro workout, or a 20-20-20 eye break. That's all
it does.
The part worth explaining is when it speaks. It is not a break timer.
Timers fire on a schedule, which means they fire mid-thought, which is
why most people turn them off within a week. vibestretch only counts
the minutes an agent turn kept you waiting, and a nudge needs three
things at once: the current turn has been running at least 2 minutes,
at least 5 minutes of waiting have piled up since your last break, and
15 minutes have passed since the last nudge. A day of quick turns
produces silence. There is nothing to snooze because it never
interrupts anything.
The counter was lying
Making the number honest was more work than the feature. The first
version printed "7 min sitting." That was a lie. The agent had worked
seven minutes; I might have been in the kitchen. Now the plugin reads
the macOS idle clock, so the minutes stop counting when you walk away,
and an agent grinding overnight adds nothing. The label says "7 min of
agent time" because that is the thing it actually measures. A counter
that lies about something small is a counter you stop trusting about
everything.
I should also tell you what the first real tester said. He ran it for
three days and told me he would not keep it. He moves around enough
during the day anyway. Fair. If you already stand up on your own, this
has nothing for you. It is for the people who look up at 3pm and
realize the last time they moved was breakfast.
Under the hood it is a few POSIX shell scripts on three hooks. No
dependencies, no daemon, no telemetry, no network calls. And no links
printed into your terminal, ever. That one is not a technical
constraint. It is the npm lesson written into a rule.
The repo: https://github.com/Eliasjunit/vibestretch. The thresholds
(2/5/15) are the part I am least sure about. Tell me they are wrong.
Top comments (0)