Use when writing, reviewing, or rewriting user-facing error messages, validation messages, form errors, empty/error states, auth errors, failure notifications, retry/support copy, CLI errors, or API errors humans will read. Helps make errors specific, actionable, non-blaming, accessible, and safe without leaking sensitive details.
95
92%
Does it follow best practices?
Impact
99%
1.08xAverage score across 3 eval scenarios
Passed
No known issues
Before writing, identify:
Then write this shape:
[What happened]
[Reassurance if useful]. [Why it happened, if known and safe]. [Specific next action]. [Backup path if it keeps happening].Example:
Unable to connect your account
Your changes were saved, but we couldn't connect the account because of an issue on our end. Try connecting again. If this keeps happening, contact support.| Rule | Do | Avoid |
|---|---|---|
| Say what happened | "We couldn't save your file." | "Something went wrong." |
| Say what was not affected | "Your draft was saved." | Leaving the user to wonder if data was lost |
| Give the next action | "Check the card number and try again." | "OK" / "Close" as the only path |
| Use plain language | "We couldn't connect to Dropbox." | "Fetch failed" / "credentials denied" |
| Avoid blame | "Store name is required." | "You forgot to enter a store name." |
| Match the stakes | Calm, direct, respectful | "Oops!" / jokes / cutesy tone |
| Be specific when safe | "Enter a date in the past." | "Invalid input." |
| Be generic when security requires it | "Invalid email or password." | "That email exists, but the password is wrong." |
Use only the pieces the situation needs.
| Piece | Purpose | Pattern |
|---|---|---|
| Title | Summarize the failed action | "Couldn't save changes" |
| Body | Explain consequence and cause | "Your changes are still open, but we couldn't save them because the connection dropped." |
| Primary action | Tell the reader what to do | "Try again", "Update details", "Choose another file" |
| Backup path | Provide a way out | "If this keeps happening, contact support." |
| Diagnostic detail | Help technical readers or support | Error code, request ID, expected/received values, log location |
Keep UI body copy to 1-2 sentences when possible. Put longer diagnostic details in expandable text, logs, or support context.
references/source-backed-patterns.md when auditing many messages, resolving wording tradeoffs, or checking source-backed rationale.references/rewrite-examples.md when rewriting multiple messages or testing whether the skill is producing the right shape.For field-level errors:
Good patterns:
Enter an email address
Enter a date in the past
Password must be at least 12 characters
Choose a file smaller than 10 MBAvoid:
This field is required
Invalid input
You entered an illegal value
Validation failedSpecificity is not always better. Use a generic message when detail could reveal account existence, permissions, private data, system internals, fraud signals, or security policy.
Use generic copy for login and account recovery:
Invalid email or password
If an account exists for that email address, we'll send password reset instructions.Do not reveal:
That email exists, but the password is wrong
This account is locked
No account found for this emailIf the user needs help, give a safe path: support, recovery instructions, request ID, or an audit-safe explanation.
When the reader can act on technical details, include them in a structured way:
Could not read config file
Expected TOML at ./app.config.toml, but found invalid syntax on line 12: missing closing quote.
Fix the syntax and run `app deploy` again.Useful details:
Still avoid stack traces, raw exception names, and internal service names unless the audience can use them.
Do not accept "just write a generic error" without checking whether the product can do better. Ask:
If the cause is truly unknown, use a generic-but-actionable fallback:
Something went wrong
Refresh the page and try again. If this keeps happening, contact support with request ID {request_id}.Before shipping, verify the message answers the reader's questions:
40067f1
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.