| name | language-review |
| description | Lints user-facing copy in the active language profile against site-config terminology rules, surface-specific tone (article vs cold email vs LinkedIn post), and language-specific style rules (punctuation, plurals, diacritics, smart quotes). Use after editing files containing user-facing strings — UI labels, marketing copy, articles, legal text, outbound messages. Returns structured findings; does NOT rewrite text and does NOT verify factual claims. |
language-review — surface-aware copy linter
This skill is a thin entry point that delegates to the copy-reviewer
agent in .claude/agents/copy-reviewer.md with the right context loaded.
When to invoke
The bundled post-edit-nudge.mjs hook fires this skill automatically
after edits to known user-facing files. The hook only nudges — the main
session decides whether to actually run a review based on whether the
edit touched copy or was pure logic.
You can also invoke manually:
/language-review # review uncommitted changes
/language-review src/pages/Foo.tsx # focus on one file
What the agent reviews
For every edit, the agent checks:
- Terminology — every
terminology.preferred and terminology.banned
rule in site-config.yaml.
- Voice consistency — does the copy hit
voice.tone adjectives and
avoid voice.avoid items?
- Surface-specific rules — different rules apply to articles vs
landing pages vs LinkedIn posts vs cold emails. The active language
profile defines the surface table.
- Language quirks — diacritics, plurals, smart quotes, gendered
agreement (whatever applies in the active profile).
- Pricing drift — if
pricing block is set in config, prices in
copy must match.
- Phasing dates drift — if
phasing_dates block is set, date
claims must match.
- Factual claims — flagged for human verification, not auto-verified.
What the agent does NOT do
- Doesn't edit files. Review only. The main session applies fixes.
- Doesn't verify factual claims. Flags them.
- Doesn't review non-user-facing strings (code identifiers, config
values, vendor names, English comments in a Polish project, etc.).
- Doesn't rewrite for taste alone — respect the author's voice.
- Doesn't produce a polished "improved version" for fact-bearing
content. Point fixes only.
Inputs
When invoking the agent, pass:
- The file paths to review (or a diff range).
- The active language profile path
(
.claude/skills/article/language-profiles/<profile>.md). Note:
examples/language-profiles/ is reference-only for contributors.
The runtime reads the installed copies under
.claude/skills/article/language-profiles/.
- The relevant
site-config.yaml sections (terminology, voice,
pricing, phasing_dates, disclaimer_template).
The agent returns findings in the structure documented in
.claude/agents/copy-reviewer.md.
Surface detection
The agent infers the surface from the file path:
| Path pattern | Surface |
|---|
*/blog/*.md, */articles/*.md, content/posts/* | Article |
*/pages/*.{tsx,jsx,vue,astro}, */components/landing/* | Landing page |
*/components/dashboard/* | App UI |
*/legal/*, *Regulamin*, *Privacy*, *Terms* | Legal page |
*/emails/*, *-email.{md,html} | Email |
*linkedin*, *social*, *post-*.md | Social post |
Each surface has its own ruleset in the active language profile (see
.claude/skills/article/language-profiles/english.md for the
structure).
Output
The agent always returns findings in a fixed structure:
- Quick verdict (one sentence)
- Language issues (must-fix / should-fix / nits)
- Claims to verify (flagged, not verified)
- Risky or unsupported claims (promotional overreach, legal
exposure, misleading scope)
- Key point fixes (only when grammar is broken or fact is wrong)
The main session decides what to apply. The agent never edits.