UNSLOP canon

Read-only MCP resources serve a versioned design and copy rule canon for UI audits; the UNSLOP plugin supplies the detector and audit workflow.

Servidor MCP hospedado

npx add-mcp 'https://oleg.design/unslop/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

"I asked you to get rid of this slop everywhere."
— You, to your AI-Agent

Get started

unslop is an auditor. It checks the design your agent has already generated for the typical bad decisions AI makes in generated designs, and proposes fixes.

Claude Code, in your shell:

claude plugin marketplace add 0design/unslop-skill
claude plugin install unslop@unslop

Codex:

codex plugin marketplace add 0design/unslop-skill
codex plugin add unslop@unslop

Start a new session and run /unslop:audit. In Codex, ask for an unslop audit instead; it lists the skill as unslop:audit. Your agent checks every screen against the canon and writes a fix plan to plans/. It changes no code.

Install

The plugin holds the skill, the detector, the canon client and the rule texts, and declares the canon server at https://oleg.design/unslop/mcp; your client connects to it at session start. The canon client needs Node.js 20 or newer and the MCP SDK; where the SDK is missing, the skill tells your agent to ask before it downloads anything and, without your agreement, to report no verified canon and issue no pass. These steps are instructions, not a technical lock; your agent's own permission prompts still apply. To remove the plugin: claude plugin uninstall unslop@unslop or codex plugin remove unslop@unslop.

Cursor and Lovable get a prompt instead of a plugin; it is on https://oleg.design/unslop.

Or install the skill alone with the skills CLI:

npx skills add 0design/unslop-skill

This copies skills/audit into your agent's skills folder, with the detector and the canon client in skills/audit/scripts. The detector needs only Node.js 20 or newer and runs its machine checks from there. The canon client also needs the MCP SDK, which only the plugin can install, so a skill-only audit has no verified canon and issues no pass; install the plugin where your agent supports one.

How it works

  /unslop:audit
       │
       ▼
  your agent ◀──── MCP ────▶ canon server (read-only): index read once, version and checksum pinned for the run
       ├── no `unslop` server ──▶ your agent offers the connect command, runs it only after you agree
       ├── unreadable index or checksum mismatch ──▶ "no verified canon", no pass
       ▼
  recon ──▶ stack, design system, conventions, documented decisions
       │
       ▼
  detector ──▶ "B-1   RED  button.css:2  color: #ff0044;"
       │
       ▼
  judgement against the pinned rules; every finding re-checked before it counts
       │
       ▼
  plans/NNN-slug.md, one per fix or per tight cluster of findings, for a cheaper model to execute
       │
       ▼
  "unslop execute <plan>", said to your agent ──▶ one plan in an isolated worktree, then the diff

unslop gives your agent a designer's quality criteria: verifiable, not taste by eye. Every finding is a file:line and a fix plan. It does not guarantee good design: that decision is yours; unslop only keeps your agent from breaking it. The catalogue of slop criteria keeps changing, so the audit reads it from the canon server, not from the plugin's own copy: one version per run, pinned by version and checksum, never a silent fallback to local files. A rule fixed or added on the server reaches every agent on its next run, with no reinstall.

What's in this repo

Contribute

You can improve the skill, the detector or the canon, or propose a rule.

  1. Fork the repository and make a branch.
  2. Make your change and run the checks: npm ci, npm test. A rule change is a new canon version: raise the version in canon/public/records.json, run npm run canon:generate:public and add a CHANGELOG.md entry in the same pull request.
  3. Open a pull request. The tests run on Node.js 22 for a pull request (20 and 22 on a push to a release line), and a second check keeps internal wording out of the public text.

A rule accepted from a pull request reaches everyone with the next canon version. Have an idea? Open an issue and describe what result you want.

Links