Open UX
Cited UX rules agents can list, fetch, and audit against.
Stop inventing UX guidance from memory. Open UX is a shared, open-source catalog of UX rules with citations, plus tools so an agent can find the right criteria and apply them to work it already has.
Hosted: open-ux.dev · License: MIT
What it is
A curated, machine-readable store of UX guidelines and a small tool surface so an agent can:
- Browse situations — pick a compose job (Situation Card) that matches the work
- Fetch criteria — get cited rules for that job (
rule,pass_when,fail_when) - Apply locally — the client judges the artifact; the host never takes the file and never returns pass/fail
There is no server-side LLM. One shared catalog for every caller — an account unlocks the hosted API; it does not give you a private rulebook.
What it is not
- A generative design copilot or “does this look good?” scorer
- A WCAG / accessibility compliance checker (we do not claim conformance, contrast audits, or screen-reader naming)
- A closed corpus — the catalog and server are open source; you can self-host the same tools
Features
- Cited catalog — one JSON file per rule, with sources you can follow
- Public catalog site — browse rules in the browser at
/catalog - Agent tools — list / search / get guidelines; suggest situations; audit by need (job or ids)
- Hosted or self-host — waitlist + API key on the hosted service, or stdio locally with no auth
- Privacy-minded hosted mode — we do not store UI payloads or prompts; see Privacy. How we cite rules: Sources
Quick start
Hosted
- Request access at open-ux.dev/invite
- After approval, redeem your invite for a bearer API key (
uxmcp_…) - Point your MCP client at the hosted
/mcpendpoint with that key - Call
list_guidelinesorauditwith a job (no file upload)
Tools return 401 without a key.
Self-host
pip install open-ux
python -m open_ux validate-catalog
python -m open_ux stdio
OPEN_UX_MODE=hosted python -m open_ux http
The wheel includes the catalog. A change to catalog/ or the package source on master publishes a new PyPI patch so pip and hosted carry the same rules.
Browse the local site at http://127.0.0.1:8080/catalog. Point MCP clients at local stdio, or at hosted /mcp with a uxmcp_ key.
Contribute from this repo
python -m venv .venv && source .venv/bin/activate
pip install -e "packages/mcp[dev]"
python -m open_ux validate-catalog
python -m open_ux stdio
Tests
cd packages/mcp && python -m pytest
Claude plugin
Pack in clients/claude. It connects to the catalog; it does not ship a second copy of the rules. .cursor and .claude in this repo are mounts (symlinks) into that pack.
claude plugin marketplace add 3dyonic/open-ux
claude plugin install open-ux@open-ux
Enable, then paste a key from open-ux.dev/invite.
Cursor uses the same pack (.cursor-plugin/ + mcp.json). Set OPEN_UX_API_KEY under Plugins → Configure. Submit: cursor.com/marketplace/publish.
Agent tools
| Tool | Purpose |
|---|---|
list_situations |
Page Situation Cards (optional container returns that kind's specs) |
get_situation |
One Card plus facets / rule pointers |
suggest_situations |
Catalog map: {containers: [{situations: [...]}]} in lock order (does not pick a Card; no why, not ranked) |
list_guidelines |
Paged catalog index |
search_guidelines |
Scope by jobs / lane; BM25-order by query; no rule bodies |
get_guideline |
Full rule body by id |
audit |
Say the need (jobs Card/container or guideline_ids); get matching criteria |
audit accepts optional query (orders the pack) and limit (default 10, max 50). It does not take a file target and does not return a host verdict. If nothing matches, you get an empty list and a note.
Catalog layout
catalog/
rules/{category}/{source}/ one JSON file per rule
index.json generated index
jobs.json Situation tree
schema.json rule schema
MANIFEST.md human map (no rule bodies)
Rules are never forked per tenant. Soft size budget ~50–100 KB; hard ceiling ~384 KB. Details: catalog/README.md.
Repository layout
packages/mcp Python server (FastMCP)
catalog/ shared rules + schema
clients/claude thin Claude plugin
docs/ privacy, assets
Python package: open-ux · npm / plugin scope: @3dyonic/open-ux
Hosted vs self-host
| Hosted HTTP | Self-host (stdio) | |
|---|---|---|
| Auth | Waitlist → invite → bearer uxmcp_ |
None |
| Rate limits | Per-key and per-IP on /mcp |
None |
| Telemetry | Aggregated usage (key hash, tools, rule ids) | Off |
Privacy on the hosted product: open-ux.dev/privacy (Eng constraints also in docs/PRIVACY.md). How we write and cite catalog rules, and how to ask us to change or remove one: open-ux.dev/sources.
Contributing
Issues and pull requests are welcome. Keep the catalog cited — every rule should point at a real source. Prefer small, reviewable PRs: one concern per change (catalog rows, server behavior, or docs).
Before opening a PR:
python -m open_ux validate-catalog
cd packages/mcp && python -m pytest
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file open_ux-0.2.1.tar.gz.
File metadata
- Download URL: open_ux-0.2.1.tar.gz
- Upload date:
- Size: 202.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14a5cc335bba1bba13ebe3cc87566bd47cc4cb335194d9ba32fa05de336ac8ef
|
|
| MD5 |
d04394d6d99f32af248bd1260a81da54
|
|
| BLAKE2b-256 |
3c4ed9d155e9a9337271ae35a87e1a8949f5a5e583c507642910b238ef72acd2
|
Provenance
The following attestation bundles were made for open_ux-0.2.1.tar.gz:
Publisher:
publish.yml on 3dyonic/open-ux
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
open_ux-0.2.1.tar.gz -
Subject digest:
14a5cc335bba1bba13ebe3cc87566bd47cc4cb335194d9ba32fa05de336ac8ef - Sigstore transparency entry: 2759941226
- Sigstore integration time:
-
Permalink:
3dyonic/open-ux@e045313c1fd35d8466b9fe4814125804a8bc2ef9 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/3dyonic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e045313c1fd35d8466b9fe4814125804a8bc2ef9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file open_ux-0.2.1-py3-none-any.whl.
File metadata
- Download URL: open_ux-0.2.1-py3-none-any.whl
- Upload date:
- Size: 303.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc132e420523e1ab82d56d4bfc3873bf363b77aecb13c37a0a57b83dd57632a9
|
|
| MD5 |
b6a31e9ecc7c750bde81b0908c1d4585
|
|
| BLAKE2b-256 |
eadf149b820d028d0303fe96646f09d71cb4c2f83135e9cb60971a57dbe301b4
|
Provenance
The following attestation bundles were made for open_ux-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on 3dyonic/open-ux
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
open_ux-0.2.1-py3-none-any.whl -
Subject digest:
cc132e420523e1ab82d56d4bfc3873bf363b77aecb13c37a0a57b83dd57632a9 - Sigstore transparency entry: 2759941319
- Sigstore integration time:
-
Permalink:
3dyonic/open-ux@e045313c1fd35d8466b9fe4814125804a8bc2ef9 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/3dyonic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e045313c1fd35d8466b9fe4814125804a8bc2ef9 -
Trigger Event:
push
-
Statement type: