GitHub Copilot 最大的问题,不是模型不够,而是入口太少。
@jeffreycao/copilot-api把 Copilot 包成一个本地代理,直接暴露 OpenAI / Anthropic 兼容接口。结果就是:你可以继续按月付 Copilot,但真正拿它去喂 Claude Code、OpenCode、Codex 这些更顺手的客户端。
一、先把代理跑起来
只要本机有 Node.js,就可以直接起服务:
npx @jeffreycao/copilot-api@latest start
第一次运行会拉起 GitHub OAuth 授权。登录完成后,终端会打印出本地代理地址,默认是 http://localhost:4141,同时还会给出一个 Usage Dashboard 链接。
如果你还想记录更完整的 token usage 历史,最好用 Node.js >= 22.13.0。低版本 Node 也能跑,但不会启用基于 node:sqlite 的 usage 存储。想绕开这个限制,也可以直接用 Bun:
bunx --bun @jeffreycao/copilot-api@latest start
二、先记住这几个接入规则
这一步搞清楚,后面接什么客户端都不容易踩坑。
一条规则:先分清它在模拟谁。
- 面向 OpenAI 风格客户端时,走
http://localhost:4141/v1 - 面向 Anthropic 风格客户端时,通常填
http://localhost:4141
当前支持的主要端点:
- OpenAI 兼容:
/v1/responses、/v1/chat/completions、/v1/models、/v1/embeddings - Anthropic 兼容:
/v1/messages、/v1/messages/count_tokens
认证也很简单:
- 如果你没有在代理里配置
auth.apiKeys,那大多数客户端里填个dummy就行 - 如果你自己开启了
auth.apiKeys,那就填你配置的 key,支持x-api-key和Authorization: Bearer
三、接入 Claude Code
最快的方式,是直接让代理帮你生成启动配置:
npx @jeffreycao/copilot-api@latest start --claude-code
它会让你选主模型和小模型,然后把 Claude Code 需要的环境变量命令直接复制到剪贴板。这个方式适合第一次上手。
如果你想长期固定配置,在项目根目录放一个 .claude/settings.json 即可:
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4141",
"ANTHROPIC_AUTH_TOKEN": "dummy",
"ANTHROPIC_MODEL": "gpt-5.4",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "gpt-5.4",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "gpt-5-mini",
"DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
"CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION": "false",
"CLAUDE_CODE_ENABLE_AWAY_SUMMARY": "0"
},
"permissions": {
"deny": ["WebSearch", "mcp__ide__executeCode"]
}
}
这一套配置的核心就两件事:
- 把 Claude Code 的 Anthropic 流量改指向本地代理
- 关掉一部分不必要的探测和额外流量,少浪费 Copilot 配额
四、接入 OpenCode
如果你打算用 OpenCode,作者的建议是直接让代理以 opencode 的 OAuth app 身份启动:
npx @jeffreycao/copilot-api@latest --oauth-app=opencode start
然后把 OpenCode 指到这个代理。一个够用的 ~/.config/opencode/opencode.json 可以写成这样:
{
"$schema": "https://opencode.ai/config.json",
"model": "local/gpt-5.4",
"small_model": "local/gpt-5-mini",
"agent": {
"build": { "model": "local/gpt-5.4" },
"plan": { "model": "local/gpt-5.4" },
"explore": { "model": "local/gpt-5-mini" }
},
"provider": {
"local": {
"npm": "@ai-sdk/anthropic",
"name": "Copilot API Proxy",
"options": {
"baseURL": "http://localhost:4141/v1",
"apiKey": "dummy"
},
"models": {
"gpt-5.4": {
"name": "gpt-5.4",
"modalities": {
"input": ["text", "image"],
"output": ["text"]
},
"limit": {
"context": 272000,
"output": 128000
}
},
"gpt-5-mini": {
"name": "gpt-5-mini",
"limit": {
"context": 128000,
"output": 64000
}
}
}
}
}
}
这里最关键的一项其实不是模型名,而是这句:
"npm": "@ai-sdk/anthropic"
这意味着 OpenCode 会按 Anthropic Messages 的语义去跟代理通信,而不是把一切都压扁成传统的 Chat Completions。对于 Claude 风格模型和工具流来说,这条链路通常更顺。
五、接入 Codex
这部分最有意思,因为 Codex 走的是 OpenAI 风格配置,但一样能接到这层代理上。
先装 Codex CLI:
npm i -g @openai/codex
然后给当前 shell 一个占位 API Key。Codex 这边需要的是一个 非空 的 OPENAI_API_KEY,只要你的代理没启用 auth.apiKeys,填 dummy 就够了:
# macOS / Linux
export OPENAI_API_KEY=dummy
# PowerShell
$env:OPENAI_API_KEY = "dummy"
接着在 ~/.codex/config.toml 里加上这几行:
model = "gpt-5.4"
openai_base_url = "http://localhost:4141/v1"
approval_policy = "on-request"
sandbox_mode = "workspace-write"
[features]
multi_agent = false
然后直接启动:
codex
这套配置背后的逻辑是:
openai_base_url把 Codex 的内置 OpenAI provider 改指向本地代理model = "gpt-5.4"让它直接使用 Copilot 侧暴露出来的模型features.multi_agent = false是刻意的,@jeffreycao/copilot-api的 README 里明确建议 Codex 场景下关闭 multi-agent,因为当前 GitHub Copilot 的计费逻辑对这类流量还不够友好,容易多吃额度
如果你不想手改 config.toml,也可以直接让 Codex 持久化关闭这个特性:
codex features disable multi_agent
六、查看用量和控制风险
查看 Copilot 用量最直接的方式有两个。
终端里看:
npx @jeffreycao/copilot-api@latest check-usage
浏览器里看:
- 直接打开启动代理时打印出来的 Usage Dashboard 链接
- 默认会走本地
/usage-viewer页面,读的是真实/usage数据
真正需要上心的不是“能不能跑”,而是“别跑太猛”。
推荐至少带上频率控制:
npx @jeffreycao/copilot-api@latest start --rate-limit 10 --wait
这两个参数很实用:
--rate-limit 10:把请求最小间隔限制在 10 秒--wait:撞到限速时先等,不要立刻把 429 扔给上层客户端
最后还有几句必须说的人话:
- 这是逆向工程项目,不是 GitHub 官方产品
- GitHub Copilot 的高频自动化调用,确实可能触发滥用检测
- 最安全的使用方式是 个人、本地、低频
- 不要把它挂公网,不要多人共用,也不要拿去跑批处理
- 如果你是 Business / Enterprise 账户,记得带上
--account-type business或--account-type enterprise
同样一份 Copilot 订阅,能不能值回票价,很多时候差的就只是这一层代理。
