# UI Copy

Copy rules for every user-visible string in riptide-ui, riptide-cloud, packages/ui, and...

- Repository: https://github.com/humanlayer/humanlayer (12740 stars)
- Category: Design
- License: Apache-2.0
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add humanlayer/humanlayer --skill ui-copy -g -a claude-code -y`
Codex: `npx skills add humanlayer/humanlayer --skill ui-copy -g -a codex -y`
Cursor: `npx skills add humanlayer/humanlayer --skill ui-copy -g -a cursor -y`
Gemini CLI: `npx skills add humanlayer/humanlayer --skill ui-copy -g -a gemini-cli -y`

## Description

Copy rules for every user-visible string in riptide-ui, riptide-cloud, packages/ui, and server strings that reach a toast. ACTIVATE when adding, changing, or reviewing a button, menu item, dialog, toast, error, empty state, placeholder, tooltip, aria-label, setting, hotkey description, banner, or onboarding text. Not for apps/docs, the CLI, or comments.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

**First rule: write to the person, never about the system.** Every string answers "what does
this mean for me and what can I do now?", never "what state is the code in?". A string that
narrates internal state, preconditions, or implementation progress is a log line, not copy, even
when it is accurate. Before any rule below, reread the string as the user and ask what they would
do next.
`Workspace setup is running independently. No session has started.` → `Setting up your workspace. Your session starts when it finishes.`
`Worktree configuration is required to use "Now".` → `Add a workspace config to create worktrees now.`
`Task creation sync timed out` → `Could not confirm the task was created. Check the task list before retrying.`
`Comment sync still loading` → `Comments are loading`. `Workspace setup row is parked on an error` → `Workspace setup failed`. `Converging`, `Delivery rejected: …` → never.

Voice: a competent colleague at the next desk. Says the actual thing, names the key, admits
limits. Never apologizes, sells, or shouts. Model string:
`Updating will interrupt 3 active sessions on this device. Finish your work before updating, or choose` `Later`.

## Changing a string that already ships

Writing a new string: apply everything below. **Changing one that exists: read this first.**
A rule matching a line is not on its own a reason to rewrite it.

The rest: https://github.com/humanlayer/humanlayer/blob/HEAD/.claude/skills/ui-copy/SKILL.md
