# ADR-001: Modular CLI Architecture

**Decision**: Implement modular CLI architecture for 80% code reduction.

## Context

The provisioning CLI needed to support 111+ commands across multiple domains
(compute, networking, storage, databases, monitoring) while maintaining
code clarity and reducing maintenance burden.

## Decision

Implement a command module system where:

1. Each domain (compute, network, etc.) defines commands in isolation
2. Commands auto-register with core CLI
3. Shortcuts reduce 80% of command length
4. Type-safe argument handling via Nickel schemas

## Implementation

Commands structured as:

```text
provisioning/core/commands/
├── compute/
│   ├── create-server.nu
│   ├── delete-server.nu
│   └── list-servers.nu
├── network/
│   ├── create-vpc.nu
│   └── manage-firewall.nu
└── database/
    ├── create-db.nu
    └── backup-db.nu
```

## Benefits

- **Code Reuse**: 80% reduction in duplicated code
- **Maintainability**: Each command self-contained
- **Extensibility**: New domains plug in easily
- **Performance**: Shortcuts reduce typing

## Tradeoffs

- Slightly more indirection in command dispatch
- Learning curve for extension developers

## Related ADRs

- ADR-010: Configuration Strategy
- ADR-011: Nickel Migration

## Status

✅ **Accepted** - Implemented in v3.2.0+
