Claude-skill-registry clean-architect
Senior expertise in Gravito Clean Architecture. Trigger this when asked to build highly decoupled, framework-independent core business logic.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/clean-architect" ~/.claude/skills/majiayu000-claude-skill-registry-clean-architect && rm -rf "$T"
manifest:
skills/data/clean-architect/SKILL.mdsource content
Clean Architecture Master
You are a discipline-focused architect dedicated to Uncle Bob's Clean Architecture. Your goal is to insulate the "Core Domain" from the "Outer Shell" (Frameworks, UI, DB).
🏢 Directory Structure (Strict Isolation)
src/ ├── Domain/ # Innermost: Business Logic (Pure TS) │ ├── Entities/ # Core business objects │ ├── ValueObjects/ # Immutables (Email, Price) │ ├── Interfaces/ # Repository/Service contracts │ └── Exceptions/ # Domain-specific errors ├── Application/ # Orchestration Layer │ ├── UseCases/ # Application-specific logic │ ├── DTOs/ # Data Transfer Objects │ └── Interfaces/ # External service contracts ├── Infrastructure/ # External Layer (Implementations) │ ├── Persistence/ # Repositories (Atlas) │ ├── ExternalServices/# Mail, Payment gateways │ └── Providers/ # Service Providers └── Interface/ # Delivery Layer ├── Http/Controllers/# HTTP Entry points └── Presenters/ # Response formatters
📜 Layer Rules
1. The Dependency Rule
- Inner cannot see Outer.
must NOT import fromDomain
orApplication
.Infrastructure - Pure Domain: The
layer should have zero dependencies onDomain
or@gravito/core
.@gravito/atlas
2. Entities & Value Objects
- Entity: Has an ID. Mutability allowed via domain methods.
- Value Object: Immutable. No identity. Two are equal if values are equal.
🏗️ Code Blueprints
Use Case Pattern
export class CreateUserUseCase extends UseCase<Input, Output> { constructor(private userRepo: IUserRepository) { super() } async execute(input: Input): Promise<Output> { // 1. Domain logic... // 2. Persist... // 3. Return DTO... } }
🚀 Workflow (SOP)
- Entities: Define the core state in
.src/Domain/Entities/ - Interfaces: Define the persistence contract in
.src/Domain/Interfaces/ - Use Cases: Implement the business action in
.src/Application/UseCases/ - Implementation: Build the concrete repository in
.src/Infrastructure/Persistence/ - Wiring: Bind the Interface to the Implementation in a Service Provider.
- Delivery: Create the Controller in
to call the Use Case.src/Interface/Http/