Rubato_Device Turns AI Waits Into Breaks

By Rogier Muller09.05.26
Rubato_Device Turns AI Waits Into Breaks

Rubato_Device is lovaxi’s open-source ESP8266 desk companion: a palm-sized retro-Mac screen that mirrors AI coding state and nudges you to take breaks. It deals with a weirdly modern problem: AI agents make developers wait, and those waits often turn into more sitting, staring, and context-drifting. The useful takeaway is simple: make agent state visible, but keep the signal narrow enough that it helps your body without becoming another dashboard.

Rubato is an AI coding state display for your desk, built around a 240×240 color screen, Wi-Fi, and a small plugin that publishes session state over MQTT. For Cursor, Anysphere’s AI code editor, the interesting part is not the retro shell; it is how the project turns Cursor rules, agent waits, and reviewable IDE workflows into something you can feel before you lose the afternoon. Gemini Workshop is part of Harness Institute.

Watch the wait, not the whole developer

Rubato’s core loop is tiny. A local plugin observes an AI coding session and publishes states like thinking, generating, and done over MQTT with TLS. The device shows those states as a breathing orb: cream while thinking, blue while generating, green when finished.

That restraint matters. The device is not trying to become a second IDE, a task tracker, or a productivity scoreboard. It watches the boring part of agentic coding: the gap between “I asked for work” and “I should review the result.”

The health layer sits on top of that wait. When a task looks long, the screen can switch into a full-screen micro-break reminder: water, bathroom break, eye rest, neck stretch, kegels, or standing desk. The README frames the project as “when AI thinks, you move,” which is exactly the right level of ambition.

The trap is over-instrumenting the human. A desk device that tracks every keystroke, app switch, or pause becomes creepy fast. Rubato is easier to like because the signal is coarse and tied to agent state, not personal surveillance.

Treat the plugin as the real boundary

The hardware is charming, but the plugin boundary is the serious engineering detail. Rubato’s firmware, hardware design, tools, and docs are open source, and the project uses a PC-side plugin to bridge AI clients to the device. As of September 2026, the repository is mainly C, GPL-3.0 licensed, and built around ESP8266 hardware.

That architecture is a good pattern for AI coding tools. Keep the desk device dumb. Keep credentials, tool-specific logic, and network publishing in a small local process you can inspect and remove.

A safe version of this pattern for a Cursor user looks like this:

  • Cursor Agent runs in the editor.
  • A local plugin sees only coarse session state.
  • The plugin publishes thinking, generating, or done to MQTT.
  • The device renders color and break prompts.
  • Code, prompts, diffs, secrets, and filenames stay out of the hardware path unless you deliberately add them.

The trap is treating “it only lights up” as a security model. If the bridge process can read editor state or repo files, it deserves the same review you would give a hook, MCP server, or custom agent integration. The smallness of the screen does not make the software boundary small.

For the sharper repo-safety version of this concern, see Git Hijack Lets Repos Run Code in Agents. It is the same lesson from the other side: agent-adjacent code should be boring, scoped, and reviewable.

Keep Cursor context boring and local

Rubato is not a Cursor feature, but it sits near the work Cursor users already do with rules, custom agents, skills, and review flows. Cursor subagents and skills are useful when they make the agent’s job narrower; a desk device is useful when it makes the developer’s next action clearer.

A Cursor rule is persistent instruction that helps the agent behave correctly inside a repo. If you experiment with Rubato beside Cursor, write down what must never cross the boundary. Do it in the repo, not in a private chat prompt you will forget.

Here is a small .mdc rule stub you could keep with an experiment branch:

---
description: Boundary for local AI-state desk device experiments
alwaysApply: true
---

When adding or changing integrations for a desk display or MQTT status publisher:

- Only publish coarse agent state: thinking, generating, done, error, idle.
- Do not publish source code, prompts, file paths, branch names, secrets, diffs, or user text.
- Keep credentials in local environment variables or the OS keychain, never in the repo.
- Prefer read-only observation of agent state over editor automation.
- Include a short test note showing what payloads were emitted during one sample run.

That is not paperwork. It is a reminder to your future self that the fun part is the glowing Mac face, not accidentally turning your editor into a telemetry hose.

The related Cursor Workshop topic on subagents and skills goes deeper on the same shape: keep capabilities scoped, named, and easy to review. The trap is making every experiment a new always-on automation. Most of them should stay small until they prove they are worth keeping.

Decide if desk hardware is worth it

Rubato makes the most sense when your AI coding sessions have real wait time. If you mostly use inline completions, the device may be cute but unnecessary. If you regularly kick off multi-step agent work, long refactors, test generation, or review passes, a physical “you can look away now” signal starts to feel practical.

The strongest argument for Rubato is not productivity. It is interruption quality. A phone notification pulls you into a noisy general-purpose device. A browser dashboard asks you to stare at another screen. A tiny desk display can say one thing and then shut up.

The weakest argument is novelty. A retro-Mac shell will get attention for a day. The habit only survives if the signal maps to a real action: stand up while generating, drink water after a long run, review when green.

If you build your own, start with the source repository and inspect the firmware and plugin path before connecting it to your normal editor setup. If you buy one from Tindie, the same rule applies: read what the local plugin observes and what it sends.

Try it safely with one tiny experiment

Use Rubato as a weekend-sized experiment before making it part of your normal Cursor rhythm. The goal is to learn whether physical agent state helps you review better and sit less, not to wire every coding tool into one glowing status bus.

Try Rubato when Skip it when
You run long Cursor Agent tasks and forget to move. Your AI usage is mostly quick inline edits.
You like visible state outside the IDE. Another object on the desk will become clutter.
You can inspect the plugin and MQTT payloads. You are not comfortable reviewing local bridge software.
You want break prompts tied to real wait time. You mainly want analytics, reports, or performance tracking.

A safe first pass is deliberately boring:

  • Build or set up the device from the project docs.
  • Run it against a test MQTT broker or non-sensitive local setup first.
  • Trigger one agent task that takes longer than 30 seconds.
  • Confirm the payloads contain only coarse state.
  • Watch whether the break prompt changes your behavior once.
  • Remove the plugin if you cannot explain exactly what it reads.

If that sounds too cautious, good. Desk hardware is fun precisely because it feels harmless. The software bridge is where you earn that feeling.

Common questions

What is Rubato_Device?

Rubato_Device is an open-source ESP8266 desk companion that displays AI coding session state on a 240×240 screen. The project mirrors states such as thinking, generating, and done, then uses longer waits to show micro-break reminders like water, eye rest, stretching, and standing.

Does Rubato_Device work with Cursor?

The project’s description says it supports Cursor through plugins, alongside other AI coding clients. For Cursor users, the important check is the plugin boundary: confirm what the local process can observe, what it publishes over MQTT, and whether it avoids code, prompts, filenames, and secrets.

Is this a Cursor subagent or Cursor skill?

No, Rubato_Device is separate hardware plus firmware and plugins, not a Cursor subagent or Cursor skill. It can still sit beside those workflows because it mirrors agent state externally while Cursor rules, skills, and custom agents keep the coding behavior scoped inside the editor.

Is a physical AI status display overkill?

It is overkill if your agent runs are short or you already handle breaks well. It becomes reasonable when AI coding waits are long enough to create bad habits: staring at generation, missing review handoff moments, or sitting through tasks that could have been a stretch break.

What should I review before connecting it to a real repo?

Review the plugin before the plastic. Look for credentials, network destinations, MQTT topics, payload shape, logging behavior, and any access to editor files or repo metadata. The safest useful payload is a coarse status enum, not a transcript of what the agent is doing.

Best ways to use this research

  • Best for: Developers who use Cursor Agent for longer tasks and want a physical cue for “wait,” “review,” and “take a break.”
  • Best first artifact: A tiny Cursor rule or AGENTS.md note that limits any status bridge to coarse states and bans code, prompts, paths, and secrets.
  • Best comparison angle: Compare Rubato with a desktop notification, not with a full observability stack. Its value is calm peripheral awareness.
  • Best safety question: Ask whether the local plugin can be explained in one paragraph. If not, it is too complex for a desk-light experiment.

Further reading

Next step

Open the Rubato_Device repository and read the plugin boundary before you look at the enclosure. If the payload is still just agent state after your review, try one long Cursor task and see whether the little screen actually gets you out of the chair.

One methodology lens

One useful way to read this through our methodology is the Plan step: delegate first-pass decomposition and dependency mapping, review the sequencing and assumptions, and keep ownership of scope and priorities. If that split is still fuzzy, the workflow usually is too.