Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add willdady/platypus --skill ui-conventionsgit clone --depth 1 https://github.com/willdady/platypusWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/willdady/platypus/ui-conventions)<a href="https://agentmods.dev/skills/willdady/platypus/ui-conventions"><img src="https://agentmods.dev/badge/skills/willdady/platypus/ui-conventions/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/willdady/platypus/ui-conventions"><img src="https://agentmods.dev/badge/skills/willdady/platypus/ui-conventions.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00061 | $0.00962 |
| Opus 5.5 | $0.00024 | $0.00385 |
| Sonnet 5.5 | $0.00012 | $0.00192 |
| Haiku 4.5 | $0.00006 | $0.00096 |
Grade A, and why
ui-conventions scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 75 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Frontend UI Conventions
Empty states
Every empty state renders through one of two components, picked by what the empty thing is on the page:
| The empty thing is… | Component | Examples |
|---|---|---|
| A screen's main content: a settings page, a top-level list | EmptyCard |
Providers, MCP, Sandbox, Webhooks, A2A endpoints, Organization Skills, Blueprints, Agents, Members |
| A section within a page, or a list filtered to nothing | ListState variant="empty" |
Workspace home Skills / Dashboards / Boards / Triggers, "No skills match your filters", A2A tokens |
| A picker or command list inside a popover | CommandEmpty |
Command menu, timezone and model pickers |
| A widget tile with no data | the widget's own placeholder | "No data yet" in dashboard widgets |
The same list can take both: SkillsList shows EmptyCard on the
Organization Skills screen and ListState inside the workspace home section.
A border-dashed div in a diff is the tell of a hand-rolled empty state;
route it through one of the two components instead.
A screen that failed to load uses EmptyCard too, titled
Couldn't load … (trigger runs, plugins, FetchErrorNotice). A list's read
failure is ListError, which stays unbordered because it also renders inside
dialogs and chat.
EmptyCard
components/empty-card.tsx: icon, title, description, action.
- Icon: the bare Lucide icon the sidebar uses for that screen
(
lib/settings-links.ts,components/org-settings-menu.tsx), no size class (the frame sizes it). A concept keeps one icon everywhere it appears; MCP isWrench, even on the Organization surface. - Title:
No X configuredfor things you set up or connect (providers, MCP servers, sandbox, webhooks, endpoints);No X yetfor things users author or that accumulate (skills, blueprints, agents, invitations, runs). No trailing period. - Description: what the thing is for, or why you'd want one. It adds to the title rather than restating it. At Organization scope, say where it goes next: "Add a provider here, then attach it to the workspaces that should use it."
- Action: the buttons that fill the gap, main one first with the default
(solid) variant, the rest
outline(Attach shared, Import). The same buttons render once: inside the card while the list is empty, below the list (alloutline) once it has rows. Build them as oneactionselement and place it by emptiness — seeresource-list.tsx,skills-list.tsx. - Read-only viewer: no button, and the description names who can act — "Ask an organization admin to add one." for admin-gated resources, "Only the workspace owner can add one." for Owner-only ones (Org Admins see other Workspaces read-only). A card with nothing to do, like Organization Agents (shared agents only arrive by Promote), explains how one arrives instead.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 75 lines · 61 tokens per session scan A 9f5796e4774e
ui-conventions is a skill published in the GitHub repository willdady/platypus (120 stars, last pushed yesterday), licensed MIT. It adds 61 tokens to every session and 962 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-14.
Other skills, from other repositories
research-report
Research report on companies, competitors, markets or products: research a company, compare competitors, market landscape, funding, pricing, launches. Also to save a brief, summary or snapshot built from search results.
ideation
Generate project ideas through creative constraints. Use when the user says 'I want to build something', 'give me a project idea', 'I'm bored', 'what should I make', 'inspire me', or any variant of 'I have tools but no direction'. Works for code, art, hardware, writing, tools, and anything that can be made.
pandic-office
Convert Markdown to PDF (or DOCX/EPUB/HTML) using the pandoc CLI. Use when asked to produce a PDF report, brief, summary, or any document where the input is Markdown and the output should be a polished, paginated file.
tmux
Manage long-running shell sessions with tmux — start a detached session, run a long task, reattach later, capture output. Use when a task takes longer than a single tool call (build, test, log tail).
slacrawl
Archive and search Slack workspace messages, threads, and channels via the slacrawl CLI. Supports API sync, Slack export ZIP import, local desktop cache import, and full-text search.
obsidian
Read, search, and create notes in the Obsidian vault.