Design systems by hiding implementation details behind domain-level interfaces.
The material indicates a prompt-only/methodology skill with no secrets, no remote endpoints, and no declared local execution or data access capabilities; overall risk is low. On the supply-chain side, it is open-source on GitHub, but the missing license, zero stars, and unknown maintenance suggest basic manual review before production use.
The material explicitly states that no keys or environment variables are required, with no signs of credential collection, storage, transmission, or misuse.
No remote endpoints are declared, and the skill is marked as prompt-only; based on the material, there is no indication of user data being sent to external services.
As a prompt/documentation-style skill, the material does not describe spawning local processes, running scripts, invoking system commands, or requesting additional execution privileges.
The material does not declare the ability to read or write local files, databases, system resources, or user data; the example code is explanatory and does not constitute declared data-access capability.
The source is an open-source GitHub repository, making the code auditable in principle, which lowers risk; however, the license is undeclared, community adoption is 0 stars, and maintenance status is unknown, so confidence and maintenance evidence are limited and warrant manual review before use.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "Encapsulating Complexity" skill from askskill: 1. Download https://raw.githubusercontent.com/obra/clank/main/skills/architecture/encapsulating-complexity/SKILL.md 2. Save it as ~/.claude/skills/encapsulating-complexity/SKILL.md 3. Reload skills and tell me it's ready
Using the principle of encapsulating complexity, help me refactor this payment module. The goal is to expose only domain-level interfaces while hiding the database, third-party APIs, and retry logic. Provide interface definitions, responsibility boundaries, and refactoring suggestions.
A refactoring plan centered on domain interfaces, including abstractions and implementation-isolation advice.
Rewrite this complex recommendation system design for a product manager. Focus on what the system does, not how it works internally. Use business language, module interfaces, and input-output descriptions.
A business-focused explanation highlighting capabilities and interface responsibilities over technical details.
I am designing a user notification service. Based on the idea of hiding implementation details and exposing stable interfaces, suggest an API design. Separate public interfaces, internal implementation, replaceable dependencies, and extension points.
A service interface design emphasizing stable abstractions, low coupling, and extensibility.
Hide HOW things work. Expose only WHAT they do. Work at domain level (Users, Orders, Config), not implementation level (dicts, SQL rows, JSON files).
Core principle: The point of encapsulation is to create possibilities (many ways to implement) and restrict possibilities (one way to use). Implementation details hidden = free to change implementation without breaking clients.
Violating the letter of this rule is violating the spirit of information hiding.
Apply to every class and interface:
Warning signs you're violating encapsulation:
Ask these questions about every public method/field:
Does the interface expose HOW or WHAT?
Can I change implementation without breaking clients?
Do clients work at domain level or implementation level?
user.email, config.get_timeout()row[2], json_data['timeout_ms']Do return values expose internals?
User objectdict with database column namesIf answers reveal implementation details → encapsulation violated.
class ConfigManager:
def __init__(self, json_path):
self.json_path = json_path # ❌ Exposes JSON
self._data = {}
def get_value(self, key):
return self._data.get(key) # ⚠️ Returns raw value
def save_to_json(self): # ❌ "JSON" in method name
with open(self.json_path, 'w') as f:
json.dump(self._data, f)
Client code:
config = ConfigManager("/path/to/config.json") # Must know it's JSON
timeout = config.get_value("timeout_ms") # Must know exact key format
config.save_to_json() # Tied to JSON format
If you switch JSON → YAML: Client code breaks. Method names wrong. Constructor signature wrong.
class Config:
def __init__(self, config_file): # ✅ No format specified
self._storage = self._load(config_file) # ✅ Implementation hidden
def get_timeout(self): # ✅ Domain method, not raw key access
return self._storage.get("timeout_ms", 5000)
def set_timeout(self, seconds): # ✅ Domain operation
self._storage["timeout_ms"] = seconds * 1000 # ms internally
def save(self): # ✅ No "JSON" in name
self._persist(self._storage)
def _load(self, config_file): # ✅ Private - can change format
# Could load JSON, YAML, TOML, etc.
pass
def _persist(self, data): # ✅ Private - implementation detail
# Format hidden from clients
pass
Client code:
config = Config("app.config") # Format agnostic
timeout = config.get_timeout() # Domain method (seconds)
config.set_timeout(10)
config.save()
Switch JSON → YAML: Client code unchanged. Just change _load() and _persist().
Work at the problem domain, not the solution domain:
❌ Implementation Level:
class UserManager:
def get_user_row(self, user_id):
…
Write evergreen comments focused on what and why, not historical context.
Plan with pseudocode first, refine approaches, then translate into working code.
Search past Claude Code chats to recover facts, decisions, and context.
Compare 2-3 approaches before execution to choose a stronger solution.
Helps developers keep class abstractions cohesive and free of unrelated responsibilities.
Create step-by-step implementation plans for engineers new to a codebase.
Name code by domain meaning to improve clarity and team alignment.
Helps users reduce software complexity for better maintainability and delivery speed.
Helps you spot multi-purpose routines and refactor them into single-responsibility units.
Improve interface polish through spacing, typography, motion, and interaction details.
Helps developers write code comments explaining intent, rationale, and key tradeoffs.
Design, implement, and refactor hexagonal architecture with clear, testable boundaries.