voice-register-check
Skill14 starsChanged 9 days agoMITView on GitHub
Use when auditing user-facing strings (UI copy, error messages, emails, notifications) for two failure modes — technical jargon leaking into user-facing text ("error", "API", "null", "system"), and dev/builder jargon being used where the audience is a non-engineer end-user ("operator", "PR", "slug", "asset"). Operationalizes the no-technical-leak and no-domain-jargon-user-facing rules.
In this repository11 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- anti-ai-slopSkill
- bukti-sebelum-klaimSkill
- pakai-alat-duluSkill
- pre-deploy-3gateSkill
- secret-rotation-walkthroughSkill
- security-audit-databaseSkill
- security-audit-web-appSkill
- seo-audit-multilocaleSkill
- seo-content-auditSkill
- tanya-seperlunyaSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 5 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Why this matters: when a user sees "Error: Unable to fetch", they think the product is broken.
- Distinctive: line 31
If the user is a customer (not a developer), they don't know what these words mean:
- Distinctive: line 64
If yes: is the word appropriate, or is it a leak?
- Distinctive: line 102
Don't auto-replace. Always show before/after for user to approve.
- Distinctive: line 105
If unsure about a word: ask the user about audience for that screen.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Voice register check
You're auditing user-facing strings for two distinct mistakes that both come from the same root cause: developer wrote text from their own perspective, not the user's.
What you're checking
Failure mode 1: Technical state leaking into user-facing copy
User shouldn't see "error", "system", "null", "undefined", "API failed", "rusak", "broken" — these are dev-side observations.
Why this matters: when a user sees "Error: Unable to fetch", they think the product is broken. When they see "Maaf, ada gangguan sebentar — coba lagi ya", they think it's a temporary hiccup. Same underlying state, totally different user perception.
What to grep for in user-facing text:
- Words:
error,failed,null,undefined,system,crashed,broken,rusak,gagal,tidak ada,not found,forbidden,unauthorized - Stack-trace-like artifacts:
0x, function names visible to user, line numbers - Server response codes shown to user:
400,404,500
The fix pattern: rewrite from the perspective of a polite human messenger.
- ❌ "Error: User not found"
- ✅ "Akun ini belum kita kenal — coba cek email-nya?"
- ❌ "Failed to load data"
- ✅ "Belum bisa ambil datanya barusan, coba refresh ya"
Failure mode 2: Builder/dev jargon used where user is non-engineer
If the user is a customer (not a developer), they don't know what these words mean:
- Builder jargon:
PR,pull request,commit,merge,branch,fork,pattern,slug,asset,deploy - Domain-internal jargon:
operator,tenant,workspace owner,superhost,endpoint,webhook - DB jargon:
record,entry,row,null value,field
Why this matters: even if the user is technical, you're writing to their CUSTOMER persona, not their dev persona. Don't assume they speak your shop talk in this context.
What to grep for:
- The words above, in any UI string, email template, push notification, error toast, etc.
- File patterns: any string in
components/,pages/,app/, email templates, copy tables in DB, locale files
The fix pattern: describe what the user does or sees, in their language.
- ❌ "You don't have any active operators"
- ✅ "Belum ada usaha yang lo daftarin di sini" (or in English: "You haven't added any businesses yet")
- ❌ "This asset can be cloned"
- ✅ "Bisa lo duplikat/copy"
How to run the audit
- Identify user-facing string sources. Common locations:
- Component files in
components/,app/,pages/ - Locale/translation files:
locales/,messages/,i18n/ - Email template files
- Database table for editable copy (e.g.
site_copyin Supabase) - Toast / notification calls
- Component files in
- Grep for each red-flag word in those locations.
- For technical leak:
error,failed,null,undefined,system,rusak,gagal - For builder jargon:
operator,tenant,endpoint,workspace,slug,asset - Skip matches in: comments, console.log, internal-only screens (admin dashboards behind staff-only auth)
- For technical leak:
- For each match, decide:
- Is this string actually shown to end-users? (vs a developer-only screen)
- If yes: is the word appropriate, or is it a leak?
- Suggest replacement copy.
- Special check: error message templating.
- Many apps have a generic "error.message" passthrough. Find where backend errors get displayed to users.
- Recommend: never pass raw
error.messageto user. Use a translation map: known error → friendly copy. Unknown error → generic friendly fallback.
How to deliver the report
# Voice register audit — [project name]
## Summary
- Files scanned: N
- Technical-state leaks found: N
- Builder-jargon usages found: N
## Technical-state leaks
| File:line | Current copy | Suggested replacement | Severity |
|---|---|---|---|
| ... | "Error: User not found" | "Akun ini belum kita kenal..." | high |
## Builder/dev jargon usages
| File:line | Current copy | Suggested replacement | Notes |
|---|---|---|---|
| ... | "operator dashboard" | "dashboard usaha lo" | "operator" is internal term |
## Special concerns
- [Any pattern detected, e.g. "every error toast does `toast(error.message)` directly — recommend wrapping in copy mapper"]End with: "Total [N] strings flagged. Mau gue bantu apply fixes batch (highest-severity dulu), atau lo review report-nya dulu?"
Constraints
- For internal/admin screens (dashboard for staff only): skip — jargon is appropriate there.
- Don't auto-replace. Always show before/after for user to approve. Voice nuances matter.
- For multilocale: audit each locale separately. Don't translate from one locale to another and assume voice is preserved.
- Decide audience PER STRING — same app may have customer-facing strings AND partner-facing strings with different appropriate jargon levels.
- If unsure about a word: ask the user about audience for that screen. Don't guess.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

