Command Code 订阅反向代理:把 Command Code(含 $1/月的 Go 套餐)的订阅额度反代为
OpenAI 兼容(/v1/chat/completions、/v1/responses)与 Anthropic 兼容(/v1/messages)端点,
供任意 harness(Claude Code / OpenCode / ZCode / cURL / 任意 OpenAI·Anthropic SDK)使用;
自带美观的中文 Web 管理界面(仪表盘、实时日志、用量统计、账号用量、模型价目、密钥管理、设备指纹、设置)。
提供 macOS / Windows 桌面版(双击即用的原生应用,服务后台常驻 + 托盘)。
协议层派生自 MAXeaglet/commandcode-proxy(MIT,基线
9bdfafc),wire 行为与其逐项对齐,并保持其测试套件全绿。详见 NOTICE。
⚠️ 免责声明:本项目为非官方逆向工程产物,与 Command Code / Langbase 无关联。使用逆向协议可能违反 Command Code 服务条款,账号风险由使用者自行承担,仅供学习与研究用途。
- OpenAI Chat Completions + Responses + Anthropic Messages 三端点,流式(SSE)与非流式
- 工具调用、多模态图片输入、
reasoning_effort、缓存命中计量、thinking 签名伪装 - 每个 key 确定性设备指纹(同 key 恒定同设备),对齐官方 CLI 1.53.1 的流量形态;管理界面「设备指纹」页可视化查验伪造形态与上报结果
- 零输出 / 连续超时响应转 429,让下游 SDK 自动重试;客户端断连时真实中止上游
- 客户端密钥体系:
sk-ccp-*密钥(哈希存储、显式绑定上游 key、可吊销);也支持user_*直通 - Web 管理界面(免登录,仅回环可用):实时请求日志(SSE)、用量聚合、密钥管理、协议漂移告警;「账号用量」面板矩阵展示每个账号的模板条(5 小时滚动 / 周 / 月度)、信用余额与期账累计,支持单账号或全部刷新、一键固定当前承接账号,数据每 5 分钟自动刷新
- 额度/窗口耗尽自动轮转:402 信用耗尽持久标记换 key;5 小时滚动 / 周窗口到顶(429
USAGE_EXCEEDED)运行时标记到重置时刻,窗口恢复自动回切;绑定与直通(user_* 已入库)密钥均参与,瞬态 429 不轮转 - SQLite 持久化(内置
node:sqlite,零原生依赖):请求日志 30 天可配,用量按天×key×模型聚合 - 零运行时依赖(Node ≥ 22.5);桌面应用与 esbuild 单文件分发
| 请求日志(实时 SSE 推送,按端点 / 状态 / 密钥过滤,分页) | 用量统计(按天 / 模型 / 密钥) |
|---|---|
![]() |
![]() |
| 账号用量(模板条 / 信用余额 / 期账累计) | 模型列表(官方价目 × 本地用量的参考成本) |
|---|---|
![]() |
![]() |
| 密钥管理(上游账户 + 客户端密钥) | 设置(端口、协议开关、日志留存) |
|---|---|
![]() |
![]() |
每个上游账号一张卡片,把订阅的「能用到哪」摊开给你看:
账号用量:三条模板条 + 信用余额三池 + 期账累计;到限转红并显示重置倒计时
- 模板条:5 小时滚动 / 周 / 月度三个额度窗口各一条,已用 / 上限 / 占比与重置倒计时, 到顶转红标记「已超限」——月度条按套餐总额(Go=10、Pro=30、Max=150……)折算;
- 信用余额:月度 / 购买 / 赠送三池余额与合计,低于阈值转黄;
- 期账累计:订阅账期内的总请求、成败、成功率、总消费(信用)、平均消费与 token 明细,点卡片展开;
- 刷新:单账号或全部手动刷新,服务端每 5 分钟自动刷新(可配),数据不过夜;
- 切到此账号:点哪个账号,新请求就优先使用哪个账号(高于客户端密钥绑定,持久化跨重启);该账号额度/窗口不可用时自动轮转到其他账号,恢复后自动切回。已在途请求继续完成,点「取消固定」恢复按绑定路由;
- 到限自动轮转:5 小时滚动 / 周窗口到顶时代理自动换账号重试,窗口恢复自动切回 (详见下文「额度耗尽自动轮转」)。
模型页把官方公开价目($/1M 输入 / 输出 / 缓存读,71 个模型)与本代理近 30 天的 真实用量合在一起:每个模型的单价、上下文、最低套餐一目了然,用过的模型直接算出 参考成本并按成本排序,顶部汇总近 30 天总成本 / 请求数 / tokens—— 哪个模型便宜好用,选型不再靠猜(参考成本 = 单价 × 本地 token 计量,订阅内实际按信用扣减)。
代理不会把宿主机的真实信息(平台、Node 版本、工作目录)透给上游,而是为每个上游密钥确定性伪造一台
Windows 设备身份——CPU / 内存 / 时区 / MAC / MachineGuid / 主机名 / git 邮箱,哈希算法与官方 CLI
逐字对齐(同盐 command-code:device-fingerprint:v1)。同一密钥无论重启、多实例、停用数周后恢复,
上游看到的始终是同一台设备;「换设备」本身就是可疑信号,所以指纹由 key 派生而非随机。
管理界面「设备指纹」页把这一切摊开给你看:统一设备档案、每个 key 伪造出的具体形态、thumbmark 与各信号哈希、指纹 / 生命周期事件的上报时间与结果、下次刷新时间——是不是真做了,打开页面即可验证。
指纹状态为运行时数据,进程重启后按需重建;页面仅显示启动后使用过的密钥,key 只展示前 8 位前缀。
如需成批更换全部伪造身份(不换真实 key),配置环境变量 CC_FINGERPRINT_SALT 即可。
从 release/ 目录(或 GitHub Releases / Actions 产物)取安装包:
| 平台 | 文件 | 说明 |
|---|---|---|
| macOS Apple Silicon | CommandCodeGo Manager-<v>-arm64.dmg |
M 系列芯片 |
| macOS Intel | CommandCodeGo Manager-<v>.dmg |
— |
| Windows x64 | CommandCodeGo Manager-Setup-<v>-x64.exe |
安装版(NSIS) |
| Windows x64 | CommandCodeGo Manager-Portable-<v>-x64.exe |
免安装便携版 |
| Windows 通用 | CommandCodeGo Manager-Setup-<v>.exe |
双架构合并安装器 |
- 管理界面免登录(H1:API 仅监听回环地址,浏览器跨站写由 Origin 校验拦截)。
- 关闭窗口后服务在后台继续运行(托盘图标常驻,默认
http://127.0.0.1:3050); 从托盘菜单「退出」才真正结束。端口被占用时自动向后尝试。 - 桌面版未做代码签名:macOS 从网络下载的安装包首次打开会被 Gatekeeper 误报「已损坏」
(未签名应用 + 浏览器下载的隔离标记所致,文件本身完好;右键→打开对此无效)。
应用拖入「应用程序」后在终端执行一次:
再正常打开即可。Windows SmartScreen 可能提示「仍要运行」。
xattr -cr "/Applications/CommandCodeGo Manager.app"
本地自行构建桌面版:
npm --prefix web install && npm run build:web # 1) Web UI → public/
npm install && npm run bundle # 2) 服务端 → dist/commandcodego-manager.mjs
cd desktop && npm install
npm run dist:mac # macOS dmg(zip 同步产出,arm64 + x64)
npm run dist:win # Windows nsis + portable(x64 + arm64;CI 上原生构建更稳)
npm run smoke # 无窗口冒烟:拉起服务并探活(开发验证用)node server.mjs # 首启会在 data/config.json 落默认配置,并在控制台打印管理界面 token
# 打开 http://127.0.0.1:3050/ 进入管理界面Web 界面需要构建一次(之后 public/ 会被服务进程托管):
cd web && npm install && cd ..
npm run build:webnpm install # 安装 esbuild(devDependency)
npm run bundle # 产出 dist/commandcodego-manager.mjs + dist/public/
node dist/commandcodego-manager.mjs # data/ 与 public/ 取脚本同级目录仓库自带 Dockerfile / docker-compose.yml / .dockerignore,多阶段构建(镜像内编译前端,
运行层零 npm 依赖,基于 node:22-alpine)。
A. 直接用现成镜像(推荐;CI 在打 v* 标签或手动触发时用原生 runner 构建双架构镜像
linux/amd64 + linux/arm64 并发布到 Docker Hub
,compose 默认就是拉镜像,三行命令零编辑):
mkdir ccp && cd ccp
curl -O https://raw.githubusercontent.com/learningdog1/CommandCodeGo-manager/main/docker-compose.yml
# 必改:编辑 CCP_ADMIN_TOKEN 为强随机令牌(管理界面鉴权,见「安全须知」)
# openssl rand -hex 24
docker compose up -d && docker compose logs -f
# 升级:docker compose pull && docker compose up -dGHCR 上有一份同内容镜像
ghcr.io/learningdog1/commandcodego-manager,但默认 Private (匿名拉取需在 Packages 设置改 Public,或docker login ghcr.io);Docker Hub 镜像公开, 优先用它即可。
B. 服务器上从源码构建(改了代码或不想依赖镜像仓库;构建约 1-3 分钟):
git clone https://github.com/learningdog1/CommandCodeGo-manager.git
cd CommandCodeGo-manager
# 编辑 docker-compose.yml:注释 image: 行,取消注释 build: .
docker compose up -d --build # 构建约 1-3 分钟;小内存机器见下方说明
docker compose logs -f # 确认启动- 容器内已设
HOST=0.0.0.0 PORT=3050 CCP_DATA_DIR=/app/data;compose 端口绑0.0.0.0(公网/局域网直接可达,管理界面由CCP_ADMIN_TOKEN保护),数据落宿主机./data/(SQLite 库 + config.json),升级重建不丢。 - 「一键导入」在 Docker 下需挂载凭证:自动检测只看容器内的
~/.commandcode/auth.json(root 即/root/.commandcode/auth.json),宿主机上的凭证默认进不了容器。想让按钮出现: 先在这台服务器上装好 CLI 并登录(见下节「服务器上安装 commandcode CLI 并登录」),再在 compose 的volumes加一行- /root/.commandcode:/root/.commandcode:ro,执行docker compose up -d重建即可;非 root 用户挂~/.commandcode:/cc-auth:ro并在environment设CCP_CLI_AUTH_FILE=/cc-auth/auth.json。不想折腾就直接用「批量导入」 粘贴user_*密钥,效果完全相同。 - 监听地址/端口不进管理界面设置(会被环境变量固定,设置页已禁改):对外端口改
compose 的
ports;仅需本机+反代时可改回127.0.0.1:3050:3050。 - 首次配置:浏览器打开管理界面输入 admin token 后配置,或直接编辑宿主机
./data/config.json后docker compose restart(HOST/PORT 不会回写进文件)。 - 更稳妥的公网形态仍是反代之后 + TLS(见「安全须知」)。反代三个要点:
proxy_set_header Host $host(管理写操作的同源 Origin 校验依赖它)、proxy_buffering off(/v1SSE 流式)、keepalive_timeout≤ 60s(见下节)。 - 升级:方式 A
docker compose pull && docker compose up -d;方式 Bgit pull && docker compose up -d --build。备份:拷走./data/即可。 - 内存 ≤ 1GB 的服务器:前端构建(vite + echarts)可能 OOM,请走方式 A 直接拉现成镜像, 不要在服务器上构建。
服务器上跑 cmd login 有个坑:登录走 OAuth,CLI 会在服务器本机的随机端口起一个回调服务,
打印形如 http://127.0.0.1:33925/callback 的授权链接,等浏览器访问它完成授权——但服务器上
没有浏览器,链接里的 127.0.0.1 也不指向你的电脑,直接登录会卡在最后一步。两种解法:
方法一:SSH 端口转发(实测可用)
# 1) 本地电脑新开一个终端,把服务器的回调端口转发到本地
# 端口每次登录都随机 —— 以 cmd login 实际打印的为准,对不上就按实际端口重开隧道
ssh -L 33925:127.0.0.1:33925 root@<服务器IP>
# 2) 在这条 SSH 会话里执行登录,复制它打印的授权链接
cmd login
# 3) 用本地浏览器打开该链接,点 Authorize 完成授权
# (Chrome 可能弹「Local Network Access」询问,点允许)
# 回调经隧道打回服务器,凭证写入 ~/.commandcode/auth.json,之后无需再登录不便开隧道时的土办法:在本地浏览器完成授权后,从地址栏复制带
?code=...&state=...的 完整回调 URL,回到服务器上curl '该URL'(code 几分钟内有效)。
方法二:API key 登录(不经浏览器回调)
在 commandcode.ai 网页后台(Studio → API keys)创建 API key,按 CLI 登录提示粘贴进终端 即可完成登录。
凭证文件:
~/.commandcode/auth.json;清除登录:cmd logout或直接删除该文件。
node server.mjs # 后端 :3050
cd web && npm run dev # 前端 :5173,/admin/api 与 /v1 代理到 3050
npm test # 92 个测试(mock 上游,无需真实 key)上游密钥(user_*)的两种来路:
- 已安装 commandcode 命令行并登录过(Go 订阅用户的推荐路径):打开管理界面「密钥管理」,
软件会自动检测本机 CLI 登录(
~/.commandcode/auth.json),点「一键导入」即可—— Go 套餐没有 Provider API 权限,但 CLI 使用的user_*密钥在代理所走的/alpha/generate端点上完全可用,这正是本软件能把 Go 订阅反代出来的原因。 注意:检测的是代理进程所在机器的文件系统——服务器/Docker 部署时需把宿主机的 凭证目录挂载进容器(见「方式三」),在你自己电脑上cmd login是检测不到的; 不方便挂载就直接用「批量导入」,效果相同。 - 多账户:推荐「批量导入」—— 在 commandcode.ai 网页后台(Studio → API keys)为每个账号
生成/复制密钥,回到「密钥管理」点「批量导入」,一行一个粘贴即可,无需在 CLI 里退出重登;
名称自动取各账号的 commandcode 账户名,重复导入自动去重。也可在 CLI 里
cmd login切换账号后点「一键导入」逐个叠加。
额度耗尽自动轮转:客户端密钥优先使用绑定的上游密钥;当上游明确返回「额度用尽」(402)时,
自动切换到其他启用中的上游密钥并当场重试,被耗尽的密钥标记为「额度耗尽」(月度额度重置后可手动
重新启用)。5 小时滚动 / 周窗口到顶(429 USAGE_EXCEEDED)则做运行时标记:新请求自动落到
其他账号,窗口重置或用量刷新确认释放后自动切回;客户端绑定密钥、已入库的直通 user_* 和
已入库的配置默认密钥均参与。单笔请求可依次尝试多个备用账号,每个账号最多尝试一次;
全部受限时返回错误。也可在「账号用量」面板「切到此账号」固定承接账号(优先级高于绑定,
持久化跨重启;固定账号不可用时按同一套可用性规则兜底,恢复后自动切回)。瞬时限速(429)不触发轮转,每枚密钥保持独立设备指纹与会话。
总览在代理请求完成后自动更新请求数、Tokens、最近请求与实际使用的账号,断线时每 5 秒补拉。 24 小时图表统计完整的过去 24 小时,不受最近请求的分页限制;总 Tokens 为输入加输出, 缓存命中已包含在输入中,不重复相加。
密钥管理:上游账户一键导入、客户端密钥显式绑定;额度耗尽的账户自动标记,重置后可手动重新启用
管理界面无需登录(仅监听 127.0.0.1,服务端拒绝跨站修改请求)。
拿到上游密钥后,创建客户端密钥 sk-ccp-* 给 harness 使用(或直接使用 user_* 直通模式)。
curl http://127.0.0.1:3050/v1/chat/completions \
-H 'Authorization: Bearer sk-ccp-xxxx' -H 'Content-Type: application/json' \
-d '{"model":"deepseek/deepseek-v4-flash","messages":[{"role":"user","content":"你好"}]}'from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:3050/v1", api_key="sk-ccp-xxxx")export ANTHROPIC_BASE_URL=http://127.0.0.1:3050
export ANTHROPIC_AUTH_TOKEN=sk-ccp-xxxx
claude任何支持自定义 OpenAI 或 Anthropic 端点的 harness,把 base URL 指向 http://127.0.0.1:3050,
key 填 sk-ccp-* 客户端密钥(或上游 user_*,直通模式默认开启)。
配置文件 data/config.json(首启自动生成;环境变量优先级更高)。
| 键 | 默认 | 说明 |
|---|---|---|
port |
3050 |
监听端口(env PORT) |
host |
127.0.0.1 |
监听地址(env HOST);改 0.0.0.0/局域网 IP 即对局域网开放代理与管理界面(桌面版同样生效,见「安全须知」) |
apiBase |
https://api.commandcode.ai |
上游地址(env CC_API_BASE) |
projectSlug |
cc-proxy |
x-project-slug(env PROJECT_SLUG) |
apiKey |
空 | 上游 key 兜底:请求不带凭据时使用(env 无,仅配置) |
logFile / logLevel |
空 / info |
日志文件与级别(env LOG_FILE) |
useProviderModels |
true |
动态拉取模型列表(env CC_USE_PROVIDER_MODELS) |
modelRefreshIntervalMs |
300000 |
模型列表缓存时长 |
zdr |
false |
附加 x-cmd-zdr: 1 头走 ZDR 通道(env CMD_ZDR=1) |
cliMode / cliSessionMode |
agent / interactive |
信封与 lifecycle 枚举(env CC_CLI_MODE / CC_CLI_SESSION_MODE) |
fingerprintSalt |
空 | 成批更换设备指纹的逃生口(env CC_FINGERPRINT_SALT) |
deviceProjectDir |
内置 Windows 路径 | 伪造项目目录(env CC_DEVICE_PROJECT_DIR) |
emptySystemPlaceholder |
true |
无 system 时发空格占位,阻止上游注入 7.5K 默认提示词 |
allowDirectUpstreamKey |
true |
user_* 直通开关;关闭后只认客户端密钥 |
logRetentionDays |
30 |
请求日志保留天数 |
| 变量 | 默认 | 说明 |
|---|---|---|
CCP_DATA_DIR |
脚本同级 data/ |
数据目录(SQLite 库、配置) |
CC_MAX_BODY_MB |
100 |
请求体上限(MB) |
CC_MAX_INFLIGHT |
0(不限) |
在途请求数上限,超限 503 + Retry-After |
CC_STREAM_IDLE_MS |
30000 |
流式读空闲超时 |
CC_NONSTREAM_IDLE_MS |
90000 |
非流式读空闲超时 |
CC_CLIENT_DRAIN_TIMEOUT_MS |
0(关) |
客户端不读响应时的排空超时 |
CC_KEEPALIVE_TIMEOUT_MS |
65000 |
keep-alive(反代侧须小于它) |
- 上游 key 明文存储:调用上游必需,
data/目录请保持权限私有(600/700),不要提交到任何仓库。 - 管理 API 鉴权(按部署形态):
- 裸 Node / 桌面版:免登录(仅回环默认),写操作由同源 Origin 校验挡跨站请求(CSRF)。
- Docker / 公网:设
CCP_ADMIN_TOKEN环境变量后,管理界面与/admin/api/*要求Authorization: Bearer <token>(浏览器首次打开会弹令牌输入;SSE 日志流用?token=)。 docker-compose 模板已带此配置,公网部署必须改成强随机值(openssl rand -hex 24), 保留模板默认值change-me时启动日志会持续告警。仅设该变量才启用鉴权,不影响裸跑。
- 默认只听
127.0.0.1(裸 Node/桌面):把host改成0.0.0.0/局域网 IP 后,代理与管理界面随监听地址一起对网络开放(桌面版自 v0.2.4 起跟随此配置,启动日志有醒目告警)—— 仅部署在受信网络;公网暴露请置于反向代理之后加 TLS 与访问控制。 写操作有同源 Origin 校验挡浏览器跨站请求(CSRF):局域网设备用http://<本机IP>:<端口>打开管理页可正常操作,第三方网站发起的写请求返回 403。 - 客户端密钥(
sk-ccp-*)只存哈希;设置接口不回显任何明文密钥(apiKey只报有无)。 - 日志与界面不落消息正文,密钥一律掩码显示。
请求体在转发前存在多份副本(实测峰值 ≈ body × 5.1~7.4):默认 100MB 上限意味着单个请求最坏可吃 ~550MB。 公网/多用户部署请:
- 反代层限制 body 大小(nginx:
client_max_body_size); - 限制在途请求数(nginx:
limit_conn,或CC_MAX_INFLIGHT); - 反代
keepalive_timeout设为 60s 以内(小于本服务的 65s)。
MIT(本项目)。协议层派生自 MAXeaglet/commandcode-proxy(MIT),
vendored 基线 9bdfafc,详见 NOTICE 与 LICENSE。





