writing
Skill4 starsChanged 53 days agoMITView on GitHub
UX writing and interface copy, from voice and button labels to error messages and empty states. Use when writing or reviewing any user-facing text: button and link labels, form errors, placeholders, settings labels, onboarding flows, notifications, or empty states. Triggers on UX writing, microcopy, interface copy, product copy, copywriting, button labels, link text, error messages, empty states, placeholder text, settings labels, capitalization, title case, sentence case, voice and tone.
51 other projects use a version of this.
Adopted by
Most recently taken up by
- LarsLrn/orcaitheir own version, first seen Nov 8, 2026
- ryanportfolio/winuse-mcptheir own version, first seen Nov 8, 2026
- NilsHellwig/acl-paper-skillstheir own version, first seen Nov 8, 2026
- zakirkun/slayerclawtheir own version, first seen Nov 8, 2026
- notque/vexjoy-agenttheir own version, first seen Nov 7, 2026
- iliaal/ai-skillstheir own version, first seen Nov 7, 2026
Used with
Projects with it also use addskill, apply-firmware and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ryanportfolioSkilladdskill
Create, import, update, or install repo or personal skills: runtime ownership, resources, discovery checks.
Also in 6 projects that use this
ryanportfolioSkillapply-firmware
Bring current folder (plain folder, existing repo, old or partial firmware copy) up to full Harness Firmware in place. Mirror external repo → adopt-repo.
Also in 6 projects that use this
- +10 more from ryanportfolio
Other versions51 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 51
- wu-yc/LabClaw★ 1.1ksame name
- agentic-community/mcp-gateway-registry★ 1ksame name
- solana-foundation/explorer★ 856same name
- notque/claude-code-toolkit★ 448same name
- notque/vexjoy-agent★ 448same name
- zeuikli/claude-code-workspace★ 155same name
- joshuadavidthomas/agent-skills★ 49same name
- iliaal/ai-skills★ 45same name
- aws-samples/sample-agentic-coding-harness-benchmarks★ 20same name
- alxyrgin/secondbrain_ai★ 17same name
41 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository9 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- template/CLAUDE.mdCLAUDE.md
- accessibilitySkill
- colorsSkill
- interfaceSkill
- layoutSkill
- product-designSkill
- typographySkill
- uiSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 45 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 68
No blame, no "oops", no exclamation marks.
- Distinctive: line 84
Search and filter empty states name the query and offer an exit: "No results for 'quarterly'.
- Very specific: line 121
Use this format only when the user asks for a standalone writing review.
- Very specific: line 157
When there are no findings, omit the tables, state "No actionable writing findings", report verification, and end with Approve.
“Common” is measured: kept by at least 6 in 10 of the 45 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Writing that disappears into the interface
Clear and brief beats clever, consistency beats variety, and the best error message is the interaction redesigned so the error can't happen. Apply these principles when writing or reviewing any user-facing text.
How copy renders (capitalization via text-transform, truncation, smart punctuation) is covered by the typography skill; error markup and announcements (aria-invalid, live regions) by the accessibility skill; room for translated strings by the layout skill. Rendered-pair contrast is colors. Radius, shadow and motion are ui. This skill does not own those domains.
Core Principles
1. Recon the Existing Voice
Before writing or reviewing, inspect nearby interface copy, the product's terminology, localization conventions, and any voice or content style guide. Preserve intentional brand character when it remains clear and appropriate to the stakes. Treat a difference from generic plain language as a finding only when it creates inconsistency, ambiguity, translation risk, or an inappropriate tone.
2. One Voice, Flexible Tone
The product has one voice, established by its existing system rather than invented during a local edit. Keep terms consistent: if it's "Archive" in the menu, it isn't "Move to storage" in the toast. Tone flexes with the stakes:
| Context | Tone |
| Success, onboarding, empty states | Warm, can be light |
| Routine actions, settings | Neutral, minimal |
| Errors, destructive confirmations | Calm, plain, zero playfulness |
| Data loss, security | Serious, explicit |
3. Address the Reader Directly
In instructional interface copy, address the reader directly as "you" rather than "the user." Avoid “we” in errors when it creates ambiguity or reads as deflection: prefer “Unable to load content” over “We're having trouble loading this content.” Preserve an established first-person brand voice in low-stakes contexts when it remains clear. Use possessives sparingly (“Favorites” over “Your Favorites”) and never switch perspective accidentally.
4. Plain Words Over Clever Ones
Choose easily understood words and delete every word that isn't needed. No idioms, colloquialisms, or humor that won't translate. Skip unnecessary gender: "Subscribers can post recipes", not "each subscriber can post his or her recipes". Match the input device: "tap" on touch, "click" with a pointer, "select" when both are possible. Never build sentences by concatenating fragments around variables ("You have " + n + " new messages"); word order changes per language, so use full templated strings with proper pluralization.
5. Verb-First Buttons
Button labels start with a verb naming the specific action: "Send", "Save draft", "Delete project". Never "OK!", "Let's go!", or bare "Yes"/"No" on consequential actions. Confirmation buttons repeat the consequence so the dialog is answerable without reading the body: "Delete this project?" offers Delete project and Cancel, not Yes and No.
6. Consistent Flow Vocabulary
Multi-step flows use one vocabulary: "Get Started" to enter, "Continue" or "Next" (pick one) to advance, "Done" to finish. Alternating synonyms across steps makes users wonder if the buttons do different things.
7. Links Describe Their Destination
Link text makes sense out of context; screen-reader users navigate by a list of the page's links. "Read the billing docs", never "Click here" (which also fails the device-verb rule on touch), and never a bare "Learn more" when several appear on one page. Suffix each: "Learn more about exports".
8. One Capitalization Policy
Pick title case or sentence case per element type (all buttons, all headings) and apply it consistently; sentence case is the safer default: calmer, no per-word case rules, localizes cleanly. "Save Changes" beside "Discard changes" reads as sloppiness.
9. Settings Describe the ON State
Label a toggle for what happens when it's on: "Send read receipts", and users infer the off state. Never label the negative ("Don't send read receipts"), which turns the toggle into a double negative. Link directly to a referenced setting instead of describing the path to it: a "Notification settings" link, not "Go to Settings > Notifications > Email".
10. Errors Say How to Fix, Next to Where It Broke
An error is an instruction, adjacent to the failing field:
| Bad | Good |
| That password is too short | Choose a password with at least 8 characters |
| Invalid name | Use only letters for your name |
| Oops! Something went wrong. | Unable to save. Check your connection and try again. |
No blame, no "oops", no exclamation marks. Phrase hints positively ("Use only letters", not "Don't use numbers or symbols") and show them before the mistake, not after. If the same error keeps firing for many users, redesign the interaction instead of rewording it.
11. Empty States Point Forward
An empty state says what this place is and how to fill it, with one clear next action:
<!-- Bad: a shrug -->
<p>No results.</p>
<!-- Good: orientation plus a next step -->
<p class="font-medium">No projects yet</p>
<p class="text-sm text-zinc-500">Projects keep your tasks and files together.</p>
<button class="mt-4">Create a project</button>Search and filter empty states name the query and offer an exit: "No results for 'quarterly'. Clear filters". Never park crucial persistent information in an empty state; it disappears the moment content exists.
12. Placeholders Are Examples, Not Labels
Placeholders show the expected format (name@example.com, DD/MM/YYYY). A placeholder is never the field's only label: it vanishes on input, and every field keeps a visible label.
13. Plain Words, Not Machine-Written Ones
Voice lives in the product's own guide. These patterns mark text as machine-written in any product, and they are findings:
- Hedging and throat-clearing openers: "it's worth noting", "in today's", "as an AI", "great question", "certainly".
- Rhetorical scaffolding: "not just X, but Y", "X isn't Y, it's Z", tricolons used as a default rhythm, a question the text then answers itself.
- Inflated verbs and adjectives: "delve", "leverage", "utilise", "robust", "streamline", "elevate", "harness", "navigate" (when it is not navigation), "landscape", "tapestry", "journey". Also "seamless", "empower", "unlock", "cutting-edge", "revolutionise".
- Agent jargon in product copy: "agentic", "orchestrate", "surface" as a verb, "spin up".
- Closing offers and sign-offs: "let me know if", "I hope this helps", "feel free to".
- Emoji in interface copy or as list markers. Exclamation marks outside genuinely celebratory copy.
Common Mistakes
| Mistake | Fix |
| Local rewrite ignores the product's established terminology or voice | Inspect nearby copy and the style guide before proposing a change |
| "The user" in instructional interface copy | Address the reader directly as "you" |
| "We're having trouble…" obscures responsibility or recovery | Use a direct status and next step: "Unable to load content" |
OK / Yes confirming a destructive dialog | Repeat the consequence: "Delete project" |
| "Continue" on step 2, "Next" on step 3 | One flow vocabulary throughout |
| "Click here" or bare "Learn more" link | Describe the destination: "Read the billing docs" |
| "Save Changes" beside "Discard changes" | One capitalization policy per element type |
| "Don't send read receipts" toggle | Label the ON state: "Send read receipts" |
| "Oops! Something went wrong." | Say what to do, next to the failing field |
| "No results." as the whole empty state | Orient and point forward with a next action |
| Placeholder doing the label's job | Visible label; placeholder shows the format |
| "It's worth noting that this is seamless" | Say the fact in plain words |
"You have " + n + " messages" | Full templated strings with pluralization |
Review Output Format
Use this format only when the user asks for a standalone writing review. When interface orchestrates the review, provide domain evidence and findings to that skill and let its output format, severity scale, consolidation rules, cap, and verdict take precedence.
Present the standalone review in two parts.
Findings
Group all confirmed findings by principle. Use a markdown table with Severity, Location, Before, After, and Why columns. Never use separate "Before:" / "After:" lines.
- Severity:
HIGHmisleads users, obscures a consequence, or prevents recovery;MEDIUMmakes a task harder to understand;LOWis isolated voice or consistency polish. - Location: cite
path/to/file:line. If the artifact has no source files, cite the exact screen and component instead. - Before / After: quote the current copy and its complete replacement.
- Why: name the violated principle and explain the comprehension or trust cost.
Consolidate a repeated systemic issue into one row and list every affected location. Omit principles with no findings.
Example
Errors say how to fix
| Severity | Location | Before | After | Why |
| MEDIUM | src/PasswordField.tsx:36 | "Invalid password" | "Choose a password with at least 8 characters" | The error must say how to fix the problem |
| HIGH | src/Editor.tsx:81 | "We couldn't process your request" toast | Inline "Unable to save. Check your connection and try again." | The current message neither locates the failure nor offers recovery |
Verb-first buttons
| Severity | Location | Before | After | Why |
| HIGH | src/DeleteDialog.tsx:29 | "OK" on the delete confirmation | "Delete project" | A consequential action must repeat the consequence |
| MEDIUM | src/Signup.tsx:54 | "Let's go!" | "Create account" | The label must name the action |
Verification and Verdict
After the findings:
- Verification: list the exact checks run and their observed results, including the complete flow, variable interpolation, pluralization, and narrow-width wrapping when applicable. If a check was not run, state what still needs verification.
- Verdict:
Blockif anyHIGHfinding remains,Needs changesif onlyMEDIUMorLOWfindings remain, andApproveonly when no actionable findings remain.
When there are no findings, omit the tables, state "No actionable writing findings", report verification, and end with Approve.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

