Skip to content
cccskills
FreePublished on GitHubEnglish overview

ui-copy

Write and review English interface text so people understand what happened and what to do next. It provides consistent wording for buttons, errors, settings, notifications, and accessibility labels, with guidance for preserving intentional tone in existing copy.

OriginalShow the original 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.

humanlayer/humanlayer12,707 stars(GitHub 12,707 + cccskills 0)
Works withJira

Run score Not tested

See how to install

Good for

  • Writing clear button and menu labels
  • Explaining errors and next steps
  • Reviewing terminology and text formatting
  • Improving empty states and accessibility labels

Overview

What it does

This skill helps write and review English text shown in the interface, including buttons, menus, errors, notifications, and settings. It focuses on what the message means to the person using the product and what they can do next, rather than describing internal system state. It also sets rules for capitalization, punctuation, numbers, key names, product terms, and screen reader labels.

When it helps

Use it when interface wording varies between screens or an error does not make the next step clear. For existing copy, it distinguishes mechanical issues from questions of voice, and changes only the parts that need correction. It also advises against flattening distinctive wording when that tone is intentional.

Example requests

  • “Rewrite this error so its impact and the next action are clear.”
  • “Check the wording of these buttons and settings.”
  • “Review the empty-list message and its screen reader label.”

Notes

The scope is riptide-ui, riptide-cloud, packages/ui, and server-side strings that appear in notifications. It excludes apps/docs, the CLI, and comments. The guidance includes a HumanLayer-specific glossary. Promotional copy and major headlines are out of scope unless they contain factual errors.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Document check

AI checked the SKILL.md for operations that need care and for setup requirements. The score comes only from actually running the skill (hands-on test).

SafetyAre sending data, deleting files, and running commands disclosed?
AGoodIt covers copy writing and review; no external sending or destructive actions are described.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingIt names target repositories and a glossary but gives no installation steps or requirements.

Not counted in the score. Rated by AI (OpenAI Codex) as of Oct 29, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (1)

  • SKILL.md14.1 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

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.

  • Two kinds of finding. Mechanical — a raw enum, Title Case, ..., ENTER, (s), an internal name, Failed to, "please", a dead route. One right answer, no taste, fix it. Voice — hero lines, warnings, tips, empty states, anything with a deliberate point of view. Here the rule is a prompt to look, not a verdict.
  • Change the defect, not the sentence. If one word is wrong, fix that word. …how Riptide queries data… You probably don't want to mess with these. needed Riptide → HumanLayer and nothing else.
  • If the rewrite is only more conformant, stop. It must be clearer, more honest, or more useful to the reader. "Now it follows the guide" is not a benefit anyone experiences.
  • Never bulk-rewrite voice. Mechanical findings batch; voice findings go one at a time, with the tension named, for a person to decide. An audit that proposes 180 rewrites has stopped reading and started matching.
  • Hero and marketing copy is out of scope unless it is factually wrong. The install page and the composer headline are written on purpose.
  • When you are unsure which kind you have, it is voice. Leave it and say why you looked.

Mechanics

  • Sentence case everywhere: buttons, titles, headings, menu items, labels, badges, tabs, toasts.
  • Proper nouns keep casing: HumanLayer, HumanLayer Cloud, Claude Code, Codex, Fold, GitHub, Linear, Jira, Slack, Stripe, macOS, Starter/Pro/Enterprise, RPI, PRD, TDD.
  • Feature names are common nouns: fast mode, bypass permissions, auto-accept edits, multiplayer prompting, advanced metrics, commit tracking.
  • Never uppercase in the source string: write Needs approval, not NEEDS_APPROVAL; DENY → Deny. Rendering is then a CSS decision in one place, and the default is not to uppercase. The terminal-style caps on badges and eyebrows accreted rather than being designed, and the app reads better without them; keep them only where a surface earns it.
  • Never render a raw enum (needs_approval, xhigh). Add a label map first.
  • Full sentences end with a period. Fragments (buttons, labels, badges, placeholders, toast titles, headings, hotkey descriptions) do not.
  • Ellipsis is …, only on in-progress labels: Saving…. Never ..., never on placeholders.
  • Em dash with spaces for a consequence. · between status facts (This device · online). → for sequences. – for ranges (2–4×). Oxford comma. Straight quotes.
  • No !. & only in a compact two-verb button (Interrupt & send); prose uses "and". No + in prose.
  • Address the user as "you".
  • Actor: you do what you click (install the GitHub App, connect Linear, start a daemon). The agent does the work in a session (fixes, implements, opens a pull request). HumanLayer only does what happens on its own with no click (syncs, checks this device, sends a notification). Otherwise no subject: Could not save draft. Connect GitHub so the agent can open pull requests. HumanLayer checks this device before your first task.
  • Never the company "we" — a faceless narrator reporting or apologising: We couldn't fetch your organizations, Something went wrong on our end, we'll investigate. Rewrite with no subject or with HumanLayer as the subject.
  • The collaborative "we" — you and the agent, as a pair — is allowed, and only in the composer where that pairing is literally what is happening: What should we build today? stays. Do not extend it to status, errors, or settings.
  • Never "please", "sorry", "successfully", "just", "simply", "Something went wrong", "Are you sure". No roadmap hedges: "currently", "not yet", "coming soon". yet in an empty-state fact (No tasks yet) is fine.
  • Do not sand off personality. A line with a point of view is not a defect. You probably don't want to mess with these is doing a real job; flattening it to Change these only when asked to is the machine talking. Fix what is wrong in a line (an internal name, a raw enum) and leave the rest alone. If a rewrite is only blander, do not make it.
  • Use contractions (can't, don't, isn't). The one exception is cannot in irreversibility warnings: This action cannot be undone.
  • No internal names (Riptide, CodeLayer, Launcher V3, Projects V2, Phase 5, route paths, ISO timestamps, WorkOS).
  • Digits, real plurals (1 session, 2 sessions, never (s)), thousands separators. Zero is a word: No sessions, not 0 sessions.
  • Time: relative in lists (3 min ago, yesterday), absolute in the tooltip (Sep 10, 2026, 15:04), durations as 2m 3s.
  • Truncate the end of a title and the middle of a path (~/code/…/riptide-ui). Never truncate a number or a key.
  • Keys: ⌘ ⇧ ⌥ / Ctrl Shift Alt, joined with +, Enter, Esc, uppercase letters. Always give the non-mac form. Never Cmd, ENTER, ↵, ⌃. A key is a keycap element next to the label, never typed into the label string. In this document a key shown after a label means a keycap.

Session status labels

valuelabel
draftDraft
ready_for_launchQueued
waiting_for_workspacePreparing workspace
launching, resumingStarting
runningRunning
ready_for_inputIdle
needs_approvalNeeds approval
interrupt_requestedInterrupting
interruptedInterrupted
failedFailed
lostStalled

Shapes

typeshapeexample
Button, menu itemverb + object; bare verb when the object is the dialog subject; in-flight = gerund + …Create task, Delete, Creating…. Not OK, Yes, Submit, Confirm, Got it
Success toasttitle = object + past participle; partial success: title names the win, description the missDraft saved. Token created / The token list could not be refreshed.
Error1 what happened Could not <verb> <object> 2 what it means for your work 3 what to do or an action buttonCould not send. Your draft was restored. Not Failed to, Unable to, Error, Unknown error
Blocked statethe precondition as an instructionConnect a host to launch
Integration promptConnect <Product> to <payoff>; payoff is one clause naming what appears or what the agent can do; optional cost hint as status factsConnect GitHub to see pull requests and checks here · about a minute · opens github.com
Capability limitlimit + alternativeTerminal is not available for sessions on remote hosts.
Permission denialwho can fix itOnly organization admins can manage billing. Ask an admin.
Retryonly when it can succeed, with a how or when; never bare Please try again.Refresh billing and try again.
Raw backend textnever a title; description or Show details
Confirm dialogtitle <Verb> <object>?; body = consequence, what is preserved, undoable?; confirm = title verb; Cancel + Esc; confirm = ⌘+EnterArchive project? / Existing workspaces are not deleted. / Archive
Reversible actionno dialog; undo toastSession archived + Undo Z
Warninglist the consequences; never an intensifiernot Use with extreme caution!
Empty statefact, then what fills it or what to do, with keyNo tasks yet / Create a task to organize your sessions + Create task T
Loadingname the work or actorCreating worktrees…, Asking the agent…; plain Loading… only when nothing more is true
Step listshort noun phrase; states Pending / In progress / Complete / Failed / SkippedPrepare launch
Placeholdernoun phrase, instruction, or format example; no …, no period; a key hint is keycap + textSearch tasks, you@company.com, ENG-123 or a Linear issue URL, Enter to start typing
Setting labelnoun phrase, not Enable XDefault coding agent
Setting descriptionone sentence: on, and off if not the obvious inverse; experiments say what changes and what does notSend all queued messages together as soon as the session is ready. Turn off to send one at a time.
Org lockYour organization has turned this off.
Tooltip (icon button)action label + keycapToggle terminal ⌘+T
Tooltip (explainer)one or two full sentences
aria-label (control)verb + object, no key, no periodCopy file link
aria-label (region)noun phraseDocument outline
Toggle state (aria){label}: on / : off
Hotkey descriptionverb + object, no articleOpen command palette. Reuse hotkeysCatalog.ts wording
Bannertitle fragment + one-sentence body; route non-admins to a personPayment overdue / Update billing details to avoid blocked writes.
Notification toasttitle = event; body = session or task; action = verb + keyNeeds approval / Jump to session ⌘+⇧+J
Money, ratesas charged$3.84 / commit, 2–4×

Glossary

conceptusenot
productHumanLayer; HumanLayer CloudRiptide, CodeLayer, Codelayer, the app, the application
unit of worktaskticket (= the Linear/Jira issue), project
one agent runsessionconversation, chat, run
unlaunched task/sessiondraft, Untitled draftUntitled session
reusable repo recipeprojectworkspace, recipe
session output documentartifactdocument, doc, file
repo file or attachmentfileartifact
per-task checkoutworkspace, workspace setupworktree setup
git worktreeworktreeworkspace
top-level panetabworkspace
machine that runs sessionshost; this device; remote hostcomputer, machine, worker, daemon host, locally
process on a hostdaemon (only when starting, stopping, installing)host
the AI in prosethe agent; coding agent (category); subagentClaude, bot, model, sub-agent, assistant
the AI as an identity label (speaker, badge, picker)the product name: Claude Code, Codex, Foldclaude code, codelayer
tenantorganizationorg, team, workspace
people in itmember; teammates when invitinguser
rolesadmin, member; owner (of a task/artifact)administrator, org admin
tool-call decisionapprove / deny; allow (standing rule)accept, reject
hide reversiblyarchive / unarchiveun-archive, remove
to trashdeletearchive, dismiss
close a nudgedismissdelete, hide
thread lifecycleresolve / reopenmark as resolved, close
comments to agentsend to agent; send and resolvecopy for agent (= clipboard)
permission modesbypass permissions, auto-accept edits, manualYOLO, Auto-Accept, default
priority tierfast modeFast Mode, priority-tier
reasoning budgeteffortreasoning effort
GitHub PRpull request (prose), PR (labels)merge request
metricsTeam metrics, Advanced metrics, cost per commit, cost per 1,000 lines changedkLOC
filesystem locationdirectory; path (the string)folder

Open product decisions, do not add a third name: the codelayer agent option is labelled Codex, shows as CodeLayer in badges, and becomes Fold under a flag; workflows have two label sets (RPI / PRD / TDD / Freeform / Exploratory and Small / Medium / Large / Exploratory).

Rewrites

beforeafter
Failed to approveCould not approve the tool call. The agent is still waiting.
We couldn't fetch your organizations. Please check your connection and try again.Could not load organizations. Check your connection and retry.
Something went wrong on our end. Please try again later.Could not reach HumanLayer. Try again in a moment.
An unexpected error occurred. The error has been reported and we'll investigate the issue.This page could not be rendered. The error has been reported. + Try again
User role updated successfully / Draft saved!Role updated / Draft saved
APPROVE & DON'T ASK AGAINApprove and don't ask again
Use with extreme caution!The agent will edit files, run commands, and call tools without asking. Turn it off any time with ⌥+Y
ENTER to start typing...Enter to start typing
No hosts available. Please start a daemon first.No hosts online. Start a daemon to launch sessions.
Organization created, but 2 invite(s) failed. Manage invitations at /admin/invitationsOrganization created, but 2 invitations were not sent. + Manage invitations
Agent delivery is added in Phase 5remove the control until it ships

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

agent-browser

FreeSummary

Automate website navigation, form entry, and clicks through a browser command line tool. Extract page text, capture screenshots, and compare page states to check interactions or test web app behavior across screen sizes.

  • Automate form entry and button clicks
  • Extract text from web pages
  • Save page screenshots and PDFs
humanlayer/humanlayer12.7KUpdated Oct 29, 2026

asd-ste100

FreeSummary

Rewrite dense or ambiguous English into short, direct sentences using principles from ASD-STE100, a standard for clear technical English. It preserves facts and conditions, identifies writing issues, and shows the original and revised text side by side.

  • Clarifying English instructions for another agent
  • Simplifying English tool descriptions and error messages
  • Making English easier for non-native readers
humanlayer/humanlayer12.7KUpdated Oct 29, 2026

Inspect GitHub pull requests, read review conversations, and investigate failed automated checks with dedicated scripts. Get consolidated status reports, unresolved discussion threads, and failing job or step logs, with full logs saved for further inspection.

  • Checking pull request status in one report
  • Reading unresolved review conversations
  • Investigating failed CI jobs and steps
humanlayer/humanlayer12.7KUpdated Oct 29, 2026

bump-version

FreeSummary

Update release base versions for supported packages, keep matching version fields in sync, and verify generated versions. The workflow covers committing and pushing the changes, with guidance for release steps after merging.

  • Prepare a package version update for release
  • Synchronize version fields across related files
  • Verify generated versions before pushing
humanlayer/humanlayer12.7KUpdated Oct 29, 2026

calldiff

FreeSummary

Compare function call structures across Git commits, branches, or working files to support code review. Display call trees and trace paths from an entry function to a target function, with support for 22 languages.

  • Compare function calls before and after a change
  • Review call structure changes between branches
  • Trace paths from an entry function to a target
humanlayer/humanlayer12.7KUpdated Oct 29, 2026

Automate browser tasks from the terminal using the chrome-devtools-mcp CLI. Inspect page elements, click and fill forms, navigate tabs, capture screenshots, and investigate network requests, console messages, performance, and memory through shell commands.

  • Automating form input and page navigation
  • Capturing page or element screenshots
  • Investigating network requests and console errors
humanlayer/humanlayer12.7KUpdated Oct 29, 2026

See all skills by humanlayer

Report a problem with this skill