{"id":25915708,"url":"https://github.com/musistudio/claude-code-router","last_synced_at":"2025-08-26T19:42:43.054Z","repository":{"id":279381536,"uuid":"938468965","full_name":"musistudio/claude-code-router","owner":"musistudio","description":"Use Claude Code as the foundation for coding infrastructure, allowing you to decide how to interact with the model while enjoying updates from Anthropic.","archived":false,"fork":false,"pushed_at":"2025-08-17T10:02:25.000Z","size":5232,"stargazers_count":13504,"open_issues_count":352,"forks_count":1001,"subscribers_count":54,"default_branch":"main","last_synced_at":"2025-08-17T12:05:34.612Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/musistudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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}},"created_at":"2025-02-25T02:17:18.000Z","updated_at":"2025-08-17T11:52:12.000Z","dependencies_parsed_at":"2025-05-06T01:28:27.726Z","dependency_job_id":"ba9ed446-79ac-4d02-bee8-15b2c69eb816","html_url":"https://github.com/musistudio/claude-code-router","commit_stats":null,"previous_names":["musistudio/claude-code-reverse","musistudio/claude-code-router"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/musistudio/claude-code-router","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/musistudio%2Fclaude-code-router","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/musistudio%2Fclaude-code-router/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/musistudio%2Fclaude-code-router/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/musistudio%2Fclaude-code-router/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/musistudio","download_url":"https://codeload.github.com/musistudio/claude-code-router/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/musistudio%2Fclaude-code-router/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272250274,"owners_count":24900182,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-26T02:00:07.904Z","response_time":60,"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":"2025-03-03T12:01:27.597Z","updated_at":"2025-08-26T19:42:43.027Z","avatar_url":"https://github.com/musistudio.png","language":"TypeScript","funding_links":["https://ko-fi.com/F1F31GN2GM","https://paypal.me/musistudio1999"],"categories":["TypeScript","GUI \u0026 IDE","HarmonyOS","Claude Code Ecosystem","A01_文本生成_文本对话","Productivity Tools","others","Tooling","Proxies \u0026 Model Integrations","Repos","AI应用","🤖 AI \u0026 Machine Learning","CLI Extensions and Companion Tools","Ecosystem","精选文章","Harnesses \u0026 orchestration","核心扩展与集成","Available on GitHub"],"sub_categories":["Windows Manager","Frameworks \u0026 Platforms","大语言对话模型及数据","CLI Configuration Tools","MCP Frameworks and Tooling","Quick Setup with cc-safe-setup","AI Agent","Agent infrastructure"],"readme":"# Claude Code Router\n\nI am seeking funding support for this project to better sustain its development. If you have any ideas, feel free to reach out to me: [m@musiiot.top](mailto:m@musiiot.top)\n\n\n[中文版](README_zh.md)\n\n\u003e A powerful tool to route Claude Code requests to different models and customize any request.\n\n\u003e Now you can use models such as `GLM-4.5`, `Kimi-K2`, `Qwen3-Coder-480B-A35B`, and `DeepSeek v3.1` for free through the [iFlow Platform](https://platform.iflow.cn/docs/api-mode).     \n\u003e You can use the `ccr ui` command to directly import the `iflow` template in the UI. It’s worth noting that iFlow limits each user to a concurrency of 1, which means you’ll need to route background requests to other models.      \n\u003e If you’d like a better experience, you can try [iFlow CLI](https://cli.iflow.cn).\n\n![](blog/images/claude-code.png)\n\n## ✨ Features\n\n- **Model Routing**: Route requests to different models based on your needs (e.g., background tasks, thinking, long context).\n- **Multi-Provider Support**: Supports various model providers like OpenRouter, DeepSeek, Ollama, Gemini, Volcengine, and SiliconFlow.\n- **Request/Response Transformation**: Customize requests and responses for different providers using transformers.\n- **Dynamic Model Switching**: Switch models on-the-fly within Claude Code using the `/model` command.\n- **GitHub Actions Integration**: Trigger Claude Code tasks in your GitHub workflows.\n- **Plugin System**: Extend functionality with custom transformers.\n\n## 🚀 Getting Started\n\n### 1. Installation\n\nFirst, ensure you have [Claude Code](https://docs.anthropic.com/en/docs/claude-code/quickstart) installed:\n\n```shell\nnpm install -g @anthropic-ai/claude-code\n```\n\nThen, install Claude Code Router:\n\n```shell\nnpm install -g @musistudio/claude-code-router\n```\n\n### 2. Configuration\n\nCreate and configure your `~/.claude-code-router/config.json` file. For more details, you can refer to `config.example.json`.\n\nThe `config.json` file has several key sections:\n\n- **`PROXY_URL`** (optional): You can set a proxy for API requests, for example: `\"PROXY_URL\": \"http://127.0.0.1:7890\"`.\n- **`LOG`** (optional): You can enable logging by setting it to `true`. When set to `false`, no log files will be created. Default is `true`.\n- **`LOG_LEVEL`** (optional): Set the logging level. Available options are: `\"fatal\"`, `\"error\"`, `\"warn\"`, `\"info\"`, `\"debug\"`, `\"trace\"`. Default is `\"debug\"`.\n- **Logging Systems**: The Claude Code Router uses two separate logging systems:\n  - **Server-level logs**: HTTP requests, API calls, and server events are logged using pino in the `~/.claude-code-router/logs/` directory with filenames like `ccr-*.log`\n  - **Application-level logs**: Routing decisions and business logic events are logged in `~/.claude-code-router/claude-code-router.log`\n- **`APIKEY`** (optional): You can set a secret key to authenticate requests. When set, clients must provide this key in the `Authorization` header (e.g., `Bearer your-secret-key`) or the `x-api-key` header. Example: `\"APIKEY\": \"your-secret-key\"`.\n- **`HOST`** (optional): You can set the host address for the server. If `APIKEY` is not set, the host will be forced to `127.0.0.1` for security reasons to prevent unauthorized access. Example: `\"HOST\": \"0.0.0.0\"`.\n- **`NON_INTERACTIVE_MODE`** (optional): When set to `true`, enables compatibility with non-interactive environments like GitHub Actions, Docker containers, or other CI/CD systems. This sets appropriate environment variables (`CI=true`, `FORCE_COLOR=0`, etc.) and configures stdin handling to prevent the process from hanging in automated environments. Example: `\"NON_INTERACTIVE_MODE\": true`.\n\n- **`Providers`**: Used to configure different model providers.\n- **`Router`**: Used to set up routing rules. `default` specifies the default model, which will be used for all requests if no other route is configured.\n- **`API_TIMEOUT_MS`**: Specifies the timeout for API calls in milliseconds.\n\n#### Environment Variable Interpolation\n\nClaude Code Router supports environment variable interpolation for secure API key management. You can reference environment variables in your `config.json` using either `$VAR_NAME` or `${VAR_NAME}` syntax:\n\n```json\n{\n  \"OPENAI_API_KEY\": \"$OPENAI_API_KEY\",\n  \"GEMINI_API_KEY\": \"${GEMINI_API_KEY}\",\n  \"Providers\": [\n    {\n      \"name\": \"openai\",\n      \"api_base_url\": \"https://api.openai.com/v1/chat/completions\",\n      \"api_key\": \"$OPENAI_API_KEY\",\n      \"models\": [\"gpt-5\", \"gpt-5-mini\"]\n    }\n  ]\n}\n```\n\nThis allows you to keep sensitive API keys in environment variables instead of hardcoding them in configuration files. The interpolation works recursively through nested objects and arrays.\n\nHere is a comprehensive example:\n\n```json\n{\n  \"APIKEY\": \"your-secret-key\",\n  \"PROXY_URL\": \"http://127.0.0.1:7890\",\n  \"LOG\": true,\n  \"API_TIMEOUT_MS\": 600000,\n  \"NON_INTERACTIVE_MODE\": false,\n  \"Providers\": [\n    {\n      \"name\": \"openrouter\",\n      \"api_base_url\": \"https://openrouter.ai/api/v1/chat/completions\",\n      \"api_key\": \"sk-xxx\",\n      \"models\": [\n        \"google/gemini-2.5-pro-preview\",\n        \"anthropic/claude-sonnet-4\",\n        \"anthropic/claude-3.5-sonnet\",\n        \"anthropic/claude-3.7-sonnet:thinking\"\n      ],\n      \"transformer\": {\n        \"use\": [\"openrouter\"]\n      }\n    },\n    {\n      \"name\": \"deepseek\",\n      \"api_base_url\": \"https://api.deepseek.com/chat/completions\",\n      \"api_key\": \"sk-xxx\",\n      \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"],\n      \"transformer\": {\n        \"use\": [\"deepseek\"],\n        \"deepseek-chat\": {\n          \"use\": [\"tooluse\"]\n        }\n      }\n    },\n    {\n      \"name\": \"ollama\",\n      \"api_base_url\": \"http://localhost:11434/v1/chat/completions\",\n      \"api_key\": \"ollama\",\n      \"models\": [\"qwen2.5-coder:latest\"]\n    },\n    {\n      \"name\": \"gemini\",\n      \"api_base_url\": \"https://generativelanguage.googleapis.com/v1beta/models/\",\n      \"api_key\": \"sk-xxx\",\n      \"models\": [\"gemini-2.5-flash\", \"gemini-2.5-pro\"],\n      \"transformer\": {\n        \"use\": [\"gemini\"]\n      }\n    },\n    {\n      \"name\": \"volcengine\",\n      \"api_base_url\": \"https://ark.cn-beijing.volces.com/api/v3/chat/completions\",\n      \"api_key\": \"sk-xxx\",\n      \"models\": [\"deepseek-v3-250324\", \"deepseek-r1-250528\"],\n      \"transformer\": {\n        \"use\": [\"deepseek\"]\n      }\n    },\n    {\n      \"name\": \"modelscope\",\n      \"api_base_url\": \"https://api-inference.modelscope.cn/v1/chat/completions\",\n      \"api_key\": \"\",\n      \"models\": [\"Qwen/Qwen3-Coder-480B-A35B-Instruct\", \"Qwen/Qwen3-235B-A22B-Thinking-2507\"],\n      \"transformer\": {\n        \"use\": [\n          [\n            \"maxtoken\",\n            {\n              \"max_tokens\": 65536\n            }\n          ],\n          \"enhancetool\"\n        ],\n        \"Qwen/Qwen3-235B-A22B-Thinking-2507\": {\n          \"use\": [\"reasoning\"]\n        }\n      }\n    },\n    {\n      \"name\": \"dashscope\",\n      \"api_base_url\": \"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions\",\n      \"api_key\": \"\",\n      \"models\": [\"qwen3-coder-plus\"],\n      \"transformer\": {\n        \"use\": [\n          [\n            \"maxtoken\",\n            {\n              \"max_tokens\": 65536\n            }\n          ],\n          \"enhancetool\"\n        ]\n      }\n    },\n    {\n      \"name\": \"aihubmix\",\n      \"api_base_url\": \"https://aihubmix.com/v1/chat/completions\",\n      \"api_key\": \"sk-\",\n      \"models\": [\n        \"Z/glm-4.5\",\n        \"claude-opus-4-20250514\",\n        \"gemini-2.5-pro\"\n      ]\n    }\n  ],\n  \"Router\": {\n    \"default\": \"deepseek,deepseek-chat\",\n    \"background\": \"ollama,qwen2.5-coder:latest\",\n    \"think\": \"deepseek,deepseek-reasoner\",\n    \"longContext\": \"openrouter,google/gemini-2.5-pro-preview\",\n    \"longContextThreshold\": 60000,\n    \"webSearch\": \"gemini,gemini-2.5-flash\"\n  }\n}\n```\n\n### 3. Running Claude Code with the Router\n\nStart Claude Code using the router:\n\n```shell\nccr code\n```\n\n\u003e **Note**: After modifying the configuration file, you need to restart the service for the changes to take effect:\n\u003e\n\u003e ```shell\n\u003e ccr restart\n\u003e ```\n\n### 4. UI Mode\n\nFor a more intuitive experience, you can use the UI mode to manage your configuration:\n\n```shell\nccr ui\n```\n\nThis will open a web-based interface where you can easily view and edit your `config.json` file.\n\n![UI](/blog/images/ui.png)\n\n#### Providers\n\nThe `Providers` array is where you define the different model providers you want to use. Each provider object requires:\n\n- `name`: A unique name for the provider.\n- `api_base_url`: The full API endpoint for chat completions.\n- `api_key`: Your API key for the provider.\n- `models`: A list of model names available from this provider.\n- `transformer` (optional): Specifies transformers to process requests and responses.\n\n#### Transformers\n\nTransformers allow you to modify the request and response payloads to ensure compatibility with different provider APIs.\n\n- **Global Transformer**: Apply a transformer to all models from a provider. In this example, the `openrouter` transformer is applied to all models under the `openrouter` provider.\n  ```json\n  {\n    \"name\": \"openrouter\",\n    \"api_base_url\": \"https://openrouter.ai/api/v1/chat/completions\",\n    \"api_key\": \"sk-xxx\",\n    \"models\": [\n      \"google/gemini-2.5-pro-preview\",\n      \"anthropic/claude-sonnet-4\",\n      \"anthropic/claude-3.5-sonnet\"\n    ],\n    \"transformer\": { \"use\": [\"openrouter\"] }\n  }\n  ```\n- **Model-Specific Transformer**: Apply a transformer to a specific model. In this example, the `deepseek` transformer is applied to all models, and an additional `tooluse` transformer is applied only to the `deepseek-chat` model.\n\n  ```json\n  {\n    \"name\": \"deepseek\",\n    \"api_base_url\": \"https://api.deepseek.com/chat/completions\",\n    \"api_key\": \"sk-xxx\",\n    \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"],\n    \"transformer\": {\n      \"use\": [\"deepseek\"],\n      \"deepseek-chat\": { \"use\": [\"tooluse\"] }\n    }\n  }\n  ```\n\n- **Passing Options to a Transformer**: Some transformers, like `maxtoken`, accept options. To pass options, use a nested array where the first element is the transformer name and the second is an options object.\n  ```json\n  {\n    \"name\": \"siliconflow\",\n    \"api_base_url\": \"https://api.siliconflow.cn/v1/chat/completions\",\n    \"api_key\": \"sk-xxx\",\n    \"models\": [\"moonshotai/Kimi-K2-Instruct\"],\n    \"transformer\": {\n      \"use\": [\n        [\n          \"maxtoken\",\n          {\n            \"max_tokens\": 16384\n          }\n        ]\n      ]\n    }\n  }\n  ```\n\n**Available Built-in Transformers:**\n\n- `Anthropic`:If you use only the `Anthropic` transformer, it will preserve the original request and response parameters(you can use it to connect directly to an Anthropic endpoint).\n- `deepseek`: Adapts requests/responses for DeepSeek API.\n- `gemini`: Adapts requests/responses for Gemini API.\n- `openrouter`: Adapts requests/responses for OpenRouter API. It can also accept a `provider` routing parameter to specify which underlying providers OpenRouter should use. For more details, refer to the [OpenRouter documentation](https://openrouter.ai/docs/features/provider-routing). See an example below:\n  ```json\n    \"transformer\": {\n      \"use\": [\"openrouter\"],\n      \"moonshotai/kimi-k2\": {\n        \"use\": [\n          [\n            \"openrouter\",\n            {\n              \"provider\": {\n                \"only\": [\"moonshotai/fp8\"]\n              }\n            }\n          ]\n        ]\n      }\n    }\n  ```\n- `groq`: Adapts requests/responses for groq API.\n- `maxtoken`: Sets a specific `max_tokens` value.\n- `tooluse`: Optimizes tool usage for certain models via `tool_choice`.\n- `gemini-cli` (experimental): Unofficial support for Gemini via Gemini CLI [gemini-cli.js](https://gist.github.com/musistudio/1c13a65f35916a7ab690649d3df8d1cd).\n- `reasoning`: Used to process the `reasoning_content` field.\n- `sampling`: Used to process sampling information fields such as `temperature`, `top_p`, `top_k`, and `repetition_penalty`.\n- `enhancetool`: Adds a layer of error tolerance to the tool call parameters returned by the LLM (this will cause the tool call information to no longer be streamed).\n- `cleancache`: Clears the `cache_control` field from requests.\n- `vertex-gemini`: Handles the Gemini API using Vertex authentication.\n- `qwen-cli` (experimental): Unofficial support for qwen3-coder-plus model via Qwen CLI [qwen-cli.js](https://gist.github.com/musistudio/f5a67841ced39912fd99e42200d5ca8b).\n- `rovo-cli` (experimental): Unofficial support for gpt-5 via Atlassian Rovo Dev CLI [rovo-cli.js](https://gist.github.com/SaseQ/c2a20a38b11276537ec5332d1f7a5e53).\n\n**Custom Transformers:**\n\nYou can also create your own transformers and load them via the `transformers` field in `config.json`.\n\n```json\n{\n  \"transformers\": [\n    {\n      \"path\": \"/User/xxx/.claude-code-router/plugins/gemini-cli.js\",\n      \"options\": {\n        \"project\": \"xxx\"\n      }\n    }\n  ]\n}\n```\n\n#### Router\n\nThe `Router` object defines which model to use for different scenarios:\n\n- `default`: The default model for general tasks.\n- `background`: A model for background tasks. This can be a smaller, local model to save costs.\n- `think`: A model for reasoning-heavy tasks, like Plan Mode.\n- `longContext`: A model for handling long contexts (e.g., \u003e 60K tokens).\n- `longContextThreshold` (optional): The token count threshold for triggering the long context model. Defaults to 60000 if not specified.\n- `webSearch`: Used for handling web search tasks and this requires the model itself to support the feature. If you're using openrouter, you need to add the `:online` suffix after the model name.\n\nYou can also switch models dynamically in Claude Code with the `/model` command:\n`/model provider_name,model_name`\nExample: `/model openrouter,anthropic/claude-3.5-sonnet`\n\n#### Custom Router\n\nFor more advanced routing logic, you can specify a custom router script via the `CUSTOM_ROUTER_PATH` in your `config.json`. This allows you to implement complex routing rules beyond the default scenarios.\n\nIn your `config.json`:\n\n```json\n{\n  \"CUSTOM_ROUTER_PATH\": \"/User/xxx/.claude-code-router/custom-router.js\"\n}\n```\n\nThe custom router file must be a JavaScript module that exports an `async` function. This function receives the request object and the config object as arguments and should return the provider and model name as a string (e.g., `\"provider_name,model_name\"`), or `null` to fall back to the default router.\n\nHere is an example of a `custom-router.js` based on `custom-router.example.js`:\n\n```javascript\n// /User/xxx/.claude-code-router/custom-router.js\n\n/**\n * A custom router function to determine which model to use based on the request.\n *\n * @param {object} req - The request object from Claude Code, containing the request body.\n * @param {object} config - The application's config object.\n * @returns {Promise\u003cstring|null\u003e} - A promise that resolves to the \"provider,model_name\" string, or null to use the default router.\n */\nmodule.exports = async function router(req, config) {\n  const userMessage = req.body.messages.find((m) =\u003e m.role === \"user\")?.content;\n\n  if (userMessage \u0026\u0026 userMessage.includes(\"explain this code\")) {\n    // Use a powerful model for code explanation\n    return \"openrouter,anthropic/claude-3.5-sonnet\";\n  }\n\n  // Fallback to the default router configuration\n  return null;\n};\n```\n\n##### Subagent Routing\n\nFor routing within subagents, you must specify a particular provider and model by including `\u003cCCR-SUBAGENT-MODEL\u003eprovider,model\u003c/CCR-SUBAGENT-MODEL\u003e` at the **beginning** of the subagent's prompt. This allows you to direct specific subagent tasks to designated models.\n\n**Example:**\n\n```\n\u003cCCR-SUBAGENT-MODEL\u003eopenrouter,anthropic/claude-3.5-sonnet\u003c/CCR-SUBAGENT-MODEL\u003e\nPlease help me analyze this code snippet for potential optimizations...\n```\n\n## Status Line (Beta)\nTo better monitor the status of claude-code-router at runtime, version v1.0.40 includes a built-in statusline tool, which you can enable in the UI.\n![statusline-config.png](/blog/images/statusline-config.png)\n\nThe effect is as follows:\n![statusline](/blog/images/statusline.png)\n\n## 🤖 GitHub Actions\n\nIntegrate Claude Code Router into your CI/CD pipeline. After setting up [Claude Code Actions](https://docs.anthropic.com/en/docs/claude-code/github-actions), modify your `.github/workflows/claude.yaml` to use the router:\n\n```yaml\nname: Claude Code\n\non:\n  issue_comment:\n    types: [created]\n  # ... other triggers\n\njobs:\n  claude:\n    if: |\n      (github.event_name == 'issue_comment' \u0026\u0026 contains(github.event.comment.body, '@claude')) ||\n      # ... other conditions\n    runs-on: ubuntu-latest\n    permissions:\n      contents: read\n      pull-requests: read\n      issues: read\n      id-token: write\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 1\n\n      - name: Prepare Environment\n        run: |\n          curl -fsSL https://bun.sh/install | bash\n          mkdir -p $HOME/.claude-code-router\n          cat \u003c\u003c 'EOF' \u003e $HOME/.claude-code-router/config.json\n          {\n            \"log\": true,\n            \"NON_INTERACTIVE_MODE\": true,\n            \"OPENAI_API_KEY\": \"${{ secrets.OPENAI_API_KEY }}\",\n            \"OPENAI_BASE_URL\": \"https://api.deepseek.com\",\n            \"OPENAI_MODEL\": \"deepseek-chat\"\n          }\n          EOF\n        shell: bash\n\n      - name: Start Claude Code Router\n        run: |\n          nohup ~/.bun/bin/bunx @musistudio/claude-code-router@1.0.8 start \u0026\n        shell: bash\n\n      - name: Run Claude Code\n        id: claude\n        uses: anthropics/claude-code-action@beta\n        env:\n          ANTHROPIC_BASE_URL: http://localhost:3456\n        with:\n          anthropic_api_key: \"any-string-is-ok\"\n```\n\n\u003e **Note**: When running in GitHub Actions or other automation environments, make sure to set `\"NON_INTERACTIVE_MODE\": true` in your configuration to prevent the process from hanging due to stdin handling issues.\n\nThis setup allows for interesting automations, like running tasks during off-peak hours to reduce API costs.\n\n## 📝 Further Reading\n\n- [Project Motivation and How It Works](blog/en/project-motivation-and-how-it-works.md)\n- [Maybe We Can Do More with the Router](blog/en/maybe-we-can-do-more-with-the-route.md)\n\n## ❤️ Support \u0026 Sponsoring\n\nIf you find this project helpful, please consider sponsoring its development. Your support is greatly appreciated!\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/F1F31GN2GM)\n\n[Paypal](https://paypal.me/musistudio1999)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"/blog/images/alipay.jpg\" width=\"200\" alt=\"Alipay\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"/blog/images/wechat.jpg\" width=\"200\" alt=\"WeChat Pay\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Our Sponsors\n\nA huge thank you to all our sponsors for their generous support!\n\n\n- [AIHubmix](https://aihubmix.com/)\n- [BurnCloud](https://ai.burncloud.com)\n- @Simon Leischnig\n- [@duanshuaimin](https://github.com/duanshuaimin)\n- [@vrgitadmin](https://github.com/vrgitadmin)\n- @\\*o\n- [@ceilwoo](https://github.com/ceilwoo)\n- @\\*说\n- @\\*更\n- @K\\*g\n- @R\\*R\n- [@bobleer](https://github.com/bobleer)\n- @\\*苗\n- @\\*划\n- [@Clarence-pan](https://github.com/Clarence-pan)\n- [@carter003](https://github.com/carter003)\n- @S\\*r\n- @\\*晖\n- @\\*敏\n- @Z\\*z\n- @\\*然\n- [@cluic](https://github.com/cluic)\n- @\\*苗\n- [@PromptExpert](https://github.com/PromptExpert)\n- @\\*应\n- [@yusnake](https://github.com/yusnake)\n- @\\*飞\n- @董\\*\n- @\\*汀\n- @\\*涯\n- @\\*:-）\n- @\\*\\*磊\n- @\\*琢\n- @\\*成\n- @Z\\*o\n- @\\*琨\n- [@congzhangzh](https://github.com/congzhangzh)\n- @\\*\\_\n- @Z\\*m\n- @*鑫\n- @c\\*y\n- @\\*昕\n- [@witsice](https://github.com/witsice)\n- @b\\*g\n- @\\*亿\n- @\\*辉\n- @JACK \n- @\\*光\n- @W\\*l\n- [@kesku](https://github.com/kesku)\n- [@biguncle](https://github.com/biguncle)\n- @二吉吉\n- @a\\*g\n- @\\*林\n- @\\*咸\n- @\\*明\n- @S\\*y\n- @f\\*o\n- @\\*智\n- @F\\*t\n- @r\\*c\n- [@qierkang](http://github.com/qierkang)\n- @\\*军\n- [@snrise-z](http://github.com/snrise-z)\n\n(If your name is masked, please contact me via my homepage email to update it with your GitHub username.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmusistudio%2Fclaude-code-router","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmusistudio%2Fclaude-code-router","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmusistudio%2Fclaude-code-router/lists"}