# saladday/cc-switch-cli architecture

> Architecture diagram of the GitHub repository saladday/cc-switch-cli, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/saladday/cc-switch-cli
- Repository: https://github.com/saladday/cc-switch-cli

## Overview

CC-Switch CLI is a Rust switchboard for configuring and operating multiple AI coding CLIs. Users enter through the scriptable CLI or interactive TUI to manage provider settings, prompts, MCP servers, skills, and failover; configured coding tools can then send requests through the local proxy to model providers. The repository also includes session and usage features, daemon control, and cloud-sync integrations. The README excerpt and sampled files support the entry points, proxy routes, and selected subsystem behavior; some broader capability links are based on documented features and the file tree.

Main entry points: [`src-tauri/src/cli/commands/mod.rs`](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/commands/mod.rs) (CLI commands), [`src-tauri/src/proxy/handlers.rs`](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/handlers.rs) (Request handlers), [`src-tauri/src/database/mod.rs`](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/database/mod.rs) (SQLite state), [`src-tauri/src/services/provider/mod.rs`](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/provider/mod.rs) (Provider services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["CLI and TUI"]
  node_main["CLI entry<br/>[main.rs]"]
  node_cli["CLI commands<br/>[mod.rs]"]
  node_tui["Interactive TUI<br/>[app.rs]"]
end

subgraph group_configuration["Provider configuration"]
  node_provider_commands["Provider controls<br/>[provider.rs]"]
  node_config["App configuration<br/>[config.rs]"]
  node_provider_service["Provider services<br/>[mod.rs]"]
  node_prompts["Prompt management<br/>[prompt.rs]"]
  node_mcp["MCP management<br/>[mcp.rs]"]
  node_skills["Skill management<br/>[skill.rs]"]
end

subgraph group_proxy["Request proxy"]
  node_proxy_server["Local proxy server<br/>[server.rs]"]
  node_proxy_handlers["Request handlers<br/>[handlers.rs]"]
  node_handler_context["Request context<br/>[handler_context.rs]"]
  node_router["Provider routing<br/>[provider_router.rs]"]
  node_forwarder["Upstream forwarding<br/>[forwarder.rs]"]
  node_failover["Failover policy<br/>[failover_policy.rs]"]
end

subgraph group_state_services["State and services"]
  node_database[("SQLite state<br/>[mod.rs]")]
  node_sessions["Session manager<br/>[mod.rs]"]
  node_usage["Usage services<br/>[usage_stats.rs]"]
  node_sync["Cloud sync<br/>[sync_protocol.rs]"]
  node_webdav["WebDAV integration<br/>[webdav.rs]"]
  node_s3["S3 integration<br/>[s3.rs]"]
  node_daemon["Daemon control<br/>[server.rs]"]
end

node_user(("Operator"))
node_ai_tools(("AI coding tools"))
node_model_apis(("Model APIs"))

node_user -->|"runs"| node_main
node_main -->|"dispatches commands"| node_cli
node_user -->|"interacts"| node_tui
node_cli -->|"dispatches provider actions"| node_provider_commands
node_tui -->|"manages providers"| node_provider_service
node_provider_commands -->|"reads and writes"| node_database
node_provider_service -->|"updates app config"| node_config
node_provider_service -->|"reads and writes"| node_database
node_cli -->|"manages prompts"| node_prompts
node_cli -->|"manages MCP"| node_mcp
node_cli -->|"manages skills"| node_skills
node_ai_tools -->|"sends requests"| node_proxy_server
node_proxy_server -->|"dispatches routes"| node_proxy_handlers
node_proxy_handlers -->|"loads context"| node_handler_context
node_handler_context -->|"reads proxy config"| node_database
node_proxy_handlers -->|"routes requests"| node_router
node_proxy_handlers -->|"forwards requests"| node_forwarder
node_router -->|"selects upstream"| node_model_apis
node_forwarder -->|"sends requests"| node_model_apis
node_proxy_handlers -->|"applies policy"| node_failover
node_cli -->|"manages sessions"| node_sessions
node_sessions -->|"stores session state"| node_database
node_cli -->|"queries usage"| node_usage
node_usage -->|"reads usage state"| node_database
node_cli -->|"starts sync"| node_sync
node_sync -.->|"uses WebDAV"| node_webdav
node_sync -.->|"uses S3"| node_s3
node_cli -->|"controls daemon"| node_daemon

click node_main "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/main.rs"
click node_cli "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/commands/mod.rs"
click node_tui "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/tui/app.rs"
click node_provider_commands "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/commands/provider.rs"
click node_config "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/config.rs"
click node_provider_service "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/provider/mod.rs"
click node_prompts "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/prompt.rs"
click node_mcp "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/mcp.rs"
click node_skills "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/skill.rs"
click node_proxy_server "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/server.rs"
click node_proxy_handlers "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/handlers.rs"
click node_handler_context "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/handler_context.rs"
click node_router "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/provider_router.rs"
click node_forwarder "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/forwarder.rs"
click node_failover "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/failover_policy.rs"
click node_database "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/database/mod.rs"
click node_sessions "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/session_manager/mod.rs"
click node_usage "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/usage_stats.rs"
click node_sync "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/sync_protocol.rs"
click node_webdav "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/webdav.rs"
click node_s3 "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/s3.rs"
click node_daemon "https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/daemon/ipc/server.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_cli,node_tui toneBlue
class node_provider_commands,node_config,node_provider_service,node_prompts,node_mcp,node_skills toneAmber
class node_proxy_server,node_proxy_handlers,node_handler_context,node_router,node_forwarder,node_failover,node_model_apis toneMint
class node_database,node_sessions,node_usage,node_sync,node_webdav,node_s3,node_daemon toneRose
class node_user,node_ai_tools toneIndigo
```

## Components

### CLI and TUI

- [CLI entry](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/main.rs): `src-tauri/src/main.rs`
- [CLI commands](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/commands/mod.rs): `src-tauri/src/cli/commands/mod.rs`
- [Interactive TUI](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/tui/app.rs): `src-tauri/src/cli/tui/app.rs`

### Provider configuration

- [Provider controls](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/commands/provider.rs): `src-tauri/src/cli/commands/provider.rs`
- [App configuration](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/config.rs): `src-tauri/src/config.rs`
- [Provider services](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/provider/mod.rs): `src-tauri/src/services/provider/mod.rs`
- [Prompt management](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/prompt.rs): `src-tauri/src/prompt.rs`
- [MCP management](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/mcp.rs): `src-tauri/src/mcp.rs`
- [Skill management](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/skill.rs): `src-tauri/src/services/skill.rs`

### Request proxy

- [Local proxy server](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/server.rs): `src-tauri/src/proxy/server.rs`
- [Request handlers](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/handlers.rs): `src-tauri/src/proxy/handlers.rs`
- [Request context](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/handler_context.rs): `src-tauri/src/proxy/handler_context.rs`
- [Provider routing](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/provider_router.rs): `src-tauri/src/proxy/provider_router.rs`
- [Upstream forwarding](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/proxy/forwarder.rs): `src-tauri/src/proxy/forwarder.rs`
- [Failover policy](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/cli/failover_policy.rs): `src-tauri/src/cli/failover_policy.rs`

### State and services

- [SQLite state](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/database/mod.rs): `src-tauri/src/database/mod.rs`
- [Session manager](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/session_manager/mod.rs): `src-tauri/src/session_manager/mod.rs`
- [Usage services](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/usage_stats.rs): `src-tauri/src/services/usage_stats.rs`
- [Cloud sync](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/sync_protocol.rs): `src-tauri/src/services/sync_protocol.rs`
- [WebDAV integration](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/webdav.rs): `src-tauri/src/services/webdav.rs`
- [S3 integration](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/services/s3.rs): `src-tauri/src/services/s3.rs`
- [Daemon control](https://github.com/saladday/cc-switch-cli/blob/main/src-tauri/src/daemon/ipc/server.rs): `src-tauri/src/daemon/ipc/server.rs`

### Other components

- **Operator**
- **AI coding tools**
- **Model APIs**

## Connections

- Operator → CLI entry: runs
- CLI entry → CLI commands: dispatches commands
- Operator → Interactive TUI: interacts
- CLI commands → Provider controls: dispatches provider actions
- Interactive TUI → Provider services: manages providers
- Provider controls → SQLite state: reads and writes
- Provider services → App configuration: updates app config
- Provider services → SQLite state: reads and writes
- CLI commands → Prompt management: manages prompts
- CLI commands → MCP management: manages MCP
- CLI commands → Skill management: manages skills
- AI coding tools → Local proxy server: sends requests
- Local proxy server → Request handlers: dispatches routes
- Request handlers → Request context: loads context
- Request context → SQLite state: reads proxy config
- Request handlers → Provider routing: routes requests
- Request handlers → Upstream forwarding: forwards requests
- Provider routing → Model APIs: selects upstream
- Upstream forwarding → Model APIs: sends requests
- Request handlers → Failover policy: applies policy
- CLI commands → Session manager: manages sessions
- Session manager → SQLite state: stores session state
- CLI commands → Usage services: queries usage
- Usage services → SQLite state: reads usage state
- CLI commands → Cloud sync: starts sync
- Cloud sync → WebDAV integration: uses WebDAV
- Cloud sync → S3 integration: uses S3
- CLI commands → Daemon control: controls daemon
