Resources
3Install
npx skillscat add pluginagentmarketplace/custom-plugin-ux-design/ux-writing Install via the SkillsCat registry.
SKILL.md
UX Writing Skill
Atomic Skill: Craft clear, concise, and helpful content that guides users through experiences
Purpose
This skill provides frameworks for writing effective interface copy and establishing content systems.
Skill Invocation
Skill("custom-plugin-ux-design:ux-writing")Parameter Schema
Input Parameters
interface UXWritingParams {
// Required
task: "microcopy" | "voice_tone" | "errors" | "ctas" | "audit";
context: string;
// Optional
brand_voice?: {
personality: string[];
formality: "formal" | "neutral" | "casual";
};
constraints?: {
character_limit?: number;
localization?: string[];
};
emotional_context?: "neutral" | "frustrated" | "excited" | "confused";
}Validation Rules
task:
type: enum
required: true
values: [microcopy, voice_tone, errors, ctas, audit]
context:
type: string
required: true
min_length: 10
constraints.character_limit:
type: number
min: 1
max: 500Execution Flow
UX WRITING EXECUTION
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Step 1: UNDERSTAND CONTEXT
โโโ Identify user goal
โโโ Define emotional context
โโโ Note constraints
Step 2: APPLY VOICE
โโโ Match brand voice
โโโ Adjust tone for context
โโโ Consider localization
Step 3: DRAFT CONTENT
โโโ Write initial version
โโโ Create alternatives
โโโ Check constraints
Step 4: REFINE
โโโ Simplify language
โโโ Remove jargon
โโโ Verify clarity
Step 5: VALIDATE
โโโ Test with users
โโโ Check accessibility
โโโ Document patterns
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโRetry Logic
retry_config:
max_attempts: 3
backoff_type: linear
initial_delay_ms: 500
max_delay_ms: 3000
retryable_errors:
- TONE_MISMATCH
- LIMIT_EXCEEDEDLogging Hooks
interface UXWritingLog {
timestamp: string;
event: "draft_created" | "refined" | "approved";
content_type: string;
character_count: number;
readability_score: number;
alternatives_generated: number;
}Learning Modules
Module 1: Microcopy Fundamentals
MICROCOPY TYPES
โโโ Button labels
โโโ Form labels
โโโ Placeholder text
โโโ Helper text
โโโ Error messages
โโโ Success messages
โโโ Loading states
โโโ Empty states
โโโ Tooltips
โโโ Notifications
WRITING PRINCIPLES
โโโ Clarity over cleverness
โโโ Concise but complete
โโโ Action-oriented
โโโ User-focused
โโโ ConsistentModule 2: Voice & Tone
VOICE DIMENSIONS
โโโ Personality traits
โ โโโ Friendly vs Professional
โ โโโ Playful vs Serious
โ โโโ Casual vs Formal
โโโ Vocabulary choices
โ โโโ Technical level
โ โโโ Brand-specific terms
โ โโโ Inclusive language
โโโ Sentence structure
โโโ Active voice
โโโ Sentence length
โโโ Punctuation style
TONE ADAPTATION
โโโ Neutral context: Standard voice
โโโ Frustrated user: Empathetic, helpful
โโโ Excited user: Match energy
โโโ Confused user: Clear, guiding
โโโ Error situation: Calm, actionableModule 3: Error Messages
ERROR MESSAGE STRUCTURE
โโโ What happened (clear, honest)
โโโ Why it happened (if helpful)
โโโ What to do next (actionable)
ERROR TONE GUIDELINES
โโโ Never blame the user
โโโ Be specific, not vague
โโโ Offer a solution
โโโ Use plain language
โโโ Keep it brief
EXAMPLES
Bad: "Error 500"
Good: "We couldn't save your changes. Please try again."
Bad: "Invalid input"
Good: "Email addresses need an @ symbol"
Bad: "Something went wrong"
Good: "We couldn't load your files. Check your connection and refresh."Module 4: CTAs & Buttons
CTA PRINCIPLES
โโโ Start with action verb
โโโ Be specific about outcome
โโโ Keep it short (2-4 words)
โโโ Match user expectation
โโโ Create appropriate urgency
ACTION VERBS BY CONTEXT
โโโ Creation: Create, Add, New
โโโ Continuation: Continue, Next
โโโ Confirmation: Save, Submit, Confirm
โโโ Navigation: Go, Open, View
โโโ Communication: Send, Share, Invite
โโโ Removal: Delete, Remove, Cancel
PRIMARY vs SECONDARY
โโโ Primary: Main action (emphasized)
โโโ Secondary: Alternative action
โโโ Tertiary: Escape/cancelModule 5: Content Strategy
CONTENT PATTERNS
โโโ Consistent terminology
โโโ Reusable content blocks
โโโ Scalable voice system
โโโ Localization-ready
CONTENT GOVERNANCE
โโโ Style guide
โโโ Terminology glossary
โโโ Approval workflow
โโโ Update process
โโโ Quality metricsError Handling
| Error Code | Description | Recovery |
|---|---|---|
UXW-001 |
Jargon detected | Suggest plain language |
UXW-002 |
Tone mismatch | Realign with voice |
UXW-003 |
CTA unclear | Strengthen verb |
UXW-004 |
Error unhelpful | Add action steps |
UXW-005 |
Limit exceeded | Prioritize, truncate |
Writing Formulas
Error Messages
[Acknowledge] + [Explain (if helpful)] + [Action]
"We couldn't save your file. It may be too large.
Try reducing the size or contact support."Empty States
[What would be here] + [How to add it]
"No messages yet. Start a conversation by tapping New Message."Loading States
[What's happening] + [Progress (if known)]
"Loading your dashboard..."
"Uploading file (3 of 5)..."Troubleshooting
Problem: Users misunderstand labels
Diagnosis:
โโโ Check: Jargon usage
โโโ Check: Context clarity
โโโ Check: Consistency
โโโ Solution: Simplify
Steps:
1. Test with real users
2. Replace technical terms
3. Add helper text
4. A/B test alternativesProblem: CTAs have low engagement
Diagnosis:
โโโ Check: Verb strength
โโโ Check: Value clarity
โโโ Check: Visual prominence
โโโ Solution: Optimize copy
Steps:
1. Use stronger action verbs
2. Clarify the outcome
3. Test alternatives
4. Consider placementUnit Test Templates
describe("UXWritingSkill", () => {
describe("microcopy generation", () => {
it("should meet character limit", async () => {
const result = await invoke({
task: "microcopy",
context: "button label",
constraints: { character_limit: 20 }
});
expect(result.text.length).toBeLessThanOrEqual(20);
});
});
describe("error messages", () => {
it("should include actionable step", async () => {
const result = await invoke({
task: "errors",
context: "file upload failed"
});
expect(result.message).toMatch(/try|check|contact/i);
});
it("should not blame user", async () => {
const result = await invoke({
task: "errors",
context: "invalid input"
});
expect(result.message).not.toMatch(/you|your mistake/i);
});
});
describe("readability", () => {
it("should score grade 8 or lower", async () => {
const result = await invoke({
task: "microcopy",
context: "onboarding instructions"
});
expect(result.readability.grade_level).toBeLessThanOrEqual(8);
});
});
});Quality Metrics
| Metric | Target | Measurement |
|---|---|---|
| Readability | Grade 8 | Flesch-Kincaid |
| Task completion | > 95% | User testing |
| Error recovery | > 90% | Recovery rate |
| Consistency | 100% | Terminology audit |
Version History
| Version | Date | Changes |
|---|---|---|
| 1.0.0 | 2025-12-30 | Production-grade upgrade |