agentleFS
viknesh20-20viknesh20-20/claude-code-tool-kit/.claude/skills/microcopy/SKILL.md

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

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
  1. Distinctive:

    Write the small strings that decide whether users figure your product out — or churn.

    line 9
  2. Distinctive:

    After a UX review flagged unclear messaging.

    line 14
  3. Distinctive:

    When a feature ships with placeholder strings ("Submit," "Error," "Loading…") and needs real ones.

    line 15
  4. Distinctive:

    When localizing — the source strings need to be localizable in the first place.

    line 16
  5. Distinctive:

    Read 5–10 existing strings from the product before writing new ones.

    line 22
  6. Distinctive:

    If no existing strings exist, default to: direct, second person, sentence case for buttons, periods on full sentences, no emoji.

    line 30
  7. Distinctive:

    Empty states have CTAs: Don't leave the user stranded with "No results."

    line 52
  8. Distinctive:

    Honesty in confirmations: Don't trick users into clicking yes.

    line 60
  9. Distinctive:

    Write strings that translate cleanly:

    line 84
  10. Very specific:

    No concatenation: Don't write "You have " + count + " messages" — different languages put numbers in different positions, and some require …

    line 87
  11. Very specific:

    If the product establishes a copy convention (e.g., "always say 'Save changes' not 'Save'"), save it to …

    line 108
  12. Distinctive:

    Don't write for a voice the product doesn't have — read existing copy first.

    line 193
  13. Distinctive:

    Don't write copy that's marketing-speak when the product is utilitarian, or vice versa.

    line 194
  14. Distinctive:

    Don't recommend dark patterns.

    line 195
  15. Distinctive:

    Don't translate yourself — flag strings for translator review when localizing.

    line 196
  16. Distinctive:

    Don't write copy without knowing the state.

    line 197
  17. Distinctive:

    Always cover all relevant moments (loading / empty / error / success).

    line 198

“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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

/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.

BadGood
SubmitSend invite
OKSave changes
ConfirmationConfirm payment
SettingsOpen settings

Specific errors with recovery. Tell the user what went wrong AND what to do.

BadGood
Invalid inputEmail must include an @ symbol
ErrorCouldn't reach the server. Check your connection or retry.
Try againCard declined — try a different card
FailedTwo-factor code expired — request a new one

Empty states have CTAs. Don't leave the user stranded with "No results."

BadGood
No projectsCreate your first project to get started
0 messagesYour inbox is empty. Connect an account to start receiving mail.
Nothing hereNo matching results. Try a broader search or [clear filters].

Honesty in confirmations. Don't trick users into clicking yes.

BadGood
"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.

PhraseWhy it's badReplace with
"Simply…" / "Just…" / "Easy…"Patronizes the user — if it were that simple, they wouldn't be reading the help textRemove the word; explain the steps
"Oops!" / "Whoops!"Trivializes the user's problemBe specific about what happened
"Something went wrong"The least useful possible errorName what failed, name the recovery
"Please try again later"Useless — when? Why?Give a time, a reason, or a workaround
"Are you sure?" aloneDoesn'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 patternPlain 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).

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.