# PROJM-CLI
CLI binary (`projm`) — thin dispatch layer on `projm_core`.
## STRUCTURE
```
src/
├── main.rs # Clap parse → subcommand match → delegate (73 lines)
├── main_cli.rs # Cli struct with Clap derives (~80 lines)
├── init_setup.rs # Shell integration, zoxide install, completions setup (529 lines)
├── blueprints.rs # Interactive scaffolding: add/list/run/delete/rename (350 lines)
└── completions.rs # clap_complete shell completion emission (~50 lines)
```
## WHERE TO LOOK
| `main.rs` | All (match dispatch) | Routes `Commands` variants to projm_core or local modules |
| `init_setup.rs` | `init` | Shell function gen, zoxide auto-install (5 OS package managers) |
| `blueprints.rs` | `blueprint` subcommands | CRUD for project templates with `{name}` placeholders |
| `completions.rs` | `completions` | Shell completions via clap_complete |
## CONVENTIONS
- Clap derive API for CLI definition
- `projm_core::` prefix for all core logic calls
- Shell functions (`pg`, `pn`) emitted as eval-compatible stdout
- Interactive UI via dialoguer writes to stderr
- `colored` for output styling (matches core conventions)
## ANTI-PATTERNS
- Do NOT add business logic here — delegate to `projm_core`
- Do NOT add shell function definitions — generated by `init_setup.rs`
- Do NOT hardcode OS detection — use `std::env::consts::OS` + platform checks in init_setup