Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
obra avatar

Domain Focused Naming

  • 8 installs
  • 41 repo stars
  • Updated October 9, 2025
  • obra/clank

Claude Code agent workflow helper from OBRA clank repository.

About

Domain-Focused Naming — Clank skill from OBRA repository—agent workflow reference for Claude Code power users in the Superpowers ecosystem.

  • OBRA clank agent workflow.
  • Install via skills.sh registry.
  • Pairs with Superpowers ecosystem.

Domain Focused Naming by the numbers

  • 8 all-time installs (skills.sh)
  • +2 installs in the week ending Jul 26, 2026 (Skillselion tracking)
  • Ranked #12,334 of 16,659 AI & Agent Building skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 26, 2026 (Skillselion catalog sync)
npx skills add https://github.com/obra/clank --skill domain-focused-naming

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs8
repo stars41
Security audit3 / 3 scanners passed
Last updatedOctober 9, 2025
Repositoryobra/clank

What it does

Claude Code agent workflow helper from OBRA clank repository.

Files

SKILL.mdMarkdownGitHub ↗

Domain-Focused Naming

Overview

Names documenting implementation or history create confusion. "NewUserAPI" doesn't tell what it does. "ZodValidator" exposes internals.

Core principle: Names tell what code does in the domain, not how it's built or what it replaced.

Violating the letter of this rule is violating the spirit of naming.

When to Use

Use for:

  • Variables, functions, classes, modules
  • Refactoring existing code
  • Code review feedback
  • API design

Use ESPECIALLY when:

  • Refactoring (tempted to add "New" or "Improved")
  • Replacing implementations (tempted to add "Zod" or "MCP")
  • Using design patterns (tempted to add "Factory" or "Manager")
  • Documenting changes (tempted to add "Unified" or "Enhanced")

The Rules

NEVER Use Implementation Details

Names expose WHAT, not HOW.

<Bad>

class ZodValidator { }          // Exposes Zod library
class MCPToolWrapper { }        // Exposes MCP protocol
class JSONConfigParser { }      // Exposes JSON format

</Bad>

<Good>

class Validator { }             // What it does
class RemoteTool { }           // What it represents
class ConfigReader { }         // What it does

</Good>

NEVER Use Temporal Context

Code exists in present. Don't reference past or transitions.

<Bad>

class NewAPI { }               // When does it stop being "new"?
class LegacyHandler { }        // Calls it legacy but it's running
class ImprovedParser { }       // Improved from what?
class UnifiedService { }       // What was unified?
class EnhancedValidator { }    // Enhanced how?

</Bad>

<Good>

class API { }                  // What it is now
class Handler { }              // What it does now
class Parser { }               // What it does now
class Service { }              // What it is now
class Validator { }            // What it does now

</Good>

NEVER Use Pattern Names (Unless They Add Clarity)

Patterns are implementation details. Most don't help understanding.

<Bad>

class ToolFactory { }          // "Factory" adds nothing
class ServiceBuilder { }       // "Builder" adds nothing
class ManagerSingleton { }     // "Singleton" adds nothing

</Bad>

<Good>

class Tool { }                 // Clear without pattern
class Service { }              // Clear without pattern
class Registry { }             // Clear without pattern

// OK when pattern IS the purpose
class EventEmitter { }         // Observer pattern IS what it does
class CommandQueue { }         // Queue pattern IS what it does

</Good>

Names Tell Domain Stories

Good names form sentences about business logic.

<Good>

// Reads like domain language
user.authenticate()
order.calculateTotal()
payment.process()

// Not
user.executeAuthenticationStrategy()
order.runTotalCalculationAlgorithm()
payment.invokeProcessingWorkflow()

</Good>

Quick Reference

Bad PatternWhy BadGood Alternative
ZodValidatorExposes implementationValidator
MCPToolWrapperExposes protocolRemoteTool
NewUserAPITemporal referenceUserAPI
ImprovedParserReferences historyParser
ToolFactoryPattern name noiseTool or createTool()
AbstractToolInterfaceRedundant qualifiersTool
executeToolWithValidation()Implementation in nameexecute()

When Changing Code

Rule: Never document old behavior or the change in names.

<Bad>

// During refactoring
class NewAuthService { }       // References the change
class ImprovedValidator { }    // References improvement
class UnifiedAPIClient { }     // References unification

</Bad>

<Good>

// During refactoring
class AuthService { }          // What it is
class Validator { }            // What it does
class APIClient { }            // What it is

</Good>

Red Flags - STOP and Rename

If you catch yourself writing:

  • "New", "Old", "Legacy", "Improved", "Enhanced"
  • "Unified", "Refactored", "Updated", "Modern"
  • Implementation details ("Zod", "JSON", "MCP", "SQL")
  • Unnecessary pattern names ("Factory", "Builder", "Manager")
  • Redundant qualifiers ("Abstract", "Base", "Interface")

STOP. Find a name describing actual purpose in the domain.

Common Rationalizations

ExcuseReality
"Need to distinguish from old version"Old version shouldn't exist or should be in different namespace.
"New developers need to know it's improved"Code quality shows in behavior, not names.
"Factory pattern is important here"If pattern is core purpose, fine. Usually it's not.
"Everyone knows what Zod is"Today they do. Names should outlive dependencies.
"It IS a wrapper around MCP"That's implementation. What does it DO in your domain?

Verification

Before committing names:

  • [ ] Name describes domain purpose
  • [ ] No implementation details
  • [ ] No temporal context
  • [ ] No unnecessary pattern names
  • [ ] Forms readable sentences with other code
  • [ ] No "new", "old", "improved", "wrapper"

Real-World Examples

Bad Naming (Don't Do This)

class ImprovedZodConfigValidator { }           // ❌ Temporal + implementation
const newAPIClientWithRetry = new Client();    // ❌ Temporal + implementation
function executeEnhancedToolFactory() { }      // ❌ Temporal + pattern noise

// Using them
const validator = new ImprovedZodConfigValidator();
validator.validateWithNewSchema();

Good Naming

class ConfigValidator { }                      // ✅ Domain purpose
const apiClient = new Client();               // ✅ What it is
function createTool() { }                     // ✅ What it does

// Using them - reads like domain language
const validator = new ConfigValidator();
validator.validate();

Integration with Other Skills

For tactical variable naming: See skills/naming-variables for comprehensive variable naming techniques (optimal length, scope rules, conventions for booleans/collections/qualifiers, naming as diagnostic tool)

For comment guidelines: See skills/writing-evergreen-comments for keeping comments evergreen (no temporal context in comments either)

Related skills

FAQ

Is Domain Focused Naming safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.