Configuration Schema Reference
Complete reference forconfig.yaml version 6. This file is the single source of truth for all CCS configuration.
Location: ~/.ccs/config.yaml
Format: YAML
Current Version: 6
Version History
| Version | Release | Key Changes |
|---|---|---|
| v6 | 2025-12 | Customizable auth tokens, variant-specific auth |
| v5 | 2025-10 | Remote proxy configuration |
| v4 | 2025-08 | Copilot API integration |
| v3 | 2025-06 | WebSearch config with model configuration |
| v2 | 2025-04 | Initial YAML unified format |
| v1 | 2025-02 | Legacy JSON format (deprecated) |
Root Schema
CLIProxy Configuration
cliproxy.backend
Type: String (original | plus)
Priority: HIGH
Purpose: Select CLIProxy backend variant
original: CLIProxyAPI (no Kiro/ghcp support)plus: CLIProxyAPIPlus (all providers including Kiro/ghcp)- Backend-specific binaries stored in
~/.ccs/bin/original/and~/.ccs/bin/plus/
- Kiro, ghcp: Require
backend: plus - All other providers work on both backends
- Use
originalfor minimal install if Kiro/ghcp not needed - Use
plusfor full provider support (recommended, default)
--backend CLI flag, provider compatibility
cliproxy.variants.<name>.auth
Type: Object
Priority: HIGH
Purpose: Per-variant auth override
- Overrides global
cliproxy.authfor specific variant - Useful for different auth credentials per variant
- Both keys optional (falls back to global)
- Separate auth for dev/prod variants
- Per-team auth credentials
- Testing with different API keys
cliproxy.variants.<name>.port
Type: Integer (1-65535, recommended: 8318-8417)
Priority: HIGH
Purpose: Port isolation for concurrent variants
- Assigns unique port for variant isolation
- Allows multiple variants to run simultaneously
- Accepts any valid port (1-65535), recommended range: 8318-8417 for CCS variants
- Default: Auto-assigned if not specified
- Run dev and prod variants concurrently
- Isolate variants for different teams
- Avoid port conflicts in multi-user environments
cliproxy.auth.api_key
Type: String
Priority: MEDIUM
Purpose: Global API key for CLIProxyAPI
- Used for CLIProxyAPI authentication
- Sent in
x-api-keyheader - Can be overridden per-variant via
variants.<name>.auth.api_key - Default:
"ccs-internal-managed"
cliproxy.auth.management_secret
Type: String
Priority: MEDIUM
Purpose: Global management secret for CLIProxyAPI
- Used for CLIProxyAPI management endpoints
- Sent in
x-management-secretheader - Can be overridden per-variant via
variants.<name>.auth.management_secret - Default:
"ccs"
- Separate auth for management vs API operations
- Enhanced security for admin endpoints
cliproxy.kiro_no_incognito
Type: Boolean
Priority: MEDIUM
Purpose: Disable incognito mode for Kiro provider
false: Use incognito mode (default, no persistent session)true: Use normal browser mode (saves cookies/session)
- Persistent AWS SSO login for Kiro
- Avoid re-entering credentials on each auth
- Development/testing with saved browser state
--no-incognito CLI flag
cliproxy.logging.enabled
Type: Boolean
Priority: LOW
Purpose: Enable CLIProxy logging to disk
false: No disk logging (default, prevents bloat)true: Write logs to~/.ccs/cliproxy/logs/
cliproxy.logging.request_log
Type: Boolean
Priority: LOW
Purpose: Enable detailed request logging
false: Log errors/warnings onlytrue: Log all HTTP requests/responses- Requires
logging.enabled: true
cliproxy.token_refresh.enabled
Type: Boolean
Priority: MEDIUM
Purpose: Enable background token refresh worker
false: On-demand refresh only (5 min before expiry)true: Background worker refreshes tokens at intervals
- Long-running services needing proactive refresh
- Preventing mid-request token expiry
- CI/CD environments with extended sessions
cliproxy.token_refresh.interval_minutes
Type: Integer (minutes)
Priority: LOW
Purpose: Background refresh check interval
- Worker checks all tokens every N minutes
- Only refreshes tokens approaching expiry
cliproxy.token_refresh.preemptive_minutes
Type: Integer (minutes)
Priority: LOW
Purpose: Refresh tokens expiring within N minutes
- Tokens expiring within this window are refreshed
- Higher values = more proactive refresh
- Prevents
UND_ERR_SOCKETerrors from stale tokens
cliproxy.token_refresh.max_retries
Type: Integer
Priority: LOW
Purpose: Maximum refresh retry attempts
- Retries on transient failures
- Logs warning after max retries exceeded
- Does not re-authenticate (requires user action)
cliproxy.token_refresh.verbose
Type: Boolean
Priority: LOW
Purpose: Enable debug logging for token refresh
- Logs all refresh attempts to console
- Useful for debugging token issues
- Output: timestamps, providers, success/failure
CLIProxy Server Configuration
cliproxy_server.fallback.enabled
Type: Boolean
Priority: HIGH
Purpose: Enable fallback to local proxy if remote fails
true: Try local proxy if remote unreachablefalse: Fail withPROXY_ERRORif remote fails
- Graceful degradation for network issues
- Offline work capability
- Testing without remote infrastructure
--remote-only CLI flag
cliproxy_server.fallback.auto_start
Type: Boolean
Priority: MEDIUM
Purpose: Auto-start local proxy on fallback
false: Use existing local proxy onlytrue: Spawn local proxy if not running
- Seamless fallback without manual intervention
- Ensure proxy always available
cliproxy_server.remote.management_key
Type: String
Priority: MEDIUM
Purpose: Separate management key for remote proxy
- Used for management endpoints on remote proxy
- Falls back to
auth_tokenif not specified - Allows separate credentials for API vs management
cliproxy_server.remote.timeout
Type: Integer (milliseconds)
Priority: LOW
Purpose: Health check timeout for remote proxy
- Used for initial health check only
- Higher values for slow networks
- Does NOT affect API request timeouts
--proxy-timeout CLI flag
Quota Management Configuration
quota_management.mode
Type: String (auto | manual | hybrid)
Priority: MEDIUM
Purpose: Account selection strategy for OAuth providers
auto: CCS selects account based on quota/tier automaticallymanual: Only use paused/forced_default settingshybrid: Auto-selection respects manual overrides (recommended)
quota_management.auto.preflight_check
Type: Boolean
Priority: HIGH
Purpose: Check quota before starting Claude session
true: Check account quota before request, auto-switch if exhaustedfalse: Skip pre-flight check, rely on 429 error handling
- Prevent delays from exhausted accounts
- Smoother multi-account experience
quota_management.auto.exhaustion_threshold
Type: Integer (0-100, percentage)
Priority: LOW
Purpose: Quota % below which account is “exhausted”
- Accounts below threshold are skipped in rotation
- Prevents using nearly-exhausted accounts
quota_management.auto.tier_priority
Type: Array of strings
Priority: LOW
Purpose: Account tier preference order
- Accounts sorted by tier priority, then by quota %
- Tiers not in list get lowest priority
paid- Paid subscription accountsfree- Free tier accountsunknown- Tier detection failed
quota_management.auto.cooldown_minutes
Type: Integer (minutes)
Priority: LOW
Purpose: Skip exhausted accounts for N minutes
- Exhausted accounts are skipped for cooldown period
- Prevents repeated failed attempts on same account
quota_management.manual.paused_accounts
Type: Array of strings
Priority: HIGH
Purpose: Accounts to skip in rotation
- Listed accounts are never selected automatically
- Set via
ccs cliproxy pause <provider> <account> - Remove via
ccs cliproxy resume <provider> <account>
quota_management.manual.forced_default
Type: String | null
Priority: HIGH
Purpose: Force specific account for all requests
null: Normal account rotation<email>: Always use this account
- Testing specific account
- Temporarily override rotation
quota_management.manual.tier_lock
Type: String | null
Priority: MEDIUM
Purpose: Only use accounts of specific tier
null: Use all tierspaid: Only paid accountsfree: Only free accounts
Global Environment Variables
global_env.enabled
Type: Boolean
Priority: MEDIUM
Purpose: Enable global env var injection
true: Injectglobal_env.envinto all non-Claude profilesfalse: Disable feature
- Disable Claude Code telemetry for proxy providers
- Set common env vars across all profiles
global_env.env
Type: Object (key-value pairs)
Priority: MEDIUM
Purpose: Environment variables for all non-Claude profiles
- Applied to settings-based and CLIProxy profiles
- NOT applied to native Claude or account-based profiles
- Merged with profile-specific env vars
DISABLE_BUG_COMMAND: "1"DISABLE_ERROR_REPORTING: "1"DISABLE_TELEMETRY: "1"
- Disable Claude Code telemetry globally
- Set API base URLs
- Configure logging levels
WebSearch Configuration
websearch.providers.gemini.model
Type: String
Priority: LOW
Purpose: Gemini model for WebSearch feature
- Used by WebSearch hook for third-party profiles
- Free tier: 1000 requests/day
- Falls back to OpenCode/Grok if fails
gemini-2.5-flash(default, fastest)gemini-2.5-pro(more accurate)
websearch.providers.gemini.timeout
Type: Integer (seconds)
Priority: LOW
Purpose: Gemini CLI timeout for WebSearch
- Max time for single WebSearch request
- Prevents hanging on slow responses
- Falls back to next provider on timeout
websearch.providers.opencode
Type: Object
Priority: LOW
Purpose: OpenCode provider configuration
- Free provider via Zen platform
- Requires OpenCode CLI installed
- Fallback option after Gemini
- Set
enabled: true - Install:
npm install -g opencode
websearch.providers.grok
Type: Object
Priority: LOW
Purpose: Grok CLI provider configuration
- Requires
GROK_API_KEYenvironment variable - Paid API, better quality than free providers
- Last fallback option
- Set
enabled: true - Set
GROK_API_KEYenv var - Install:
npm install -g @vibe-kit/grok-cli
Copilot Configuration
copilot.account_type
Type: String (individual | business)
Priority: LOW
Purpose: GitHub Copilot subscription type
individual: Personal subscriptionbusiness: Enterprise/team subscription
- Billing/usage tracking
- Feature access control
copilot.rate_limit
Type: Integer | null
Priority: LOW
Purpose: Rate limiting for Copilot API
null: No rate limiting- Integer: Max requests per minute
- Prevent API abuse
- Control costs for business accounts
copilot.wait_on_limit
Type: Boolean
Priority: LOW
Purpose: Wait vs fail on rate limit
true: Wait until rate limit window resetsfalse: Fail with error immediately
Configuration Patterns
Priority Resolution
CCS resolves configuration values in this order:- CLI Flags (highest priority)
- Environment Variables
- config.yaml
- Defaults (lowest priority)
Variant Isolation Pattern
Run multiple variants concurrently without conflicts:Remote Proxy with Fallback Pattern
Graceful degradation for network issues:- Try remote proxy at
https://proxy.example.com:8443 - If unreachable after 5s, fall back to local proxy
- Auto-start local proxy if not running
- Use local proxy on port 8317
Dashboard Authentication
Optional username/password protection for the CCS dashboard.See Dashboard Authentication for full setup guide.
dashboard_auth.enabled
Type: Boolean
Priority: HIGH
Purpose: Enable dashboard login requirement
false: Dashboard accessible without login (default)true: Requires username/password to access dashboard
dashboard_auth.username
Type: String
Priority: HIGH
Purpose: Login username
dashboard_auth.password_hash
Type: String (bcrypt hash)
Priority: HIGH
Purpose: Bcrypt-hashed password
dashboard_auth.session_timeout_hours
Type: Integer
Priority: LOW
Purpose: Session duration before re-login required
Dashboard Auth Environment Variables
| Variable | Maps To |
|---|---|
CCS_DASHBOARD_AUTH_ENABLED | dashboard_auth.enabled |
CCS_DASHBOARD_USERNAME | dashboard_auth.username |
CCS_DASHBOARD_PASSWORD_HASH | dashboard_auth.password_hash |
CCS_SESSION_SECRET | Custom session encryption key |
Environment variables override config.yaml values.
Migration from v5 to v6
Version 6 adds customizable auth tokens. Migration is automatic. Changes:- Added
cliproxy.auth.api_key(default:"ccs-internal-managed") - Added
cliproxy.auth.management_secret(default:"ccs") - Added
cliproxy.variants.<name>.authfor per-variant override - Added
cliproxy_server.remote.management_keyfor separate management auth
- None (automatic migration with defaults)
- Optional: Customize auth keys for enhanced security
Validation Rules
CCS validates configuration on load. Common errors: Schema Errors:versionmust be integer 2-6- Ports must be 1-65535
- Boolean fields reject non-boolean values
- Variant names must not conflict with built-in providers
- Profile names cannot be reserved words
- Email addresses must be valid format
- Hostnames must be valid DNS/IP
- Run
ccs doctor --fixfor auto-repair - Run
ccs migratefor version upgrades - Delete corrupt config and run
ccs setup
