{"_id":"@alpaca-network/claude-code-router","_rev":"10-941a1319072575c83a66c8cb4fe78d50","name":"@alpaca-network/claude-code-router","dist-tags":{"latest":"1.0.9"},"versions":{"1.0.0":{"name":"@alpaca-network/claude-code-router","version":"1.0.0","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.0","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"6df243feb954253f5d0ba45b058a0db94ff9a13d","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.0.tgz","fileCount":12,"integrity":"sha512-fYjbNDCKYMAURu2U0jeOvFsja8ofQoE1ImFI9zASglq+TjCWauaCzmPsYJM8HZqe7yeeiFNgzRQQ+A9TIZ5RCQ==","signatures":[{"sig":"MEYCIQDtUrm0+mpVh9DvO2/O7jHRfWLEXiWYqkVtAKnJI/0hLQIhAPg2Dql20iIBOSPBMFKoBTg7+wWuvg5KTXlHVnBbJexK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9787194},"gitHead":"4617d66492cf37539d9567044f6ffec7844af2ee","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.0_1760235723671_0.8334362920671035","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alpaca-network/claude-code-router","version":"1.0.1","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.1","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"2c853846aaf63a9c6207ea27683da186ca680a87","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.1.tgz","fileCount":12,"integrity":"sha512-OOn2VNCQ4OP3K4QDdAnY4jF8WSrNp/HmJ16ddeLJV5dlFTGTPqwPtYDHaq+7vrmHbMLBtPvIt5QBAsLB5yQUtg==","signatures":[{"sig":"MEUCIHwYx5Eam4bPVENTY2A7UMv6ANlnnoaaDrI1SVcrPNtjAiEA2zR4WGAxAjEj8KR3VXh58MGDsfPQVH5xvkM1d+XNS0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9787210},"gitHead":"4617d66492cf37539d9567044f6ffec7844af2ee","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.1_1760236334655_0.04768921921487057","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@alpaca-network/claude-code-router","version":"1.0.2","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.2","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"8b00bb7ccf81d0f1dd2f76a984255c1f2f24d9a2","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.2.tgz","fileCount":12,"integrity":"sha512-YFHGsg7pWp/lfboZXmxdZ42XG3q2geLcHALZg6kMDPoo47Z7I3ukedp0XiiDtkDh8PxO7/4Awr+J6bTZR+TRSw==","signatures":[{"sig":"MEYCIQCWdP0rK0hUAnTEmRq0KcW9h2/9a3KTsTrVEO/1eNvdgQIhALJGrLBGOuFXCRvi//1sb6BQ+Rnj/Izh8ZmCmFrfY1PF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9787210},"gitHead":"4617d66492cf37539d9567044f6ffec7844af2ee","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.2_1760238464792_0.8355656679294365","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@alpaca-network/claude-code-router","version":"1.0.3","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.3","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"112101934e6eeecf6a55b0708066d77ab2906bcf","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.3.tgz","fileCount":12,"integrity":"sha512-2CCoMj2LDuWySTSKuwpBLYj/Sm/kbyUtG6l0sbXbF6pLsON/E+iNEWjwGy+4qdXAh/68A+k+WXpnSuAJcS/1Ng==","signatures":[{"sig":"MEUCIH06Keu0+b4S9osc5K0Og9t6PG1v6LIgpi6bO6jBrQzMAiEA1Zb1hqeqQHtjVN6tm0TCfz+zHNE9iG8Uc1y0cxNiZQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9788092},"gitHead":"4617d66492cf37539d9567044f6ffec7844af2ee","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.3_1760241166642_0.3811377215001648","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@alpaca-network/claude-code-router","version":"1.0.4","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.4","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"23252c3cde4646644792c90af9bc9d7f8f47313d","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.4.tgz","fileCount":12,"integrity":"sha512-pPFgUx8LuD7KcBIVwS7WWDFaDYO691FbctfnT0XHuqx1nVuET93dyQAlhnpyuBaM+suV5po+CdJGCMi5j6SwHA==","signatures":[{"sig":"MEUCIEhVchCCHU287YCxF8Wr3vaUdKXAh7G37YaksmY6FyqAAiEA+ARG8lWJz5EtDT1b8YX57229be61OA4fCKS0ZLZi7j0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9788523},"gitHead":"4617d66492cf37539d9567044f6ffec7844af2ee","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.4_1760241400014_0.5501600156014375","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@alpaca-network/claude-code-router","version":"1.0.5","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.5","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"3c02f86c7d046083e93e21aad29dfbcfafccefee","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.5.tgz","fileCount":12,"integrity":"sha512-DCuQf593TOCFXAaYrTZApmUJKBM4xY6Z/7GFIq2WAnqZ+aagIvQRGWW5Yj3V/JPHdJROrNDl9CGCE97+J1B3lw==","signatures":[{"sig":"MEYCIQDpabsod2DC/jY++1BPtYG71TtD+dnw92wHSsV3sNCTbwIhAODNxVDYF/Xp2po4BX4AznBVaJ1UC012C0nj/Yu8jxYO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9788874},"gitHead":"4617d66492cf37539d9567044f6ffec7844af2ee","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.5_1760242197398_0.5969350098808288","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@alpaca-network/claude-code-router","version":"1.0.6","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.6","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"7b5512dce4e95f579b95bd736efcf0240eea7fa7","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.6.tgz","fileCount":12,"integrity":"sha512-i/yNwlN96mHecQ6ZaYk3MHJ5hAcEiHjUzrWnUFYeNFr+4eSA4IdBquU8vzioBy5fBChGriM36CHPua1VCk0R/g==","signatures":[{"sig":"MEQCIDTuLjiGRQ6LF0alQ4Lotw6CvVlsGBit2CSxVAz6QQFyAiAP7k8j7YkOAKzzt1EOfR+z2KBUAudhF+tTpxApu7xREw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9788874},"gitHead":"aea11ca192720b96a588c749d14dc9168850b302","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.6_1760282065198_0.8530751548917024","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@alpaca-network/claude-code-router","version":"1.0.7","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.7","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"e630c42926c6016997e53ff557d529b60bdf751a","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.7.tgz","fileCount":12,"integrity":"sha512-4HkKnQRXd66OYaRIDcJwefhRfqtsRczLEkULkFo7BOO0nEBTYZCAj8yjIdlesXPI+eneP+dL62F5+vqiz8ww3Q==","signatures":[{"sig":"MEUCICZobjaj9MI1XtcB1g2C0h1AnGP0gTTCL5XNtEJ9s9LSAiEA4Iuu7LCoUSjpSjg6gp8AsaBr+1bpVl+HioBE7sSUHzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9791584},"gitHead":"8b1fb6801401f90d82f8dd8dce6551e8b5a50d34","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.7_1760309421871_0.06996622209220416","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@alpaca-network/claude-code-router","version":"1.0.8","keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","_id":"@alpaca-network/claude-code-router@1.0.8","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"bin":{"ccr":"dist/cli.js"},"dist":{"shasum":"320292eaf50dec369d46e8d320cae019c005c8d7","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.8.tgz","fileCount":12,"integrity":"sha512-wdUMKLLspR1bD7yEWh7La0n37291O8RmE8zUsO08ffXCOQyPIBd5rfL91TjF4j/zpvdvzt7Kh2JaJQXLzqd9Ig==","signatures":[{"sig":"MEQCIANPyDwCjRMVsGFVBvbRNqFvSENcfliq5Io2S15Z2Su5AiBzS+VyrQolzOdJ4ZNftwVlmqUZZtNNQz/v+U2XMTvJeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9791582},"gitHead":"8b1fb6801401f90d82f8dd8dce6551e8b5a50d34","scripts":{"build":"node scripts/build.js","release":"npm run build && npm publish"},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"_npmVersion":"10.9.3","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","directories":{},"_nodeVersion":"22.20.0","dependencies":{"uuid":"^11.1.0","json5":"^2.2.3","dotenv":"^16.4.7","openurl":"^1.1.1","minimist":"^1.2.8","tiktoken":"^1.0.21","lru-cache":"^11.2.2","shell-quote":"^1.8.3","find-process":"^2.0.0","@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","rotating-file-stream":"^3.2.7"},"publishConfig":{"ignore":["!build/","src/","screenshots/"]},"_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","esbuild":"^0.25.1","fastify":"^5.4.0","typescript":"^5.8.2","@types/node":"^24.0.15"},"_npmOperationalInternal":{"tmp":"tmp/claude-code-router_1.0.8_1760364413330_0.4647492107094455","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@alpaca-network/claude-code-router","version":"1.0.9","description":"Use Claude Code without an Anthropics account and route it to another LLM provider","bin":{"ccr":"dist/cli.js"},"scripts":{"build":"node scripts/build.js"},"keywords":["claude","code","router","llm","anthropic"],"author":{"name":"musistudio"},"license":"MIT","dependencies":{"@fastify/static":"^8.2.0","@musistudio/llms":"^1.0.36","@inquirer/prompts":"^5.0.0","dotenv":"^16.4.7","find-process":"^2.0.0","json5":"^2.2.3","lru-cache":"^11.2.2","minimist":"^1.2.8","openurl":"^1.1.1","rotating-file-stream":"^3.2.7","shell-quote":"^1.8.3","tiktoken":"^1.0.21","uuid":"^11.1.0"},"devDependencies":{"@types/node":"^24.0.15","esbuild":"^0.25.1","fastify":"^5.4.0","shx":"^0.4.0","typescript":"^5.8.2"},"_id":"@alpaca-network/claude-code-router@1.0.9","gitHead":"5a348ee39ea019510141b5e514ef6319484cb6a9","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-Fd3Bt0QxIYH1kaxedVSP0K1f0YJLRek8XvkCxaotWM+bdaW18eIavUXnQQ0OzVmHaddWk6HwxWLujrVIBwzr4g==","shasum":"46cbd1ec07f5c65017b3569fed1cd0779477d512","tarball":"https://registry.npmjs.org/@alpaca-network/claude-code-router/-/claude-code-router-1.0.9.tgz","fileCount":6,"unpackedSize":9770114,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDpxA1+k1JZAIDr7DnjscaVHKcDSD2uFWe3R8Tc4wFx8AiEApky+TtB8bYnd2nKwELAag7Ei83q83qRLzrdRow8N2P0="}]},"_npmUser":{"name":"vondragon","email":"v@ug.hn"},"directories":{},"maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/claude-code-router_1.0.9_1760457958687_0.20761537762425863"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-12T02:22:03.610Z","modified":"2025-10-14T16:05:59.151Z","1.0.0":"2025-10-12T02:22:03.976Z","1.0.1":"2025-10-12T02:32:14.990Z","1.0.2":"2025-10-12T03:07:45.075Z","1.0.3":"2025-10-12T03:52:46.918Z","1.0.4":"2025-10-12T03:56:40.338Z","1.0.5":"2025-10-12T04:09:57.693Z","1.0.6":"2025-10-12T15:14:25.414Z","1.0.7":"2025-10-12T22:50:22.136Z","1.0.8":"2025-10-13T14:06:53.594Z","1.0.9":"2025-10-14T16:05:58.910Z"},"author":{"name":"musistudio"},"license":"MIT","keywords":["claude","code","router","llm","anthropic"],"description":"Use Claude Code without an Anthropics account and route it to another LLM provider","maintainers":[{"name":"vondragon","email":"v@ug.hn"}],"readme":"![](blog/images/claude-code-router-img.png)\r\n\r\n[![](https://img.shields.io/badge/%F0%9F%87%A8%F0%9F%87%B3-%E4%B8%AD%E6%96%87%E7%89%88-ff0000?style=flat)](README_zh.md)\r\n[![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?&logo=discord&logoColor=white)](https://discord.gg/rdftVMaUcS)\r\n[![](https://img.shields.io/github/license/musistudio/claude-code-router)](https://github.com/musistudio/claude-code-router/blob/main/LICENSE)\r\n\r\n<hr>\r\n\r\n> I am currently seeking **Agent development related job opportunities**, either **based in Hangzhou** or **remote**. If you are interested in my projects or have suitable opportunities, feel free to reach out! 📧 Email: m@musiiot.top\r\n\r\n> A powerful tool to route Claude Code requests to different models and customize any request.\r\n\r\n> 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).     \r\n> 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.      \r\n> If you’d like a better experience, you can try [iFlow CLI](https://cli.iflow.cn).\r\n\r\n![](blog/images/claude-code.png)\r\n\r\n![](blog/images/roadmap.svg)\r\n\r\n## ✨ Features\r\n\r\n- **Model Routing**: Route requests to different models based on your needs (e.g., background tasks, thinking, long context).\r\n- **Multi-Provider Support**: Supports various model providers like OpenRouter, DeepSeek, Ollama, Gemini, Volcengine, and SiliconFlow.\r\n- **Request/Response Transformation**: Customize requests and responses for different providers using transformers.\r\n- **Dynamic Model Switching**: Switch models on-the-fly within Claude Code using the `/model` command.\r\n- **GitHub Actions Integration**: Trigger Claude Code tasks in your GitHub workflows.\r\n- **Plugin System**: Extend functionality with custom transformers.\r\n\r\n## 🚀 Getting Started\r\n\r\n### 1. Installation\r\n\r\nFirst, ensure you have [Claude Code](https://docs.anthropic.com/en/docs/claude-code/quickstart) installed:\r\n\r\n```shell\r\nnpm install -g @anthropic-ai/claude-code\r\n```\r\n\r\nThen, install Claude Code Router:\r\n\r\n```shell\r\nnpm install -g @alpaca-network/claude-code-router\r\n```\r\n\r\n### 2. Configuration\r\n\r\nCreate and configure your `~/.claude-code-router/config.json` file. For more details, you can refer to `config.example.json`.\r\n\r\nThe `config.json` file has several key sections:\r\n\r\n- **`PROXY_URL`** (optional): You can set a proxy for API requests, for example: `\"PROXY_URL\": \"http://127.0.0.1:7890\"`.\r\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`.\r\n- **`LOG_LEVEL`** (optional): Set the logging level. Available options are: `\"fatal\"`, `\"error\"`, `\"warn\"`, `\"info\"`, `\"debug\"`, `\"trace\"`. Default is `\"debug\"`.\r\n- **Logging Systems**: The Claude Code Router uses two separate logging systems:\r\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`\r\n  - **Application-level logs**: Routing decisions and business logic events are logged in `~/.claude-code-router/claude-code-router.log`\r\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\"`.\r\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\"`.\r\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`.\r\n\r\n- **`Providers`**: Used to configure different model providers.\r\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.\r\n- **`API_TIMEOUT_MS`**: Specifies the timeout for API calls in milliseconds.\r\n\r\n#### Environment Variable Interpolation\r\n\r\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:\r\n\r\n```json\r\n{\r\n  \"OPENAI_API_KEY\": \"$OPENAI_API_KEY\",\r\n  \"GEMINI_API_KEY\": \"${GEMINI_API_KEY}\",\r\n  \"Providers\": [\r\n    {\r\n      \"name\": \"openai\",\r\n      \"api_base_url\": \"https://api.openai.com/v1/chat/completions\",\r\n      \"api_key\": \"$OPENAI_API_KEY\",\r\n      \"models\": [\"gpt-5\", \"gpt-5-mini\"]\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\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.\r\n\r\nHere is a comprehensive example:\r\n\r\n```json\r\n{\r\n  \"APIKEY\": \"your-secret-key\",\r\n  \"PROXY_URL\": \"http://127.0.0.1:7890\",\r\n  \"LOG\": true,\r\n  \"API_TIMEOUT_MS\": 600000,\r\n  \"NON_INTERACTIVE_MODE\": false,\r\n  \"Providers\": [\r\n    {\r\n      \"name\": \"openrouter\",\r\n      \"api_base_url\": \"https://openrouter.ai/api/v1/chat/completions\",\r\n      \"api_key\": \"sk-xxx\",\r\n      \"models\": [\r\n        \"google/gemini-2.5-pro-preview\",\r\n        \"anthropic/claude-sonnet-4\",\r\n        \"anthropic/claude-3.5-sonnet\",\r\n        \"anthropic/claude-3.7-sonnet:thinking\"\r\n      ],\r\n      \"transformer\": {\r\n        \"use\": [\"openrouter\"]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"deepseek\",\r\n      \"api_base_url\": \"https://api.deepseek.com/chat/completions\",\r\n      \"api_key\": \"sk-xxx\",\r\n      \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"],\r\n      \"transformer\": {\r\n        \"use\": [\"deepseek\"],\r\n        \"deepseek-chat\": {\r\n          \"use\": [\"tooluse\"]\r\n        }\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"ollama\",\r\n      \"api_base_url\": \"http://localhost:11434/v1/chat/completions\",\r\n      \"api_key\": \"ollama\",\r\n      \"models\": [\"qwen2.5-coder:latest\"]\r\n    },\r\n    {\r\n      \"name\": \"gemini\",\r\n      \"api_base_url\": \"https://generativelanguage.googleapis.com/v1beta/models/\",\r\n      \"api_key\": \"sk-xxx\",\r\n      \"models\": [\"gemini-2.5-flash\", \"gemini-2.5-pro\"],\r\n      \"transformer\": {\r\n        \"use\": [\"gemini\"]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"volcengine\",\r\n      \"api_base_url\": \"https://ark.cn-beijing.volces.com/api/v3/chat/completions\",\r\n      \"api_key\": \"sk-xxx\",\r\n      \"models\": [\"deepseek-v3-250324\", \"deepseek-r1-250528\"],\r\n      \"transformer\": {\r\n        \"use\": [\"deepseek\"]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"modelscope\",\r\n      \"api_base_url\": \"https://api-inference.modelscope.cn/v1/chat/completions\",\r\n      \"api_key\": \"\",\r\n      \"models\": [\"Qwen/Qwen3-Coder-480B-A35B-Instruct\", \"Qwen/Qwen3-235B-A22B-Thinking-2507\"],\r\n      \"transformer\": {\r\n        \"use\": [\r\n          [\r\n            \"maxtoken\",\r\n            {\r\n              \"max_tokens\": 65536\r\n            }\r\n          ],\r\n          \"enhancetool\"\r\n        ],\r\n        \"Qwen/Qwen3-235B-A22B-Thinking-2507\": {\r\n          \"use\": [\"reasoning\"]\r\n        }\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"dashscope\",\r\n      \"api_base_url\": \"https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions\",\r\n      \"api_key\": \"\",\r\n      \"models\": [\"qwen3-coder-plus\"],\r\n      \"transformer\": {\r\n        \"use\": [\r\n          [\r\n            \"maxtoken\",\r\n            {\r\n              \"max_tokens\": 65536\r\n            }\r\n          ],\r\n          \"enhancetool\"\r\n        ]\r\n      }\r\n    },\r\n    {\r\n      \"name\": \"aihubmix\",\r\n      \"api_base_url\": \"https://aihubmix.com/v1/chat/completions\",\r\n      \"api_key\": \"sk-\",\r\n      \"models\": [\r\n        \"Z/glm-4.5\",\r\n        \"claude-opus-4-20250514\",\r\n        \"gemini-2.5-pro\"\r\n      ]\r\n    }\r\n  ],\r\n  \"Router\": {\r\n    \"default\": \"deepseek,deepseek-chat\",\r\n    \"background\": \"ollama,qwen2.5-coder:latest\",\r\n    \"think\": \"deepseek,deepseek-reasoner\",\r\n    \"longContext\": \"openrouter,google/gemini-2.5-pro-preview\",\r\n    \"longContextThreshold\": 60000,\r\n    \"webSearch\": \"gemini,gemini-2.5-flash\"\r\n  }\r\n}\r\n```\r\n\r\n### 3. Running Claude Code with the Router\r\n\r\nStart Claude Code using the router:\r\n\r\n```shell\r\nccr code\r\n```\r\n\r\n> **Note**: After modifying the configuration file, you need to restart the service for the changes to take effect:\r\n>\r\n> ```shell\r\n> ccr restart\r\n> ```\r\n\r\n### 4. UI Mode\r\n\r\nFor a more intuitive experience, you can use the UI mode to manage your configuration:\r\n\r\n```shell\r\nccr ui\r\n```\r\n\r\nThis will open a web-based interface where you can easily view and edit your `config.json` file.\r\n\r\n![UI](/blog/images/ui.png)\r\n\r\n#### Providers\r\n\r\nThe `Providers` array is where you define the different model providers you want to use. Each provider object requires:\r\n\r\n- `name`: A unique name for the provider.\r\n- `api_base_url`: The full API endpoint for chat completions.\r\n- `api_key`: Your API key for the provider.\r\n- `models`: A list of model names available from this provider.\r\n- `transformer` (optional): Specifies transformers to process requests and responses.\r\n\r\n#### Transformers\r\n\r\nTransformers allow you to modify the request and response payloads to ensure compatibility with different provider APIs.\r\n\r\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.\r\n  ```json\r\n  {\r\n    \"name\": \"openrouter\",\r\n    \"api_base_url\": \"https://openrouter.ai/api/v1/chat/completions\",\r\n    \"api_key\": \"sk-xxx\",\r\n    \"models\": [\r\n      \"google/gemini-2.5-pro-preview\",\r\n      \"anthropic/claude-sonnet-4\",\r\n      \"anthropic/claude-3.5-sonnet\"\r\n    ],\r\n    \"transformer\": { \"use\": [\"openrouter\"] }\r\n  }\r\n  ```\r\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.\r\n\r\n  ```json\r\n  {\r\n    \"name\": \"deepseek\",\r\n    \"api_base_url\": \"https://api.deepseek.com/chat/completions\",\r\n    \"api_key\": \"sk-xxx\",\r\n    \"models\": [\"deepseek-chat\", \"deepseek-reasoner\"],\r\n    \"transformer\": {\r\n      \"use\": [\"deepseek\"],\r\n      \"deepseek-chat\": { \"use\": [\"tooluse\"] }\r\n    }\r\n  }\r\n  ```\r\n\r\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.\r\n  ```json\r\n  {\r\n    \"name\": \"siliconflow\",\r\n    \"api_base_url\": \"https://api.siliconflow.cn/v1/chat/completions\",\r\n    \"api_key\": \"sk-xxx\",\r\n    \"models\": [\"moonshotai/Kimi-K2-Instruct\"],\r\n    \"transformer\": {\r\n      \"use\": [\r\n        [\r\n          \"maxtoken\",\r\n          {\r\n            \"max_tokens\": 16384\r\n          }\r\n        ]\r\n      ]\r\n    }\r\n  }\r\n  ```\r\n\r\n**Available Built-in Transformers:**\r\n\r\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).\r\n- `deepseek`: Adapts requests/responses for DeepSeek API.\r\n- `gemini`: Adapts requests/responses for Gemini API.\r\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:\r\n  ```json\r\n    \"transformer\": {\r\n      \"use\": [\"openrouter\"],\r\n      \"moonshotai/kimi-k2\": {\r\n        \"use\": [\r\n          [\r\n            \"openrouter\",\r\n            {\r\n              \"provider\": {\r\n                \"only\": [\"moonshotai/fp8\"]\r\n              }\r\n            }\r\n          ]\r\n        ]\r\n      }\r\n    }\r\n  ```\r\n- `groq`: Adapts requests/responses for groq API.\r\n- `maxtoken`: Sets a specific `max_tokens` value.\r\n- `tooluse`: Optimizes tool usage for certain models via `tool_choice`.\r\n- `gemini-cli` (experimental): Unofficial support for Gemini via Gemini CLI [gemini-cli.js](https://gist.github.com/musistudio/1c13a65f35916a7ab690649d3df8d1cd).\r\n- `reasoning`: Used to process the `reasoning_content` field.\r\n- `sampling`: Used to process sampling information fields such as `temperature`, `top_p`, `top_k`, and `repetition_penalty`.\r\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).\r\n- `cleancache`: Clears the `cache_control` field from requests.\r\n- `vertex-gemini`: Handles the Gemini API using Vertex authentication.\r\n- `chutes-glm` Unofficial support for GLM 4.5 model via Chutes [chutes-glm-transformer.js](https://gist.github.com/vitobotta/2be3f33722e05e8d4f9d2b0138b8c863).\r\n- `qwen-cli` (experimental): Unofficial support for qwen3-coder-plus model via Qwen CLI [qwen-cli.js](https://gist.github.com/musistudio/f5a67841ced39912fd99e42200d5ca8b).\r\n- `rovo-cli` (experimental): Unofficial support for gpt-5 via Atlassian Rovo Dev CLI [rovo-cli.js](https://gist.github.com/SaseQ/c2a20a38b11276537ec5332d1f7a5e53).\r\n\r\n**Custom Transformers:**\r\n\r\nYou can also create your own transformers and load them via the `transformers` field in `config.json`.\r\n\r\n```json\r\n{\r\n  \"transformers\": [\r\n    {\r\n      \"path\": \"/User/xxx/.claude-code-router/plugins/gemini-cli.js\",\r\n      \"options\": {\r\n        \"project\": \"xxx\"\r\n      }\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n#### Router\r\n\r\nThe `Router` object defines which model to use for different scenarios:\r\n\r\n- `default`: The default model for general tasks.\r\n- `background`: A model for background tasks. This can be a smaller, local model to save costs.\r\n- `think`: A model for reasoning-heavy tasks, like Plan Mode.\r\n- `longContext`: A model for handling long contexts (e.g., > 60K tokens).\r\n- `longContextThreshold` (optional): The token count threshold for triggering the long context model. Defaults to 60000 if not specified.\r\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.\r\n- `image` (beta): Used for handling image-related tasks (supported by CCR’s built-in agent). If the model does not support tool calling, you need to set the `config.forceUseImageAgent` property to `true`.\r\n\r\n- You can also switch models dynamically in Claude Code with the `/model` command:\r\n`/model provider_name,model_name`\r\nExample: `/model openrouter,anthropic/claude-3.5-sonnet`\r\n\r\n#### Custom Router\r\n\r\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.\r\n\r\nIn your `config.json`:\r\n\r\n```json\r\n{\r\n  \"CUSTOM_ROUTER_PATH\": \"/User/xxx/.claude-code-router/custom-router.js\"\r\n}\r\n```\r\n\r\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.\r\n\r\nHere is an example of a `custom-router.js` based on `custom-router.example.js`:\r\n\r\n```javascript\r\n// /User/xxx/.claude-code-router/custom-router.js\r\n\r\n/**\r\n * A custom router function to determine which model to use based on the request.\r\n *\r\n * @param {object} req - The request object from Claude Code, containing the request body.\r\n * @param {object} config - The application's config object.\r\n * @returns {Promise<string|null>} - A promise that resolves to the \"provider,model_name\" string, or null to use the default router.\r\n */\r\nmodule.exports = async function router(req, config) {\r\n  const userMessage = req.body.messages.find((m) => m.role === \"user\")?.content;\r\n\r\n  if (userMessage && userMessage.includes(\"explain this code\")) {\r\n    // Use a powerful model for code explanation\r\n    return \"openrouter,anthropic/claude-3.5-sonnet\";\r\n  }\r\n\r\n  // Fallback to the default router configuration\r\n  return null;\r\n};\r\n```\r\n\r\n##### Subagent Routing\r\n\r\nFor routing within subagents, you must specify a particular provider and model by including `<CCR-SUBAGENT-MODEL>provider,model</CCR-SUBAGENT-MODEL>` at the **beginning** of the subagent's prompt. This allows you to direct specific subagent tasks to designated models.\r\n\r\n**Example:**\r\n\r\n```\r\n<CCR-SUBAGENT-MODEL>openrouter,anthropic/claude-3.5-sonnet</CCR-SUBAGENT-MODEL>\r\nPlease help me analyze this code snippet for potential optimizations...\r\n```\r\n\r\n## Status Line (Beta)\r\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.\r\n![statusline-config.png](/blog/images/statusline-config.png)\r\n\r\nThe effect is as follows:\r\n![statusline](/blog/images/statusline.png)\r\n\r\n## 🤖 GitHub Actions\r\n\r\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:\r\n\r\n```yaml\r\nname: Claude Code\r\n\r\non:\r\n  issue_comment:\r\n    types: [created]\r\n  # ... other triggers\r\n\r\njobs:\r\n  claude:\r\n    if: |\r\n      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||\r\n      # ... other conditions\r\n    runs-on: ubuntu-latest\r\n    permissions:\r\n      contents: read\r\n      pull-requests: read\r\n      issues: read\r\n      id-token: write\r\n    steps:\r\n      - name: Checkout repository\r\n        uses: actions/checkout@v4\r\n        with:\r\n          fetch-depth: 1\r\n\r\n      - name: Prepare Environment\r\n        run: |\r\n          curl -fsSL https://bun.sh/install | bash\r\n          mkdir -p $HOME/.claude-code-router\r\n          cat << 'EOF' > $HOME/.claude-code-router/config.json\r\n          {\r\n            \"log\": true,\r\n            \"NON_INTERACTIVE_MODE\": true,\r\n            \"OPENAI_API_KEY\": \"${{ secrets.OPENAI_API_KEY }}\",\r\n            \"OPENAI_BASE_URL\": \"https://api.deepseek.com\",\r\n            \"OPENAI_MODEL\": \"deepseek-chat\"\r\n          }\r\n          EOF\r\n        shell: bash\r\n\r\n      - name: Start Claude Code Router\r\n        run: |\r\n          nohup ~/.bun/bin/bunx @alpaca-network/claude-code-router start &\r\n        shell: bash\r\n\r\n      - name: Run Claude Code\r\n        id: claude\r\n        uses: anthropics/claude-code-action@beta\r\n        env:\r\n          ANTHROPIC_BASE_URL: http://localhost:3456\r\n        with:\r\n          anthropic_api_key: \"any-string-is-ok\"\r\n```\r\n\r\n> **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.\r\n\r\nThis setup allows for interesting automations, like running tasks during off-peak hours to reduce API costs.\r\n\r\n## 📝 Further Reading\r\n\r\n- [Project Motivation and How It Works](blog/en/project-motivation-and-how-it-works.md)\r\n- [Maybe We Can Do More with the Router](blog/en/maybe-we-can-do-more-with-the-route.md)\r\n\r\n## ❤️ Support & Sponsoring\r\n\r\nIf you find this project helpful, please consider sponsoring its development. Your support is greatly appreciated!\r\n\r\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/F1F31GN2GM)\r\n\r\n[Paypal](https://paypal.me/musistudio1999)\r\n\r\n<table>\r\n  <tr>\r\n    <td><img src=\"/blog/images/alipay.jpg\" width=\"200\" alt=\"Alipay\" /></td>\r\n    <td><img src=\"/blog/images/wechat.jpg\" width=\"200\" alt=\"WeChat Pay\" /></td>\r\n  </tr>\r\n</table>\r\n\r\n### Our Sponsors\r\n\r\nA huge thank you to all our sponsors for their generous support!\r\n\r\n\r\n- [AIHubmix](https://aihubmix.com/)\r\n- [BurnCloud](https://ai.burncloud.com)\r\n- @Simon Leischnig\r\n- [@duanshuaimin](https://github.com/duanshuaimin)\r\n- [@vrgitadmin](https://github.com/vrgitadmin)\r\n- @\\*o\r\n- [@ceilwoo](https://github.com/ceilwoo)\r\n- @\\*说\r\n- @\\*更\r\n- @K\\*g\r\n- @R\\*R\r\n- [@bobleer](https://github.com/bobleer)\r\n- @\\*苗\r\n- @\\*划\r\n- [@Clarence-pan](https://github.com/Clarence-pan)\r\n- [@carter003](https://github.com/carter003)\r\n- @S\\*r\r\n- @\\*晖\r\n- @\\*敏\r\n- @Z\\*z\r\n- @\\*然\r\n- [@cluic](https://github.com/cluic)\r\n- @\\*苗\r\n- [@PromptExpert](https://github.com/PromptExpert)\r\n- @\\*应\r\n- [@yusnake](https://github.com/yusnake)\r\n- @\\*飞\r\n- @董\\*\r\n- @\\*汀\r\n- @\\*涯\r\n- @\\*:-）\r\n- @\\*\\*磊\r\n- @\\*琢\r\n- @\\*成\r\n- @Z\\*o\r\n- @\\*琨\r\n- [@congzhangzh](https://github.com/congzhangzh)\r\n- @\\*\\_\r\n- @Z\\*m\r\n- @*鑫\r\n- @c\\*y\r\n- @\\*昕\r\n- [@witsice](https://github.com/witsice)\r\n- @b\\*g\r\n- @\\*亿\r\n- @\\*辉\r\n- @JACK\r\n- @\\*光\r\n- @W\\*l\r\n- [@kesku](https://github.com/kesku)\r\n- [@biguncle](https://github.com/biguncle)\r\n- @二吉吉\r\n- @a\\*g\r\n- @\\*林\r\n- @\\*咸\r\n- @\\*明\r\n- @S\\*y\r\n- @f\\*o\r\n- @\\*智\r\n- @F\\*t\r\n- @r\\*c\r\n- [@qierkang](http://github.com/qierkang)\r\n- @\\*军\r\n- [@snrise-z](http://github.com/snrise-z)\r\n- @\\*王\r\n- [@greatheart1000](http://github.com/greatheart1000)\r\n- @\\*王\r\n- @zcutlip\r\n- [@Peng-YM](http://github.com/Peng-YM)\r\n- @\\*更\r\n- @\\*.\r\n- @F\\*t\r\n- @\\*政\r\n- @\\*铭\r\n- @\\*叶\r\n- @七\\*o\r\n- @\\*青\r\n- @\\*\\*晨\r\n- @\\*远\r\n- @\\*霄\r\n- @\\*\\*吉\r\n- @\\*\\*飞\r\n- @\\*\\*驰\r\n- @x\\*g\r\n\r\n(If your name is masked, please contact me via my homepage email to update it with your GitHub username.)\r\n","readmeFilename":"README.md"}