Skip to content

Releases: Eliasjunit/vibestretch

v0.7.1 — the banner reaches VS Code

Choose a tag to compare

@Eliasjunit Eliasjunit released this 17 Aug 16:21

If you keep your agent in VS Code's integrated terminal, the notification banner
never arrived — and not because VS Code refused it. We were never sending one:
that terminal isn't among the hosts the plugin recognises, so the sequence was
skipped entirely, extension or no extension.

VS Code has no desktop notification of its own for these sequences and discards
them without printing anything, which is why nothing ever looked broken. But the
notifier extensions people install for exactly that gap read the same
OSC 777;notify form Warp and Ghostty do — and now they receive it. With no
extension installed nothing is shown and nothing is printed; the line, the chime
and the status line work as they always did. Cursor and other VS Code forks are
covered by the same check.

Found by a tester running Claude Code inside VS Code, a host this plugin had
never been tried in. Terminals that aren't recognised still get no sequence at
all — stray bytes in someone else's session are worse than a missing banner, and
that path now has a test of its own.

v0.7.0 — bring your own exercises

Choose a tag to compare

@Eliasjunit Eliasjunit released this 05 Aug 03:33

The built-in twelve are a starting point, not a prescription. Now you can replace them:

mkdir -p ~/.config/vibestretch
cat > ~/.config/vibestretch/exercises.txt <<'LIST'
# blank lines and comments are skipped
Refill the water glass. Yes, now.
Hang from the pull-up bar for 20 seconds.
Look out the window and find something green.
LIST

Point VIBESTRETCH_EXERCISES somewhere else if you'd rather keep the file elsewhere — per-project lists work that way too. Rotation walks your list in order, quotes and backslashes in your text are safe, and a file that exists but has nothing usable in it falls back to the built-ins rather than nudging you with a blank line.

This closes the roadmap the plugin shipped with: Codex, Gemini, and your own exercises.

v0.6.0 — Gemini CLI support

Choose a tag to compare

@Eliasjunit Eliasjunit released this 05 Aug 03:18

vibestretch now runs on all three major agent CLIs: Claude Code, Codex, and Gemini.

git clone https://github.com/Eliasjunit/vibestretch ~/.gemini/vibestretch
jq -s '.[0] * .[1]' ~/.gemini/settings.json ~/.gemini/vibestretch/hooks/gemini-hooks.json > /tmp/s.json && mv /tmp/s.json ~/.gemini/settings.json

Gemini's BeforeAgent, AfterTool and AfterAgent map exactly onto the three moments the plugin cares about, and its systemMessage is shown straight to you — so you get the line in the session and the chime. No notification banner there: a Gemini hook's stdout is reserved for JSON, so there is nowhere to put an escape sequence.

The waiting debt is shared across CLIs on purpose. An hour spent waiting is an hour spent waiting, whichever agent kept you in the chair — and switching tools shouldn't reset your spine's clock.

Built against the published hook contracts and validated against them; not yet dogfooded on live Codex or Gemini installs.

v0.5.0 — Codex CLI support

Choose a tag to compare

@Eliasjunit Eliasjunit released this 04 Aug 23:46

vibestretch now runs on OpenAI's Codex CLI as well as Claude Code.

git clone https://github.com/Eliasjunit/vibestretch ~/.codex/vibestretch
cp ~/.codex/vibestretch/hooks/codex-hooks.json ~/.codex/hooks.json

Codex exposes the same three lifecycle events the plugin needs and the same session_id, so the accounting is identical — and the debt is shared on purpose: an hour of waiting is an hour of waiting whichever agent kept you in the chair.

One host difference worth knowing: Codex parses hook output strictly and discards the whole object if it contains a field it doesn't know. It has no terminal-sequence field, so the notification banner is skipped there rather than costing you the nudge. You get the line in the session and the chime; the status line segment stays Claude Code only, since that bar isn't scriptable in Codex.

Built and validated against Codex's published hook schemas, not yet dogfooded on a live install — issues welcome if your build disagrees.

v0.4.6 — a real break burns the debt

Choose a tag to compare

@Eliasjunit Eliasjunit released this 04 Aug 23:36

Come back to your machine after an hour away and the counter no longer greets you with a debt you already walked off.

The 45-minute reset was only wired into the prompt hook, so it needed you to type something. Return to a window where the agent kept working on its own and only PostToolUse runs — nothing reset, and that first check refreshed the activity mark, so by the time you did type, no gap was visible any more. The rule couldn't fire in exactly the case it was written for.

The break is now measured on the OS input clock: while you're away each check records when you last touched the machine, and the first check after your return compares that against your first touch back. A 45+ minute gap zeroes the debt right there, before any nudge is considered.

Nothing else changes: short breaks still keep your debt, present-human accounting is untouched, and systems without an idle clock (Linux) behave exactly as before.

v0.4.5 — tab title removed (Claude Code owns it)

Choose a tag to compare

@Eliasjunit Eliasjunit released this 02 Aug 23:06

The tab-title badge added in 0.4.2 is gone: Claude Code rewrites the terminal title every turn, so anything a plugin parks there disappears within seconds. The notification banner stays, and the channel that actually survives you looking away is the status line (/vibestretch:statusline) — exercise in green for five minutes, quiet agent-time counter after.

v0.4.4 — the counter says what it measures

Choose a tag to compare

@Eliasjunit Eliasjunit released this 02 Aug 23:01

The counter used to read 7 min sitting, which sounds like a claim about how long you have been at your desk. It never was: it counts agent time — the minutes an agent turn was in flight while you were present, since your last nudge. Same number, honest words, everywhere: nudge line, notification, status line, docs. The tab title now just says 🧘 time to move.

v0.4.3 — the tab title clears itself

Choose a tag to compare

@Eliasjunit Eliasjunit released this 02 Aug 22:45

Follow-up to v0.4.2: the tab title now hands itself back at your next prompt instead of sitting there until the next nudge. A badge that never clears is a stale claim, and this plugin doesn't make those.

v0.4.2 — the tab title carries the nudge home

Choose a tag to compare

@Eliasjunit Eliasjunit released this 01 Aug 22:16

The nudge now sets your terminal's tab title (🧘 time to move) alongside the chime and the in-session line. The notification banner is transient — some terminals post a real OS notification, Warp draws its own in-window one, and both are gone by the time you come back from another app. The tab title isn't: it waits for you, and needs no notification permission anywhere. VIBESTRETCH_NOTIFY=0 drops both.

v0.4.1 — unattended agent time is not sitting time

Choose a tag to compare

@Eliasjunit Eliasjunit released this 01 Aug 00:11

Honesty fix: while nobody is touching the machine (macOS keyboard/mouse idle clock, VIBESTRETCH_AWAY, default 5 min), agent activity builds no sitting debt and nudges never fire — an overnight workflow no longer greets you with "33 min sitting" you never sat, and nothing chimes at an empty chair at 3 a.m. Hook payloads without a session_id no longer pool into a shared eternal turn. On Linux the guard degrades to the existing 45-minute reset (documented).