Browse the docs

Skills — Craft and build

/crisp-copy

Words that orient.

Specialist extensionsuser-invoked

A UX microcopy specialist. /crisp-copy treats every string in a UI as a design decision — labels, empty states, errors, tooltips, CTAs, success messages, onboarding hints — and evaluates or writes them against the Contextual and Intelligent dimensions.

It runs in two modes. Audit mode takes your existing strings and returns a violation table with severity ratings and replacement copy ready to paste. Generate mode takes a component and its context and writes the strings from scratch, with variants.

Reach for it whenever the words are doing less work than the pixels:

  • Empty states say "No data" and errors say "Something went wrong"
  • A pre-ship pass over every string on a new surface
  • A new component needs its copy written — empty state, error, confirmation, tooltip
  • The product's voice drifts between screens and needs a documented copy system
  • Copy audit with P0–P3 severity
  • Replacement strings ready to paste
  • Voice + tone consistency notes
  • Empty state copy (3-part structure)
Claude Code — /crisp-copy
P1"No items" → "You haven't added any items yet" — with a recovery path
P1"Something went wrong" → "Save failed — check your connection"
P2"Submit" → "Save changes" — action-specific
"Cancel" — no change needed

Illustrative example output — not a real audit.

  • Empty states name what is missing, explain why, and offer one recovery action
  • Errors say what specifically went wrong and what the user can do next
  • CTAs describe the outcome — "Save draft", not "Submit"
  • Success messages name what happened — "Invite sent to anna@company.com", not "Done"
  • Destructive actions name the thing being destroyed and state irreversibility
  • Loading states and follow-up menu items end with a proper ellipsis
What is the difference between the two modes?

Audit mode evaluates strings you already have — a screenshot, a screen description, or a pasted list — and returns a table of violations with severity and revised copy. Generate mode writes new strings from a component type and context, using tested templates for empty states, errors, confirmations, and hints.

How does it decide the voice?

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

What is the copy system output?

When .crisp.md exists, audits and generation end with a derived copy system — voice, person, tense, case, product terminology, and terms to avoid — that can be committed as a reference for the whole team.

Can severity really apply to copy?

Yes, and it is what makes the audit actionable. A P0 blocks comprehension entirely; a P1 misleads or strands the user without a recovery path; P2 is generic copy the user has to decode; P3 is word-choice polish.

zsh
$ npx skills add @laith-wallace/crisp

Installs all fourteen CRISP skills and auto-detects your AI harness. Run /crisp-teach once per project first.

The CRISP Letter

Design evaluation, in writing.

Occasional letters on making AI agents produce work worth shipping. New skills announced here first. No noise.