Setup
[setup]
Paste into your agent (Claude Code, Codex, Cursor, any MCP client). It installs the skill, wires the MCP and verifies the tools:
No Niblet key? Continue from local product evidence; catalogue retrieval is optional. To get more references, see More references with Niblet.
Or pick one:
Standalone MCP config (the plugin's own mcp.json pins the release it was tested with instead of @latest):
@latest tracks npm; teams pin @pymodel/[email protected]. Plugin skill content updates separately (/plugin update …). MCP registry name: io.github.PyModel/designer-skill-mcp. Requires Node 22+.
Per-client config (VS Code, Codex TOML, Kilo, Open Code, Claude Desktop, Pythinker, Pi)
VS Code .vscode/mcp.json (1.99+):
Codex CLI ~/.codex/config.toml:
Open Code opencode.json:
Claude Desktop, Cursor (.cursor/mcp.json), Kilo Code (mcp_settings.json), Pythinker (~/.pythinker/mcp.json): the canonical mcpServers JSON above. Pythinker verify: pythinker mcp test designer-skill (guide).
Pi: the same JSON, or register the skill natively: { "skills": [{ "path": "/path/to/skills/designer-skill/SKILL.md" }] }
Local checkout: replace npx with "command": "node", "args": ["/abs/path/to/designer-skill-mcp/dist/index.js"].
How it works
[how]
The gate is static only, by design: overall status is FAIL or NOT_VERIFIED, never a rendered-readiness pass. verify_rendered loads a local page in a real browser (the project's own Playwright and axe-core) and reports page load, console errors, broken images, clipped text, overflow and accessibility with screenshots; without Playwright it reports NOT_RUN. check_contrast measures explicit color pairs.
More references with Niblet (optional)
Everything above works with no account and no key. For real product screens to compare against, recorded design references, license-recorded fonts and icons, and React component source:
- Sign up at niblet.pymodel.com and create an MCP key at niblet.pymodel.com/account (keys start with
niblet_at_).
- Add it to this server's environment and restart the client:
The four catalogue tools (find_ui_references, get_design_reference, find_ui_materials, get_ui_component) then answer from the hosted Niblet MCP; you do not install a second server. Keep the key in the client's secret store, never in a commit or a prompt.
Without a key, with NIBLET_DISABLED=1, or when the catalogue is unreachable, those tools answer a short guidance text and every other tool keeps working: a transient failure is retried three times, then the catalogue is skipped for 60 seconds so no call waits on it. Catalogue trouble is never a tool error.
Niblet ecosystem
designer-skill is an MCP client of the hosted Niblet MCP and passes its four tools through under the same names, images included. If a Niblet server is also connected directly, use one of the two for a question, never both, and do not infer connectivity from installation. Consult niblet-catalogue for deployment differences, bounds and licensing.
Use one product-grounded design contract. Niblet's surface modes (Persuade, Operate, Read, Experience) describe the user's job; designer-skill's execution modes (audit, plan, refine, implement, system) describe permitted work. They are independent: an Operate surface can receive a read-only audit or an authorized refinement. Existing product tokens, components and real content win over reference aesthetics. Component retrieval does not authorize dependency installation or source writes, and neither MCP certifies rendered quality.
Example: "Use designer-skill to redesign this pricing page without breaking functionality." → get_preflight_brief → dispatch_intent → get_reference → edit → review_and_gate.
References
[refs]
Plus 26 ux/* references, authored in skills/ux-designer/ and vendored at skills/designer-skill/reference/ux/ (generated by node scripts/sync-ux.mjs, checked by test), so a designer-skill-only install is self-contained. Each SKILL.md is a short router with a one-line description; references load only when a task needs them.
Tools
[tools]
Resources: designer://skill · designer://reference/{+name} · Prompt: design (task, optional aesthetic)
Development
[dev]
Skill robustness checks
Edit UX guidance only in skills/ux-designer/references/; npm run sync-skill regenerates the standalone mirror before bundling. Run node scripts/sync-ux.mjs from the repository root for filesystem-only distribution.
Run reports now use v2, plus a host-owned verification plan. Validate both bundled JSON schemas, then run the dependency-free skills/designer-skill/scripts/validate-report.mjs REPORT PLAN AUTHORIZED_ROOT for evidence hashes, confinement, revision/plan matching and rendered-readiness semantics. Its own PASS means report validation, not UI certification. Legacy v1 reports fail closed and must be regenerated from real evidence; update host readers/writers together.
Behavioral action-plan cases and a deterministic grader live in evals/designer-skill/. Synthetic grader tests do not count as model evaluations, and model proposals do not prove actual tool-use compliance or rendered quality. Keep model, host, skill hash and repetitions with evaluation results.
HTTP mode (Streamable HTTP at /mcp):
Every HTTP bind requires at least one --root. Every bind validates the Host header and refuses a browser Origin that is not an accepted host; a non-loopback bind also requires DESIGNER_SKILL_HTTP_TOKEN (Authorization: Bearer …) and at least one --allowed-host.
Release: ./scripts/release.sh "notes" bumps and syncs every version, verifies, tags and pushes; publish.yml publishes npm (with provenance), the MCP registry entry and the GitHub release. Contract details: docs/HARDENING.md.