微信用户
│ 发送消息(文字/语音/图片)
▼
微信服务(WebSocket + HTTP API)
│
▼
interactive-bridge.ts ← 后台静默运行
│ 文字直接注入
│ 语音 → 腾讯云 ASR → 文字
│ 图片 → 阿里云 Qwen3 → 描述文字
▼
Claude Code REPL(交互式终端)
│ Claude 处理,可调用所有工具
│ 新加入工具: WechatSendImage / WechatSendFile
│ 如果star数超过1000,我再把语音回复功能加上!
▼
回复文本 → 微信用户| 依赖 | 版本 |
|---|---|
| Bun | ≥ 1.3.5 |
| Node.js | ≥ 24.0.0 |
| 微信saas服务 | WebSocket + HTTP API |
wechat-config.json:{
"robotId": "wxid_xxxxxxxxxxxxxxxx",
"authorization": "wx_xxxxxxxxxxxxxxxx",
"serverIp": "your.websocket.server.ip",
"serverPort": 5555,
"apiHost": "your.api.server.host",
"allowFrom": [],
"name": "Claude 助手",
"aliyunApiKey": "sk-xxxxxxxxxxxxxxxx"
}| 字段 | 必填 | 说明 |
|---|---|---|
robotId | ✅ | 微信机器人的 wxid(如 wxid_abc123) |
authorization | ✅ | API 鉴权 Token |
serverIp | ✅ | Websocket服务器 IP |
serverPort | WebSocket 服务器 端口,默认 5555 | |
apiHost | ✅ | 微信 HTTP API 服务器地址(ip:port 或域名) |
allowFrom | 白名单 wxid 列表,空数组表示接受所有人消息 | |
name | 机器人名称(仅用于日志显示) | |
aliyunApiKey | 阿里云 DashScope Key,用于图片识别;留空则跳过图片消息 |
wechat-config.json 时,自动在后台启动微信桥--dangerously-skip-permissions 时,不会自动启动微信桥。| 微信消息类型 | MsgType | 处理方式 |
|---|---|---|
| 文字 | 1 | 直接注入 Claude |
| 图片 | 3 | 阿里云 Qwen3 图像理解 → 描述文字注入 Claude |
| 语音 | 34 | 腾讯云 ASR 语音识别 → 文字注入 Claude |
| 其他(文件、链接等) | 其他 | 忽略 |
aliyunApiKey 时回复提示信息参数:
source 图片来源,支持:
- 本地绝对路径(自动上传 OSS 后发送)
- 公网 HTTP/HTTPS URL(直接发送)参数:
source 文件来源,支持本地路径或公网 URL
fileName (可选) 微信端显示的文件名,省略时自动从路径提取1. /model 命令(会话中动态切换) ← 最高优先级
2. --model CLI 启动参数
3. ANTHROPIC_MODEL 环境变量
4. settings.json 中的 model 字段
5. 订阅等级默认值 ← 最低优先级| 别名 | 对应模型 | 说明 |
|---|---|---|
opus | claude-opus-4-6 | 最强模型 |
sonnet | claude-sonnet-4-6 | 均衡模型(默认) |
haiku | claude-haiku-4-5-20251001 | 最快/最省 |
best | claude-opus-4-6 | 永远指向最强模型 |
opus[1m] | claude-opus-4-6 + 100 万 token 上下文 | 需付费订阅 |
sonnet[1m] | claude-sonnet-4-6 + 100 万 token 上下文 | 需付费订阅 |
opusplan | 计划模式 → Opus,普通模式 → Sonnet | 自动切换 |
[1m] 后缀可附加在任意别名后,启用 100 万 token 扩展上下文(仅限付费订阅,不支持第三方 API)。~/.claude/settings.json{
"model": "sonnet",
"availableModels": [
"opus",
"sonnet",
"haiku",
"claude-sonnet-4-6"
],
"modelOverrides": {
"claude-opus-4-6": "us.anthropic.claude-opus-4-6-v1:0",
"claude-sonnet-4-6": "anthropic.claude-sonnet-4-6:0"
}
}| 字段 | 说明 |
|---|---|
model | 默认模型,支持别名或完整 ID |
availableModels | 企业白名单,限制可用模型范围;未设置则不限制 |
modelOverrides | Anthropic ID → 云厂商 ID 映射(主要用于 Bedrock ARN) |
| Anthropic 模型 | AWS Bedrock ID |
|---|---|
| claude-opus-4-6 | us.anthropic.claude-opus-4-6-v1:0 |
| claude-sonnet-4-6 | us.anthropic.claude-sonnet-4-6-v1:0 |
| claude-haiku-4-5-20251001 | us.anthropic.claude-haiku-4-5-v1:0 |
POST /v1/chat/completions 接口的服务,包括 OpenRouter、Azure OpenAI、本地 Ollama、各类中转代理等。/v1/messages)转换为 OpenAI 格式(/v1/chat/completions)~/.claude/config.json(全局配置文件):{
"customApiEndpoint": {
"provider": "openai",
"baseURL": "https://openrouter.ai/api",
"apiKey": "sk-or-v1-xxxxxxxx",
"model": "anthropic/claude-3-5-sonnet",
"savedModels": [
"anthropic/claude-3-5-sonnet",
"gpt-4o",
"deepseek/deepseek-r1"
]
}
}| 项目 | 说明 |
|---|---|
| 请求路径 | 兼容模式发送到 baseURL/v1/chat/completions,原生模式发送到 baseURL/v1/messages |
| 模型名称 | 必须填写目标服务识别的模型名,不能用 Claude Code 的别名(如 opus) |
| 工具调用 | 自动在 Anthropic tool_use ↔ OpenAI tool_calls 之间转换 |
| 思维模式 | OpenAI 兼容模式不支持扩展思维(--thinking),此参数会被忽略 |
| 1M 上下文 | [1m] 后缀不适用于第三方模型 |
| 优先级 | 配置文件中的 provider 字段优先于 CLAUDE_CODE_COMPATIBLE_API_PROVIDER 环境变量 |
haiku 时进入计划模式,自动升级到 Sonnetopusplan 别名:计划模式用 Opus,普通模式用 Sonnetclaude-opus-4、claude-opus-4-0、claude-opus-4-1 自动重映射到当前 Opus 版本CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP=true 可禁用此行为Claude-Code/
├── src/
│ ├── wechat-mode/
│ │ ├── interactive-bridge.ts # 交互式微信桥(核心)
│ │ │ WebSocket 接收、ASR/图片识别、
│ │ │ 天翼云 OSS 上传、REPL 消息注入
│ │ └── index.ts # 独立无头模式(备用)
│ │
│ ├── tools/
│ │ ├── WechatSendImageTool/ # 发图片工具
│ │ └── WechatSendFileTool/ # 发文件工具
│ │
│ ├── utils/
│ │ ├── wechatHook.ts # 桥接钩子(零依赖单例)
│ │ └── messageQueueManager.ts # REPL 消息注入队列
│ │
│ ├── entrypoints/
│ │ └── cli.tsx # 启动入口,自动挂载微信桥
│ │
│ ├── main.tsx # onTurnComplete 回调注册
│ └── screens/REPL.tsx # 交互式终端(React + Ink)
│
├── wechat-config.json # 微信配置(不提交到 git)
├── wechat-config.json.example # 配置模板
└── package.jsoncli.tsx 检测到 --dangerously-skip-permissions + wechat-config.json 存在,调用 startWechatInteractiveBridge()interactive-bridge.ts 建立 WebSocket 连接到微信 Hook 服务wxid 入队(pendingWechatSenders),文字内容通过 enqueue() 注入 REPLREPL.tsx 触发 onTurnComplete(messages)main.tsx 调用 notifyWechatTurnComplete(messages)interactive-bridge.ts 的回调从 messages 中提取最后一条助手文本wxid,调用微信 API 发送回复WechatSendImage/WechatSendFile,文件先上传 OSS 再发送bypassPermissions),无需逐条确认,可直接执行 Bash 命令、读写文件、调用所有工具。