with one click
pp-vestaboard
// Read, render Trigger phrases: `what's on my vestaboard`, `show my vestaboard`, `send a message to my vestaboard`, `post to the vestaboard`, `use vestaboard`, `run vestaboard`.
// Read, render Trigger phrases: `what's on my vestaboard`, `show my vestaboard`, `send a message to my vestaboard`, `post to the vestaboard`, `use vestaboard`, `run vestaboard`.
| name | pp-vestaboard |
| description | Read, render Trigger phrases: `what's on my vestaboard`, `show my vestaboard`, `send a message to my vestaboard`, `post to the vestaboard`, `use vestaboard`, `run vestaboard`. |
| author | Cathryn Lavery |
| license | Apache-2.0 |
| argument-hint | <command> [args] | install cli|mcp |
| allowed-tools | Read Bash |
| metadata | {"openclaw":{"requires":{"bins":["vestaboard-pp-cli"]},"install":[{"kind":"go","bins":["vestaboard-pp-cli"],"module":"github.com/mvanhorn/printing-press-library/library/devices/vestaboard/cmd/vestaboard-pp-cli"}]}} |
This skill drives the vestaboard-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
npx -y @mvanhorn/printing-press-library install vestaboard --cli-only
vestaboard-pp-cli --version$GOPATH/bin (or $HOME/go/bin) is on $PATH.If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.3 or newer):
go install github.com/mvanhorn/printing-press-library/library/devices/vestaboard/cmd/vestaboard-pp-cli@latest
If --version reports "command not found" after install, the install step did not put the binary on $PATH. Do not proceed with skill commands until verification succeeds.
Wraps the Vestaboard Cloud Read/Write API (read the current message, send text or character-code messages, control transitions) plus the VBML text formatter on its own host. The novel 'message preview' renders the live board as readable text, and 'characters' prints the code table so you can build character-array payloads by hand.
Use this CLI to read or change what is displayed on a Vestaboard split-flap display: check the current message, render it as text, format text into character codes, post a new message, or adjust the transition style. It is the right tool when an agent needs to observe or update a physical Vestaboard programmatically.
Do not use this CLI for:
These capabilities aren't available in any other tool for this API.
message preview — See what's on your Vestaboard right now as readable text instead of a raw integer grid.
Reach for this before composing or sending — it is the only way to know the board's current contents without decoding codes by hand.
vestaboard-pp-cli message preview --json
characters — Print the full Vestaboard character-code table (code to glyph) for hand-building a character-array message.
Use this when constructing a 'message send' character payload so you map glyphs to the right integer codes.
vestaboard-pp-cli characters --json
message — The message currently shown on the Vestaboard.
vestaboard-pp-cli message get — Read the message currently displayed on the board.vestaboard-pp-cli message send — Send a new message to the board.transition — Transition animation settings for the board (Flagship and Note devices).
vestaboard-pp-cli transition get — Get the current transition style and speed.vestaboard-pp-cli transition set — Set the transition style and speed. Both fields are required.vbml — Vestaboard Markup Language (VBML) text formatting service.
vestaboard-pp-cli vbml — Convert a text string into a 2D array of Vestaboard character codes.When you know what you want to do but not which command does it, ask the CLI directly:
vestaboard-pp-cli which "<capability in your own words>"
which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match — fall back to --help or use a narrower query.
vestaboard-pp-cli message preview
Decodes the live layout into a bordered block of glyphs you can read.
vestaboard-pp-cli message get --agent --select currentMessage.id,currentMessage.layout
Pulls just the id and raw character grid for an agent without the surrounding envelope.
vestaboard-pp-cli vbml --message "GM" --json
Convert text to a character-code grid on the VBML host, then pass it to 'message send --body-json'.
vestaboard-pp-cli transition set --transition wave --transition-speed gentle
Change the flip animation style and speed.
Create a Cloud API token in the API tab on web.vestaboard.com (or the mobile app under Settings → Advanced Settings), then run 'vestaboard-pp-cli auth set-token '. The token is sent only to cloud.vestaboard.com; the VBML formatter on vbml.vestaboard.com takes no credentials.
Run vestaboard-pp-cli doctor to verify setup.
Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.
Pipeable — JSON on stdout, errors on stderr
Filterable — --select keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:
vestaboard-pp-cli message get --agent --select id,name,status
Previewable — --dry-run shows the request without sending
Non-interactive — never prompts, every input is a flag
Explicit retries — use --idempotent only when an already-existing create should count as success
When you (or the agent) notice something off about this CLI, record it:
vestaboard-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
vestaboard-pp-cli feedback --stdin < notes.txt
vestaboard-pp-cli feedback list --json --limit 10
Entries are stored locally at ~/.local/share/vestaboard-pp-cli/feedback.jsonl. They are never POSTed unless VESTABOARD_FEEDBACK_ENDPOINT is set AND either --send is passed or VESTABOARD_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.
Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
| Sink | Effect |
|---|---|
stdout | Default; write to stdout only |
file:<path> | Atomically write output to <path> (tmp + rename) |
webhook:<url> | POST the output body to the URL (application/json or application/x-ndjson when --compact) |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
vestaboard-pp-cli profile save briefing --json
vestaboard-pp-cli --profile briefing message get
vestaboard-pp-cli profile list --json
vestaboard-pp-cli profile show briefing
vestaboard-pp-cli profile delete briefing --yes
Explicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error (wrong arguments) |
| 3 | Resource not found |
| 4 | Authentication required |
| 5 | API error (upstream issue) |
| 7 | Rate limited (wait and retry) |
| 10 | Config error |
Parse $ARGUMENTS:
help, or --help → show vestaboard-pp-cli --help outputinstall → ends with mcp → MCP installation; otherwise → see Prerequisites above--agent)go install github.com/mvanhorn/printing-press-library/library/devices/vestaboard/cmd/vestaboard-pp-mcp@latest
claude mcp add vestaboard-pp-mcp -- vestaboard-pp-mcp
claude mcp listwhich vestaboard-pp-cli
If not found, offer to install (see Prerequisites at the top of this skill).--agent flag:
vestaboard-pp-cli <command> [subcommand] [args] --agent
vestaboard-pp-cli <command> --help.Use when looking for a CLI, API wrapper, scraper, data-source tool, automation tool, or focused agent skill for a task; searches the Printing Press Library and installs matching tools.
Every Splitwise feature, plus an offline SQLite ledger that powers balance, debt-aging, spend analytics Trigger phrases: `what do I owe on splitwise`, `who owes me money`, `split this expense`, `settle up the trip`, `how much did we spend on food`, `use splitwise`, `run splitwise`.
Read, render Trigger phrases: `what's on my vestaboard`, `show my vestaboard`, `send a message to my vestaboard`, `post to the vestaboard`, `use vestaboard`, `run vestaboard`.
Every RevenueCat v2 endpoint, plus a local database, offline search Trigger phrases: `what's my MRR`, `revenue snapshot`, `who churned this week`, `show failed billing`, `find entitlement desync`, `trace this refund`, `use revenuecat`, `run revenuecat`.
Every Splitwise feature, plus an offline SQLite ledger that powers balance, debt-aging, spend analytics Trigger phrases: `what do I owe on splitwise`, `who owes me money`, `split this expense`, `settle up the trip`, `how much did we spend on food`, `use splitwise`, `run splitwise`.
Query your local Chrome browsing history — search, topic clusters (Chrome's own Journeys), time/productivity reports, session timelines, downloads, and a behavioral profile — all read-only and on-device. Trigger phrases: `what have I been browsing`, `search my chrome history`, `what was that page I saw`, `my browsing journeys / topics`, `what did I download in chrome`, `what sites do I visit most`, `my browsing time report`, `my browsing profile`, `what was I researching last week`, `use chrome-history`, `run chrome-history-pp-cli`.