# apps/cli

## Purpose

Clikt-based command-line interface. Translates user commands into HTTP requests and WebSocket connections against `apps/server`.

## Ownership

All sources under `apps/cli/src/`.

## Local Contracts

- Commands: `session`, `run`, `task`, `provider`, `approve`, `undo`, `events`, `status`, `replay`, `stats`, `health`
- Communicates with server via HTTP REST and WebSocket (`CliWsClient`)
- No business logic; all orchestration is delegated to the server

## Work Guidance

- Follow Kotlin rules in root CLAUDE.md (runCatching, suspend, no blocking I/O on main thread)
- New commands go under `commands/`, follow the existing Clikt subcommand pattern

## Verification

```
./gradlew :apps:cli:test --rerun-tasks
```

## Child DOX Index

No child AGENTS.md (leaf module).
