Awesome-claude-code detect-architecture-pattern

Detects architectural patterns (MVC, DDD, Hexagonal, CQRS, Layered, Event Sourcing, Microservice) from namespace structure, interface placement, and dependency direction. Outputs confidence score per pattern.

install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/detect-architecture-pattern" ~/.claude/skills/dykyi-roman-awesome-claude-code-detect-architecture-pattern && rm -rf "$T"
manifest: skills/detect-architecture-pattern/SKILL.md
source content

Architecture Pattern Detector

Overview

Analyzes a PHP codebase to detect which architectural patterns are in use. Examines namespace structure, interface placement, dependency direction, and code organization to determine patterns with confidence scores.

Detectable Patterns

PatternKey IndicatorsConfidence Markers
MVCControllers + Models + ViewsFramework routing, template engine
DDDDomain layer with Entities/VOs/AggregatesRepository interfaces in Domain
HexagonalPorts (interfaces) + AdaptersInbound/outbound port separation
CQRSSeparate Command/Query modelsCommandBus, QueryBus, separate handlers
LayeredDomain/Application/InfrastructureClear namespace separation
Event SourcingEvent store, aggregate replayEventStore, AggregateRoot::apply()
Clean ArchitectureUse Cases + Entity + GatewayDependency inversion at boundaries
MicroserviceIndependent deployableOwn database, API gateway, docker

Detection Algorithms

MVC Detection

# Controllers
Grep: "class.*Controller" --glob "**/*.php"
Grep: "extends.*Controller" --glob "**/*.php"

# Models (Eloquent/Doctrine entities)
Grep: "extends Model|#\\[ORM\\\\Entity" --glob "**/*.php"

# Views/Templates
Glob: "**/*.twig"
Glob: "**/*.blade.php"
Glob: "resources/views/**"
Glob: "templates/**"

Confidence scoring:

  • Controllers found: +30
  • Models found: +30
  • Views/templates found: +20
  • Framework routing: +20

DDD Detection

# Domain entities
Grep: "namespace.*\\\\Domain\\\\.*\\\\Entity" --glob "**/*.php"
Grep: "namespace.*\\\\Domain\\\\.*\\\\Model" --glob "**/*.php"

# Value Objects
Grep: "class.*ValueObject|ValueObject|readonly.*class" --glob "**/Domain/**/*.php"
Glob: "**/ValueObject/**/*.php"
Glob: "**/Domain/**/ValueObject/*.php"

# Aggregates
Grep: "AggregateRoot|Aggregate" --glob "**/Domain/**/*.php"

# Domain Events
Grep: "DomainEvent|extends.*Event" --glob "**/Domain/**/*.php"
Glob: "**/Domain/**/Event/*.php"

# Repository interfaces in Domain
Grep: "interface.*Repository" --glob "**/Domain/**/*.php"

# Domain Services
Glob: "**/Domain/**/Service/*.php"

Confidence scoring:

  • Domain namespace exists: +15
  • Entities in Domain: +15
  • Value Objects found: +15
  • Repository interfaces in Domain: +20
  • Aggregates found: +15
  • Domain Events found: +10
  • Domain Services found: +10

Hexagonal Detection

# Port interfaces
Grep: "namespace.*\\\\Port\\\\" --glob "**/*.php"
Grep: "namespace.*\\\\Ports\\\\" --glob "**/*.php"
Glob: "**/Port/**/*.php"

# Adapter implementations
Grep: "namespace.*\\\\Adapter\\\\" --glob "**/*.php"
Glob: "**/Adapter/**/*.php"

# Inbound/Outbound separation
Glob: "**/Port/Inbound/**"
Glob: "**/Port/Outbound/**"
Glob: "**/Port/In/**"
Glob: "**/Port/Out/**"

# Use case interfaces (driving ports)
Grep: "interface.*UseCase|interface.*Port" --glob "**/*.php"

Confidence scoring:

  • Port namespace exists: +30
  • Adapter namespace exists: +25
  • Inbound/Outbound separation: +25
  • Use case interfaces: +20

CQRS Detection

# Command/Query separation
Glob: "**/Command/**/*.php"
Glob: "**/Query/**/*.php"

# Command handlers
Grep: "CommandHandler|implements.*CommandHandler" --glob "**/*.php"
Grep: "#\\[AsMessageHandler\\]" --glob "**/Command/**/*.php"

# Query handlers
Grep: "QueryHandler|implements.*QueryHandler" --glob "**/*.php"

# Command/Query bus
Grep: "CommandBus|QueryBus|MessageBus" --glob "**/*.php"

# Separate read models
Grep: "ReadModel|Projection|View" --glob "**/*.php"
Glob: "**/ReadModel/**/*.php"
Glob: "**/Projection/**/*.php"

Confidence scoring:

  • Command namespace: +20
  • Query namespace: +20
  • Command handlers: +15
  • Query handlers: +15
  • Bus implementation: +15
  • Read models: +15

Event Sourcing Detection

# Event store
Grep: "EventStore|EventStream" --glob "**/*.php"

# Aggregate with apply/record
Grep: "->apply\(|->recordThat\(|->record\(" --glob "**/*.php"
Grep: "function apply.*Event" --glob "**/*.php"

# Event replay
Grep: "reconstitute|reconstruct|replay" --glob "**/*.php"

# Projections
Grep: "Projector|Projection|ReadModelProjector" --glob "**/*.php"
Glob: "**/Projection/**/*.php"

# Snapshots
Grep: "Snapshot|SnapshotStore" --glob "**/*.php"

Confidence scoring:

  • EventStore found: +30
  • Aggregate apply pattern: +25
  • Reconstitute/replay: +20
  • Projections: +15
  • Snapshots: +10

Layered Architecture Detection

# Standard layers
Glob: "src/Domain/"
Glob: "src/Application/"
Glob: "src/Infrastructure/"
Glob: "src/Presentation/"

# Alternative naming
Glob: "src/Core/"
Glob: "src/Service/"
Glob: "src/Repository/"

# Namespace analysis
Grep: "namespace.*\\\\Domain\\\\" --glob "**/*.php"
Grep: "namespace.*\\\\Application\\\\" --glob "**/*.php"
Grep: "namespace.*\\\\Infrastructure\\\\" --glob "**/*.php"

Confidence scoring:

  • 4 distinct layers: +40
  • 3 distinct layers: +25
  • 2 distinct layers: +15
  • Proper namespace separation: +30
  • No cross-layer imports: +30

Dependency Direction Analysis

# Check for violations (Infrastructure → Domain is OK, Domain → Infrastructure is NOT)
# Domain should not import from Infrastructure
Grep: "use.*\\\\Infrastructure\\\\" --glob "**/Domain/**/*.php"

# Domain should not import from Application
Grep: "use.*\\\\Application\\\\" --glob "**/Domain/**/*.php"

# Application should not import from Presentation
Grep: "use.*\\\\(Controller|Action|Console)\\\\" --glob "**/Application/**/*.php"

# Infrastructure should implement Domain interfaces
Grep: "implements.*\\\\Domain\\\\" --glob "**/Infrastructure/**/*.php"

Output Format

## Architecture Pattern Analysis

### Detected Patterns

| Pattern | Confidence | Evidence |
|---------|-----------|----------|
| DDD | 85% | Domain layer, VOs, Aggregates, Repository interfaces |
| CQRS | 70% | Command/Query separation, handlers, bus |
| Layered | 90% | 4 layers with proper namespace separation |
| Hexagonal | 40% | Partial port/adapter separation |
| Event Sourcing | 0% | No event store or replay patterns found |

### Primary Pattern: DDD + Layered Architecture
The codebase follows Domain-Driven Design within a Layered Architecture.

### Dependency Direction

Presentation → Application → Domain ← Infrastructure ✓ ✓ ✓ (no violations)


### Violations Found
| From | To | File | Import |
|------|----|------|--------|
| Domain | Infrastructure | Order.php:5 | use App\Infrastructure\... |

### Pattern Maturity Assessment

| Aspect | Status | Notes |
|--------|--------|-------|
| Layer separation | Strong | Clear namespace boundaries |
| Domain purity | Good | 2 minor violations |
| CQRS completeness | Partial | Commands done, queries mixed |
| Interface segregation | Good | Ports defined in Domain |

Confidence Scale

ScoreLevelDescription
80-100%StrongPattern is clearly and consistently applied
60-79%ModeratePattern is present with some inconsistencies
40-59%PartialPattern is partially applied or emerging
20-39%WeakSome elements present but not systematic
0-19%AbsentPattern not detected

Integration

This skill is used by:

  • codebase-navigator
    — determines overall architecture approach
  • explain-coordinator
    — decides which analysis agents to invoke
  • structural-auditor
    — provides pattern context for audit