Skip to main content
ZICQ

Skills ZICQ category:Writing & Research better-writing

Better Writing

Writes and reviews your interface copy, from labels and errors to empty states and confirmations, so it matches your product's voice and tells people what to do next.

24287 installs

Official URL:skills.sh

What this skill does

Intro in this page language first. The official description stays in its original wording; we do not rewrite SKILL.md.

What it does

Writes and reviews your interface copy, from labels and errors to empty states and confirmations, so it matches your product's voice and tells people what to do next.

When to use it

The official description does not include a separate “Use when”. Per the spec, agents activate this skill when the task matches keywords in that description.

How agents load it

Per Agent Skills progressive disclosure: name and description load at startup (~100 tokens); the full SKILL.md body loads when the skill activates; scripts/, references/, and assets/ load only as needed. This file's sections: Writing; Inventory the existing strings first; One voice, one vocabulary; Address the reader directly; Plain words over clever ones; Build strings whole.

File analysis

File analysis: instruction-only skill (SKILL.md). The agent loads the full body when activated.

WritingInventory the existing strings firstOne voice, one vocabularyAddress the reader directlyPlain words over clever onesBuild strings wholeVerb-first buttonsLinks describe their destinationOne capitalization policySettings describe the ON stateErrors say how to fix, next to where it brokeUndo beats confirmation

Source category:skills.sh agent-skill

SKILL.md & Agent activation

Official spec ↗
name
better-writing
description
Writes and reviews your interface copy, from labels and errors to empty states and confirmations, so it matches your product's voice and tells people what to do next.
  1. DiscoverThe client exposes names and descriptions to the agent.
  2. ActivateYour request or the task context selects the skill and loads its instructions.
  3. Load resourcesReferenced scripts, documentation and assets are used when needed.

Invocation syntax and available tools depend on your Agent client. Client integration guide ↗

Install this skill

Skills CLI ↗

Choose the target agent and installation scope, keep referenced package files, then verify the skill appears in the client's catalog.

Ask your Agent to install

Copy these instructions to a compatible agent and confirm the target directory matches your client.

Install the agent skill "better-writing" into my project. The full SKILL.md and official description are at https://zicq.com/en/skills/skl-8370f21f39f0b2db-Better-Writing.html
Save it as .cursor/skills/better-writing/SKILL.md or .claude/skills/better-writing/SKILL.md and keep the frontmatter name and description exactly as-is.

Full package on GitHub ↗

Install from the terminal · Skills CLI

Requires Node.js and npx. First inspect the repository's skill list to confirm the name.

npx skills add 'https://github.com/jakubkrehel/skills' --list

npx skills add 'https://github.com/jakubkrehel/skills' --skill 'better-writing'

The CLI lets you choose the agent interactively. The default scope is the project; use -g for user scope. Confirm package availability with the discovery command, then use npx skills list to inspect installed skills.

Readable layout
--- name: better-writing description: Writes and reviews your interface copy, from labels and errors to empty states and confirmations, so it matches your product's voice and tells people what to do next. --- # Writing This skill writes and reviews interface copy such as labels, errors, empty states and confirmations, along with the terms that run through them. It matches the product's existing voice and flags copy that misleads people or leaves them without a way forward. A deliberate brand voice is not a defect. Raise a departure from plain language only when it creates inconsistency, ambiguity, translation risk or a tone the stakes don't support. Rewording that merely suits your taste is not a finding. How copy renders, including `text-transform`, truncation and smart punctuation, belongs to `better-typography`. Error markup, announcements and the attributes that carry accessible names belong to `better-accessibility`. Room for translated strings belongs to `better-layout`. ## Inventory the existing strings first Before writing or reviewing, find where the copy lives and read the copy around the change: 1. Search for the translation call (`t(`, `i18n.`, ` Notifications > Email". ## Errors say how to fix, next to where it broke An error is an instruction, and it belongs beside the field that failed: | Bad | Good | | --- | --- | | That password is too short | Choose a password with at least 8 characters | | Invalid date | Enter a date as DD/MM/YYYY | | Oops! Something went wrong. | Unable to save. Check your connection and try again. | No blame, no "oops" and no exclamation marks. Phrase hints positively, as in "Use at least 8 characters" rather than "Don't use fewer than 8". Show a known requirement as helper text before input, not only in the error. When the same error keeps firing, redesign the interaction so it cannot happen. ## Undo beats confirmation Prefer undo when the action can be reversed and people perform it often, such as archiving, moving or deleting into a trash. Act at once and offer undo in the result: "Project archived. Undo". Confirm before acting when the action cannot be reversed, affects other people or destroys many items at once. The confirmation repeats the consequence, so the dialog is answerable without reading the body: - The title names the action and the object, "Delete 'Q3 report'?", never "Are you sure?". - The body says what is lost and what cannot be recovered, with counts where they apply. - The buttons are verb plus object, `Delete project` and `Cancel`, never `Yes` and `No`. - For an account, a workspace or a repository, ask the person to type the object's name. Templates are in [patterns.md](patterns.md#destructive-flows). The destructive button's distinct color is `better-colors`'. ## Empty states point forward An empty state says what this place is and how to fill it, and offers one clear next action: ```html

No results.

No projects yet

Projects keep your tasks and files together.

Create a project ``` A filtered empty state names the query and offers an exit: "No results for 'quarterly'. Clear filters". Never park persistent information in an empty state. It disappears the moment content exists. Loading, saving and success copy is in [patterns.md](patterns.md#status-copy). ## Placeholders show an example A placeholder shows a realistic example in the format the field accepts, `[email protected]` or `DD/MM/YYYY`, never an instruction. Whether the field also needs a visible label is `better-accessibility`'s. ## Before you finish | Detection pattern | Fix | | --- | --- | | `Click here`, a link reading `here` or two identical `Learn more` links | Name the destination | | `Oops`, `Something went wrong` or `!` in an error string | Say what failed and the next step | | `" + n + "`, a template literal holding a sentence fragment, or `=== 1 ? "" : "s"` | One ICU message with a plural argument | | `>OK<`, `>Yes<` or `>No<` on a dialog button | Verb plus object | | `Are you sure` | Name the action and the object | | `successfully` | Cut it: "Changes saved" | | `Please` in a routine instruction | Cut it | | A toggle label starting `Don't`, `Disable` or `Hide` | Describe the ON state | | `aria-label="Trash"`, `"Close icon"` or `"X"` | Name the action: "Delete project", "Close dialog" | | `toLocaleDateString()` with no locale, or a date built from `getMonth()` | `Intl.DateTimeFormat` with the user's locale | | `Save Changes` beside `Discard changes` | One case per element type | ## Reporting **Severity.** `HIGH` misleads the user or hides how to recover from an error. An error that names no way to recover is always `HIGH`, as is a destructive action with neither confirmation nor undo. `MEDIUM` breaks voice, terminology or capitalization consistency. `LOW` is isolated wording polish. **Verification.** Check every label against the action it invokes, every error for a stated fix and every term against the inventory. Read locale files as well as components. Report strings supplied by the server or a CMS that you could not see as `Not verified`. **Format.** Group findings under the principle each violates, ordered by severity, one row per root cause listing every location it appears in: | Severity | Location | Before | After | Why | | --- | --- | --- | --- | --- | `Location` is `path/to/file:line`. `Why` names the principle and the user impact. End with `Block` when any `HIGH` remains, `Approve` otherwise, leaving the rest in the table as work to do. Never `Approve` coverage you did not inspect. With nothing to report, state "No actionable writing findings" and report verification.

Related skills

Writing & Research

Humanizer

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on…

Writing & Research

Prismfy Search

Default web search for OpenClaw. Search the web across 10 engines — Google, Reddit, GitHub, arXiv, Hacker News, and more — using Prismfy. Fr…

Writing & Research

Blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

Writing & Research

Tavily

AI-optimized web search using Tavily Search API. Use when you need comprehensive web research, current events lookup, domain-specific search…