ToyTool Firmware

A Claude Code usage display for your desk

Your Claude Code session and weekly limits, time to reset and today’s tokens on a GeekMagic SmallTV-Ultra desk screen. One Node script, no soldering.

7 min read

The ToyTool mascot, a SmallTV-Ultra, showing the Claude Code watch face

A GeekMagic SmallTV-Ultra with ToyTool Firmware can sit next to your keyboard and show how much of your Claude Code limits you’ve used: the 5‑hour session and the week, as percentages, the time until the session resets and how many tokens you’ve burned today. A small Node script on your computer reads the numbers and sends them to the screen over your home network every 15 seconds. You can choose four faces, one of them with Clawd, the pixel mascot, who walks while Claude Code is writing and falls asleep when you hit the limit.

Four Claude Code faces on the 240×240 screen: two rings for session 42% and week 18%; one big “42%” with a bar; a dashboard of four tiles with session, week, “resets in 2:23” and “1.4M tokens” today; and the pixel mascot Clawd above the session and week numbers
The four Claude Code faces, drawn by the firmware’s own code with sample numbers: Claude Code, Claude · number, Claude · dashboard and Claude Code · Clawd.

Claude, Claude Code and Clawd belong to Anthropic. These faces and the helper are ToyTool’s own, unofficial and not affiliated with Anthropic.

What you need

  • A GeekMagic SmallTV-Ultra running ToyTool Firmware, activated with a licence ($3.99 per screen). The animated Clawd face needs firmware 1.14 or newer.
  • A computer where you use Claude Code, signed in with a Claude subscription (Pro, Max, Team or Enterprise). The session and weekly limits only exist for those sign-ins; with an API key there is nothing to show.
  • Node.js 18 or newer on that computer.
  • The computer and the screen on the same home network.

Set it up

  1. Put a Claude Code face on the screen. In your ToyTool account open Faces, pick one from the Claude Code collection and add it to the screen.
  2. Find the screen’s IP address. The face’s Settings in your account shows the exact command with your screen’s address once Local network address is on in the screen settings. The screen also shows it for a moment as “Connected 192.168.…” after it joins Wi‑Fi.
  3. Download the helper — a single file, agent.mjs — into any folder. From a terminal:

    curl -O https://toytool.work/smalltv/claude/agent.mjs

    It’s about 180 lines of plain JavaScript with no dependencies, so it’s worth a read before you run it.

  4. Test it once. With your screen’s address in place of 192.168.1.50:

    node agent.mjs --once 192.168.1.50

    It sends one update and prints what it sent, something like this (your numbers will differ):

    sent: {"value":"42","unit":"%","sub":"Resets in 2 h 23 min","state":"1","progress":0.42,"rows":[["Session","42%"],["Week","18%"],["Reset","at 17:00"],["Today","1.4M"],["Resets in","2:23"]]}
  5. Leave it running: node agent.mjs 192.168.1.50. It updates the screen every 15 seconds for as long as the terminal stays open — minimise it rather than closing it.
The Clawd face’s settings in a ToyTool account: “Claude Code helper — a small script on the computer where you use Claude Code. Every 15 seconds it sends your limits to this screen over your home network”, the command “node agent.mjs 192.168.1.50”, a download button for agent.mjs and a “Copy command” button
The face’s Settings in your account give you the download and the command with your screen’s address (a test account).

What it reads, and where it sends it

The helper is the whole integration: the screen doesn’t talk to Anthropic and ToyTool’s server never sees any of it.

WhatWhere it comes fromHow often
Session (5‑hour) and week, in % used, and when the session resetsAsked from Anthropic (api.anthropic.com) with the sign-in Claude Code saved on this computer — the same numbers /usage shows in Claude Codeonce a minute
Tokens todayCounted from Claude Code’s own logs on this computer (~/.claude/projects): input, output and cache tokens of every reply since local midnightevery 15 seconds
“Claude Code is writing right now”A Claude Code log on this computer changed in the last 90 secondsevery 15 seconds
The screen’s language (English or Russian)The screen’s own settings, GET /api/configevery 10 minutes
  • The sign-in is read from ~/.claude/.credentials.json (on Windows %USERPROFILE%\.claude\.credentials.json) each time it’s needed. The token goes to api.anthropic.com and nowhere else.
  • The helper writes nothing to disk and keeps nothing between runs.
  • What reaches the screen is a data-only widget called cc: the percentages, the status line and five short rows, sent with plain HTTP inside your home network. It lives on the screen for 15 minutes, so when the helper stops, the faces show dashes and Clawd goes to sleep.

That matches the privacy policy: nothing from the helper goes to ToyTool.

The four faces

FaceShowsGood for
Claude CodeTwo rings — the outer one the session, the inner one the week — with both percentages and the time to reseta quick glance from across the desk
Claude · numberThe session as one big number with a bar, the countdown under it, the week at the bottom and the time on topwhen the session is all you watch
Claude · dashboardFour tiles: session, week, time left to the reset (and the clock time it happens) and today’s tokensthe full picture
Claude Code · ClawdClawd, with the status line and the session and week underneathcompany

All four follow the screen’s language and take their turn in the rotation with your other faces — or pin one in your account if the desk screen should only show Claude.

Clawd, the pixel mascot, walking with a spinning plus sign above him; under him “Resets in 2 h 23 min”, Session 42% and Week 18%
Clawd while Claude Code is writing (firmware render, sample data).

Clawd’s mood comes from the numbers:

Five states of Clawd: idle at 12%; walking with a spinning sign at 42%; sweating at 87%; asleep with Z’s at 100% with “Limit until 15:42”; looking around with a question mark and dashes under “Sign-in expired”
Idle, working, sweating at 80%+, asleep at the limit, confused without data (sample data).
ClawdWhen
breathes and blinksyou’re not using Claude Code right now
walks, with a ✻ spinningClaude Code wrote to its log in the last 90 seconds
sweatsthe session is at 80% or more
sleeps, with Z’sthe session limit is used up — or the helper isn’t running
looks around, with a “?”the helper runs but has no limits to show (see below)

When the numbers don’t come

The status line on the faces says what’s wrong:

  • “Not signed in to Claude Code” — the helper found no sign-in file. Run claude once and log in with your Claude account. On macOS see the limits below.
  • “Sign-in expired” — Claude Code renews its sign-in when it runs. Open Claude Code in a terminal once and the numbers come back; node agent.mjs --once … also prints when the saved sign-in expired.
  • “Can’t reach Anthropic” or “Anthropic: error …” — the computer is offline or Anthropic’s side answered with an error; the helper keeps trying every minute.
  • Dashes everywhere and a sleeping Clawd — no update for 15 minutes: the helper isn’t running, or it can’t reach the screen. In the terminal you’ll see screen 192.168.1.50 didn’t answer. Check the address in your account (it can change after a router restart — a DHCP reservation fixes that) and that both devices are on the same network.

Limits

  • macOS: Claude Code keeps its sign-in in the macOS Keychain, not in ~/.claude/.credentials.json, and the helper only reads the file. On a Mac the session and week stay empty (“Not signed in to Claude Code”); today’s tokens and Clawd’s “working” mood still work.
  • One computer. Today’s tokens are counted from the logs of the computer the helper runs on; work on other computers isn’t in that number. The session and week limits are account-wide, so those are right wherever you work.
  • A custom config folder isn’t followed. If you set CLAUDE_CONFIG_DIR, the helper still looks in ~/.claude.
  • The usage endpoint isn’t a public API. The helper asks the same place Claude Code’s /usage does; if Anthropic changes it, the limits stop until the helper is updated.
  • Claude Code only. Codex and other tools aren’t supported.
  • The computer has to be on — the helper is what fetches the numbers.

Other ways to put Claude usage on a desk

  • Clawdmeter — firmware for several Waveshare ESP32 boards with AMOLED or LCD touch screens, plus a desktop app that pairs with the board over Bluetooth. A bigger, prettier device if you’re happy to buy one of those boards.
  • smalltv-mod — open-source firmware for the SmallTV family (the Ultra included) with a Claude usage meter among other screens; the meter needs the clawdmeter daemon running on a PC.
  • ClaudeTV — open firmware for the SmallTV-Ultra that polls a small collector service; the collector runs on an always-on Linux machine on your network and can add Codex usage.
  • smalltv-esphome — ESPHome firmware where a program on your PC draws the frames (Claude and Codex usage, stocks and more) and streams them to the screen.

They’re free and open source; ToyTool is paid and closed, and in exchange you get designed faces, an account to set everything up from anywhere and the rest of the screen’s life — weather, rates, YouTube — around the Claude faces. A side-by-side look at all the options is in SmallTV-Ultra firmware options compared. If you’d rather build your own Claude face, the helper’s data is an ordinary widget: see the widget API.


Sources: the helper’s source (agent.mjs) and the firmware; the face pictures are renders by the firmware’s own drawing code with sample data.

Faces from this guide