Anyclaw
如何让anyrouter为openclaw服务
Install / Use
/learn @shufu-yes/AnyclawREADME
Anyrouter Proxy — Claude Code CLI 伪装代理
一个 Node.js 反向代理脚本,让任意 Anthropic API 客户端(如 OpenClaw)通过 anyrouter.top 的 Claude Code CLI 验证。
它解决什么问题
anyrouter.top 只接受来自 Claude Code CLI 的请求。它通过多层验证判断请求是否"真的"来自 Claude Code:
- URL 必须带
?beta=true - 必须有特定的
anthropic-betaflags - 请求体必须包含 Claude Code 的完整系统提示 + 74 个标准工具
Authorization: Bearer(大写 B)- 特定格式的
metadata.user_id
普通 API 调用(curl、SDK、OpenClaw)全部会被拒绝,返回 invalid claude code request 或伪装成 负载已达上限。
工作原理
调用方 (OpenClaw等) anyrouter.top
│ ▲
│ 原始请求 │ 伪装后的请求
│ - openclaw 系统提示 │ - Claude Code 系统提示
│ - 23 个小写工具 │ + 调用方上下文追加
│ - model: claude-opus-4-6[1m] │ - 74 个 PascalCase 工具
▼ │ - model: claude-opus-4-6
┌──────────────────────┐ │
│ anyrouter_proxy.mjs │───────────────────┘
│ │
│ 请求方向: │ 响应方向:
│ · 注入 billing header│ · Read → read
│ · 注入 CC 系统提示 │ · Bash → exec
│ · 替换为 74 个 CC 工具│ · WebSearch → web_search
│ · 追加调用方上下文 │ · ...SSE 流逐行转换
│ · 去掉 [1m] 后缀 │
│ · 加 ?beta=true │
│ · Bearer 大写 B │
└──────────────────────┘
请求方向(调用方 → anyrouter)
| 操作 | 说明 |
|------|------|
| System | 注入完整 Claude Code 系统提示(含 billing header),追加调用方原始上下文 |
| Tools | 替换为 74 个 Claude Code 标准工具(PascalCase,含完整 schema) |
| URL | 自动追加 ?beta=true |
| Headers | 重建为 Claude Code CLI 标准头(User-Agent、anthropic-beta 等) |
| Auth | x-api-key / authorization: bearer 统一转为 Authorization: Bearer(大写 B) |
| Model | 去掉 [1m]、[200k] 等上下文窗口后缀 |
| Metadata | 生成随机 user_id(不泄露个人信息) |
响应方向(anyrouter → 调用方)
模型用 Claude Code 工具名(PascalCase)回复,代理在 SSE 流中逐行映射回调用方的工具名:
| Claude Code | → | OpenClaw |
|-------------|---|----------|
| Read | → | read |
| Write | → | write |
| Edit | → | edit |
| Bash | → | exec |
| WebSearch | → | web_search |
| WebFetch | → | web_fetch |
| Agent | → | sessions_spawn |
| ... | | ... |
用法
# 启动(默认端口 18889)
node anyrouter_proxy.mjs
# 自定义端口
PORT=8080 node anyrouter_proxy.mjs
启动后输出:
Anyrouter Proxy on :18889
Home: /Users/xxx | Darwin 24.3.0 | /bin/zsh
Upstream: https://anyrouter.top
Tools: 74 | System: 3 blocks
OpenClaw 配置
在 ~/.openclaw/openclaw.json 的 models.providers 中配置:
{
"anyrouter": {
"baseUrl": "http://0.0.0.0:18889/",
"apiKey": "sk-你的anyrouter密钥",
"api": "anthropic-messages",
"models": [
{
"id": "claude-opus-4-6",
"name": "Claude Opus 4.6",
"reasoning": true,
"input": ["text"],
"contextWindow": 200000,
"maxTokens": 16384,
"api": "anthropic-messages"
}
]
}
}
通用 curl 测试
curl -sN -X POST http://localhost:18889/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-你的密钥" \
-d '{"model":"claude-opus-4-6","messages":[{"role":"user","content":"Hi"}]}'
环境要求
- Node.js ≥ 18(需要原生
fetch和 ESMimport支持) - 无需安装任何 npm 依赖,零依赖单文件
脚本特性
- 单文件:74 个工具定义 + 系统提示模板全部内联,不依赖外部 JSON 文件
- 无硬编码路径:
homedir()、platform()、release()运行时动态获取 - 无个人信息:
metadata.user_id随机生成,不含真实用户标识 - SSE 流转换:响应中逐行处理 Server-Sent Events,实时映射工具名
anyrouter 验证机制速查
| 错误信息 | 真实含义 |
|---------|---------|
| invalid claude code request | 缺 tools / tools 数量不够 / 系统提示不完整 |
| 负载已达上限 (429) | 工具名不对 / 缺关键字段 / 请求体不够完整(伪装验证失败) |
| 未提供令牌 | 认证头格式不对 |
| 正常 SSE 流 (200) | 通过 ✅ |
排查思路
如果 anyrouter 更新后脚本失效,按以下步骤排查:
- 抓包对比:临时修改
~/.claude/settings.json的ANTHROPIC_BASE_URL指向本地 capture proxy,运行claude -p "test"捕获真实请求 - 逐项比对:URL 参数、headers、
anthropic-beta值、工具列表、系统提示、metadata格式 - 二分排除:从完整请求开始,逐步精简,找到通过验证的最小集合
