ux-copy
SkillMediaUse when writing or reviewing any visible copy — headlines, buttons, body, errors, empty states — inside a design-method move or standalone.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the ux-copy skill
What this skill tells your AI
The instructions your AI receives, as published by fusengine/agents in plugins/design-expert/skills/ux-copy/SKILL.md and read by ahel’s review.
Runs 10 mechanical ban-lists: filler verbs/hype adjectives, slop placeholder names, fake-precise numbers, unjustified Title Case headlines, humor in error copy ("Oops!"), the AI production-tell catalogue, em-dash-as-crutch, "Not X. Y." manufactured contrast, the "theater" keyword, and all-caps body copy.
Enforces one copy register per page (brand traces to the POV, product stays domain-specific). Judgment calls that aren't mechanically resolvable are quoted, located, and routed to design-review's challenger gate — never self-scored.
UX Copy — Self-Audit + Ban-Lists, One Register Per Page
When
Any time visible copy is written or edited — headlines, subheads, eyebrows, button
labels, body, captions, alt text, error messages, empty states — inside generate/
critique/audit/polish (design-method) or as a standalone copy pass. Register is
resolved once, at Gate 0 (design-method/SKILL.md), before this runs — never re-guessed
here.
Input
- Register (
brand/product) from Gate 0. - Sector, if resolved, for
references/voice-tone-sectors.md. - Every visible string in the deliverable.
One register per page — hard rule
A single copy register per page (references/copy-self-audit.md §7): don't mix
technical mono, editorial prose, and marketing punch on one surface unless the brand
voice explicitly calls for it. Register direction is conditional exactly like layout and
motion (design-method/references/register/copy.md §3): brand copy must trace to
the one-sentence POV — run the Competitor Lift Test on the paragraph itself, could it run
unchanged on a competitor's site; product copy stays precise and domain-specific,
naming the real object and the real action, never marketing voice bleeding into the app
shell.
Ban-lists — mechanical (grep), not vibes
- Filler verbs / hype adjectives —
elevate,seamless(ly),unleash,next-gen,revolutionize,empower,supercharge,game-changer,cutting-edge,unlock,robust,effortless,frictionless, plusdelveandtapestry. Full grep pattern and flag-not-fail nuance (read against the POV or the domain-specificity floor before rewriting):design-method/references/register/copy.md§1. - Slop placeholder names —
Acme,Nexus,SmartFlow,Cloudly,Initech,Globex,Contoso,Umbrella Corp,Zenith (Labs/Tech). Blocks unless the brief explicitly names a fictional example on purpose. Grep + rule:design-method/references/register/copy.md§2. - Fake-precise numbers —
92%,4.1x,48k,99.99%, or any figure not traced to real data, brief/brand guidelines, or an explicitly labelled mock (<!-- mock -->/"example"). Real data reads organic and messy (47.2%), not fake-perfect.references/copy-self-audit.md§3. - Title Case headlines — sentence case is the default register for headings and body copy; reserve Title Case for UI labels, buttons, and eyebrows only, never a body headline, unless the brand style guide explicitly specifies Title Case. Inconsistent or unjustified Title Case on headlines is a recurring AI-slop tell (grounding corpus; general consistency principle also flagged in the reference clone's capitalization check — apply it here as a default ban, not a mere consistency note).
- Humor in error copy ("Oops!"/"Whoops!") — banned. Errors use the what-happened +
why + how-to-fix formula (
references/templates/error-messages.md), never cute framing — a frustrated user doesn't want jokes. Bad-example precedent already in this skill:references/voice-tone-sectors.mderror row flags exactly"Whoops! Something went wrong."against the correct"Connection lost. Try again or continue offline." - AI production-tell catalogue — version-label eyebrows (
v0.6/BETA/EARLY ACCESS), numbered section eyebrows (00 / INDEX), scroll cues, weather/locale strips, "quietly trusted by", decorative photo-credit captions, fabricated live counters, poetic craftsman labels, generic step labels (Stage 1/2/3). Full table:references/copy-self-audit.md§2. - Em-dash as a crutch — a single
—isn't a hard fail; 2+ occurrences reading as a repeated tic is.references/copy-self-audit.md§1 (shared gate withdesign-review). - "Not X. Y." manufactured-contrast fragments — one instance is fine, 2+ on one page
is a blocking tic.
references/copy-self-audit.md§4. - "theater"/"théâtre" keyword — any hit blocks, near-universal AI copy tell.
references/copy-self-audit.md§5. - All-caps body copy — 3+ consecutive all-caps words outside a recognized UI label
blocks; fine inside a button/eyebrow/badge.
references/copy-self-audit.md§6.
Steps
- Confirm register (inherited from Gate 0) — never re-resolve it here.
- Write/review against the sector voice profile
(
references/voice-tone-sectors.md, NNG 4 dimensions) and the matching sector guide if one applies (references/copy-saas.md,references/copy-fintech.md,references/copy-ecommerce.md). - Apply the formula references for the surface being written: buttons/forms/toasts
(
references/microcopy-patterns.md), CTAs (references/templates/cta-patterns.md), errors (references/templates/error-messages.md), empty states (references/empty-states-copy.md), onboarding (references/templates/onboarding-copy.md). Project-level output usesreferences/templates/copy-guide-template.md. - Run every visible string through the ban-lists above.
- Final read (
references/copy-self-audit.md§7): grammatically broken, unclear referent, hallucination-sounding, "LLM trying to sound thoughtful" (forced metaphor, mock-poetic aside, cute-but-empty wordplay). Rewrite; when unsure, replace with the plain functional sentence — boring-correct beats clever-wrong. - Mechanical checks (1-10 above) resolve on the spot. Judgment calls — does this line
actually trace to the POV, does it sound like forced profundity, does the aphoristic
cadence read as punchy ad copy pretending to be product copy — are named specifically
(quote the line, name the section) and routed to the
fuse-ai-pilot:challengergate insidedesign-review, never self-scored (design-method/references/register/copy.md§4;references/copy-self-audit.md, "Not self-audited — routed to challenger").
Failure Handling
- Sector not resolved / no sector guide fits → default to
references/microcopy-patterns.md's generic patterns, flag the gap instead of inventing sector voice. - A ban-list hit is contractually required by the brief (brand literally named "Acme",
a launch brief that genuinely wants a
BETAeyebrow) → note the override explicitly in the deliverable rather than silently keeping it unflagged.
Output
- Every visible string checked against the 10 ban-lists above, register-consistent, one voice per page.
- Judgment-call flags (if any), quoted and located, handed to
design-review's challenger gate — not resolved solo.
Next → design-review — Part 1's em-dash/production-tell checks are the same gates
enforced here; Part 2's challenger judges any remaining judgment call (aphoristic cadence, POV-tracing) this skill flagged but didn't self-score.
References
| File | Purpose |
|---|---|
references/copy-self-audit.md | Canonical self-audit — em-dash, AI tells, fake numbers, final read |
design-method/references/register/copy.md | Filler-verb + slop-name ban-lists, register direction (external, canonical there) |
references/voice-tone-sectors.md | Sector voice profiles, NNG 4 dimensions, do/don't examples |
references/microcopy-patterns.md | CTA/form-label/validation/toast/button-state patterns |
references/empty-states-copy.md | Empty-state copy formulas per type and sector |
references/copy-saas.md | SaaS sector copy examples |
references/copy-fintech.md | Fintech sector copy examples |
references/copy-ecommerce.md | E-commerce sector copy examples |
references/templates/cta-patterns.md | CTA label examples by context |
references/templates/error-messages.md | Error message formula + good/bad examples |
references/templates/onboarding-copy.md | Welcome-flow / first-run copy patterns |
references/templates/copy-guide-template.md | Project-level copy guide output template |
Signals
- GitHub stars
- 25
- Forks
- 4
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
ux-copy- Source
- github.com/fusengine/agents