webot 是一个独立运行的微信机器人桥接程序,用来把微信消息接到本地 codex cli,再把结果回传到微信。
当前这版已经支持:
- 微信扫码登录
- 长轮询接收私聊消息
- 调用本地
codex exec - 把文本结果回发到微信
- 把本地图片、视频、文件通过微信官方媒体链路发回微信
- 通过本地 MCP server 把“发文本 / 发文件 / 发图片 / 发视频”能力暴露给 Codex
- 为每个微信用户维护一份有上限的短记忆,避免原始聊天记录无限膨胀
当前限制:
- 单账号
- 仅私聊
- 同时只处理一个请求
- 没有任务队列
- 没有群聊支持
在项目目录中执行:
npm install
Copy-Item .\webot.config.example.json .\webot.config.json然后按需修改 webot.config.json,重点字段:
workspaces:允许访问的工作区defaultWorkspace:默认工作区allowedSenders:允许使用 bot 的微信用户 ID,留空表示不限制codex.command:默认是codexcodex.sandbox:当前建议使用danger-full-accessbehavior.memory:每个用户的短记忆配置media.cdnBaseUrl:微信媒体上传地址
注意:
- 不要把你自己的
webot.config.json提交到仓库 - 本地登录态保存在
%USERPROFILE%\.webot
node .\src\cli.mjs login也可以直接运行:
.\login.cmd扫码确认后,本地状态会写入:
%USERPROFILE%\.webot\state.json
启动:
.\start.cmd重启:
.\restart.cmd停止:
.\stop.cmd脚本已经做了单实例处理,避免同一台机器上重复启动多个 webot 进程。
webot 自带一个本地 stdio MCP server,供 Codex 直接调用微信回传能力。
启动方式:
npm run mcp当前提供的工具:
webot_get_session_contextwebot_send_textwebot_send_filewebot_send_imagewebot_send_videowebot_send_pathswebot_resolve_workspace_path
这些工具内部会自行处理:
- 微信会话上下文
getuploadurl- AES-128-ECB 加密
- 微信 CDN 上传
sendmessage
也就是说,Codex 不需要理解底层微信协议,只需要调用高层工具。
支持以下命令:
/help/repos/use <name>/where/reset/repo <name> <prompt>
如果 allowPlainTextPrompt 为 true,普通文本会直接作为当前工作区下的 Codex prompt 处理。
一条微信消息的大致流程如下:
webot通过getupdates收到消息- 根据发送人确定工作区和微信会话上下文
- 把当前用户的短记忆和本轮消息一起交给
codex exec - Codex 需要把结果真正回到微信时,优先调用
webot-mcp webot根据结果决定是否还需要补发文本或媒体- 最终把纯文本、图片、视频或文件送回微信
webot 没有复用 OpenClaw 的完整运行时,但复刻了它公开暴露出来的关键微信协议面:
get_bot_qrcodeget_qrcode_statusgetupdatesgetuploadurlsendmessagegetconfigsendtyping
媒体发送链路参考了官方微信插件的实现方式:
- 申请上传 URL
- 本地 AES-128-ECB 加密
- 上传到微信 CDN
- 使用媒体引用调用
sendmessage
需要注意:
- 这不是稳定公开 SDK,远端协议后续可能变
- 原生 Windows 上跑
codex exec仍可能碰到兼容性问题 - 当前还没有队列、审计日志和更严格的权限控制
如果要长期用,建议继续补:
- 更严格的
allowedSenders - 对写操作增加确认机制
- 审计日志
- 队列化执行
- 更完善的错误恢复