中文 | English
把个人微信账号接入本机 OpenAI Codex。
codex-weixin 是一个跨平台、本机运行的微信到 Codex 专用服务。启动后会打开 Web 管理页;用户在页面扫码登录微信,即可从微信私聊控制本机 Codex、管理工作目录和切换会话。
微信账号 <-> codex-weixin <-> 本机 Codex <-> 允许的工作目录
它不是通用消息网关,不接入其他聊天平台,也不把管理页面开放到局域网或公网。
微信端可以发送文本、图片、音频、视频和文档给 Codex,单个附件最大 100 MiB。Codex 也可以把本机图片、视频和文件作为微信原生消息发回。
支持微信语音转写,可以直接用语音向 Codex 下达任务;没有转写文本的语音会作为本机附件交给 Codex 处理。
微信端支持 /status、/api、/new、/resume、/bind、/model、/effort、/stream、/goal、/目标、/prompt start、/prompt done 和 /stop,可以管理 API、会话、工作目录、模型、推理强度、目标模式和过程进度。
过程进度默认开启。Codex 处理长任务时会持续向微信发送中间进度,Web 端则折叠显示处理过程和用时,最终答案保持完整。
一个服务可以并行运行多个微信账号。每个账号拥有独立的联系人授权、附件、会话和运行状态;移除账号时还可以选择保留历史,重新扫码后继续使用。
Web 端可以按微信账号查看 Markdown 历史、继续同一个 Codex thread,并支持新建、重命名、切换、重置和删除会话。页面也支持直接发送文本和附件,每次最多 10 个文件、合计 100 MiB。
Web 端可以配置工作目录、Codex 后端、模型、推理强度和过程进度,也可以检查并安装新版本。全局 npm 安装会更新当前实际运行的 runtime,完成校验后自动重启并恢复连接。
- Node.js
>=22 - Git
- 已安装并登录 Codex CLI
npm install -g @openai/codex
codex --version
codex推荐从 npm 全局安装:
npm install -g codex-weixin
codex-weixin也可以从源码安装:
git clone https://github.com/vincentw0749-collab/codex-weixin.git
cd codex-weixin
npm install
npm run build
npm install -g .服务会自动打开 http://127.0.0.1:8787。如果不希望全局安装,也可以在项目目录运行:
npm start- 打开管理页,在“设置”中确认 Codex 默认工作目录和允许的工作目录。
- 点击“添加微信”,使用微信扫描页面二维码并确认登录。
- 在微信中给新接入的账号发送任意消息。
- 回到“微信账号”,允许页面中出现的待授权联系人。
- 再次从微信发送消息,Codex 会在默认工作目录中开始处理。
继续添加账号时重复扫码即可。每个账号都有独立的轮询任务、联系人授权、入站文件和会话状态;单个账号发生错误不会停止其他账号。同一个微信账号因登录过期等原因重新扫码时,会刷新原账号凭据并保留本机备注、授权和会话,不会创建新的空账号。移除账号时可以保留会话历史;登录凭据会立即删除,同一微信用户以后重新扫码时会恢复原备注、授权和受管会话。
“会话”页面只管理由本服务创建和使用的 Codex 会话,不扫描或接管其他终端产生的全部 Codex 历史记录。
选择一个会话后,右侧会从 Codex 自身保存的 thread 中读取历史用户消息和最终回复。聊天标题下方可以为当前会话选择模型、推理强度和过程进度,或继续继承全局设置;这与微信 /model、/effort、/stream 共用同一份会话配置。过程进度默认开启,在 Web 中折叠展示并记录处理用时,最终答案仍作为一个完整回复显示。可以直接在页面底部继续聊天,并通过回形针按钮将文本提示词和多个文件作为同一个 turn 发送;Web 和微信共用同一个 thread,上下文会保持连续。上传文件按微信账号和会话隔离保存在 ~/.codex-weixin/inbound/,每次最多 10 个、合计不超过 100 MiB。
页面默认使用账号备注,不把内部 ID 当作账号名称。展开账号卡片中的“账号 ID”可以查看 iLink Bot ID 和 User ID;Codex thread id 仍不在普通页面显示。可以在“微信账号”页面给账号设置只保存在本机的备注;备注会同步用于会话标签。未设置备注时才使用“微信账号 1”这类默认名称。当前扫码和消息接口没有提供微信昵称、头像或个人资料查询能力,因此页面使用默认图标。
- 每个已授权微信账号有一个当前活动会话,也可以拥有多个命名会话。
- “切换”决定该联系人下一条微信消息继续哪个 Codex thread。
- “重置”清空本服务记录的 thread,下一条消息创建新上下文。
- “删除”只删除本服务中的会话记录,不删除 Codex 自身保存的历史文件。
- 微信中的
/new会立即为当前联系人创建新的受管会话。 - 微信中的
/resume会按最近更新时间列出当前联系人的历史会话、最近内容摘要和时间,并为每项生成R1、R2这类独立切换编号;发送/resume R1可切换并继续原来的 Codex thread,不会与“会话 6”这类名称混淆。
/help 查看命令
/status 查看当前 API、会话、工作目录、thread、backend、模型和推理强度
/api 查看已保存 API、编号和当前使用项
/api <编号或名称> 测试并切换 API
/api test <编号或名称> 只测试 API,不切换
/api set <编号或名称> <模型ID> <推理强度> 设置该 API 的默认模型和推理强度
/api add <名称> <URL> [模型ID] [推理强度] 进入安全添加流程,下一条纯文本作为 API Key
/api cancel 取消等待输入 API Key
/1 检测到运行中任务时,中断任务并继续 API 切换
/2 检测到运行中任务时,取消 API 切换
/bind <absolute-path> 绑定到允许列表内的工作目录
/new 创建新的受管 Codex 会话
/resume 查看历史会话、最近内容摘要和序号
/resume R<编号> 按 R 切换编号继续指定的历史会话
/model 查看当前模型和可用模型
/model <序号|模型 ID|default> 切换当前会话模型,或恢复继承设置
/effort 查看当前模型支持的推理强度
/effort <序号|强度|default> 切换当前会话推理强度,或恢复继承设置
/stream 查看当前会话的过程进度设置
/stream <on|off|default> 开启、关闭过程进度,或恢复继承全局设置
/goal 查看当前会话目标模式
/goal <目标> 开启目标模式并立即开始执行,空闲后自动续跑至完成或受阻
/goal pause|resume|clear 暂停、恢复或清除目标;/goaloff、/目标解除可直接关闭目标
/prompt start 开始缓冲多条微信消息
/prompt done 将缓冲内容作为一次 Codex turn 提交
/stop 中断当前 Codex 任务;正在运行的目标会暂停
/api add 会等待 2 分钟。期间下一条纯文本只用于验证 API,不会发送给 Codex 或写入会话记录;验证成功后使用 Windows DPAPI 加密保存,默认不自动切换。需要启用时再发送 /api <编号> 或 /api use <名称>。每个 API 独立保存默认模型和推理强度;切换 API 时会应用这组默认值,并清除旧会话的模型与推理强度覆盖。未知指令会提示发送 /help。
普通消息直接进入当前活动会话。图片、文件、视频和无转写语音会先保存到账号独立的入站目录,再以本地路径加入 prompt;有微信转写文本的语音优先使用转写文本。
Codex 可以在最终回复中声明需要发送的本机文件:
```codex-weixin-actions
{
"send": [
{ "type": "image", "path": "/absolute/path/chart.png" },
{ "type": "video", "path": "/absolute/path/demo.mp4" },
{ "type": "file", "path": "/absolute/path/report.pdf" }
]
}
```
只接受本机绝对路径。原生出站类型为 image、video 和 file;音频按普通文件发送。远程 URL 不会被当作本机文件上传。
默认的 codexBackend 是 auto。第一次收到 Codex 消息时,服务会启动一个持久的 codex app-server --stdio 进程,并使用新版 initialize、thread/* 和 turn/* 协议。新会话和已有会话都优先通过 app-server 运行;如果 app-server 无法启动、握手或处理请求,会自动回退到 codex exec 或 codex exec resume。
微信端目前没有 Codex 审批弹窗,因此 app-server 使用 approvalPolicy: "never",只在现有 Codex sandbox 权限内执行,不会等待一个无法在微信中回答的本机审批请求。管理页仍可把后端固定为 app-server 或 exec,用于排查问题。
“设置”页面会从 Codex app-server 读取可用模型和各模型支持的推理强度。选择“沿用 Codex 设置”时使用 Codex 自身配置;选择具体模型或推理强度并保存后,后续 Web 和微信消息都会使用该配置。
微信中发送 /model 或 /effort 可以查看带序号的选项,再用序号或英文 ID 切换。微信端设置只覆盖当前受管会话,不影响其他微信账号、联系人或会话;发送 /model default、/effort default 可恢复继承 Web/Codex 设置。Web 继续该会话时也会沿用这份会话设置。
IkunCoding 提供方会额外显示 gpt-5.6-sol、gpt-5.6-terra 和 gpt-5.6-luna。切换到其他模型后,这三项仍会保留在下拉列表和微信 /model 列表中。微信发送 /status 可以查看当前生效的模型和推理强度。
服务状态和默认 Codex 工作目录统一放在:
~/.codex-weixin/
accounts/ 微信账号凭据,每个账号一个文件
retained-accounts.json 已移除账号的恢复索引,不包含 token
runtime/<account-id>/ 联系人授权和受管会话状态
inbound/<account-id>/ 微信入站附件
config.json Codex 和工作区配置
logs/
不要提交或分享该目录。管理 API 不会把微信 token 返回给浏览器。
服务始终只绑定 127.0.0.1。可以通过环境变量改变端口、状态目录或关闭自动打开浏览器:
Windows 管理页“设置”中的“开机自启”开关会创建或移除当前用户 Startup 目录中的 Codex 微信 ClawBot.lnk。启用时会自动迁移本项目旧的 微信 Codex 管理台.lnk,其他启动项不会被修改。
CODEX_WEIXIN_PORT=8787
CODEX_WEIXIN_STATE_DIR=/absolute/private/path
CODEX_WEIXIN_OPEN=0
Windows PowerShell 示例:
$env:CODEX_WEIXIN_OPEN="0"
codex-weixin- Web 服务只监听本机,拒绝非本机 Host 和 Origin。
- 所有修改 API 都需要页面运行时临时令牌。
- 微信凭据永远不返回管理页面。
- 未知联系人默认拒绝,必须在管理页明确允许。
/bind只能选择允许列表内的绝对工作目录。danger-full-access会绕过 Codex 文件系统 sandbox;只有接受整机访问风险时才启用。- 多账号可以并行触发 Codex,会共同占用本机 CPU、内存和 Codex 配额。
npm install
npm run dev
npm test
npm run typecheck
npm run build开发入口同样只启动本机 Web 服务。浏览器页面、JSON API、多账号运行时、扫码状态机和受管会话都有自动化测试。
源码目录通过 npm run dev 或 npm start 启动时,Web 只检查新版本,不会自动安装;请通过 Git 更新源码后重新构建。全局安装和独立 node_modules/codex-weixin runtime 会更新当前实际运行的 npm prefix,并在重启前验证目标版本和服务入口。Windows 更新前会自动释放服务进程对包目录的工作目录占用,避免 npm 因 EBUSY 无法替换文件。
项目是独立实现,微信 iLink 接入形态参考 Tencent/openclaw-weixin,并参考了公开的 Codex/微信桥接项目在 Codex app-server、媒体传输和安全边界方面的实践。项目未复制 AGPL 项目源码,使用 MIT License。
版本变更见 CHANGELOG.md。
感谢 LINUX DO 社区佬友的支持与反馈。






