为了方便接入多家 CLI 供应商(主要是CC、Codex)vibe了一个极简的返代软件 Clipal

Clipal:意思是 CLI 的伙伴

lansespirit/Clipal

项目是go语言的,直接编译成二进制文件,没有界面,直接yaml文件配置,方便后台静默运行。

功能特性

  • 多 API 供应商配置,支持优先级排序,直接在配置文件定义供应商权重,我主要是为了排序高性价比的中转商

  • 自动故障转移:当前供应商失败时自动切换到下一个

  • Provider 临时禁用:鉴权/额度错误会自动 deactivate,并按 reactivate_after 自动恢复

  • 配置热加载:更新 claude-code.yaml / codex.yaml / gemini.yaml 后自动重新加载并重新验证

  • 按日志级别输出运行日志(DEBUG/INFO/WARN/ERROR)

  • 三套独立配置文件,分别服务于:

    • Claude Code (claude-code.yaml)

    • Codex CLI (codex.yaml)

    • Gemini CLI (gemini.yaml)

  • 跨平台支持:macOS、Linux、Windows

架构设计

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  Claude Code    │     │   Codex CLI     │     │   Gemini CLI    │
└────────┬────────┘     └────────┬────────┘     └────────┬────────┘
         │                       │                       │
         │ /claudecode           │ /codex                │ /gemini
         │                       │                       │
         └───────────────────────┼───────────────────────┘
                                 │
                                 ▼
┌─────────────────────────────────────────────────────────────────┐
│                    clipal (:3333)                               │
│                                                                 │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │                    HTTP Router                             │ │
│  │  /claudecode/*  →  claude-code.yaml providers              │ │
│  │  /codex/*       →  codex.yaml providers                    │ │
│  │  /gemini/*      →  gemini.yaml providers                   │ │
│  └───────────────────────────────────────────────────────────┘ │
│                              │                                  │
│                              ▼                                  │
│  ┌───────────────────────────────────────────────────────────┐ │
│  │              Endpoint Router (优先级调度)                  │ │
│  │         失败自动切换 → 下一优先级供应商                    │ │
│  └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
                               │
         ┌─────────────────────┼─────────────────────┐
         ▼                     ▼                     ▼
┌─────────────────┐   ┌─────────────────┐   ┌─────────────────┐
│  API Provider 1 │   │  API Provider 2 │   │  API Provider N │
│  (优先级: 1)    │   │  (优先级: 2)    │   │  (优先级: N)    │
└─────────────────┘   └─────────────────┘   └─────────────────┘

主要是看到咱们L站的佬友发的 【开源新版】[已支持CodeX] ccNexus: Claude Code专用,你的CC效率增强工具,多端点同时启用自动无感切换 - 资源荟萃 - LINUX DO

ccNexus其实很好用,只是我不需要界面和那些消息格式转换,所以就弄了个极简版本。

这样切换CC和Codex的API供应商就可以很丝滑了,基本无感,不用重启CC或者Codex了,Clipal热更新自动处理了。

对我这种买了很多中转商API的人来说很爽,不管packycode还是privnode,各有优势,当前还有一些公益的API,有时候也可以无感插入进来用,通过配置文件控制优先级就好了。

18 个赞

感谢大佬!

看到这个架构设计的图,我怀疑是用AI生成的,但是我没证据

2 个赞

看着跟code-switch-R项目挺类似

搜索了下,比我这个高级,和ccNexus一样,我这个算是极简版本,没有那么多功能。

明天试试佬这个

欢迎尝试,按照文档里的教程操作,非常方便

请教:切换不同供应商时,对不同的模型是否自动匹配,我看了你github里的配置例子,好像没提模型的配置选项。
如:
CC正在使用 a.com/api 模型:claude-sonnet-4.5
切换到 b.com/api 模型:gemini-3-pro
再切换到 c.com/api 模型:codex-5.1-code 时,需要在配置文件里配置对应的模型型号吗?会有问题吗?因为没有试过,没有经验,看见你提到不同供应商之间切换,很丝滑,能多聊几句你使用这个工具时切换的经验吗?

下面是我看到的examples/claude-code.yaml 的配置:

# Claude Code API providers configuration
# Providers are sorted by priority (lower number = higher priority)

providers:
  # Primary provider - Anthropic official API
  - name: "anthropic-direct"
    base_url: "https://api.anthropic.com"
    api_key: "sk-ant-xxx"
    priority: 1
    enabled: true

  # Fallback provider - OpenRouter
  - name: "openrouter"
    base_url: "https://openrouter.ai/api"
    api_key: "sk-or-xxx"
    priority: 2
    enabled: true

  # Backup provider (disabled by default)
  - name: "backup-provider"
    base_url: "https://backup.example.com"
    api_key: "sk-backup-xxx"
    priority: 3
    enabled: false

里面好像也没提到模型的设置,不同供应商都要有相同的模型型号吗?

佬这个项目也有自己特色 :tieba_013:

1 个赞

cc或者codex的供应商会自行处理格式和模型问题的,你调用的模型是 cc 来控制的,并不是clipal配置来控制。

举个例子,我有packycode和privnode两家的API,他们的cc和codex是不同端点的,cc端点是 https://privnode.com , codex端点是 https://privnode.com/v1 ,至于你指定的模型,例如我codex需要5.2 + high,直接在codex的配置里填写就可以,没有影响的。

codex的config.toml:

model = “gpt-5.2”
model_reasoning_effort=“high”
sandbox_mode=“danger-full-access”
windows_wsl_setup_acknowledged = true
approval_policy = “never”
web_search_request = true
model_provider = “clipal”

[model_providers.clipal]
name = “local”
base_url = “http://127.0.0.1:3333/codex”
wire_api = “responses”

Clipal的codex.yaml

Primary provider - OpenAI compatible API

name: “packyapi”
base_url: “https://www.packyapi.com/v1”
api_key: “sk-xxx”
priority: 1
enabled: true

Fallback provider

name: “privnode”
base_url: “https://privnode.com/v1”
api_key: “sk-or-xxx”
priority: 2
enabled: true

至于Claude code,是类似的,按照你API中转商的格式弄就行了,只是base_url要换成 http://127.0.0.1:3333/claudecode , 其他都和官方配置一样。

不知道这样说,是否好理解:)

clipal 只是无缝切换中转,还是用回自己原来的配置,这个明白了 …谢谢:folded_hands:

2 个赞

现在不是有gpt-5.2-codex 吗, 为什么选择5.2呢,另外是不是每次模型有更新这里要手动更新一下

我只是不喜欢-codex模型,觉得只会写代码,对需求理解能力不够好,就5.2了。

不过只是个配置啦,你也可以不配置,然后运行codex的时候手动选择model呀,都行的,看自己喜欢。

谢谢佬回复,我有点忘了这个config.toml里model是干啥的了,还以为我一直没有gpt-5.2-codex是因为model没设置

开发ccNexus的可是一位大牛,感谢佬友,已star

1 个赞