General
naming-conventions - Claude MCP Skill
Apply universal naming principles: avoid Manager/Helper/Util, use intention-revealing names, domain language, verb+noun functions. Use when naming variables, functions, classes, reviewing names, or refactoring for clarity. Language-agnostic principles.
SEO Guide: Enhance your AI agent with the naming-conventions tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to apply universal naming principles: avoid manager/helper/util, use intention-revealing names, domain ... Download and configure this skill to unlock new capabilities for your AI workflow.
Documentation
SKILL.md# Naming Conventions
Universal principles for clear, intention-revealing names. Language-agnosticβapplies to TypeScript, Go, Rust, Python, etc.
## Core Principle
**Names should reveal intent and domain, not implementation.**
- `users` not `userArray` (domain, not data structure)
- `calculateTax` not `doTaxCalculation` (clear verb)
- `PaymentProcessor` not `PaymentManager` (specific action, not vague)
---
## Prohibited Patterns
### NEVER Use These Names
β **Manager, Helper, Util**
These are Ousterhout red flags β they're vague and don't reveal what the code does.
**Bad:**
```
UserManager
PaymentHelper
StringUtil
```
**Good:**
```
UserAuthenticator
PaymentProcessor
StringFormatter
```
**Why:** Naming forces design thinking. If you can't name it specifically, you don't understand what it does.
### RARELY Use (Context-Dependent)
β οΈ **Service, Handler, Processor, Controller**
These can work when they're domain-specific or framework patterns, but prefer more specific names.
**Bad (vague):**
```
DataService // What kind of data?
RequestHandler // What kind of request?
```
**Better (specific):**
```
OrderService // Domain context: orders
HttpRequestHandler // Framework pattern: HTTP requests
PaymentProcessor // Domain action: processing payments
```
### SOMETIMES Acceptable
β οΈ **Base, Abstract (prefixes)**
Valid for framework/library code, but often hide intent in application code.
**Framework (acceptable):**
```typescript
abstract class BaseComponent { ... }
abstract class AbstractRepository { ... }
```
**Application (avoid):**
```typescript
// Better to name by domain
class Component { ... } // If it's the base, no prefix needed
class Repository<T> { ... } // Generic is clear without prefix
```
### Always Avoid
β **Generic containers:** Manager, Helper, Util, Misc, Common
β **Temporal names:** step1, phase1, doFirst, doSecond
β **Single letters:** x, y, temp (except loop counters i, j, k)
β **Vague abbreviations:** usr, msg, ctx (except well-known: id, url, api, http)
---
## Positive Patterns
### Variables
**Pattern:** Descriptive nouns
**Use domain language, not implementation:**
```
β
activeUsers // Domain concept
β
totalRevenue // Clear business term
β
selectedItems // What they are
β userArray // Implementation detail (array)
β rev // Abbreviation (unclear)
β items // Too vague (items of what?)
β data // Maximally vague
```
**Guidelines:**
- Descriptive, not abbreviated
- Domain terms, not data structures (users, not userArray)
- Context matters: `count` alone is vague, `activeUserCount` is clear
- Avoid single-letter names except loop counters (i, j, k)
### Functions
**Pattern:** Verb + noun
**Describe the action:**
```
β
calculateTotal // Clear action + target
β
fetchUserData // Action: fetch, target: user data
β
isValidEmail // Question: is valid?
β
formatCurrency // Transform: format
β total // Missing verb (noun alone)
β getUserData // Vague verb "get"
β validateEmail // Returns boolean, use "is"
β currency // Missing verb
β process // Vague verb, no target
```
**Guidelines:**
- Start with clear verb (calculate, fetch, format, validate, parse, send, save)
- Pure functions: describe transformation (format, parse, convert)
- Side effects: verb implies action (save, send, fetch, update, delete)
- Boolean returns: use question prefix (is, has, can, should)
- Avoid vague verbs: get, do, handle, manage, process (without context)
### Classes & Types
**Pattern:** Singular nouns
**Use domain concepts:**
```
β
User // Domain entity
β
PaymentProcessor // Action-specific
β
OrderRepository // Pattern adds meaning
β
EmailNotifier // Clear purpose
β Users // Plural (unless collection type)
β PaymentManager // Manager anti-pattern
β OrderDB // Implementation leak
β EmailHelper // Helper anti-pattern
```
**Guidelines:**
- Singular nouns (User, Order, Payment, not Users, Orders)
- Domain terms, not technical terms (Invoice, not BillingDocument)
- Pattern suffixes acceptable when they add meaning (Repository, Factory, Builder, Strategy)
- Avoid generic suffixes (Manager, Helper, Util, Handler without context)
### Booleans
**Pattern:** Question prefix (is/has/can/should/will)
**Prefix reveals boolean nature:**
```
β
isActive // State question
β
hasPermission // Possession question
β
canEdit // Capability question
β
shouldRefetch // Conditional question
β
willExpire // Future state question
β active // Ambiguous (could be status string)
β permission // Looks like object
β editable // Unclear (adjective, not question)
β enabled // Past participle (prefer isEnabled)
```
**Prefix meanings:**
- **is**: State (isActive, isLoading, isValid, isEmpty)
- **has**: Possession (hasPermission, hasChildren, hasErrors)
- **can**: Capability (canEdit, canDelete, canSubmit)
- **should**: Conditional (shouldRefetch, shouldValidate)
- **will**: Future (willExpire, willRetry)
**Why questions work:** Boolean names should read like yes/no questions.
### Collections
**Pattern:** Plural indicates multiple items
**Use plural, avoid type suffixes:**
```
β
users // Plural indicates collection
β
selectedItems // What they are, plural
β
errorMessages // Clear and plural
β
userById // Keyed collection (by what)
β userList // Redundant type suffix
β userArray // Implementation leak
β userCollection // Redundant suffix
β item // Singular for plural collection
```
**Keyed collections (maps/dictionaries):**
```
β
userById // By key type
β
configByEnv // By environment
β
productsByCategory // Grouped by category
β userMap // Type suffix redundant
β users // Unclear it's keyed (ambiguous)
```
---
## Context-Aware Exceptions
Some generic names have valid domain justification:
### Framework Patterns
β
**When acceptable:**
- `EventManager` in event-driven system (but `EventBus` is better)
- `ApiService` wrapping external API (but `ApiClient` is clearer)
- `RequestHandler` in HTTP framework (framework convention)
- `BaseComponent` in UI framework (inheritance pattern)
**Still prefer specific names when possible.**
### Repository Pattern
β
**Acceptable:**
```
UserRepository
OrderRepository
```
This is a well-known pattern. The suffix adds meaning.
### Factory Pattern
β
**Acceptable:**
```
UserFactory
ComponentFactory
```
Pattern name clarifies purpose.
---
## Quick Reference
### Pattern Templates
**Variables:** Descriptive nouns
```
activeUsers, totalCount, selectedItem, currentPage
```
**Functions:** Verb + noun
```
calculateTotal, fetchUser, formatDate, parseJson
```
**Booleans:** Question prefix
```
isActive, hasPermission, canEdit, shouldRefetch
```
**Classes:** Singular noun (+ pattern if meaningful)
```
User, Order, PaymentProcessor, OrderRepository
```
**Collections:** Plural nouns
```
users, items, errors, messages
```
---
## Examples: Before & After
### Example 1: Vague to Clear
β **Before:**
```
class DataManager
processData(data)
getData()
```
β
**After:**
```
class OrderProcessor
calculateOrderTotal(order)
fetchActiveOrders()
```
### Example 2: Implementation to Domain
β **Before:**
```
userArray = fetchFromDB()
dataList = parseJsonString(response)
```
β
**After:**
```
users = fetchUsers()
orders = parseOrderResponse(response)
```
### Example 3: Temporal to Functional
β **Before:**
```
function step1(data)
function step2(data)
function step3(data)
```
β
**After:**
```
function validateData(data)
function enrichData(data)
function persistData(data)
```
---
## Philosophy
**"If you can't name it, you don't understand it."**
Naming is thinking. Bad names indicate unclear thinking. Good names indicate clear understanding.
**Naming forces design decisions:**
- Can't name a class? Maybe it's doing too much.
- Name is vague (Manager/Helper)? Unclear responsibility.
- Name is long (UserAccountPaymentProcessorManager)? Poor abstraction.
**Use domain language:**
- Domain experts should understand your names
- Names should match business concepts
- Avoid technical jargon when domain terms exist
**Names are for humans, not compilers.**
Write names for the person who reads your code in 6 months. That person is future you.Signals
Information
- Repository
- phrazzld/claude-config
- Author
- phrazzld
- Last Sync
- 3/2/2026
- Repo Updated
- 3/1/2026
- Created
- 1/13/2026
Reviews (0)
No reviews yet. Be the first to review this skill!
Related Skills
mem0
Integrate Mem0 Platform into AI applications for persistent memory, personalization, and semantic search. Use this skill when the user mentions "mem0", "memory layer", "remember user preferences", "persistent context", "personalization", or needs to add long-term memory to chatbots, agents, or AI apps. Covers Python and TypeScript SDKs, framework integrations (LangChain, CrewAI, Vercel AI SDK, OpenAI Agents SDK, Pipecat), and the full Platform API. Use even when the user doesn't explicitly say "mem0" but describes needing conversation memory, user context retention, or knowledge retrieval across sessions.
upgrade-nodejs
Upgrading Bun's Self-Reported Node.js Version
cursorrules
CrewAI Development Rules
browser-use
Automates browser interactions for web testing, form filling, screenshots, and data extraction. Use when the user needs to navigate websites, interact with web pages, fill forms, take screenshots, or extract information from web pages.
Related Guides
Bear Notes Claude Skill: Your AI-Powered Note-Taking Assistant
Learn how to use the bear-notes Claude skill. Complete guide with installation instructions and examples.
Mastering tmux with Claude: A Complete Guide to the tmux Claude Skill
Learn how to use the tmux Claude skill. Complete guide with installation instructions and examples.
OpenAI Whisper API Claude Skill: Complete Guide to AI-Powered Audio Transcription
Learn how to use the openai-whisper-api Claude skill. Complete guide with installation instructions and examples.