Build with Claude Code
The nook-plugin skill teaches Claude Code how Nook plugins work: the exact plugin.toml rules, every message and component with its required fields, the icon names, and the mistakes that leave a tile blank. It comes with a checker that runs your plugin the way Nook does and reports anything Nook would skip.
Install it
Unzip it into your personal skills folder, so Claude Code can use it in every project:
Expand-Archive "$HOME\Downloads\nook-plugin-skill.zip" "$HOME\.claude\skills" -ForceOr put it in your plugin's repository at .claude\skills\nook-plugin\ and commit it, so everyone who works on the plugin gets it. From a Nook checkout you can copy it instead:
Copy-Item -Recurse skills\nook-plugin "$HOME\.claude\skills\" -ForceRestart Claude Code (or start a new session) to pick it up.
Use it
Just describe the tile you want. Claude Code uses the skill on its own when you talk about a Nook plugin, a tile for the notch or plugin.toml, and you can also call it by name with /nook-plugin.
Make a Nook plugin that shows my unread GitHub notifications on a wide tile,
with the list on the page and a pulse in the pill when new ones arrive.My Nook tile just shows the puzzle icon and the name. Here's the folder: C:\code\nook-weatherClaude will pick live or poll mode and a tile size, copy the Python or Node helper if it fits, write the code around a single draw() function, run the checker, and fix what it finds. Then turn on Plugin dev mode in Nook's Settings: the new folder loads within a second, and every save restarts the plugin.
The checker
You can run the checker yourself too (Python 3.8 or later, nothing to install):
python "$HOME\.claude\skills\nook-plugin\scripts\check_plugin.py" C:\code\my-plugins\weather --event refresh:click --event city:submit:ParisIt validates plugin.toml, finds the program in run like Nook does, starts it with Nook's environment, sends hello, layout, your events, page_open and shutdown, and checks every line it prints. Poll plugins are run once, then once per event with NOOK_EVENT set. Your plugin's real data is never touched: it gets a temporary NOOK_DATA_DIR.
| It reports | For example |
|---|---|
| Errors (Nook would skip it) | an unknown key in plugin.toml, a bad id, a program not on PATH, a debug print on stdout, a button without id, a number where text must be a string, a live plugin that exits |
| Warnings (it works, but looks wrong) | an unknown icon or color, a typo in a field name, duplicate control ids, an input crammed onto a small tile, a redraw loop, data saved in the plugin folder |
skills/nook-plugin/ in the Nook repository.