Skip to main content

CLIProxy Sync

CCS can automatically sync your API profiles (GLM, Kimi for Coding, etc.) to a local or remote CLIProxy configuration. This enables centralized management of all your API keys and models.

Overview

CLIProxy Sync transforms CCS settings-based profiles into CLIProxy ClaudeKey format and writes them to config.yaml. Changes to profiles automatically trigger a sync when auto_sync is enabled. Use Cases:
  • Centralized API key management across devices
  • Remote CLIProxy deployment with synced profiles
  • Dashboard-managed profiles available to all providers

Quick Start

Enable Auto-Sync

Auto-sync is enabled by default. It watches for changes to ~/.ccs/*.settings.json and syncs to local CLIProxy config.

Configure Profiles

Profiles with valid API keys are automatically synced:

Auto-Sync Behavior

Watcher

When cliproxy.auto_sync is enabled, CCS watches for file changes: Watch Pattern: ~/.ccs/*.settings.json Trigger Events:
  • File created (new profile)
  • File modified (API key/model changed)
  • File deleted (profile removed)
Debounce: 3 seconds (prevents sync storms during rapid edits)

Sync Target

Local Sync: Writes to ~/.ccs/cliproxy/config.yaml Profile Mapping:
  • Profile name → prefix (e.g., glmglm-)
  • ANTHROPIC_AUTH_TOKENapi-key
  • ANTHROPIC_BASE_URLbase-url (optional)
  • ANTHROPIC_MODELmodels[0].name

Example

CCS Profile (glm.settings.json):
Synced to CLIProxy (config.yaml):

CLI Commands

ccs cliproxy sync

Sync profiles to CLIProxy config and show status.

ccs cliproxy sync --dry-run

Preview sync changes without writing to config.

ccs cliproxy sync --verbose

Show detailed sync information.

Configuration

Enable/Disable Auto-Sync

Config location: ~/.ccs/config.yaml

Profile Filtering

Only profiles with valid API keys are synced. Profiles are skipped if:
  • ANTHROPIC_AUTH_TOKEN is missing
  • API key contains placeholder text (YOUR_, your-)
  • settings.json is unreadable
  • Profile name is invalid (non-alphanumeric, too long)

Target-Aware Filtering

Available since v7.48.0
Sync only processes profiles with target: claude (or no target, which defaults to claude). Profiles with target: droid are excluded because Droid uses a different configuration format (~/.factory/settings.json). This means:
  • API profiles with target: droid are not synced to CLIProxy config
  • CLIProxy variants with target: droid are still managed but their settings path differs
  • Use the Droid dashboard page to manage Droid-targeted profiles

Dashboard Integration

Sync Status Card

Dashboard shows real-time sync status: Location: Settings → CLIProxy Sync Displays:
  • Auto-sync enabled/disabled
  • Watcher status (running/stopped)
  • Syncable profile count
  • Last sync timestamp
Actions:
  • Toggle auto-sync
  • Manual sync trigger
  • View profile list

Profile Management

Profiles managed via Dashboard are automatically synced:
  1. Go to Dashboard → API Profiles
  2. Add/edit GLM, Kimi for Coding, or custom profile
  3. Auto-sync triggers within 3 seconds
  4. Profile available via ccs <prefix>-

Troubleshooting

Auto-Sync Not Working

Check watcher status:
Common issues:
  • Auto-sync disabled → Enable in ~/.ccs/config.yaml (cliproxy.auto_sync: true)
  • Watcher crashed → Restart Dashboard or run ccs cliproxy sync
  • Invalid profile → Check settings.json for syntax errors

Profile Not Syncing

Verify profile is syncable:
Profile missing from list means:
  • API key placeholder not replaced
  • ANTHROPIC_AUTH_TOKEN missing from settings.json
  • Profile name contains invalid characters
Fix:

Manual Sync Fails

Error: “Failed to sync: <error> Solutions:

Remote Proxy Sync

For remote CLIProxy deployments, sync profiles to remote server. Coming Soon: Remote sync via Management API Current Workaround:
  1. Sync locally: ccs cliproxy sync
  2. Copy ~/.ccs/cliproxy/config.yaml to remote server
  3. Restart remote CLIProxy instance

Security Considerations

API Key Storage:
  • Keys stored in ~/.ccs/*.settings.json (plain text)
  • Synced to ~/.ccs/cliproxy/config.yaml (plain text)
  • File permissions: 600 (owner read/write only)
Best Practices:
  • Never commit *.settings.json or config.yaml to git
  • Use environment variables for sensitive keys
  • Rotate API keys regularly
  • Encrypt home directory on shared machines

Hybrid Model Catalog Sync

Available since v7.39.0
CCS automatically syncs remote model catalogs from CLIProxyAPI and keeps static fallback catalogs for times when no usable live or cached catalog is available.

Overview

Catalog sync prefers a live CLIProxy management catalog, then an unexpired local cache, then the bundled static catalog. Static metadata can enrich matching live models, but static-only models are not re-added to a successful live catalog. Syncable Providers:
  • agy (Antigravity)
  • claude (Claude via CLIProxy)
  • codex (OpenAI Codex)
  • gemini (Google Gemini)
  • iflow (iFlow)
  • kimi (Moonshot Kimi)
  • kiro (Kiro)
  • qoder (Qoder)
  • qwen (Qwen; catalog only, no bundled account linking)
  • xai (xAI Grok)
  • ghcp (deprecated GitHub Copilot compatibility)

How It Works

Live Catalog Behavior:
  1. Live models are authoritative when available.
  2. Matching static metadata is overlaid where the live definition omits it.
  3. Models present only in the live catalog are added.
  4. Static-only models are not re-added to a successful live catalog.
  5. The complete static catalog is used only when neither live data nor an unexpired cache is usable.
Cache:
  • Location: ~/.ccs/model-catalog-cache.json
  • TTL: 24 hours
  • Auto-refresh on cache expiry

CLI Commands

Dashboard Integration

Dashboard fetches synced catalog via /api/cliproxy/catalog endpoint. Model selection dropdowns automatically show latest available models.

Troubleshooting

Catalog out of date:
Remote fetch fails:
  • Uses an unexpired cache when one exists; otherwise uses the static catalog
  • A failed refresh does not delete the cache file, but an expired cache is ignored
  • The 24-hour value is the cache TTL, not a refresh retry interval
Clear corrupted cache: