VIBEPULSE · VIBE-CODED HARDWARE
v1.0.0Windows joins the shelf ↗

The smallest screen on your desk. The first one you check.

You run out of Claude quota mid-task without warning, and agents sit waiting for you in a window you forgot. VibePulse is a 2.16-inch AMOLED that keeps both where you can't miss them — on the desk, not behind a tab.

runs offmacOSWindowsLinux — not yet

open source, MIT · github.com/niclasvestlund-YT/vibepulse

VibePulse on the panel — real 480 × 480, the same pixels
that ship to the glass (frame one rebuilt live, so it ticks)
01ON THE SHELF, RIGHT NOW

Sixty seconds of it running

No mockups, no motion design — a phone pointed at the glass. All three are the real panel, running on the shelf.

claude code needs you ⭐
on the shelf
the first one
02THE APP

VibePulse — the one you can install today

Open source, MIT — clone it, change it, sell it, no strings. Three screens do the work: where your quotas stand, when an agent is stuck, and whether today's pace lasts the week. Two more came later — what your usage is worth, and your repo's stars. Since v1.0 the whole thing runs off a Mac or a Windows PC. The repo is here.

U1 VibePulse — Claude weekly quota screen Quotas

Where you stand

Claude's weekly and heaviest-model quota, Codex weekly — each with reset countdown and "+N% used today" — plus burn rate and the max tracker below.

U2
NEEDS YOU alert — Claude is waiting
CODEX
NEEDS YOU
TORGET
CODEX IS WAITING
TAP TO DISMISS
Alerts

Needs you

A full-screen heads-up the moment an agent is blocked waiting for your input — Claude or Codex, whichever is stuck. Tap to dismiss — and when the question is one VibePulse supports, tap the answer instead.

U3 VibePulse — burn rate forecast screen Forecast

Burn rate

A forecast per provider: on pace, running out early (and when), or how much head-room is left at reset.

The panel held in a hand showing Claude's weekly quota at 73 percent, 22 hours 42 minutes to reset
The panel showing Claude weekly across all models at 54 percent

Both shots say STALE in the corner, and that is the point: the panel was unplugged from the Mac to be photographed, so it refuses to present old numbers as if they were current. Dashes instead of invented zeros, all the way down.

Every screen, actual size

Straight out of the simulator at 480 × 480 — byte-identical to what the panel draws. Both providers get the same treatment. One tile is marked as a rebuild; everything else is real output.

CLAUDE
Claude weekly quota at 73 percent
weekly quota
Full-screen NEEDS YOU alert, Claude is waiting
needs you
Burn rate forecast for both providers
burn rate
CODEX
Codex weekly quota at 35 percent
weekly quota
CODEX
NEEDS YOU
TORGET
CODEX IS WAITING
TAP TO DISMISS
needs you · rebuilt in html

Max Tracker — how hard you ran your plan

A day-by-day heatmap per provider: each cell is that day's peak against your own plan, red only at 100%. Underneath: your coding streak, weeks you maxed out, and average peak. Photographed on the glass, not rendered — this is what it looks like on a desk.

The panel held in a hand showing Claude's Max Tracker heatmap
claude · max tracker
The panel held in a hand showing Codex's Max Tracker heatmap
codex · max tracker

Is the subscription actually worth it?

Every usage screen answers how much have I spent? This one answers the question you actually have on the first of the month.

The value screen: 3.12 times, $312 of API usage against a $100 plan
value · month to date, at list API prices

It takes the tokens your agents already burned this month, prices them at the providers' own published API rates, and divides by what your plans cost. $312 of API usage on a $100 plan — 3.12×. One number, on the glass, no spreadsheet.

Cache tokens are the whole trick. One real record from these logs reads 2 input and 4 output against 23 655 cache-read — price only input and output and you undercount that single line by 577×.

And it won't bluff. Meet a model whose price the table doesn't know and the multiple drops to a dash rather than show you a confident wrong number. Haven't told it what you pay? You still get the dollars, and SET YOUR PLAN COST where the multiple would be.

Your repo's stars, on the shelf

Point it at one public repository and the panel carries it: stars big, forks quiet underneath. When a new star lands, the whole screen celebrates — with the name of whoever just starred you.

rebuilt in html · filled from GitHub the second you opened this page

The screen never talks to GitHub. The little service on your computer does the polling and hands the panel one flat number over your own network, so a GitHub outage can't stall your quota screens.

It's off until you switch it on — the tile, the celebration and its sound are three separate opt-ins, and a fresh clone is Claude and Codex only. Point it at any public repo, not just this one.

The provenance word in the corner — LIVE, CACHED, WAITING — is there so the glass never lies about how fresh the count is. The rebuilt tile on this page plays by the same rule: it shows a dash until GitHub actually answers.

The GitHub tile showing 42 stars and 3 forks
the tile · straight from the simulator
Full-screen celebration when a new star lands, naming the stargazer
a new star lands · tap to dismiss
The GitHub tile photographed on the real AMOLED panel, showing 17 stars
and the same tile on the actual glass

And you can answer it from the glass

NEEDS YOU tells you an agent is stuck. When the question is one VibePulse supports, the panel goes one step further: it shows the question, the option the agent recommends, and the buttons. You tap one, and the answer walks back to the agent on your computer.

A Codex question on the panel: how should Codex handle approvals, with a recommended option and an APPROVE button
a two-option question · APPROVE or LEAVE IT
A safe-command approval on the panel: python3 -c print(1), with ALLOW ONCE, DENY and LEAVE IT
a narrow safe-command tier · ALLOW ONCE, DENY

Only questions the panel can put honestly on 480 × 480 travel at all. Anything unknown, ambiguous, oversized, secret-bearing or mutating stays on the computer where it belongs, and the glass says so.

Silence is never a yes. A question that times out, or a screen that can't render its buttons, comes back as a failure and the decision falls back to the computer — never as an approval you never gave.

It's off until you turn it on. Claude's questions and Codex's are two separate opt-ins and a fresh clone ships with neither; switching one on enables no cloud transport, no relay and no second provider.

Turning it on does change what crosses your network, though — the panel can't show you a question without receiving it. Exactly what it gets, and what it never gets ↓

03GET ONE RUNNING

You don't write firmware. You ask for it.

No toolchains, no C, no datasheets. If you can describe what you want to an agent, you can put this on your shelf tonight.

STEP 1

Buy the board

~$30 on Amazon. Screen, WiFi, mics and motion are already behind the glass — you add a USB-C cable and a computer on the same WiFi. Nothing to solder, ever. A Mac or a Windows PC — since v1.0 both are supported hosts. Linux is not there yet ↓

STEP 2

Say the magic words

Clone the repo, open your agent — Claude Code, Codex, whichever — and paste the sentence below. It handles the toolchain, the build, the flash and the WiFi. The one thing it can't do is press the buttons — it tells you exactly when.

STEP 3

Put it on the shelf

Quotas glow. NEEDS YOU shouts when an agent is stuck. You tap it and go back to vibing.

$ git clone github.com/niclasvestlund-YT/vibepulse
$ cd vibepulse # open your favorite agent
 Set up VibePulse for me: help me fill in secrets.h, build and
  flash the board over USB, and start the tokenserver on this computer.
# that's it — that's the tutorial.
AFTER THE FIRST FLASH

The cable never has to come back

From then on it updates itself over WiFi — and it asks you first, on the glass. Hold the side button for three seconds, or tap UPDATE when the screen offers, and the new version installs while a ring drains on the display. If it doesn't come up healthy within fifteen seconds the board rolls itself back to the version that worked, on its own. No script can open that window for you; it takes a finger. USB-C stays the rescue hatch and is never written over the air.

It's public, it's MIT, and the clone above works right now. A star is how you find it again — the count above comes straight from GitHub, so it is whatever it is right this second.

04THE PLATFORM

Want your own app on it? Ask for one.

Describe an app, get an app

The panel runs Torget — its home screen, where every app is one tile. It's deliberately tiny, which means agents one-shot new apps for it. "Make me a tile that shows my server's ping" is a valid workflow here.

See the pixels before they ship

A desktop simulator renders the exact same pixels as the glass. You look at the mockup, say "yes", and only then does anything get flashed. No surprises on the shelf.

House rules

true black · IBM Plex · dashes instead of invented zeros

The Torget launcher on the panel
the launcher — yours would sit here
05THE HARDWARE

One $30 board, one cable

This is the entire shopping list.

WAVESHARE × VIBEPULSE HARDWARE SUPPORT

One reference board. Four more in the verification queue.

Waveshare is giving the open-source VibePulse project full support and providing development and verification hardware across several batches. The same VibePulse experience will be adapted to each form factor, run on the real unit and documented before that model is marked supported.

SUPPORTED · REFERENCE 2.16 480 × 480 · touch
VERIFICATION QUEUE 1.75 AMOLED · touch
VERIFICATION QUEUE 1.8 V2 AMOLED · touch
VERIFICATION QUEUE 1.91 AMOLED · touch
VERIFICATION QUEUE 2.41 V2 AMOLED · touch

After the compatibility ports: VibePulse Labs will explore a 4.3C command centre, an RGB Matrix status board and a DualEye desk character. Those are prototype directions, not announced releases.

DATASHEETONE BOARD, ONE CABLE
Display2.16″ AMOLED · 480 × 480 · touch
Price~$30
Assemblya USB-C cable
Companiona Mac or Windows PC on the same WiFi
Network2.4 GHz WiFi — 5 GHz won't work
Firmwareyour agent builds and flashes it
ESP32-S3 2.16″ AMOLED true black BOOT / RESET download mode: hold, tap, release USB-C power + flash
the whole computer lives behind the glass — nothing else to build

Nothing personal leaves your computer

  • Out of the box the screen only ever receives percentages, counts and coarse status — a project name, a model, an effort level. No prompts, no code, no commands, no file contents.
  • Switch on questions from the glass and one more thing crosses your own network, because the panel has to draw it: the question line, the label of the option the agent recommends, and — for the narrow safe-command tier — the command it is asking about. Never raw hook bodies, session transcripts, full option lists, file contents or environment variables.
  • Your OAuth token stays on the computer. The service uses it to ask for your own rate-limit numbers, and sends it nowhere else.
  • A lost screen leaks your WiFi credentials and the LAN name of your host — nothing you can't rotate in your router.
  • The screen talks to nothing but your own machine, over your own network. The host advertisement it looks for carries a port and a protocol version — no numbers, no prompts, no account.
THE COMPUTER BEHIND IT HOST SUPPORT

Mac or PC. Same panel, same screens.

  • SUPPORTED macOS starts with launchd · the daily driver
  • SUPPORTED · SINCE v1.0 Windows starts with Task Scheduler · signed off on a physical PC
  • NOT YET Linux the tests pass; the paths, credentials and service don't ship

Windows earned that word the same way a board does — on the real thing. The full service suite on a clean checkout, autostart, watchdog recovery, a firewall rule that opens on private networks only, sign-out, sleep and a full reboot, and last a physical NEEDS YOU → APPROVE answered with a finger. The support table, with the evidence ↗

And it no longer has to be one computer: the panel looks for tokenservers on your network, so a Mac and a PC can both offer to feed it and it stays with whichever one is healthy. The compiled address is still the fallback for networks that block discovery.

06BEFORE YOU BUY

The five things people ask

I'm on Windows.

That works now. v1.0 made Windows a real host, not a "it compiles" claim: the whole service suite, Task Scheduler autostart, the watchdog, the firewall rule, sign-out, sleep and a full reboot were run on a physical PC before the word supported was used. The host table is above ↑. Linux is still the missing one, and porting it is the most useful thing anyone could contribute.

I only use Claude. Or only Codex.

Either alone works. The half you don't use shows dashes — never invented numbers.

I don't have the board yet.

Run the simulator first — same code, same fonts, same pixels as the panel, no hardware. macOS below; on Debian or Ubuntu swap the first line for apt-get install libsdl2-dev cmake ninja-build:

brew install sdl2 cmake ninja
cmake -S sim -B sim/build -G Ninja && ninja -C sim/build
./sim/build/torget-sim

Do I have to plug it in again every time you ship something?

Once, for the first flash. After that it updates over WiFi and asks permission on the glass — a three-second button hold, or a tap on UPDATE when it offers. A build that doesn't come up healthy rolls itself back in fifteen seconds, and the USB port is still there if everything goes sideways.

Can I use a different board or screen?

Today, use the 2.16-inch reference board. With Waveshare supporting the project, the 1.75, 1.8 V2, 1.91 touch and 2.41 V2 are next in the physical-verification queue. A planned port is not compatible yet — each model only becomes supported after the UI runs on the real hardware and the setup is documented.

07INSIDE THE GLASS

More computer than it lets on

All of this is already on the board behind the 2.16-inch panel — and half of it is still asleep, waiting for an app.

● AWAKE — DRIVEN BY THE FIRMWARE
ESP32-S3
dual-core at 240 MHz, 8 MB PSRAM, 16 MB flash
AMOLED panel
480 × 480 true black, redrawn fast enough to animate — verified on the unit
Capacitive touch
tap to dismiss, tap to launch
WiFi 2.4 GHz
talks to the Mac or PC over LAN — verified on the unit
Dual mics
wired and initialised — capture not yet verified on a unit
Speaker out · ES8311
codec plus amplifier — it can talk back
Motion sensor
turns the picture when you turn the panel
USB-C port
power, the first flash and logs all go down it
Updates over WiFi
new builds land in a spare slot, SHA-256 checked, and roll back by themselves if the board doesn't come up healthy — delivered over the air on the unit
○ STILL ASLEEP — WIRED, WAITING
Bluetooth 5 LE
the radio is there; nothing speaks it yet
Battery + AXP2101
3.7 V lithium header and charge path — it could run cordless
Real-time clock
wired on the I2C bus — whether it survives a power cut is untested
microSD slot
room for local storage
○ MAYBE — THE CHIP CAN, THE BOARD IS UNPROVEN
USB host
it could be the computer, not the peripheral — this board's power path has never been checked
08DEVLOG

What changed lately

This thing is still being built, in public. Every entry below happened — the details come out of the repo itself, its changelog and release notes, not out of memory.

  1. Version 1.0 — and Windows is a real host now

    The panel was never the Mac-only part. The little service that reads your agent logs was. Since today it runs on a Windows PC too, and runs here means it was run: the whole test suite on a clean checkout on a physical machine, autostart through Task Scheduler, the watchdog putting the exact same build back after a kill, a firewall rule that opens on private networks only — then sign-out, sleep and a full reboot, with the panel still being polled after each one.

    It ends where it should: a question on the glass, APPROVE readable across the room, a finger on the answer, and the answer landing back in Codex on the PC. Silence and a fallback to the computer were failures, not passes — which is why this took a fortnight and not an afternoon.

    Second thing in the same release: the panel can find its own host. A Mac and a PC can both offer to feed it; it stays pinned to a healthy one and moves if that one goes quiet. The advertisement on the network carries a port and a protocol version and nothing else — no numbers, no prompts, no account. Linux is still the missing one.

    The release notes ↗

    A Codex question on the panel with a recommended option and an APPROVE button
  2. Waveshare is backing the next hardware wave

    Waveshare has offered full support for the open-source VibePulse project, including development and verification units across several hardware batches. The first compatibility wave targets the 1.75, 1.8 V2, 1.91 touch and 2.41 V2 AMOLED models; the 2.16 stays the reference build.

    These are not four unchecked compile targets. Each port gets a UI adapted to its shape, a real-hardware test and setup notes before it earns the word supported. After that, VibePulse Labs can start experimenting with a 4.3C command centre, an RGB Matrix status board and a DualEye desk character — prototypes, not release promises.

  3. The panel learned to answer back

    Up to here the glass could only shout that an agent was stuck. Now, when the question is one it can put honestly on 480 × 480, it shows the question, the option the agent recommends and the buttons — and your tap is the answer. Unknown, ambiguous, oversized, secret-bearing or mutating work never leaves the computer, and a question that times out comes back as a failure rather than a yes nobody said.

    Same release: a phone can teach the panel a new WiFi network from a QR code on the glass, and it remembers six places — so the thing can travel without a rebuild. The networks compiled into secrets.h stay as the floor it can always fall back to.

    The release notes ↗

    A safe-command approval on the panel with ALLOW ONCE, DENY and LEAVE IT
  4. Claude Code needs you

    A new short, and it is the whole idea in a few seconds: an agent stops and waits, and the room finds out instead of you finding out twenty minutes later. It is at the top of this page with the other two clips. Watch on YouTube ↗

  5. Your stars, on the shelf — and a name when one lands

    The panel can now carry one public repo: stars big, forks quiet underneath, and a full-screen celebration the moment someone stars you. Getting it onto the glass took four separate fixes — the Mac service was running old code, the firmware had the whole screen compiled out, and the URL was missing from the config. It went live at 17 stars, and a real star took it to 18 while I watched.

    Naming the stargazer was the fiddly part. GitHub's obvious endpoint wants a write permission just to read who starred you, which is absurd for a shelf ornament — so it reads the public events feed instead, and a read-only token resolves the name. No token still works; you just get "someone".

    The GitHub tile on the panel, showing 17 stars
  6. The glass will now tell you if your subscription is paying off

    New screen: it prices the tokens your agents already burned this month at the providers' list API rates and divides by what you pay. $312 of usage on a $100 plan — 3.12×. Same data as the quota screens, aimed at a completely different question.

    It read $8,296 the first time, for a month that was about a tenth of a weekly quota. The rate was right; the token count was sixteen times too big. Every codex resume replays the whole conversation's history into a new file, so one conversation spread across 113 files was counted 113 times. Counted once, that $8,296 became $516 — which is the number that matters, so it was worth a day.

    The release notes ↗

    The value screen showing 3.12 times
  7. It updates itself now — but only if you say yes

    One day that started with a frozen panel and ended with firmware that arrives over WiFi. Hold the side button three seconds, or tap UPDATE when the screen offers it, and a ten-minute window opens; the new build lands in a spare slot, gets checked, and has fifteen seconds to prove it boots before the board rolls itself back. Ten live deliveries before I'd call it done, and the USB port is still the rescue hatch.

    The delivery tool also refuses to send anything CI hasn't proven green, and refuses half-finished builds outright — that rule exists because a ghost build from the wrong folder once froze the glass.

    The release notes ↗

  8. A new clip of it running

    Another sixty seconds of the panel doing its job, filmed on the actual unit. It's at the top of this page, next to the first one. Watch on YouTube ↗

  9. The alert learned to breathe

    NEEDS YOU used to just sit there. Now the outline and the icon ring pulse four times when it appears, then rest — the text stays solid so it's still readable from across the room. Checked pixel by pixel in the simulator, then on the actual panel, because motion is the one thing a simulator can lie about.

  10. The Mac service stopped hammering the API

    A dead token made the service retry every two minutes for hours, which earned a rate-limit penalty. It now slows down after each failure — two minutes, four, eight — and rests for ten when the API says to. Second fix: your weekly numbers used to vanish between five-hour windows. They stay put now, and only the field that really has no data shows a dash.

    Full changelog ↗

  11. Open source, MIT

    The repo went public. Clone it, flash it, change it, sell it — MIT asks nothing back. This site went up the same day.

  12. Max Tracker: how hard you ran your plan

    A day-by-day heatmap per provider. Each square is that day's peak against your own plan, and only a true 100% turns red. Underneath: your streak, the weeks you maxed out, and your average peak. The old token-volume screen was cut in the same change — it carried no story.

    The panel showing Claude's Max Tracker heatmap