microcopy
Skill7 starsChanged 7 months agoMITView on GitHub
Writes or reviews UX copy — button labels, error messages, empty states, success messages, tooltips, form labels, onboarding text, confirmation dialogs. Voice-consistent, action-led, recovery-oriented. Localizable. No dark patterns.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- BipBop-Labs/bipbop-skillstheir own version, first seen Oct 2, 2026
- PierreTsia/workout-apptheir own version, first seen Aug 27, 2026
- Mikefluff/skillstheir own version, first seen Aug 8, 2026
- Dragoon0x/product-skillstheir own version, first seen Feb 24, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- Mikefluff/skills★ 26same name
- Dragoon0x/product-skills★ 4same name
- BipBop-Labs/bipbop-skills★ 3same name
- PierreTsia/workout-app★ 0same name
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 repository45 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- CLAUDE.mdCLAUDE.md
- a11y-auditSkill
- api-designSkill
- architecture-reviewSkill
- business-blueprintSkill
- business-logic-auditSkill
- changelogSkill
- ci-pipelineSkill
- code-coverageSkill
- competitive-analysisSkill
- convert-codeSkill
- create-componentSkill
- db-migrationSkill
- debugSkill
- dependency-auditSkill
- deploy-checklistSkill
- design-flowSkill
- docker-setupSkill
- env-setupSkill
- error-monitorSkill
- estimateSkill
- explain-codeSkill
- fix-issueSkill
- generate-docsSkill
- git-cleanupSkill
- grill-meSkill
- handoffSkill
- legal-pagesSkill
- memory-importSkill
- memorySkill
- migrate-frameworkSkill
- onboardSkill
- optimizeSkill
- pr-summarySkill
- refactorSkill
- reference-appSkill
- review-prSkill
- security-scanSkill
- seo-scaffoldSkill
- tddSkill
- web-launch-checkSkill
- wireframeSkill
- write-skillSkill
- write-testsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 0 are common, 15 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
15
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 9
Write the small strings that decide whether users figure your product out — or churn.
- Distinctive: line 14
After a UX review flagged unclear messaging.
- Distinctive: line 15
When a feature ships with placeholder strings ("Submit," "Error," "Loading…") and needs real ones.
- Distinctive: line 16
When localizing — the source strings need to be localizable in the first place.
- Distinctive: line 22
Read 5–10 existing strings from the product before writing new ones.
- Distinctive: line 30
If no existing strings exist, default to: direct, second person, sentence case for buttons, periods on full sentences, no emoji.
- Distinctive: line 52
Empty states have CTAs: Don't leave the user stranded with "No results."
- Distinctive: line 60
Honesty in confirmations: Don't trick users into clicking yes.
- Distinctive: line 84
Write strings that translate cleanly:
- Very specific: line 87
No concatenation: Don't write "You have " + count + " messages" — different languages put numbers in different positions, and some require …
- Very specific: line 108
If the product establishes a copy convention (e.g., "always say 'Save changes' not 'Save'"), save it to …
- Distinctive: line 193
Don't write for a voice the product doesn't have — read existing copy first.
- Distinctive: line 194
Don't write copy that's marketing-speak when the product is utilitarian, or vice versa.
- Distinctive: line 195
Don't recommend dark patterns.
- Distinctive: line 196
Don't translate yourself — flag strings for translator review when localizing.
- Distinctive: line 197
Don't write copy without knowing the state.
- Distinctive: line 198
Always cover all relevant moments (loading / empty / error / success).
“Common” is measured: kept by at least 6 in 10 of the 4 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
/microcopy
Write the small strings that decide whether users figure your product out — or churn. Bad copy makes good visuals fail; good copy carries average visuals.
When to use
- Designing or reviewing any user-facing text — buttons, errors, empty states, tooltips, confirmations, form labels, onboarding.
- After a UX review flagged unclear messaging.
- When a feature ships with placeholder strings ("Submit," "Error," "Loading…") and needs real ones.
- When localizing — the source strings need to be localizable in the first place.
Operating method
1. Establish voice
Read 5–10 existing strings from the product before writing new ones. Identify:
- Tone — professional / friendly / playful / clinical. Most B2B is professional-with-warmth; consumer varies wildly.
- Person — second person ("Save your changes") almost always. First-person plural ("We saved your changes") for system updates only.
- Verb usage — direct ("Save"), polite ("Please save"), or playful ("Stash it"). Pick one and stick with it.
- Punctuation — sentence case vs title case for buttons. Periods at end of error messages or not.
- Emoji — used or not. (Default: not. Add only if the product already uses them.)
If no existing strings exist, default to: direct, second person, sentence case for buttons, periods on full sentences, no emoji.
2. Apply the four rules
Verbs over nouns on buttons. Buttons do something. Use the verb.
| Bad | Good |
| Submit | Send invite |
| OK | Save changes |
| Confirmation | Confirm payment |
| Settings | Open settings |
Specific errors with recovery. Tell the user what went wrong AND what to do.
| Bad | Good |
| Invalid input | Email must include an @ symbol |
| Error | Couldn't reach the server. Check your connection or retry. |
| Try again | Card declined — try a different card |
| Failed | Two-factor code expired — request a new one |
Empty states have CTAs. Don't leave the user stranded with "No results."
| Bad | Good |
| No projects | Create your first project to get started |
| 0 messages | Your inbox is empty. Connect an account to start receiving mail. |
| Nothing here | No matching results. Try a broader search or [clear filters]. |
Honesty in confirmations. Don't trick users into clicking yes.
| Bad | Good |
| "OK" + "Cancel" on a destructive modal | "Delete project" + "Keep project" |
| "Are you sure?" | "Delete this project? This cannot be undone." |
3. Forbidden phrases
These signal lazy or hostile copy. Refuse to write them; replace if you find them.
| Phrase | Why it's bad | Replace with |
| "Simply…" / "Just…" / "Easy…" | Patronizes the user — if it were that simple, they wouldn't be reading the help text | Remove the word; explain the steps |
| "Oops!" / "Whoops!" | Trivializes the user's problem | Be specific about what happened |
| "Something went wrong" | The least useful possible error | Name what failed, name the recovery |
| "Please try again later" | Useless — when? Why? | Give a time, a reason, or a workaround |
| "Are you sure?" alone | Doesn't tell the user the consequence | "Delete X? This cannot be undone." |
| "Click here" / "Read more" | Bad for accessibility (screen readers without context) | Use descriptive link text: "Read the API docs" |
| Pre-checked consent ("☑ Yes, send me marketing emails") | Illegal in EU (GDPR) | Default unchecked; let users opt in |
| Confirmshaming ("No thanks, I don't want to save 50%") | Dark pattern | Plain language: "No thanks" |
4. Localization-friendly writing
Write strings that translate cleanly:
- No idioms. "Bite the bullet" doesn't translate. "Confirm the change" does.
- No concatenation. Don't write
"You have " + count + " messages"— different languages put numbers in different positions, and some require plural forms beyond singular/plural. - Use ICU MessageFormat or your framework's i18n library for plurals, gender, and number formatting.
- Don't bake numbers into strings. "5 items" →
{count, plural, one {# item} other {# items}}. - Render dates and currencies in user locale, not source locale.
- Leave 30% room for expansion. German strings are often 30–40% longer than English.
5. Cover all the moments
For every screen or component, walk the moments:
- Default — the standard view. What does it say?
- Loading — what's communicated while waiting?
- Empty — first-time-use copy + CTA.
- Success — confirmation message.
- Error — per failure mode (network, validation, permission, server).
- Disabled — why is this thing disabled? Tooltip explains.
- Confirm — destructive actions get a clear "do X / cancel" choice.
- Onboarding — first 3 actions for a new user.
6. Save patterns to memory
If the product establishes a copy convention (e.g., "always say 'Save changes' not 'Save'"), save it to .claude/memory/feedback/copy-conventions.md so future sessions follow the same voice.
Output format
For a copy spec:
# Microcopy: <screen / feature>
## Voice
- Tone: <professional with warmth>
- Person: second
- Case: sentence (buttons), title (page headers)
- Punctuation: full sentences end with periods; buttons no periods
## Strings
### Page header
<copy>
### Primary CTA (button)
<copy>
### Secondary action
<copy>
### Form fields
| Field | Label | Placeholder | Help text | Error: blank | Error: invalid |
|---|---|---|---|---|---|
| Email | "Work email" | "you@company.com" | "We'll send sign-in links here." | "Email is required." | "Email must include an @ symbol." |
### States
| State | Copy |
|---|---|
| Loading | "Sending invite…" |
| Success | "Invite sent ✓" |
| Error: network | "Couldn't send the invite — check your connection or retry." |
| Error: already invited | "Already invited — resend or remove." |
| Empty | "No invites sent yet. Send your first below." |
### Confirmation dialog (destructive)
- Title: "Remove team member?"
- Body: "They'll lose access to all projects. This can't be undone."
- Confirm button: "Remove member"
- Cancel button: "Keep member"
### Tooltips
| Element | Tooltip |
|---|---|
| Disabled "Send" button | "Add at least one recipient to send" |
| ⚠ icon next to plan | "Card on file expires in 7 days" |For a copy review:
## Verdict: GREAT | NEEDS WORK | REWRITE
## Issues by category
### Specificity (N issues)
- error.tsx:18 — "Something went wrong" → "Couldn't save changes — check your connection and retry."
### Voice consistency (N issues)
- onboarding.tsx:42 — Uses first-person ("We've saved your work") but the rest of the product uses second person.
### Forbidden phrases (N issues)
- billing.tsx:91 — "Simply enter your card" → "Enter your card."
### Empty states (N issues)
- inbox.tsx:5 — "No messages" with no CTA → "Your inbox is empty. Connect an account to start."
### Localization-readiness (N issues)
- list.tsx:30 — `"You have " + count + " items"` → use ICU plural format.
## What's working
- <thing>
- <thing>
## Recommended next moves
1. <highest-leverage>Boundaries
- Don't write for a voice the product doesn't have — read existing copy first.
- Don't write copy that's marketing-speak when the product is utilitarian, or vice versa.
- Don't recommend dark patterns. Refuse, name them, offer honest alternatives.
- Don't translate yourself — flag strings for translator review when localizing.
- Don't write copy without knowing the state. "Submit" with no context is meaningless.
- Always cover all relevant moments (loading / empty / error / success).
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.

