microcopy — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited microcopy (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
Read 5–10 existing strings from the product before writing new ones. Identify:
If no existing strings exist, default to: direct, second person, sentence case for buttons, periods on full sentences, no emoji.
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." |
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" |
Write strings that translate cleanly:
"You have " + count + " messages" — different languages put numbers in different positions, and some require plural forms beyond singular/plural.{count, plural, one {# item} other {# items}}.For every screen or component, walk the moments:
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.
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" | "[email protected]" | "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>~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.