Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Microcopy

ASecurity

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.

7 stars
0 votes
0 copies
1 views
Added 5/28/2026
ai-agentsgoapi

Works with

cliapi

Security Analysis

A100/100

Scanned 5/28/2026

$npx -y skills add viknesh20-20/claude-code-tool-kit --skill microcopy --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Microcopy?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Microcopy
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/viknesh20-20-microcopy/badge)](https://www.skillsdirectory.com/skills/viknesh20-20-microcopy)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: microcopy
description: "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."
argument-hint: "<context — e.g., 'error states for the checkout', 'empty state for inbox', 'tooltips for billing page'>"
---

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

Attribution

viknesh20-20viknesh20-20
View sourceSee grades on GitHubMore from viknesh20-20 →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698621 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →