nexu-io/library-curator
| Search the OD Library (the global asset registry) and apply matching assets into the current project mid-task. Use when the user asks to reuse an image they captured/uploaded earlier, "pull a logo/screenshot from my library", or to find and drop a stored asset into the page being built.
npx skills add https://github.com/nexu-io/open-design --skill library-curator
Reuse assets that already live in the user's OD Library — images captured with
the OD Clipper, manual uploads, agent-generated media, and design-system
material — without asking the user to re-upload them.
"my logo", "that hero image from earlier").
library over freshly generated media.
Both endpoints authenticate with the run's tool token (OD_TOOL_TOKEN, injected
by the daemon) and operate on the project the run belongs to.
POST /api/tools/library/search
{ "query": "blue hero background", "kind": "image", "limit": 20 }
Returns { "results": [{ "asset": { "id": "...", "kind": "image", "sourceTitle": "...", "width": 1600, "height": 900, "sources": [...] }, "score": 0 }], "semantic": false }.
semantic: false means keyword/metadata matching (no embedding model
configured). Filter and rank the results yourself from the asset metadata.
POST /api/tools/library/apply
{ "assetId": "<id from search>", "dir": "assets" }
Copies the asset into the project (default subdir library/, or the dir you
pass) and returns { "relPath": "assets/<hash>.png" }. Reference that
relPath from the HTML/CSS you write (e.g. <img src="assets/ab12cd34ef.png">).
If search returns nothing, fall back to media generation rather than guessing a
path — never invent a relPath that apply did not return.
Take nexu-io/library-curator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.