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
that ship to the glass (frame one rebuilt live, so it ticks)
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.
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.
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.
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.
Forecast
Burn rate
A forecast per provider: on pace, running out early (and when), or how much head-room is left at reset.
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.
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.
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.
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.
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.
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.
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 ↓
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.
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 ↓
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.
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.
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.
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
One $30 board, one cable
This is the entire shopping list.
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.
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.
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.
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.
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.
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.
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.
-
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.
-
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.
-
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.
-
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 ↗
-
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 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.
-
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.
-
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 ↗
-
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.
-
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.
-
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.
-
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.