magpie:一个 127.0.0.1:3425 的本地网关,让 Claude Code、Codex 共用同一批模型和订阅
magpie 是 Go 写的本地网关加菜单栏应用,跑在 macOS、Windows、Linux 上(菜单栏、窗口、TUI、web UI、CLI 都有),也能进 Docker 和 Termux,MIT 许可。它要解决的事很具体:任意 agent 用上任意一家的模型或订阅,切换只需要在菜单栏点一下。
- 仓库:https://github.com/yetone/magpie
- 站点:https://usemagpie.ai
- 文档:https://usemagpie.ai/docs/start
- 插件:https://github.com/magpie-community/plugins
- 发布:https://github.com/yetone/magpie-releases
每个 agent 一套配置,订阅只在一个 agent 里能用
Claude Code、Codex、Gemini CLI、OpenCode 各有一份配置文件,格式不同,base URL 和 key 各写各的。你花钱买的订阅,登录状态只属于某一个 agent,别的 agent 拿不到。同一批模型被拆成几份互不相通的配置,换一次模型要翻几个文件。
magpie 把这些配置收到自己后面:模型列表只有一份,选中之后它去改 agent 配置文件里真正起作用的那一个 key。
网关:一个端口,四套协议互转
核心是 127.0.0.1:3425 上的本地网关,同时讲 OpenAI Chat、OpenAI Responses、Anthropic Messages 和 Gemini 四套协议,并在它们之间互转,streaming、tool calls、reasoning 都在转换范围内。只认 Anthropic Messages 的客户端,因此可以打到只提供 OpenAI Chat 的上游。任何接受 base URL 的客户端都能直接用:
export OPENAI_BASE_URL=http://127.0.0.1:3425/v1 OPENAI_API_KEY=magpie
export ANTHROPIC_BASE_URL=http://127.0.0.1:3425 ANTHROPIC_API_KEY=magpie
export GOOGLE_GEMINI_BASE_URL=http://127.0.0.1:3425 GEMINI_API_KEY=magpie
改配置只动一个 key
Agents 页面点一下当前模型,弹出可搜索列表,模型按 provider/model 命名。magpie 写 agent 配置是原子的,保留原有注释、顺序和格式,不是整份重写。Profiles 把每个 agent 的选择打包成一个名字(比如 Budget、Focus),一次切换全部生效。
Providers 用预设加 key:Anthropic、OpenAI、Gemini、Bedrock、DeepSeek、Kimi、GLM、Qwen、Groq、xAI、OpenRouter、Ollama、LM Studio,外加任意 OpenAI / Anthropic 兼容 URL。模型列表来自厂商,名称和 reasoning 等级用 models.dev 补齐;可以从 CC Switch、Claude Code、Codex、Alma 导入;每个 key、每个账号可以走各自的 proxy。
订阅这边,已登录的 agent 本身就是一个 provider,反供给其他 agent:Claude 走本地真实的 claude 二进制并通过 MCP 桥接工具,Codex/ChatGPT 套餐模型,GitHub Copilot、Gemini(Code Assist)、Antigravity(经 agy CLI)、Grok(SuperGrok),以及任意 OpenCode auth 插件或 npm 上的 pi 包。同一订阅下可以挂多个账号,额度用完自动换下一个。
magpie provider add deepseek sk-… # 预设只需 key
magpie claude deepseek/deepseek-v4-pro # Claude Code 跑在 DeepSeek 上
magpie codex moonshot/kimi-k2.5 # Codex 跑在 Kimi 上
magpie group add "Opus anywhere" models=claude/claude-opus-5-5,copilot/claude-opus-5.5 routing=smart
magpie claude group/opus-anywhere # 在多个订阅间故障转移
magpie save work && magpie use work # profiles
magpie quota # 每个套餐还剩多少
magpie settings set theme dark
magpie tui
路由组:五个模式,以及对话粘性
group 是「一个名字背后放几个模型」,agent 把它当成一个模型来选,比如 group/daily-coding。网关在成员的 key 和账号之间分摊请求:
smart:在还有额度的订阅里,选最快续期的那个order:先用第一个,答不了再下一个rotate:每轮换下一个成员usage:用得最少的优先pace:每周剩余配额摊到重置前每小时最多的账号优先
另有一条粘性规则:只要厂商的 prompt cache 还值得保,一段对话就留在回答它的那个账号上。组里可以再套组;intent routing 会让一个小模型读每一轮,测试类请求去强模型,快问快答去便宜的。
订阅账号的发现是自动的——magpie 读 Claude Code 和 Codex 的登录文件以及 Keychain。不想被读:Settings → Privacy → Subscription accounts,或 magpie accounts discovery off(on 恢复);MAGPIE_NO_ACCOUNTS=1 只对单次运行生效,不改已保存的设置。API key 类型的 provider 不受影响。
隐私遮蔽:占位符的代价
在 Settings → Privacy 里打开(默认关闭)之后,prompt 里的 key、密码、邮箱会在离开本机前换成占位符,回复里再换回来,流式文本和 tool call 参数都包含。规则覆盖 API key、私钥、token、邮箱、校验和成立的卡号/证件号;可选一个 1.6 GB 的本地模型(CPU)去识别规则找不到的姓名、地址和密码。
一个值会变成 {{API_KEY_k3v9x2mq}} 这样的占位符,同一个值每次都是同一个占位符,prompt cache 和 thinking signature 因此仍然有效。这些值只在内存里,不落盘。遮蔽开着但跑不起来时,请求会被拦下(503),不会按原文发出去。Insights → Masking 列出每一条被改过的请求,可以按类型设 Mask/Warn/Block,加自定义词和模式,维护 Never mask 列表。
代价要直说:模型看到的是占位符而不是原值,所以「这个 token 为什么被拒」这类要处理值本身的任务做不了——得把值放进 Never mask。
插件、用量与遥测
插件跑在 Bun 上,第一次用到时自动下载:magpie plugin add opencode-gemini-auth、magpie plugin login google-plugin。插件也可以当网关中间件,写 onRequest / onEvent / onResponse:
// alias.middleware.js — magpie plugin add ./alias.middleware.js
export function onRequest(body, ctx) {
if (body.model === "fast") return { ...body, model: "deepseek/deepseek-chat" };
}
现成的有 param-override、model-map、system-prompt、word-guard、think-tags。插件以你的账号权限运行,装之前自己看一眼代码。
用量侧记录 token、cache 读写、reasoning 与调用数、按 list price 的成本,magpie quota 看每个 key / 套餐 / 账号的余额,session 带成本,还有 context 占用、按账号和上游 key 的账单,支持 OTLP 导出。局域网共享用命名的 gateway key,各自带日/周/月 token 和成本上限。
每天一次匿名遥测:随机 id、版本和系统、在用的 agent/provider/model(自加的用自定义 id)、安装的 Discover 插件、partner add-sheet 计数;不含名字、URL、账号、key、prompt 和用量。Settings → Privacy 或 DO_NOT_TRACK=1 可以关。
它不适合谁
只用一个 agent、厂商自带套餐就够用的人不需要 magpie——一个账号、没有 group,额度用完没有可切换的对象,错误会照常抛给 agent。另外这个仓库不收 pull request,只有 maintainer 能开,修 bug 要去 Discord 描述。安装(curl -fsSL https://usemagpie.ai/install.sh | sh)、Linux 依赖(WebKitGTK 4.1)、Docker 镜像、卸载(--uninstall 把 agent 改回原样,~/.config/magpie 保留除非 --purge)这些细节以官方文档为准。