Setup
From box to desk
in about three minutes.
Install the MCP plugin on your AI agent, power the device, join its captive portal, pair from your agent. Live usage flows within ~60 seconds.
Install the MCP plugin on your AI agent.
The tokenmonitor plugin ships through Fractal Manifold's MCP marketplace. Installing it registers the local broker (tokenmonitor-mcp) plus the configure / theme / settings / firmware skills — same surface across every supported CLI.
tokenmonitor_status and report the broker role + request count.
Power the device.
USB-C, 5 V / 1 A. Any wall charger or USB hub will do — the device draws < 4 W peak with the backlight at full.
On first boot, with no Wi-Fi yet stored, the device shows a setup screen offering three ways in: join its own access point and use the captive portal, type the Wi-Fi straight into the touchscreen, or push everything over a USB cable. Pick whichever suits you — the device listens on all three at once.
Give it Wi-Fi. Three routes.
The first screen is a chooser, not an instruction. All three routes are live at the same time — the device is running its own access point, listening on the touchscreen and watching the USB cable simultaneously, so you can start down one and switch to another without rebooting. Tap a card and it opens the detail view for that route.
Join the setup WiFi
The classic route: another device does the typing. The unit raises its own access point and serves a captive portal at 192.168.4.1.
- SSID
TokenMonitor-XXXX— last 4 = MAC suffix - Password shown on the screen, next to a QR for the portal address
- The portal asks for your Wi-Fi SSID + password, nothing else
Best when the device is on a wall wart rather than plugged into a computer.
Enter WiFi here
No phone involved. The panel is 480×480 capacitive — it scans, you tap your network and type the password on an on-screen keyboard.
- Sorted strongest-first, open networks flagged
- Manual for a hidden SSID, Rescan if yours hasn't appeared
- Same picker Settings opens later to change networks
Fastest when you are already standing in front of the unit.
Set up over USB
The cable it already draws power from is also a data link. One command from your agent pushes Wi-Fi, broker URL and key together — steps 3 and 4 collapse into one.
- No pairing code. Plugging it in is the proof you are standing in front of it
- Works with no shared network at all — before the device has ever seen Wi-Fi
- Also how you move a configured device onto a new network later
Linux hosts only for now; on macOS or Windows use route 1 or 2.
TokenMonitor
Setup
/tokenmonitor:configure from your AI agent on the same LAN and enter the code to finish setup (broker URL, key and city).Route 1 — what the portal looks like
Joining TokenMonitor-XXXX pops this page up on its own; if it doesn't, open 192.168.4.1 by hand.
It asks for two things and no more. Broker URL, key and city are not here — they come from your agent in step 4, over a signed channel, so nothing sensitive is ever typed into a page anyone on that access point could read.
Whichever route you take, the device reboots once and lands on Waiting for setup — except route 3, which already carried the broker URL and key across the cable and goes straight to the dashboard.
Pair from your AI agent. The magic moment.
Install the plugin (step 01 above, or the plugin page for the full per-CLI walkthrough), then ask Claude Code, Codex or Antigravity to configure your device:
The agent does the rest:
- Discovers your device on the LAN via mDNS
- Asks for the 6-digit code shown on screen
- Generates a passphrase, derives the PSK locally
- Pushes broker URL + key, device reboots
You're done.
The device lands on the dashboard. Within ~60 seconds the broker's first poll completes and live usage starts flowing, then refreshes about every 90 seconds.
Your own panel. Optional.
Swipe up on the dashboard to reach a screen that's entirely yours — a line, bar, pie, key/value table or plain-text widget, drawn from data you produce. A small script on your laptop writes a JSON file; the broker serves it to the device over the same signed LAN link; the device draws it. It's opt-in, off by default, and nothing is ever flashed — edit the file and the screen catches up within one poll.
GET /device/<id>/panel
Turn it on
The panel is off until you enable it. On the device: Settings → Display → Custom panel. Or from your agent, on any of the three CLIs:
Point the broker at a file
You decide where the file lives — the broker only reads the path you give it. Add a [panel] section to ~/.config/tokenmonitor/tokenmonitor.toml:
Restart the broker once after adding the section. From then on the file is re-read on every poll — rewrite it as often as you like, no restart needed.
<id> get?
dir/<id>.json— per-device, wins if presentdir/default.json— shared fallback in the folderfile— the single global one
Your device's 8-hex ID is on Settings → About (or ask your agent to list devices). If none of these resolve, the panel screen simply shows an empty-state message — that's normal, not an error.
Write the file
Any language works. Write it atomically — a temp file, then a rename — so the broker never catches a half-written file. Give any element a color, and set poll_s (3–60 s) when you want a near-live refresh:
A ~20-line Python generator you can steal →
Five widgets, your data & colors
Pick a shape for whatever you measure.
↑ Tap a shape · here's the file that draws it ↓
One panel — or a grid
Add more tiles, up to four.
Put more objects in tiles[] and the device lays them out for you: one fills the screen, two stack in rows, three or four fall into a 2×2 grid.
Colour anything
Every colour is an optional solid #rrggbb. Omit it and the element falls back to the active day / night theme:
- Screen & tile titles —
title_color - Tile background —
bg - Line / bar series & pie slices —
color - Table value / key cells —
color/kcolor - Text tile —
color
Limits
The device parses into fixed buffers — anything past these caps is simply ignored, never a crash:
| Tiles per document | 4 |
| Series · points each | 4 · 64 |
| X-axis labels | 12 |
| Pie slices | 8 |
| Table rows | 12 |
| Any text string | 32 chars |
| Whole file | 8 KB |
poll_s range | 3–60 s |
poll_s costs the broker nothing extra
Serving the panel is a plain file read, and provider usage is answered from the broker's ~30 s cache — so polling every few seconds never multiplies calls to Claude, Codex or Antigravity. The full field reference lives in the broker docs.