{"id":49990381,"url":"https://github.com/ejfkdev/vcc-cli","last_synced_at":"2026-05-19T04:50:53.879Z","repository":{"id":354882085,"uuid":"1225750866","full_name":"ejfkdev/vcc-cli","owner":"ejfkdev","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-30T17:20:11.000Z","size":331,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-30T18:19:22.901Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ejfkdev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-30T15:45:52.000Z","updated_at":"2026-04-30T17:20:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ejfkdev/vcc-cli","commit_stats":null,"previous_names":["ejfkdev/vcc-cli"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ejfkdev/vcc-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejfkdev%2Fvcc-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejfkdev%2Fvcc-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejfkdev%2Fvcc-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejfkdev%2Fvcc-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ejfkdev","download_url":"https://codeload.github.com/ejfkdev/vcc-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ejfkdev%2Fvcc-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33202584,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"online","status_checked_at":"2026-05-19T02:00:06.763Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-19T04:50:50.875Z","updated_at":"2026-05-19T04:50:53.871Z","avatar_url":"https://github.com/ejfkdev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VCC\n\n[![Crates.io](https://img.shields.io/crates/v/vcc?style=flat-square)](https://crates.io/crates/vcc)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](https://github.com/ejfkdev/vcc-cli/blob/main/LICENSE)\n[![Rust](https://img.shields.io/badge/rust-1.80%2B-orange?style=flat-square\u0026logo=rust)](https://www.rust-lang.org/)\n[![CI](https://img.shields.io/github/actions/workflow/status/ejfkdev/vcc-cli/ci.yml?style=flat-square\u0026branch=main)](https://github.com/ejfkdev/vcc-cli/actions)\n[![GitHub Release](https://img.shields.io/github/v/release/ejfkdev/vcc-cli?style=flat-square)](https://github.com/ejfkdev/vcc-cli/releases/latest)\n\nUnified configuration manager for AI coding tools. One config to rule them all.\n\n[中文文档](README.zh-CN.md)\n\nVCC lets you define your AI coding tool configuration once — providers, MCP servers, hooks, prompts, skills, agents, env vars, plugins — then apply it to any supported tool. No more manually editing JSON/TOML/YAML across multiple tools.\n\n## Install\n\n### macOS / Linux\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/ejfkdev/vcc-cli/main/install.sh | sh\n```\n\n### Windows (PowerShell)\n\n```powershell\nirm https://raw.githubusercontent.com/ejfkdev/vcc-cli/main/install.ps1 | iex\n```\n\n### Homebrew\n\n```bash\nbrew tap ejfkdev/tap\nbrew install vcc\n```\n\n### Cargo\n\n```bash\ncargo install vcc\n```\n\n### From source\n\n```bash\ngit clone https://github.com/ejfkdev/vcc-cli.git\ncd vcc-cli\ncargo install --path .\n```\n\n## Supported Tools\n\n| Tool | Config Format | Resources |\n|------|--------------|-----------|\n| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | JSON (JSONC) | Provider, MCP, Hook, Env, Agent, Prompt, Plugin |\n| [Codex CLI](https://github.com/openai/codex) | JSON + TOML | Provider, MCP, Prompt, Plugin |\n| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | JSON + .env | Provider, MCP, Hook, Env, Prompt, Plugin |\n| [OpenCode](https://github.com/opencode-ai/opencode) | JSON (JSONC) | Provider, MCP, Prompt, Plugin |\n| [Droid](https://github.com/nicepkg/droid) | JSON | Provider, MCP, Prompt, Plugin |\n| [Kimi](https://github.com/MoonshotAI/kimi-cli) | JSON + TOML + YAML | Provider, MCP, Hook, Agent, Prompt, Plugin |\n| [Aider](https://github.com/paul-gauthier/aider) | YAML | Provider |\n| [Cursor](https://cursor.com) | CSV | Session |\n| [Copilot](https://github.com/features/copilot) | JSONL | Session |\n| [Amp](https://ampcode.com) | JSON | Session |\n| [RooCode](https://roocode.com) | JSON | Session |\n| [KiloCode](https://kilocode.com) | JSON | Session |\n| [Kilo](https://github.com/nicepkg/kilo) | SQLite | Session |\n| [Crush](https://github.com/charmbracelet/crush) | SQLite | Session |\n| [Hermes](https://github.com/NousResearch/hermes-agent) | SQLite | Session |\n| [Qwen](https://github.com/QwenLM/qwen-code) | JSONL | Session |\n| [Pi](https://pi.ai) | JSONL | Session |\n| [OpenClaw](https://github.com/openclaw/openclaw) | JSONL | Session |\n| [Mux](https://mux.com) | JSON | Session |\n\n## Quick Start\n\n```bash\n# Initialize with a profile\nvcc profile add default\n\n# Add a provider (interactive or with flags)\nvcc provider add my-openai --preset openai --key sk-xxx\n\n# Add an MCP server\nvcc mcp add filesystem --preset filesystem\n\n# Add a hook\nvcc hook add my-hook --event PreToolUse --command \"echo 'running'\"\n\n# Apply to a tool\nvcc apply claude              # Apply all resources to Claude Code\nvcc apply --profile default   # Apply a specific profile\n\n# Inspect what's configured\nvcc inspect claude            # See Claude's actual config\nvcc inspect -o mcp,provider   # Filter by resource type\n\n# Incremental changes\nvcc apply claude --add-mcp db --remove-mcp old-server\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `vcc status` | Show overview of configured tools and resources |\n| `vcc apply [TOOL]` | Apply profile/changes to a tool |\n| `vcc inspect [TOOL]` | View a tool's actual configuration |\n| `vcc import [SOURCE]` | Import existing config from cc-switch or Cherry Studio |\n| `vcc preset` | List and apply built-in presets |\n| `vcc usage` | Show token usage statistics |\n| `vcc profile` | Manage named profiles |\n| `vcc config` | Manage VCC settings |\n| `vcc session` | Manage sessions and view usage |\n| `vcc provider` | Manage AI providers |\n| `vcc mcp` | Manage MCP servers |\n| `vcc hook` | Manage lifecycle hooks |\n| `vcc agent` | Manage agent definitions |\n| `vcc skill` | Manage skill packages |\n| `vcc prompt` | Manage prompt templates |\n| `vcc env` | Manage environment variables |\n| `vcc plugin` | Manage tool plugins |\n\nEach resource command supports `list`, `add`, `remove`, and `show` subcommands. MCP and plugin also support `toggle` to enable/disable.\n\n## How It Works\n\nVCC maintains a **resource registry** (`~/.config/VibeCodingControl/registry/`) with TOML files for each resource. When you `apply`, VCC reads the registry and writes the correct format (JSON/TOML/YAML) to each tool's config directory.\n\n```\n~/.config/VibeCodingControl/registry/\n  provider/\n    my-openai.toml\n    my-anthropic.toml\n  mcp/\n    filesystem.toml\n  hook/\n    my-hook.toml\n  ...\n```\n\nAdapters handle the translation between VCC's unified format and each tool's native format. The adapter config (mapping rules, field names, file paths) is defined in TOML, making it easy to add new tools without writing Rust code.\n\n### Config-Driven Adapters\n\nInstead of per-tool Rust code, VCC uses a generic adapter that reads TOML mapping configs. Each tool's format — file paths, key names, field mapping rules — is declared in `src/config/adapter_mappings/`. Adding support for a new tool is just a matter of writing a new mapping file.\n\n### Tool Overrides\n\nAny resource can have per-tool value overrides. For example, the same MCP server can use different `command` or `env` values for different tools:\n\n```toml\n# ~/.vcc/registry/mcp/my-server.toml\nname = \"my-server\"\nserver_type = \"stdio\"\ncommand = \"node\"\n\n[tool.opencode]\ncommand = \"npx\"\n```\n\n### Profiles\n\nProfiles define which resources are active. Apply different profiles to switch contexts:\n\n```bash\nvcc profile add work\nvcc profile apply work        # Enable work resources\nvcc apply claude --profile work\n```\n\n### Hash-Based Change Detection\n\nVCC uses XXH3-64 hashes to detect whether a sync actually modified anything, making `apply` idempotent — running it twice produces the same result.\n\n## Resource Types\n\n| Type | Key Fields |\n|------|-----------|\n| **Provider** | API key, base URL, provider type, models, headers, env |\n| **MCP** | Server type (stdio/sse/streamable-http), command, args, env, URL, headers |\n| **Hook** | Event (PreToolUse/PostToolUse), matcher, command, timeout |\n| **Agent** | Mode (subagent/primary), description, model, tools, permission |\n| **Skill** | Source (github/local/url), repo, path, install method |\n| **Prompt** | Content |\n| **Env** | Variables (key-value map) |\n| **Plugin** | Source, repo, path, marketplace, install method |\n\n## Built-in Presets\n\n**Providers:** anthropic, openai, google, deepseek, xai, mistral, openrouter, groq\n\n**MCP Servers:** filesystem, context7, deepwiki, icm, sequential-thinking, brave-search\n\n## Session Usage Tracking\n\nVCC can scan AI tool session files and report token usage:\n\n```bash\nvcc usage                    # Aggregate usage across all tools\nvcc session list             # List sessions\n```\n\nIncremental parsing ensures repeated scans are fast — only new data since the last scan is processed.\n\n## Development\n\n```bash\n# Build\ncargo build\n\n# Run tests\ncargo test\n\n# Run with logs\nRUST_LOG=debug cargo run -- apply claude\n\n# Format check\ncargo fmt --check\n\n# Lint\ncargo clippy\n```\n\n## Architecture\n\n```\nsrc/\n  main.rs              CLI entry point, clap definitions\n  cli/                 Command implementations\n  model/               Core types: Resource trait, 8 resource structs, Profile\n  config/              Compile-time embedded TOML configs (OnceLock singletons)\n  adapter/             Adapter trait, GenericAdapter, DocTree, field mapping\n  datasource/          External data source import (cc-switch, Cherry Studio)\n  session/             Session scanning and usage extraction\n  store/               TOML file store for the resource registry\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejfkdev%2Fvcc-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fejfkdev%2Fvcc-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fejfkdev%2Fvcc-cli/lists"}