147228

whitelabel-claude

一键为 Claude Code 接入任意兼容 Anthropic Messages API 的大模型服务(DeepSeek、Kimi、OpenRouter、自建中转等),同时支持换皮为自定义品牌。自动探测已安装的 Claude Code 或从用户提供的 zip 包提取 cli.js,patch 后生成启动脚本和可分发包。当用户说"白标"、"换皮"、"接 DeepSeek/Kimi/OpenRouter"、"rebrand"、"/whitelabel"、"打包分发" 时触发。

147228 21 6 Updated 2mo ago

Resources

4
GitHub

Install

npx skillscat add 147228/whitelabel-claude

Install via the SkillsCat registry.

SKILL.md

Claude Code 一键白标 & 多 API 接入

触发场景

  • "白标 claude code"、"换皮"、"rebrand"、"/whitelabel"
  • "帮我接 DeepSeek / Kimi / OpenRouter / 硅基流动"
  • "打包一个可以分发的版本"

执行流程

Step 0:收集配置

参数 说明 默认
品牌名 替换 UI 中的 "Claude Code",不改就留空 可选
API 端点 目标服务 base URL 必填(接第三方时)
API Key 第三方 API 的 key 必填(接第三方时)
中文 UI 欢迎页汉化 N
品牌色 欢迎框边框 + 图标颜色,填 R,G,B 三个数字 215,119,87(官方橙褐色)
自定义 Logo 替换欢迎页那个小机器人 可选
是否打包 打成 zip 分发 看用户需求

常用 API 端点

服务 base URL
DeepSeek https://api.deepseek.com
Kimi Code https://api.kimi.com/coding/
OpenRouter https://openrouter.ai/api/v1
硅基流动 https://api.siliconflow.cn/v1
自建中转 https://your-domain.com
官方(默认) 留空

Step 1:找到 cli.js

cli.js 是 Claude Code 的核心文件,所有 patch 都在这一个文件上做。按以下优先级查找,命中第一个就停:

情况 A:用户已安装 Claude Code(最常见)

大部分人通过 npm、winget、brew 装过 Claude Code,cli.js 已经在系统里了。

# npm 全局安装路径
node -e "try{console.log(require.resolve('@anthropic-ai/claude-code/cli.js'))}catch{}"

# 或者通过 which/where 找到 claude 命令,再找同目录的 cli.js
which claude 2>/dev/null || where claude 2>/dev/null
# claude 命令通常是个 shim,实际 cli.js 在 npm 全局 node_modules 里

找到后复制到工作目录:

mkdir -p {brand}-dist
cp <找到的cli.js> {brand}-dist/cli.js
cp <同目录的package.json> {brand}-dist/package.json
cp -r <同目录的vendor/> {brand}-dist/vendor/

情况 B:用户有 claude-code-sourcemap-main.zip

这个 zip 里有现成的 package/cli.js(v2.1.88),直接提取:

mkdir -p {brand}-dist
unzip -j claude-code-sourcemap-main.zip \
  "claude-code-sourcemap-main/package/cli.js" \
  "claude-code-sourcemap-main/package/package.json" \
  -d {brand}-dist/
# vendor 按当前平台提取(如 Windows x64):
unzip claude-code-sourcemap-main.zip \
  "claude-code-sourcemap-main/package/vendor/*" \
  -d tmp-extract/
cp -r tmp-extract/claude-code-sourcemap-main/package/vendor/ {brand}-dist/vendor/
rm -rf tmp-extract/

注:另一个文件 claudecode.zip 是还原出来的 TypeScript 源码,只用于阅读理解结构,本流程不需要它。

情况 C:用户什么都没有

引导安装 Claude Code:

# 方式一:npm(需要 Node.js)
npm install -g @anthropic-ai/claude-code

# 方式二:Windows winget
winget install Anthropic.ClaudeCode

# 方式三:macOS brew
brew install claude-code

安装完成后按情况 A 定位 cli.js。


Step 2:patch

读取本 skill 目录下的 scripts/patch.template.js,将这些占位符替换为实际值:

__BRAND_NAME__   → 品牌名(不改品牌就填 "Claude Code")
__API_BASE_URL__ → API 端点(如 "https://api.deepseek.com")或 ""
__ENABLE_I18N__  → true 或 false
__BRAND_R__      → 品牌色 R(默认 215)
__BRAND_G__      → 品牌色 G(默认 119)
__BRAND_B__      → 品牌色 B(默认 87)
__LOGO_STYLE__   → default | look-left | look-right | arms-up | custom
__CUSTOM_LOGO__  → 自定义 logo 对象;非 custom 时填 null

写入 {brand}-dist/patch.js,然后执行:

# 先备份
cp {brand}-dist/cli.js {brand}-dist/cli.js.bak
# 执行 patch
node {brand}-dist/patch.js {brand}-dist/cli.js

原理(Protect → Replace → Restore)

  1. 先把 50+ 个协议层字符串换成占位符(User-Agent claude-cli/、npm 包名、所有环境变量名、SDK 类名)
  2. 做品牌替换(占位符保护下不会误伤协议层)
  3. 还原占位符

不保护直接替换,会把 HTTP User-Agent 改掉,Kimi 等服务端校验客户端标识会 403。

视觉定制也在这一步做

  • 欢迎框边框色和机器人身体色,官方默认是 rgb(215,119,87) / #D77757
  • skill 会把这个颜色改成你提供的 品牌色
  • 欢迎页小机器人支持这些内置姿态 / 图标:defaultlook-leftlook-rightarms-upbot-minipixel-catstar
  • 如果用户提供了自定义 logo,就填 __LOGO_STYLE__ = custom,并把 __CUSTOM_LOGO__ 写成:
{
  r1L: ' 左上 ',
  r1E: '中间上半',
  r1R: ' 右上 ',
  r2L: '左下',
  r2R: '右下',
  feet: '底部一行'
}

比如官方默认 logo 实际就是:

{
  r1L: ' ▐',
  r1E: '▛███▜',
  r1R: '▌',
  r2L: '▝▜',
  r2R: '▛▘',
  feet: ' ▗   ▖ '
}

如果用户只是想改颜色,不想改图标,就保留 default


Step 3:生成启动脚本

读取 templates/launcher.bat(Windows)或 templates/launcher.sh(macOS/Linux),替换占位符后写入 {brand}-dist/

__BRAND__        → 品牌名
__BRAND_LOWER__  → 小写
__API_KEY__      → API Key
__API_BASE_URL__ → API 端点

写入 .bat 文件时必须注意

  1. 纯 ASCII 注释:bat 里的 rem 注释和 echo 输出只用英文,不写中文。Windows cmd 默认编码是 GBK,中文 Unicode 字符(包括 ── 这种)会导致 不是内部或外部命令 报错
  2. CRLF 行尾:bat 必须是 \r\n 行尾。如果在 macOS/Linux/Git Bash 环境下生成,写入后执行 sed -i 's/$/\r/' {brand}.bat 或用 Node.js 写入时确保 \r\n
  3. chcp 65001:脚本开头加 chcp 65001 >nul 2>&1,让 node 进程的 stdout 能正确显示 UTF-8(cli.js 输出中文需要这个)

启动脚本里两个关键设计:

  • CLAUDE_CONFIG_DIR=~/.{brand_lower} — 隔离配置目录,避免全局 OAuth token 抢占
  • ANTHROPIC_AUTH_TOKEN(不是 API_KEY)— 认证优先级最高,确保走第三方 API

Step 4:验证

node {brand}-dist/cli.js --version
# 期望: 2.1.xx (BrandName)  或  2.1.xx(不改品牌时无后缀)

# User-Agent 必须在(否则第三方 API 会 403)
node -e "const c=require('fs').readFileSync('{brand}-dist/cli.js','utf8'); console.log(c.includes('claude-cli/') ? 'UA ✓' : 'UA 丢失!')"

Step 5(可选):打包分发

{brand}-dist/
├── cli.js            ← 已 patch
├── package.json
├── vendor/           ← 当前平台的 native addon
├── {brand}.bat       ← Windows 启动脚本(含 API key)
├── {brand}.sh        ← macOS/Linux 启动脚本
└── patch.js          ← 留着,方便以后重新 patch

打包:

cd {brand}-dist && zip -r ../{brand}-release.zip . && cd ..

接收方要求:有 Node.js 即可(无需安装 Claude Code)。如果目标用户连 Node.js 都没有,可以从 nodejs.org/dist/ 下载对应平台的便携版 node.exe,放进分发包根目录,启动脚本里优先使用它。


完成后告知用户

完成 ✓

启动:     ./{brand}.bat(Windows)/ bash {brand}.sh(macOS/Linux)
配置目录: ~/.{brand_lower}(与全局 Claude Code 完全隔离)

两个实例可同时运行:
  ./{brand}.bat  → 第三方 API
  claude         → 官方 Anthropic(如有)

常见问题

症状 原因 解法
403 "客户端异常" User-Agent 被改 检查 claude-cli/ 是否在 cli.js 里
401 明明 key 对 全局 OAuth 抢占 确认用 ANTHROPIC_AUTH_TOKEN
AUTH_TOKEN 也 401 OAuth 文件被直接读 确认 CLAUDE_CONFIG_DIR 指向独立空目录
工具调用报 400 中转不支持 tool_search ENABLE_TOOL_SEARCH=false
vendor 报错 平台 native addon 缺 确认提取了对应平台的 vendor/