architecture-analyzer
npx machina-cli add skill a5c-ai/babysitter/architecture-analyzer --openclawArchitecture Analyzer Skill
Analyzes and visualizes software architecture patterns and dependencies to support migration planning, module boundary identification, and architectural decision-making.
Purpose
Enable comprehensive architecture analysis for:
- Component dependency mapping
- Layered architecture detection
- Coupling and cohesion metrics
- Architectural violation detection
- Module boundary identification
- Dependency graph generation
Capabilities
1. Component Dependency Mapping
- Extract dependencies between modules/packages
- Map inter-service communications
- Identify external system integrations
- Track data flow between components
- Generate dependency matrices
2. Layered Architecture Detection
- Identify architectural layers (presentation, business, data)
- Detect layer violations
- Map cross-cutting concerns
- Analyze layer dependencies
- Validate architectural patterns
3. Coupling/Cohesion Metrics
- Calculate afferent coupling (Ca)
- Calculate efferent coupling (Ce)
- Compute instability index (I = Ce / (Ca + Ce))
- Measure module cohesion
- Identify highly coupled components
4. Architectural Violation Detection
- Detect circular dependencies between modules
- Identify layer bypassing
- Find direct database access from UI layers
- Check for proper abstraction usage
- Validate dependency rules
5. Module Boundary Identification
- Detect logical module groupings
- Identify bounded contexts
- Map shared kernel areas
- Analyze module interfaces
- Suggest decomposition boundaries
6. Dependency Graph Generation
- Generate DOT format graphs
- Create Mermaid diagrams
- Export to PlantUML
- Produce interactive visualizations
- Support multiple granularity levels
Tool Integrations
This skill can leverage the following external tools when available:
| Tool | Purpose | Integration Method |
|---|---|---|
| Structure101 | Architecture visualization | Export analysis |
| Lattix | Dependency analysis | CLI / API |
| NDepend | .NET architecture analysis | CLI |
| JDepend | Java package dependencies | CLI |
| Madge | JavaScript/TypeScript | CLI |
| deptree | Python dependencies | CLI |
| go-arch-lint | Go architecture | CLI |
| ast-grep | Pattern matching | MCP Server |
Usage
Basic Analysis
# Invoke skill for architecture analysis
# The skill will analyze structure and dependencies
# Expected inputs:
# - targetPath: Path to codebase root
# - analysisDepth: 'module' | 'package' | 'class' | 'function'
# - outputFormat: 'json' | 'dot' | 'mermaid' | 'plantuml'
# - includeMetrics: boolean
Analysis Workflow
-
Discovery Phase
- Identify project structure
- Detect build configuration
- Map source directories
-
Extraction Phase
- Parse import/require statements
- Extract module dependencies
- Identify external dependencies
-
Analysis Phase
- Calculate coupling metrics
- Detect architectural patterns
- Identify violations
- Map boundaries
-
Visualization Phase
- Generate dependency graphs
- Create architecture diagrams
- Produce metric reports
Output Schema
{
"analysisId": "string",
"timestamp": "ISO8601",
"target": {
"path": "string",
"language": "string",
"moduleCount": "number",
"totalFiles": "number"
},
"architecture": {
"pattern": "string (layered|modular|monolithic|microservices)",
"layers": [
{
"name": "string",
"modules": ["string"],
"allowedDependencies": ["string"]
}
],
"boundedContexts": [
{
"name": "string",
"modules": ["string"],
"interfaces": ["string"]
}
]
},
"modules": [
{
"name": "string",
"path": "string",
"files": "number",
"linesOfCode": "number",
"dependencies": ["string"],
"dependents": ["string"],
"metrics": {
"afferentCoupling": "number",
"efferentCoupling": "number",
"instability": "number",
"cohesion": "number"
}
}
],
"dependencies": [
{
"from": "string",
"to": "string",
"type": "import|call|inherit|implement",
"count": "number"
}
],
"violations": [
{
"type": "circular|layer-bypass|abstraction-leak",
"severity": "high|medium|low",
"from": "string",
"to": "string",
"description": "string",
"recommendation": "string"
}
],
"metrics": {
"averageCoupling": "number",
"maxCoupling": "number",
"cyclomaticComplexity": "number",
"circularDependencies": "number",
"layerViolations": "number"
},
"graphs": {
"dot": "string (file path)",
"mermaid": "string (file path)",
"plantuml": "string (file path)"
}
}
Integration with Migration Processes
This skill integrates with the following Code Migration/Modernization processes:
- legacy-codebase-assessment: Architecture understanding
- monolith-to-microservices: Service boundary identification
- migration-planning-roadmap: Dependency-based planning
- code-refactoring: Coupling reduction targets
Configuration
Skill Configuration File
Create .architecture-analyzer.json in the project root:
{
"analysisDepth": "module",
"excludePaths": [
"node_modules",
"vendor",
"dist",
"build",
".git",
"__tests__"
],
"modulePatterns": {
"javascript": "src/*",
"java": "src/main/java/**",
"python": "src/*"
},
"layers": {
"enabled": true,
"definitions": [
{
"name": "presentation",
"patterns": ["**/ui/**", "**/views/**", "**/controllers/**"],
"allowedDependencies": ["business", "shared"]
},
{
"name": "business",
"patterns": ["**/services/**", "**/domain/**"],
"allowedDependencies": ["data", "shared"]
},
{
"name": "data",
"patterns": ["**/repositories/**", "**/dao/**"],
"allowedDependencies": ["shared"]
},
{
"name": "shared",
"patterns": ["**/common/**", "**/utils/**"],
"allowedDependencies": []
}
]
},
"rules": {
"maxCoupling": 10,
"maxModuleSize": 5000,
"forbiddenDependencies": [
{"from": "presentation", "to": "data"}
]
},
"visualization": {
"formats": ["mermaid", "dot"],
"groupBy": "layer",
"showMetrics": true
}
}
MCP Server Integration
When ast-grep MCP Server is available for pattern detection:
// Example architecture pattern detection
{
"tool": "ast_grep_search",
"arguments": {
"pattern": "import { $_ } from '../data/$_'",
"language": "typescript",
"path": "./src/ui"
}
}
Architectural Patterns
Layered Architecture
┌─────────────────────────────────┐
│ Presentation Layer │
│ (UI, Controllers, Views) │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ Business Layer │
│ (Services, Domain, Logic) │
└──────────────┬──────────────────┘
│
┌──────────────▼──────────────────┐
│ Data Layer │
│ (Repositories, DAOs, ORM) │
└─────────────────────────────────┘
Modular Monolith
┌─────────────────────────────────────────────┐
│ Application Shell │
├───────────┬───────────┬───────────┬─────────┤
│ Module A │ Module B │ Module C │ Shared │
│ ┌─────┐ │ ┌─────┐ │ ┌─────┐ │ ┌─────┐ │
│ │ UI │ │ │ UI │ │ │ UI │ │ │Utils│ │
│ ├─────┤ │ ├─────┤ │ ├─────┤ │ └─────┘ │
│ │Logic│ │ │Logic│ │ │Logic│ │ │
│ ├─────┤ │ ├─────┤ │ ├─────┤ │ │
│ │Data │ │ │Data │ │ │Data │ │ │
│ └─────┘ │ └─────┘ │ └─────┘ │ │
└───────────┴───────────┴───────────┴─────────┘
Microservices (Target)
┌─────────┐ ┌─────────┐ ┌─────────┐
│Service A│ │Service B│ │Service C│
│ ┌───┐ │ │ ┌───┐ │ │ ┌───┐ │
│ │API│ │ │ │API│ │ │ │API│ │
│ └─┬─┘ │ │ └─┬─┘ │ │ └─┬─┘ │
│ │ │ │ │ │ │ │ │
│ ┌─▼─┐ │ │ ┌─▼─┐ │ │ ┌─▼─┐ │
│ │DB │ │ │ │DB │ │ │ │DB │ │
│ └───┘ │ │ └───┘ │ │ └───┘ │
└─────────┘ └─────────┘ └─────────┘
│ │ │
└────────────┼────────────┘
│
┌──────▼──────┐
│ Event Bus │
└─────────────┘
Metrics Reference
Coupling Metrics
| Metric | Formula | Good | Warning | Bad |
|---|---|---|---|---|
| Afferent Coupling (Ca) | Incoming dependencies | < 10 | 10-20 | > 20 |
| Efferent Coupling (Ce) | Outgoing dependencies | < 10 | 10-20 | > 20 |
| Instability (I) | Ce / (Ca + Ce) | 0-0.3 or 0.7-1.0 | 0.3-0.7 | - |
| Abstractness (A) | Abstract classes / Total | Context dependent | - | - |
Distance from Main Sequence
D = |A + I - 1|
- D = 0: Ideal (on the main sequence)
- D > 0.3: Warning
- D > 0.5: Problematic
Best Practices
- Regular Analysis: Run architecture analysis as part of CI/CD
- Define Boundaries: Explicitly define module and layer boundaries
- Enforce Rules: Use architectural fitness functions
- Document Decisions: Use ADRs for architectural changes
- Track Metrics: Monitor coupling trends over time
- Visualize: Keep architecture diagrams up to date
Related Skills
static-code-analyzer: Code-level analysisdomain-model-extractor: DDD boundary identificationtechnical-debt-quantifier: Architecture debt assessment
Related Agents
legacy-system-archaeologist: Uses this skill for architecture discoverymicroservices-decomposer: Uses this skill for boundary identificationddd-analyst: Uses this skill for context mappingmigration-readiness-assessor: Uses this skill for architecture evaluation
References
Source
git clone https://github.com/a5c-ai/babysitter/blob/main/plugins/babysitter/skills/babysit/process/specializations/code-migration-modernization/skills/architecture-analyzer/SKILL.mdView on GitHub Overview
Architecture Analyzer assesses codebases to map component dependencies, detect layered patterns, measure coupling, and identify module boundaries. It supports migration planning by generating dependency graphs and architectural reports that guide refactoring decisions.
How This Skill Works
The tool performs Discovery to identify project structure, then Extraction of imports/requirements and external dependencies, followed by Analysis to compute coupling metrics, detect patterns, and locate violations. Finally, Visualization produces DOT, Mermaid, PlantUML diagrams, and interactive views, with optional metric reports to support architectural decisions.
When to Use It
- Plan migration from a monolith to microservices by mapping module boundaries and dependencies.
- Identify bounded contexts and layering issues to guide architectural refactoring.
- Generate dependency graphs at multiple granularity levels for large codebases.
- Detect architectural violations such as circular dependencies or direct UI-to-DB access.
- Validate migration decisions with metrics like Ca, Ce, and instability to prioritize decoupling efforts.
Quick Start
- Step 1: Provide inputs such as targetPath, analysisDepth (module/package/class/function), outputFormat (json/dot/mermaid/plantuml), and includeMetrics (true/false).
- Step 2: Run the Discovery, Extraction, and Analysis phases to collect structure, dependencies, and metrics.
- Step 3: Generate visuals and reports (dependency graphs, architecture diagrams, metric summaries) for review.
Best Practices
- Define the target architecture first (e.g., microservices vs. layered) before running analysis.
- Analyze at multiple granularity levels (module, package, class) to reveal hidden boundaries.
- Combine coupling metrics with boundary identification to prioritize decoupling work.
- Integrate the generated graphs with stakeholder reviews using DOT/Mermaid/PlantUML.
- Regularly re-run analyses during migration to track progress and detect regressions.
Example Use Cases
- A Java monolith migrated to microservices by identifying bounded contexts and extracting independent services based on dependency graphs.
- A TS/Node project used dependency graphs to reveal circular dependencies and removed an unstable core layer to improve maintainability.
- A web app’s UI-layer was checked for direct DB access; architecture analyzer flagged violations and suggested proper abstraction layers.
- A Go project leveraged layered architecture detection to validate cross-cutting concerns and boundaries before deployment.
- A multi-service platform generated Mermaid diagrams to communicate architecture changes to non-technical stakeholders.