
character-naming
Break LLM name defaults with external entropy. Use when character names cluster around statistical medians (Chen, Patel, Maya, Marcus), when cast has collision risks, or when fantasy cultures need phonologically consistent naming.
- Installs
- 479
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/jwynia/agent-skills --skill character-naming- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads character-naming automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Character Naming: Breaking the Chen Proliferation
You help writers generate character names that escape LLM statistical defaults. Your role is to diagnose naming problems, provide external entropy for generation, and track cast coherence.
Core Principle
LLMs default to statistical medians. External entropy is the only cure.
When asked for "diverse" names, LLMs produce whatever names appear most frequently in their training data for each perceived category. "Chen" appears repeatedly because it's the statistical center of "East Asian surname." When corrected, LLMs "median-hop"—switching to the next most common name from another ethnicity rather than providing genuine variety.
The solution: never let the LLM pick names. Use curated lists with true randomization.
The States
State CN1: No Context
Symptoms: User wants character names but hasn't established setting, culture, or time period. Requests like "give me some names" with no context. Key Questions:
- What's the genre and setting?
- What time period?
- What cultures are present in this world?
- How diverse should the cast be? Interventions: Prompt for context before generating. Don't default to "contemporary American diverse."
State CN2: Chen Proliferation
Symptoms: Names cluster around statistical medians. Multiple characters have surnames like Chen, Patel, Garcia, Kim. First names repeat patterns like Maya, Marcus, Sofia, Aiden. Cast feels algorithmically generated. Key Questions:
- What's the actual cultural distribution of your setting?
- Have you defined which cultures are present and in what proportions?
- What names have you already used? Interventions: Use cultural name lists with external randomization. Never let the LLM "suggest" names—always draw from entropy.
State CN3: Cultural Incoherence
Symptoms: Fantasy/sci-fi names in the same fictional culture don't sound related. "Kael" and "Zephyrine" and "Bob" in the same kingdom. Names feel grabbed from different aesthetic buckets. Key Questions:
- Does this fictional culture have defined phonological rules?
- What's the naming convention (patronymic, descriptive, clan-based)?
- What real-world cultures, if any, inspired this fictional one? Interventions: Use phoneme presets for consistent sound patterns. For complex cultures, consider the conlang skill (if available).
State CN4: Cast Collision
Symptoms: Multiple characters have similar names. Sarah/Sara, Mike/Mark/Michael, Lee/Leigh. Readers confuse characters. Names start with the same sound or have similar rhythms. Key Questions:
- What names have already been used in this project?
- What initial sounds are overrepresented?
- What syllable patterns dominate the cast? Interventions: Run cast tracker analysis before finalizing names. Check sound profiles for distinctiveness.
State CN5: Character Mismatch
Symptoms: Name doesn't fit character's background, role, or story logic. Modern name in historical setting. Wrong cultural background for the character's origin. Name associations undercut the character. Key Questions:
- What's this character's cultural background in the story?
- What time period were they born in?
- What class/status signals should the name carry?
- Are there specific associations to avoid? Interventions: Regenerate with explicit constraints. Use historical lists for period fiction.
State CN6: Mixed Setting
Symptoms: Contemporary or historical setting with multiple real-world cultural groups. Need authentic representation without tokenism. Proportions feel forced or unrealistic. Key Questions:
- What's the realistic cultural mix for this setting?
- What proportions feel authentic (not "one of each")?
- Are there communities or neighborhoods with distinct makeup? Interventions: Define cultural distribution first. Use weighted pools or location-specific mixing.
Diagnostic Process
- Listen for symptoms — Identify which state applies
- Establish context — Get setting, period, cultures before any generation
- Check existing cast — What names are already committed?
- Select generation mode:
- Contemporary/historical: Use cultural name lists
- Fantasy/sci-fi: Use phoneme presets
- Mixed: Define distribution, then generate per culture
- Generate with entropy — Run scripts, never "think of" names
- Validate against cast — Check for collisions before finalizing
Available Tools
character-name.ts
Generates names from curated lists or phoneme patterns.
# Contemporary/historical from cultural lists
deno run --allow-read scripts/character-name.ts --culture chinese --gender female
deno run --allow-read scripts/character-name.ts --culture anglo --count 5
deno run --allow-read scripts/character-name.ts --pool contemporary-american --count 10
# Fantasy from phoneme presets
deno run --allow-read scripts/character-name.ts --fantasy elvish-like --count 10
deno run --allow-read scripts/character-name.ts --fantasy harsh-fantasy --syllables 2-3
# With cast collision checking
deno run --allow-read scripts/character-name.ts --culture korean --cast project-cast.json
Options:
--culture <name>— Use specific cultural pool (chinese, anglo, hispanic, etc.)--pool <name>— Use mixed pool (contemporary-american, etc.)--fantasy <preset>— Generate from phoneme preset (elvish-like, harsh-fantasy, neutral)--gender <m|f|n>— Filter for gendered lists where available--count <n>— Number of names to generate (default: 5)--syllables <range>— Syllable range for fantasy names (e.g., "2-3")--cast <file>— Path to cast tracker JSON for collision checking--full-name— Generate given + surname combination--json— Output as JSON
cast-tracker.ts
Manages cast tracking for collision detection and distribution analysis.
# Initialize new project
deno run --allow-read --allow-write scripts/cast-tracker.ts init "Novel Title"
# Add character to tracking
deno run --allow-read --allow-write scripts/cast-tracker.ts add "Sarah Chen" --role protagonist --culture chinese-american
# Check if a name collides with existing cast
deno run --allow-read scripts/cast-tracker.ts check "Marcus"
# View current distribution
deno run --allow-read scripts/cast-tracker.ts distribution
# Get suggestions for underrepresented cultures
deno run --allow-read scripts/cast-tracker.ts suggest
Anti-Patterns
The Chen Again
Problem: Correcting "Chen" by picking "Kim" or "Patel" is still median-hopping. You're just cycling through the top name from each ethnicity cluster. Fix: Never let the LLM suggest alternatives. Use the entropy script to draw from deep in the list.
The Diversity Checkbox
Problem: Adding exactly one character of each ethnicity feels like tokenism. The cast reads like a diversity compliance spreadsheet. Fix: Base cultural distribution on setting logic. A story set in Seoul shouldn't have one of every culture. A story set in London can justify real diversity.
The Unpronounceable Fantasy Name
Problem: Generated fantasy names are hard to read or say. "Xzylthrix" breaks immersion. Fix: Use phoneme presets with pronounceability constraints. Limit consonant clusters. Test by reading aloud.
The Cast Collision
Problem: Readers confuse Mark and Mike, Sarah and Sara, Lee and Leigh. Similar sounds blur together. Fix: Always run cast-tracker check before finalizing. Analyze sound profiles—vary initial consonants, syllable counts, stress patterns.
The Period Mismatch
Problem: "Jennifer" in medieval England. "Jayden" in Victorian London. Names that didn't exist in the period. Fix: Use historical name lists. Research when names came into use. Default to period-common names.
The Cultural Mixing
Problem: Japanese surname with Chinese given name. First-generation immigrant with Anglicized first name their parents wouldn't have chosen. Fix: Use complete cultural packages. Consider character's generation, context, and family decisions.
Key Questions
Before Any Generation
- What's the setting (place, time, culture mix)?
- What names are already locked in?
- What sounds should we avoid (collision risk)?
- Is this character named by their parents or themselves?
For Contemporary Settings
- What's the character's specific cultural background?
- What generation are they (immigrant, second-gen, etc.)?
- What naming conventions does that culture follow?
- Would this name be typical for their age cohort?
For Historical Settings
- When and where was this character born?
- What names were common in that place and time?
- What class/status signals should the name carry?
- Are there naming conventions (patronymics, etc.)?
For Fantasy/Sci-Fi
- What aesthetic does this culture have?
- What real-world languages, if any, inspired it?
- Do different social classes have different naming patterns?
- Is there a naming convention (clan name, use-name, etc.)?
Data Files
Cultural Name Pools
Located in data/cultures/. All cultures have production-tier lists (~100 items each) with surnames, given (combined), given-male, and given-female variants:
| Culture | Description |
|---|---|
chinese | East Asian - Mandarin Chinese, common and regional surnames |
anglo | English/British/American spanning UK and US traditions |
hispanic | Spanish/Latin American with regional variety |
west-african | Yoruba, Akan, Igbo, and other West African traditions |
south-asian | Hindu, Muslim, Sikh, and regional Indian traditions |
korean | Traditional and modern Korean names |
japanese | Traditional and modern Japanese names |
vietnamese | Traditional Vietnamese naming conventions |
arabic | Arabic names from various Middle Eastern regions |
eastern-european | Russian, Polish, Ukrainian, and Slavic traditions |
jewish | Ashkenazi, Sephardic, Hebrew, Yiddish, and anglicized |
filipino | Spanish-derived, indigenous Filipino, and modern names |
Mixed Pools
Located in data/mixed-pools/:
contemporary-american.json— Weighted mix for modern US settings
Phoneme Presets
Located in data/phoneme-presets/:
elvish-like.json— Flowing, vowel-heavy, diphthongsharsh-fantasy.json— Guttural, consonant-heavy, hard stopsneutral.json— Balanced, pronounceable, general-purpose
Example Interactions
Example 1: Contemporary Novel
User: "I need names for characters in my Chicago crime novel."
Your approach:
- Ask about the cultural makeup of the specific neighborhoods featured
- Ask how many main characters need names
- Ask what names, if any, are already locked in
- Generate from appropriate cultural pools using entropy
- Check each suggestion against cast for collisions
Script usage:
deno run --allow-read scripts/cast-tracker.ts init "Chicago Crime Novel"
deno run --allow-read scripts/character-name.ts --culture anglo --full-name --count 5
deno run --allow-read scripts/character-name.ts --culture hispanic --full-name --count 5
Example 2: Fantasy Novel
User: "I need names for my elvish kingdom."
Your approach:
- Ask about the aesthetic—high fantasy, dark, whimsical?
- Ask if there are naming conventions (clan names, true names, etc.)
- Generate from elvish-like phoneme preset
- Ensure consistency within the culture
Script usage:
deno run --allow-read scripts/character-name.ts --fantasy elvish-like --syllables 2-3 --count 20
Example 3: Chen Proliferation Detected
User: "My characters are named Chen Wei, Sarah Chen, Michael Chen, and Dr. Chen."
Your diagnosis: State CN2 — Chen Proliferation. Four characters with the same surname.
Your response: "You have four characters surnamed Chen. Unless they're related, this is the Chen Proliferation—the LLM defaulting to the statistical median for Chinese surnames. Let me generate alternatives using entropy."
Script usage:
deno run --allow-read scripts/character-name.ts --culture chinese --count 10 --json
# Pick from deep in the list, not the top
What You Do NOT Do
- Do NOT "think of" names yourself—always use entropy scripts
- Do NOT suggest the most common name for any culture
- Do NOT default to American naming patterns without context
- Do NOT generate names without checking against existing cast
- Do NOT assume fantasy means "random syllables"
- Do NOT skip the context-gathering step
- Do NOT approve names without checking for collisions
Output Persistence
When working on a project, save cast tracking to:
- Check for
context/output-config.mdfor preferred output location - Default:
{project-root}/cast-tracker.json
Cast files persist across sessions and accumulate character data.
Optional Integrations
These skills enhance character-naming but are not required:
With conlang skill (if available)
For complex fantasy languages, hand off phonology creation:
# Generate full phoneme inventory with conlang
deno run --allow-read ../conlang/scripts/phonology.ts --preset elvish_like --json > custom-phonology.json
# Then use it for names
deno run --allow-read scripts/character-name.ts --phonology custom-phonology.json --count 20
With naming skill (if available)
For evaluating specific name choices across all four layers (sound, meaning, cultural, functional):
- Use naming skill when a particular name needs deep analysis
- Character-naming handles generation; naming handles evaluation
With list-builder skill (if available)
For expanding starter-tier lists to production tier:
- Use list-builder methodology and research tools
- Target 75-150 items per list
- Ensure dimensional variety (common/uncommon, regional spread)
FAQ
What does the character-naming skill do?
Break LLM name defaults with external entropy. Use when character names cluster around statistical medians (Chen, Patel, Maya, Marcus), when cast has collision risks, or when fantasy cultures need phonologically consistent naming.
How do I install character-naming?
Run npx skills add https://github.com/jwynia/agent-skills --skill character-naming in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/character-naming/ (personal) or .claude/skills/character-naming/ (project).
Which AI agents can use character-naming?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is character-naming safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains character-naming?
It is published by jwynia in jwynia/agent-skills. It has 479 recorded installs.
More from jwynia/agent-skills
presentation-design
jwynia/agent-skills
Design and evaluate presentations that communicate effectively. Use when designing a presentation, creating slides, getting presentation feedback, structuring a talk, or reviewing slides. Keywords: presentation, slides, talk, PowerPoint, Keynote, reveal.js.
frontend-design
jwynia/agent-skills
Create distinctive, production-grade frontend interfaces with high design quality. Provides analysis tools for auditing existing designs and generation tools for creating color palettes, typography systems, design tokens, and component templates. Supports React, Vue, Svelte, and vanilla HTML/CSS. Use when building web components, pages, or applications. Keywords: design, UI, frontend, CSS, components, palette, typography, tokens, accessibility.
requirements-analysis
jwynia/agent-skills
Diagnose requirements problems and guide discovery of real needs and constraints
godot-best-practices
jwynia/agent-skills
Guide AI agents through Godot 4.x GDScript coding best practices including scene organization, signals, resources, state machines, and performance optimization. This skill should be used when generating GDScript code, creating Godot scenes, designing game architecture, implementing state machines, object pooling, save/load systems, or when the user asks about Godot patterns, node structure, or GDScript standards. Keywords: godot, gdscript, game development, signals, resources, scenes, nodes, state machine, object pooling, save system, autoload, export, type hints.
web-search-tavily
jwynia/agent-skills
Search the web using Tavily API for high-quality, AI-optimized results with advanced filtering options. Use when you need structured search results, domain filtering, relevance scores, or AI-generated answer summaries. Requires TAVILYAPIKEY. Keywords: tavily, advanced search, filtered search, domain filtering, relevance scoring.
godot-asset-generator
jwynia/agent-skills
Generate game assets using AI image generation APIs (DALL-E, Replicate, fal.ai) and prepare them for Godot. Covers the full art pipeline from concept art and style guides to final sprites, sprite sheets, and import configuration. This skill should be used when creating game art, generating sprites, making tilesets, creating UI elements, or preparing assets for Godot import. Keywords: game assets, AI art, DALL-E, Replicate, fal.ai, sprite sheet, tileset, Godot, pixel art, character sprite, game art, texture, animation frames.
Popular ai & agents skills
google-agents-cli-publish
google/agents-cli
This skill should be used when the user wants to "publish an agent", "publish my ADK agent", "register an agent with Gemini", "publish to Gemini" (formerly Gemini Enterprise), or needs guidance on the agents-cli publish gemini command. Also use when the user wants to "manage agents in Agent Registry", "list/update/delete registered agents", or "register an MCP server". Covers ADK vs A2A registration modes, programmatic and interactive usage, flag reference, auto-detection from deployment metadata, Agent Registry fleet management, and troubleshooting. Part of the agents-cli skills suite. Do NOT use for deployment (use google-agents-cli-deploy).
google-agents-cli-eval
google/agents-cli
This skill should be used when the user wants to "run an evaluation", "evaluate my agent", "evaluate my ADK agent", "write an eval dataset", "analyze eval failures", "compare eval results", "optimize agent", or needs guidance on the Gemini platform eval methodology and the Quality Flywheel. Covers eval metrics, dataset schema, LLM-as-judge scoring, and common failure causes. Applies to any agents-cli project, whatever framework the agent is written in. Do NOT use for agent API code patterns (ADK: use google-agents-cli-adk-code), deployment (use google-agents-cli-deploy), or project scaffolding (use google-agents-cli-scaffold).
skill-creator
anthropics/skills
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
codex-pet
prime-skills/runcomfy-agent-skills
Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into ${CODEXHOME:-$HOME/.codex}/pets/ / and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as runcomfy run openai/gpt-image-2/edit to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no $imagegen, no OPENAIAPIKEY required, only RUNCOMFYTOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
executing-plans
obra/superpowers
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available