Skip to main content

CLIProxy Sync

CCS can automatically sync your API profiles (GLM, Kimi, 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.
# Check sync status and perform sync
ccs cliproxy sync

# Dry-run to preview changes without syncing
ccs cliproxy sync --dry-run

# Verbose output
ccs cliproxy sync --verbose

Configure Profiles

Profiles with valid API keys are automatically synced:
# Create API profile via CLI
ccs api create glm

# Or via Dashboard
ccs config
# → Go to "API Profiles" → Add GLM/Kimi/custom

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):
{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-xxx",
    "ANTHROPIC_BASE_URL": "https://api.glm.cn/anthropic",
    "ANTHROPIC_MODEL": "glm-4-plus"
  }
}
Synced to CLIProxy (config.yaml):
claude-keys:
  - api-key: sk-xxx
    base-url: https://api.glm.cn/anthropic
    prefix: glm-
    models:
      - name: glm-4-plus
        alias: ""

CLI Commands

ccs cliproxy sync

Sync profiles to CLIProxy config and show status.
ccs cliproxy sync

# Output:
# CLIProxy Sync Status
#
# Auto-sync: Enabled
# Watcher:   Running
# Profiles:  2 syncable
#
# Syncable Profiles:
#   glm      (glm-4-plus)
#   kimi     (moonshot-v1-128k)
#
# [OK] Synced 2 profile(s) to ~/.ccs/cliproxy/config.yaml

ccs cliproxy sync --dry-run

Preview sync changes without writing to config.
ccs cliproxy sync --dry-run

# Output shows what would be synced without making changes

ccs cliproxy sync --verbose

Show detailed sync information.
ccs cliproxy sync --verbose

# Output includes detailed profile mapping and config changes

Configuration

Enable/Disable Auto-Sync

Config location: ~/.ccs/config.yaml
cliproxy:
  auto_sync: true  # Enable auto-sync watcher (default)
  # Set to false to disable automatic syncing

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)

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, or custom profile
  3. Auto-sync triggers within 3 seconds
  4. Profile available via ccs \u003cprefix\u003e-

Troubleshooting

Auto-Sync Not Working

Check watcher status:
ccs cliproxy sync
# → Shows "Watcher: Running" or "Watcher: Stopped"
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:
ccs cliproxy sync
# → Lists "Syncable Profiles"
Profile missing from list means:
  • API key placeholder not replaced
  • ANTHROPIC_AUTH_TOKEN missing from settings.json
  • Profile name contains invalid characters
Fix:
# Reconfigure profile
ccs api create glm
# → Enter real API key (not placeholder)

Manual Sync Fails

Error: “Failed to sync: \u003cerror\u003e” Solutions:
# Check CLIProxy config permissions
ls -la ~/.ccs/cliproxy/config.yaml

# Ensure CLIProxy directory exists
mkdir -p ~/.ccs/cliproxy

# Trigger sync
ccs cliproxy sync

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