Browse the docs

Skills: Craft and build

/crisp-copy

Write and check the words in your UI.

Specialist extensionsuser-invoked

A specialist for UX microcopy: the short text inside an interface. /crisp-copy treats every string as a design decision, from labels, empty states, and errors to tooltips, buttons, success messages, and onboarding hints. It checks or writes them against the Contextual and Intelligent dimensions.

It has two modes. Audit mode takes your existing text and returns a table of problems, each with a severity rating and replacement copy ready to paste. Generate mode takes a component and its context and writes the text from scratch, with variants.

Use it when the words are doing less work than the design:

  • Empty states say "No data" and errors say "Something went wrong"
  • A final check of every string on a new screen before it ships
  • A new component needs its text written: empty state, error, confirmation, or tooltip
  • The product's tone changes from screen to screen and needs a documented copy system
  • Copy audit with P0–P3 severity
  • Replacement text ready to paste
  • Notes on voice and tone consistency
  • Empty state copy (3-part structure)
Claude Code: /crisp-copy
P1"No items" → "You haven't added any items yet", plus a next step
P1"Something went wrong" → "Save failed. Check your connection."
P2"Submit" → "Save changes": names the action
✓"Cancel": no change needed

Illustrative example only. This is not a real audit.

  • Empty states say what is missing, explain why, and offer one way forward
  • Errors say exactly what went wrong and what the user can do next
  • Buttons describe the outcome: "Save draft", not "Submit"
  • Success messages say what happened: "Invite sent to anna@company.com", not "Done"
  • Destructive actions name what will be destroyed and say that it cannot be undone
  • Loading states, and menu items that open a further step, end with a proper ellipsis (…)
What is the difference between the two modes?

Audit mode checks text you already have (a screenshot, a screen description, or a pasted list) and returns a table of problems with severity ratings and revised copy. Generate mode writes new text for a component type and context, using tested templates for empty states, errors, confirmations, and hints.

How does it decide the voice?

From the register set in .crisp.md. Brand register leads with personality. Product register leads with clarity and recovery, with no clever language at high-stakes moments. If there is no context file, it asks one question: is this a marketing page or product UI?

What is the copy system output?

When .crisp.md exists, audits and generated copy end with a copy system: voice, person, tense, capitalisation, product terms, and terms to avoid. The team can commit it as a shared reference.

Can severity really apply to copy?

Yes, and that is what makes the audit useful. A P0 stops users understanding at all. A P1 misleads users or leaves them stuck with no way forward. A P2 is generic text users have to decode. A P3 is word-choice polish.

zsh
$ npx skills add @laith-wallace/crisp

Installs all fourteen CRISP skills and detects which AI coding tool you use. Run /crisp-teach once per project, before the other skills.

(The CRISP letter)

Design evaluation, in writing.

Occasional emails on getting AI agents to produce work worth shipping. New skills are announced here first. No noise.