把 WorkBuddy / CodeBuddy(腾讯代码助手) 的桌面端登录态,转成你本机可直接使用的 OpenAI / Anthropic 兼容 API。
适用场景:
- 用 Codex CLI 走
/v1/responses - 用 Claude Code / CC Switch 走
/v1/messages - 用 Cherry Studio / ZCode / LobeChat / NextChat / Open WebUI 走
/v1/chat/completions
workbuddy2api 是一个本地协议转换器。它会读取你已经登录好的 WorkBuddy / CodeBuddy 桌面端凭据,转发到腾讯后端 copilot.tencent.com,然后在本地暴露这些接口:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesGET /v1/modelsGET /health
它不负责登录,不模拟桌面端,也不替你执行工具。它只做三件事:
- 读取本机登录态并注入鉴权头
- 在 OpenAI / Anthropic 协议和腾讯后端协议之间转换
- 对
Codex CLI这类长上下文 agent 请求做后端友好的压缩投影
命名说明:项目对外名称现在叫
workbuddy2api。代码里仍保留部分历史命名,比如codebuddy2openai、CODEBUDDY2OPENAI_*,目的是兼容旧配置和环境变量。 另外,GitHub 仓库路径当前也可能仍沿用codebuddy2openai,这是仓库路径与项目展示名尚未完全统一,不影响使用。
- 把 WorkBuddy 订阅复用到 OpenAI 兼容客户端
- 让 Codex CLI 直接接腾讯后端,而不是只接 OpenAI 官方
- 让 Claude Code 通过 CC Switch 复用 WorkBuddy 支持的模型
- 保留原生
tools/tool_calls/ 流式 SSE / 多轮工具调用
| 客户端 / 协议 | 接口 | 当前状态 |
|---|---|---|
| OpenAI Chat Completions | /v1/chat/completions |
已支持 |
| OpenAI Responses | /v1/responses |
已支持,适配 Codex CLI |
| Anthropic Messages | /v1/messages |
已支持,适配 Claude Code / CC Switch |
| OpenAI Models | /v1/models |
已支持 |
| Health Check | /health |
已支持 |
你需要先满足这 3 个条件:
- 本机已经安装并登录 WorkBuddy / CodeBuddy 桌面端
- 本机有 Python 3.8+
- 已安装依赖
fastapi、uvicorn、httpx
默认会在这些位置寻找登录态:
- macOS:
~/Library/Application Support/CodeBuddyExtension/Data/Public/auth/*.info - Windows:
%LOCALAPPDATA%\CodeBuddyExtension\Data\Public\auth\*.info - Linux:
~/.local/share/CodeBuddyExtension/Data/Public/auth/*.info
推荐用 uv:
git clone https://github.com/ShouZhuo0413/codebuddy2openai.git workbuddy2api
cd workbuddy2api
uv venv
uv pip install -r requirements.txt也可以用虚拟环境:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt注意:无论是启动服务,还是执行
python3 converter.py --help,都必须先装依赖。
最常用的启动方式:
uv run converter.py --desensitize --log converter.log或:
python3 converter.py --desensitize --log converter.log看到监听 http://127.0.0.1:8787 就说明已经起来了。
curl http://127.0.0.1:8787/health
curl http://127.0.0.1:8787/v1/models如果这两条能通,说明本地服务、登录态、基本路由都没问题。
这是当前最推荐的接法。Codex CLI 走的是 /v1/responses,而不是 /v1/chat/completions。
推荐启动命令:
uv run converter.py --desensitize --log converter.log把下面配置合并到 ~/.codex/config.toml:
[model_providers.workbuddy]
name = "WorkBuddy (via local converter)"
base_url = "http://127.0.0.1:8787/v1"
wire_api = "responses"
env_key = "CODEBUDDY2OPENAI_KEY"
[profiles.workbuddy]
model = "glm-5.2"
model_provider = "workbuddy"设置一个占位环境变量:
export CODEBUDDY2OPENAI_KEY=any-value启动:
codex --profile workbuddy "你的任务描述"补充说明:
- 推荐保留
--desensitize - 当前
/v1/responses默认已经会做投影压缩 - 如果你想尽量保留原始 system prompt,可试
--desensitize --no-compact --desensitize --no-compact下若仍命中审核,当前实现会自动退回紧凑模式重试一次
Claude Code 不走 OpenAI 协议,而是走 Anthropic Messages。
推荐启动命令:
uv run converter.py --desensitize --log converter.log在 CC Switch 里配置:
{
"DeepSeek-V4-Pro": {
"base_url": "http://127.0.0.1:8787/v1/messages",
"api_key": "",
"model": "deepseek-v4-pro"
}
}注意:
- 模型名必须填写腾讯后端支持的真实模型名
- 不做 Anthropic 模型名到腾讯模型名的自动映射
- Claude Code 场景强烈建议开启
--desensitize
适用于:
- Cherry Studio
- ZCode
- LobeChat
- NextChat
- Open WebUI
- 自己写的 OpenAI SDK 客户端
配置方式:
- Base URL:
http://127.0.0.1:8787/v1 - API Key: 留空,或填你启动时设置的
--api-key - 模型名:
glm-5.2/deepseek-v4-pro/kimi-k2.7/auto等
python3 converter.py
python3 converter.py --desensitize
python3 converter.py --desensitize --log converter.log
python3 converter.py --api-key mysecret
python3 converter.py --port 9000| 参数 | 默认值 | 说明 |
|---|---|---|
--host |
127.0.0.1 |
监听地址 |
--port |
8787 |
监听端口 |
--api-key |
无 | 给本地客户端加一层鉴权 |
--log |
无 | 记录请求与响应日志 |
--desensitize |
关 | 压缩运行时提示、去掉 tool description、零宽脱敏高风险关键词 |
--no-compact |
关 | 配合 --desensitize 使用,保留更完整的原始 system prompt |
--skip-check |
否 | 跳过启动预检 |
curl http://127.0.0.1:8787/v1/models
curl http://127.0.0.1:8787/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"glm-5.2","messages":[{"role":"user","content":"你好"}]}'
curl -N http://127.0.0.1:8787/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"glm-5.2","stream":true,"messages":[{"role":"user","content":"数1到5"}]}'uv run converter.py --desensitize --log converter.log每次请求都会带一个唯一 ID,常见日志包括:
REQUEST BODYRESPONSES → CHAT BODYRESPONSES PROJECTIONRESPONSE BODYRESPONSE RAW SSE⚠️内容审核拦截
其中 RESPONSES PROJECTION 会告诉你:
- 投影前后消息数
- 投影前后字符数
- tool schema 压缩量
- 是否丢掉了 harness 消息
- 是否保留了 anchor user
说明桌面端没登录,或者登录目录不在默认路径。先确认桌面端已经真正完成登录。
分两种:
- 本地 401:你启用了
--api-key,但客户端没带同一个 key - 后端 401:腾讯 token 失效,尝试重新打开桌面端登录
先换快一点的模型,比如 deepseek-v4-flash。
这是腾讯后端的内容审核,不一定是用户问题本身敏感,很多时候是 agent runtime 文本触发的,比如:
DoSexploitcredentialsandboxescalation- 竞争品牌词
- tool description 中的安全术语
建议排查顺序:
- 开
--log - 看同一请求 ID 下的
REQUEST BODY或RESPONSES → CHAT BODY - 如果是 Codex CLI,再看
RESPONSES PROJECTION - 开
--desensitize - 如果还不稳,再尝试
--desensitize --no-compact
如果你更习惯用 Docker,可以直接用。
前提是把宿主机登录态目录挂进去,因为容器里拿不到桌面端 auth 文件。
先改 docker-compose.yml 里的 auth 挂载路径,再执行:
docker compose up -d --builddocker build -t workbuddy2api .
docker run -d --name workbuddy2api -p 8787:8787 \
-v ~/Library/Application Support/CodeBuddyExtension/Data/Public/auth:/data/auth:ro \
-e CODEBUDDY_AUTH_DIR=/data/auth \
workbuddy2api| 变量 | 说明 |
|---|---|
CODEBUDDY_AUTH_DIR |
指定登录态目录 |
CODEBUDDY2OPENAI_KEY |
本地 API Key |
CODEBUDDY2OPENAI_LOG |
日志路径 |
当前内置默认模型列表:
glm-5.2、glm-5.1、glm-5v-turbo、kimi-k2.7、kimi-k2.6、kimi-k2.5、deepseek-v4-pro、deepseek-v4-flash、minimax-m3-pay、hy3-preview-agent、auto
具体能不能用,取决于你的 WorkBuddy / CodeBuddy 订阅。
workbuddy2api/
├── converter.py
├── responses_adapter.py
├── responses_projection.py
├── anthropic_adapter.py
├── desensitize.py
├── codex-codebuddy.example.toml
├── test_responses_adapter.py
├── test_anthropic_adapter.py
├── README.md
└── LICENSE
各文件作用:
converter.py: 主入口,FastAPI 服务responses_adapter.py: OpenAI Responses ↔ Chat 适配responses_projection.py: Codex / agent 请求投影压缩anthropic_adapter.py: Anthropic Messages ↔ Chat 适配desensitize.py: 运行时文本压缩与零宽脱敏
本项目基于 HanHan666666/codebuddy2openai 的思路演进而来,感谢原作者的开源贡献。
本项目仅用于个人学习与研究。与腾讯、WorkBuddy、CodeBuddy、OpenAI、Anthropic 无官方关联。请仅在你合法拥有订阅的前提下使用,并自行承担风险。
workbuddy2api exposes your already logged-in WorkBuddy / CodeBuddy desktop session as local OpenAI- and Anthropic-compatible APIs.
Supported endpoints:
POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messagesGET /v1/modelsGET /health
Recommended use cases:
- Codex CLI via
/v1/responses - Claude Code / CC Switch via
/v1/messages - Cherry Studio / ZCode / LobeChat / Open WebUI via
/v1/chat/completions
git clone https://github.com/ShouZhuo0413/codebuddy2openai.git workbuddy2api
cd workbuddy2api
uv venv
uv pip install -r requirements.txt
uv run converter.py --desensitize --log converter.logThen verify:
curl http://127.0.0.1:8787/health
curl http://127.0.0.1:8787/v1/modelsUse /v1/responses and keep --desensitize enabled.
[model_providers.workbuddy]
name = "WorkBuddy (via local converter)"
base_url = "http://127.0.0.1:8787/v1"
wire_api = "responses"
env_key = "CODEBUDDY2OPENAI_KEY"
[profiles.workbuddy]
model = "glm-5.2"
model_provider = "workbuddy"Run:
export CODEBUDDY2OPENAI_KEY=any-value
codex --profile workbuddy "your task"Use /v1/messages:
{
"DeepSeek-V4-Pro": {
"base_url": "http://127.0.0.1:8787/v1/messages",
"api_key": "",
"model": "deepseek-v4-pro"
}
}--desensitizeis recommended for both Codex CLI and Claude Code/v1/responsesalready applies backend-facing projection by default--desensitize --no-compactpreserves more of the original system prompt- if that still gets review-blocked,
/v1/responseswill retry once in compact mode
python3 converter.py [--host HOST] [--port PORT] [--api-key KEY] [--log PATH] [--desensitize] [--skip-check]For personal learning and research only. Not affiliated with Tencent, WorkBuddy, CodeBuddy, OpenAI, or Anthropic.
Keywords: codebuddy to openai · codebuddy2openai · workbuddy api proxy · workbuddy openai adapter · codex cli workbuddy · claude code workbuddy · tencent code assistant openai compatible api