Set up
Runs on your computer. Pick your agent and operating system.
Before you start
- Node.js 20 or newer
{
"mcpServers": {
"wezard": {
"command": "npx",
"args": [
"-y",
"wezard"
]
}
}
}same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12
Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs
README
synced Oct 25, 2026- 🪞 远程控制本机 Agent CLI — 企业微信里发的消息原样落进 CLI 输入框;Agent 的回复、工具调用、思考过程实时同步回聊天。回到电脑前
tmux attach -t wezard接着干,对话一字不少。支持claude/claude-internal/codebuddy/codex。 - 🛎 远程审批 — Agent 要跑
Bash/Edit时审批卡直推 IM:✅放行一次、⏱一段时间内自动放行、✅总是记成规则、❌拒绝。危险操作(rm/ 强推 /DROP/ 敏感路径)每次都要单独确认;做完计划推计划卡(✅同意/✏️继续改),Agent 提的选择题变成投票卡。 - 🧙 多 wizard — 每个会话是一个有名字的 wizard,写作
.name,全局唯一,在任何群里都叫得到;有职责、有记忆,看得见彼此在干什么。克隆一个分身让它继承当前上下文,或者从白板新起一个;按活的难度挑档位(mini→ultra,从 haiku 到 opus·max)。 - 🎩 管家分派 — 没点名的话落到聊天的默认 wizard:一两句能答完的它自己答,其余一步
dispatch给对口的那个或新起一个;要 coder + reviewer 来回几轮的复杂活交给一个 lead 带队。管家有手闸,想自己埋头改代码会被拦下改去分派。 - 📮 派完就放手 — wizard 之间派活不必守着等:对方那一轮一结束,守护进程把它的结论作为新的一轮自动送回发话方;对方反问(
NEED:)就接着答,闲着不交差会被追问一句,没了结的事由守护进程替管家记着。 - 🔝 顶层模式 — 开了之后群里只有管家和你点名的那个说话,wizard 之间的往来全在私下,结论由顶层用自己的话讲给你。
- 🧠 三层记忆 — 自己的、本群共享的、本工作区共享的。「这个仓库 reload 要先 build」这类约定写一次,之后每个新 wizard 开局就知道;共享的两层由守护进程定时起一个整理者去重合并。
- 🪪 rolepage — 每个 wizard 视角下的 IM:
⌘K搜遍 role / 会话 / 消息,关系图看清谁和谁对过话,工单页看一次分派的全过程,用量条一眼看出模型、档位、上下文、token 与估算费用。 - ⏰ 定时任务 — 「每个工作日晚上 9:30 跑一遍回归」,到点自动起一个 wizard 去干,结果发回群里;可以设成「有事才说」。任务本身是一个可以直接编辑的
.mjs文件,存盘即生效。 - 🔍 详情页与主动汇报 — 每次工具调用、审批请求都有详情页,IM 里点链接看完整 input / result / git diff;Agent 也能主动把一段话贴进任意一个群。
- 🎛 说人话改配置 — 「把这个群改成顶层模式」「hard 档换成 opus·max」,它查清这一项的说明与默认值再改;放权类的改动(审批、白名单)推一张确认卡等你点。
- 📄 企业微信文档 — 新建在线文档、写 Markdown、读文档链接、操作智能表格。
- 🔄 重启即续 — 电脑重启 / tmux 关了 / daemon 崩了都不掉档:下一条 IM 消息自动把会话拉起来,历史完整继承。
- 📎 图片与文件 — 发给机器人的图片、文件、视频落到本机交给 Agent;Agent 产出的截图、文件用
send_file发回聊天(企业微信与微信两边都行)。 - 💬 绑定个人微信(默认关) — 经微信 ClawBot 扫码绑定,每个扫码的微信号成为一个聊天,用法与企业微信群一致;审批卡在微信里变成编号菜单。受微信侧限额约束,适合随身遥控。
- 快速开始
- 双向镜像
- 多 wizard 协同
- 任务编排
- rolepage
- 聊天命名
- 定时任务与跨群通知
- 说人话改配置
- 图片与文件
- 绑定个人微信
- 企业微信文档
- 多 CLI 后端
- 常用命令
- 常见问题
- 深入了解
- 参与贡献
- License
快速开始
前置:macOS / Linux、Node ≥ 20、tmux、PATH 里能找到 claude / claude-internal / codebuddy(至少一个)、企业微信「智能机器人」的 botId + secret。
1. 安装并初始化
npm install -g wezard
wezard init
按提示填 botId / secret、选要用的 CLI(可多选)、选是否开启远程审批,其余自动完成。
2. 绑定默认会话
init 提示后,在企业微信里给机器人发:
将本对话设置为默认会话
口令 10 分钟内有效。全新安装时,直接单聊机器人发任意消息即可,无需口令。
3. 开始使用
- 发首条消息:在企微里随便说句话(比如
hi),回复会流式推回 IM。 - 切到你的项目:对 AI 说「切到 /path/to/proj」,收到 📂 项目回执即完成,
/pwd随时确认。 - 审批:Agent 要跑
Bash/Edit时 IM 弹按钮卡,点❌/⏱10h自动过/✅总是/✅;点卡片里的链接看完整 input / result / git diff。 - 查命令:发
/h拉出命令表——/new开新会话、/clear清上下文、/sessions切换、.name叫任意 wizard、/usage/cost查额度。
双向镜像
左边是企业微信里的一句话(连同两张截图),右边是 tmux 里的 CLI:同一句话原样落进输入框,Agent 接着排查、改代码,进展一路回到聊天。
- IM → CLI:企业微信里发的消息由守护进程
tmux paste-buffer进 CLI 的输入框——这是唯一能让远程消息出现在你本机窗口里的通路,你坐回电脑前看到的,就是它替你敲的那一行。图片随消息一起贴进去;尾巴上那段<system-reminder>是守护进程顺手捎给它的群况(谁在、忙不忙),不占一轮对话。 - CLI → IM:Agent 的回复、工具调用、思考过程实时推回聊天。默认只推聊天自己发起的那一轮:你在电脑前敲出来的轮次只记进 rolepage,不刷群;审批卡、投票卡和
[mirror]通知不受这条限制。 - 随时接管:
tmux attach -t wezard回到那个 pane 接着干,对话一字不少。
多 wizard 协同
一个绑定了聊天的会话叫一个 wizard:有自己的终端、工作区、名字和职责,知道还有谁在,也叫得动它们。名字全局唯一,写作 .name——不管它住在哪个群,在任何群里都叫得到。
创建
.docs /new 让一个叫 docs 的 wizard 在这个群里就位
.api 看下这个报错 开头写一个还不存在的 .api = 就地叫出一个新的 api,并把这句话发给它
/new 重开本聊天默认的那个
叫它
消息里任意位置带一个已有的 .name,就发给那个 wizard;不带 .name 的消息发给本聊天默认的那个。在哪个群叫它,回复就回到哪个群。
.docs 帮我把 README 的目录补一下
帮我看下这个报错 .api
/pwd .docs 只看 docs 的工作区
/stop .api 只打断 api
/clear .docs 只清 docs 的上下文
非默认 wizard 的每条回复都带 .name: 头(群的默认 wizard 在自己群里不带头——人本来就在跟它说话),在群里引用它的气泡就等于跟它说话。句中的 a.ts、.gitignore 这类不会被当成名字。
管家
每个聊天的默认 wizard 是这个群的管家,默认跑 light 档(models.steward,可按群在 chatPolicy.<chat>.steward 覆盖)。没点名的话都落到它这儿——一两句能答完的(问进度、谁在干什么、闲聊)自己答;要读很多代码、改文件、跑很久的活,哪怕它自己做得了也派出去:它一忙,这个群里没点名的话就都排在它后面。
派活是一步 dispatch:守护进程先列候选——谁的职责、最近的话、读过的文件和这件活有交集,在不在同一个工作区,忙不忙,上下文多重、缓存冷没冷——再给一个默认决定:证据够强、不忙、接着用那段上下文划算的头一个候选就交给它,否则从白板新起一个,档位按活定(一句话小活 light、常规 standard、带队 hard)。管家照办,或显式推翻(点名、硬要新的、换档)。
复杂的活交给 lead:要 coder + reviewer、来回几轮的,管家开一张需求单交给一个 hard 档的 lead。lead 自己开工单、按需分身写代码,reviewer 必须从白板起步、不带作者的上下文;管家和你都只面对 lead。交付之后你说「好」它归档,说「不对」它让 lead 返工;一直没人验收,管家会隔一阵在群里提一句(4 小时 → 1 天 → 2 天,只在白天)。
flowchart LR
msg["群里一条消息"] -- "点了 .name" --> direct["直达那个 wizard"]
msg -- "没点名" --> butler(["管家"])
butler -- "一两句的事" --> self["自己答"]
butler -- "要组队的复杂活" --> lead["hard 档 lead"]
butler -- "其余 · dispatch" --> pick{"有对口、不忙、<br/>划算的 ?"}
pick -- "有" --> exist["交给它"]
pick -- "没有" --> fresh["白板新起一个"]
手闸:管家常常说着分派、实际埋头自己干。守护进程在审批链最前面拦它——改文件、开子代理一律拒;读、搜、跑命令每轮最多 4 次(chatPolicy.<群>.stewardBudget),超了就拒并叫它 dispatch。放行窗口、✅总是、跳过所有审批都压不过这道闸。
转交默认是公开的,但顶层模式默认开着:把某个群显式写成 chatPolicy.<群>.topOnly = false 之后,群里才会出现一条 .管家 → .它 的气泡、它的回复也直接发进这个群(管家只回一句「已转给 .它」);默认(不写)顶层模式是开的,wizard 之间的往来一律私聊,群里只看到管家自己的结论。
顶层模式(默认开):你在这个群里只和顶层 wizard(管家,以及你 .name 点名的那个)打交道。wizard 之间的派活、反问、回执一律私聊,只在 rolepage 看得到;被派活的 wizard 不能往群里发通知,结论回到顶层,由它用自己的话讲给你——讲结论、取舍和要你拍板的,不贴过程。想让某个群照旧(人能看见 wizard 之间说话,默认会话也自己动手干活):对管家说「这个群关掉顶层模式」即可(chatPolicy.<群>.topOnly),即时生效。
名字
| wizard | 名字 |
|---|---|
| 聊天的默认 wizard | 聊天的名字(见聊天命名) |
.docs /new 叫出来的 / 分身 | 你给的那个名字 |
| 撞名 | 自动加后缀:fix → fix-2;对方若已静默超过一天,则直接接手这个名字 |
名字支持中英文、数字、_、-,最长 32 个字符,大小写不敏感。
直接对它说人话
| 对它说 | 效果 |
|---|---|
| 你叫什么 / 你负责什么 | 报出自己的名字、职责和分身 |
| 以后你就叫 sanitizer | 改名,历史和上下文不受影响 |
| 记住:发版前必须更新 CHANGELOG | 写进它的长期记忆,/clear 之后仍在 |
| 记到这个群 / 这个仓库的记忆里 | 提交到群或工作区的共享记忆,之后来的 wizard 开局就知道 |
| 还有谁在跑 / 谁在弄那个项目 | 列出全部 wizard:名字、职责、忙闲、谁是谁的分身 |
| 让 .fix 看一眼这个报错 | 它把活交给 .fix 就放手去干别的,.fix 的结论自动送回来,它再答你 |
| 分个身去把这三个目录都扫一遍 | 分出三个带着当前上下文的分身并行干,干完收掉 |
| 还有哪些事没了结 | 管家列出派出去还在等的、等你拍板的、超时没回的 |
| 这个群关掉顶层模式(默认是开的) | 关顶层模式,wizard 之间的往来回到群里可见 |
| 切到 /path/to/proj | 换工作区,重开会话 |
- 记忆分三层:自己的、本群共享的、本工作区共享的。「这个群习惯先出方案再动手」「这个仓库 reload 要先 build」不必每来一个新 wizard 再教一遍。共享的那两层是提议——守护进程每 30 分钟看一眼,有提议才起一个整理者去重、改写、合并(已经写在仓库
CLAUDE.md里的不再收),所以不会立刻生效,也不会被几十个 wizard 越写越长;合并后在场读这份记忆的 wizard 下一条消息会收到一行「记忆已更新」。 - 分身继承上下文:分身开局就带着原 wizard 读过的全部材料,原 wizard 不受影响;也可以生一个白板的子 wizard,顺便换个工作区。分身还能再分身。
- 模型按档挑:生分身时给一个档位,由轻到重
mini/light/standard/hard/ultra(缺省 haiku·low / haiku·low / sonnet·medium / opus·high / opus·max,models.tiers可改);也可以直接点模型与 effort,/new [cli] [model]同理。档位直接带进启动参数,死 pane 重生、交接重开都沿用。 - 派完就放手:wizard 之间说一句就走,不守着等;对方那一轮一结束,守护进程把它的结论作为新的一轮送回发话方(约 0.2 秒内,由 CLI 自己的忙闲事件触发)。每件活有件号:对方可以收口成
NEED:反问,发话方接着答同一件;对方闲着却迟迟不交差,满 5 分钟守护进程代问一句「进展如何」;超时(默认 1 小时)、对方没了、被撤回也会回一份说明——「没有答案」也是答案。对方正忙时默认等它这一轮结束再投,急事可以打断它或直接插话。 - 群里只留结论:wizard 之间派活、来回默认是私聊,不刷群;生分身、收工、交接、工单这类过程也不进群。群里只出现回给你的那条回复、通知、定时任务的 ⏰,以及它们主动公开的讨论。过程想看去 rolepage。
- 上下文过了 200k 自己交接:手上这摊告一段落,它就把工作压成一份简报、原地换一个全新会话接着干,名字和职责都不变——交接不是压缩,大上下文每一轮都在付钱。交接那几秒里进来的话(人说的、同伴派的、回执、定时任务)一律等它重开完再送进去,一句不丢。
任务编排
遇到「读完材料才知道要分几路」的活,wizard 自己拆、自己派、自己等、自己汇总:
sequenceDiagram
autonumber
participant U as 群里的人
participant W as 发起的 wizard
participant K as 分身 ×N
U->>W: 一件要分几路的活
Note over W: 先读完公共材料, 开一张工单
W->>K: 分出 N 个分身,各领一份活
Note over K: 并行干活,过程只在 rolepage
K-->>W: 结论自动回执(第几份 / 还差几份)
Note over W,K: 没写 RESULT 的那份自动打回一次
W->>U: 用自己的话汇总(群里只有这一条)
Note over W,K: 收工, 为这单活生出来的分身整批回收
- 群里只有最后那一条:开工、派活、回执、收工都不进群,只记进工单页;你看到的是发起者自己那一轮的汇总,沿着你问它的那条链回来。
- 材料只读一遍:分身是从发起方的上下文里分出来的,不用各自重读。
- 并行:几路同时干,总耗时只取决于最慢的那一路。
- 齐了才汇总:回执是陆续回来的,守护进程按成员替它数——每一份都写着第几份、还差几份,最后一份明说「全部到齐」,它才汇总收工。分几批派的可以先定好总份数。
- 验收与刹车:成员交上来的没有
RESULT:收口(或要求列交付物却没列),守护进程替发起者打回一次;工单可以设派活预算,反问、续问来回兜圈也会撞上限停下。 - 自动回收:收工时为这单活生出来的分身一并收掉;被拉来帮忙的长期 wizard 不受影响。收工结论留档进发起者的情景记忆。
- 层级:复杂的活是两层——管家只面对 lead,lead 再开自己的工单带 coder / reviewer。每层直接成员不超过 5 个、深度不超过 3 层;下层的结论一层层冒泡回去,不越级。
流程固定的循环(几个 wizard 互相评审、迭代到收敛)可以让它搭成一条流水线,按轮次跑,达到约定的结束条件就提前收工。
rolepage
点气泡头的 .name,打开那个 wizard 的 rolepage——它视角下的 IM(页首那张截图就是管家 .wezard 的 rolepage):
- 侧栏:它参与的每个群聊,以及与人、与其他 wizard 的单聊;群下展开与它有往来的成对子项(切到「全部」再列出群里其他 role)。也可以切成关系图,两者是同一份数据。
- 消息窗:它发的靠右,收到的靠左;每一轮的工具调用收进一个可折叠的虚线框,派活、移交各占一行,终句是一颗气泡;多方会话里模型 / ctx / 耗时写在名字那一行,进行中的那一轮按秒走表。守护进程挂在消息尾巴上的
<system-reminder>收成一个小标签,点开看原文。 - 两种视角:点头像或名字,整页切到那个 role(名片、侧栏、关系图中心都换);点卡片、会话项的其余地方或气泡对侧的空白,只换详情区里谁靠右,气泡带动画换边。
- 未读:会话项右边的红点只数点开这一项看得到的;名字旁的数字是切到那个 role 之后它能看到的全部未读。已读全局只记一份,在任何一处读过,各处一起消掉。
⌘K搜索:按 role 名字、会话名、消息正文搜,键盘选中回车直接跳到那个会话的那一句;空查询时是最近会话的快速切换器。- 关系图:一棵树把家谱(谁是谁的分身)和对话(谁和谁说过话、几次)画在一起,人也是节点。卡片就是会话项——排序、最近一句、时刻、未读、忙闲都和会话列表同一份实现;点卡片打开它与图上相连者之间的往来。
- 工单页:经手过工单的会话与关系挂 📋,点进去按时间排开开工(成员与各自状态)、派活、回执、收工结论;对话里的回执挂一枚「↩ 回执 · 已交 / 反问 / 超时 · 第 i/n 份」,点它跳回派活那句。
- 忙闲:空闲 / 执行中 / 等人点(停在审批卡或提问卡上,紫色)/ 已关闭。
- 用量条:页脚两条,一条是当前视角,一条是窗口对端那个 wizard——模型与 effort 档位、估算费用(按 LiteLLM 价格表逐轮计)、轮次、工具调用、API 请求、上下文,以及 cache read / input / cache write / output 的分布。
- 名片:名字、职责、工作区、模型与忙闲;点名字复制
.name;历史会话切换(默认看全部);日程列出它名下的定时任务。
聊天命名
给聊天起个名字,它就有了能写进消息的地址——通知发到哪个群、新 wizard 生在哪个群,都写这个名字。它同时也是这个群默认 wizard 的名字。
/name daily 给本聊天起名为 daily
/name 查看当前名字
/name - 取消命名
/chats 列出所有聊天,以及各自跑着哪些 wizard
名字 1–32 个字符,字母 / 数字 / _ / -,全机唯一、大小写不敏感。没起名的聊天会按工作区目录名自动补一个(~/develop/weclaude → weclaude),你起过的名字不会被覆盖。
起了名,在任何群里都可以直接说:
在 daily 里开个 .ingest 跑 ~/repo 在 daily 群里新开一个 wizard
别的群还有谁在跑 列出所有聊天和 wizard
定时任务与跨群通知
定时任务:到点把一句话说给 wizard 听,它就真的去干活,结果照常发回群里。任务常驻在后台,CLI 重启、/clear、会话结束都不受影响。
时间用人话说就行:
| 对它说 | 效果 |
|---|---|
| 每个工作日晚上 9:30 跑一遍回归 | 排一个定时任务,到点新起一个 wizard 去干,干完收掉 |
| 每天早上 8 点在 .daily 里继续整理日报 | 到点把这句话发给已有的 .daily;它正忙就等这一轮结束再说(最多 30 分钟,仍忙才另起一个) |
| 每小时看一眼 CI,挂了再告诉我 | 「有事才说」:到点不预告、私下跑,没事只回一行 QUIET,群里什么也不出现;有事才把结论转进群 |
| 我设了什么定时 | 列出任务、时间和下次触发时刻 |
| 取消那个定时 | 删掉任务 |
认得的说法:每天 8:00、每个工作日晚上9:30、每周三下午3点、每隔两小时、每 30 分钟、20 分钟后、明早 9 点。每个 wizard 排的任务列在它 rolepage 的「日程」里。
跨群通知:让 wizard 把一段话贴进另一个群给人看,比如一个长活在 build 群跑完,把「🔴 回归挂了 3 例」送到 ops 群。
说人话改配置
不用打开 config.jsonc,对 wizard 说就行:
| 对它说 | 效果 |
|---|---|
| 现在模型档位是怎么配的 | 逐层列出这一节的每一项:类型、当前值、默认值、说明,标出哪些要人确认、哪些要 reload;models 下附各档本周 / 今日用量 |
| 这个群关掉顶层模式 | 写 chatPolicy.<群>.topOnly = false,即时生效(默认是开的) |
| hard 档换成 opus·max | 先预演给你看改前改后的 diff,再落盘,注释原样保留 |
| 只审危险操作 | 改 approval.mode——这类放权改动由守护进程推一张确认卡,你点了才写 |
- 改动经 zod 整份校验才落盘;热生效的项写完即生效,其余提示
wezard reload。 - 放权项(
approval.*、wrc.allowFrom、CLI 二进制与启动参数、监听地址等)一律推卡确认,跳过所有审批也压不过;bot.*与 secrets 里的字段读写都不行。 - 改动若影响到 wizard 的宪章(比如顶层模式开关),受影响的 wizard 会在下一条消息里收到「交接一下才按新规矩办」的提醒。
图片与文件
- 收:在企业微信里发给机器人的图片随消息贴进 CLI 输入框;文件、视频解密后落进
wrc.mirror.inboxDir(默认~/.wezard/inbox,超 7 天自动清理),以一行[文件: <路径> (<大小>)]交给 Agent;语音只有企业微信给的转写文字。企业微信只在单聊里推送图片 / 文件 / 视频 / 语音,群里 @ 机器人带图走图文混排。 - 发:对 Agent 说「把截图发给我」,它调 MCP 工具
send_file({path, kind?, to?, caption?}),默认发到本轮所在的聊天。企业微信侧上限:图片 png / jpg / gif ≤10MB、视频 mp4 ≤10MB、语音 amr ≤2MB、其余文件 ≤20MB;超限直接报错并给出改法。
绑定个人微信(默认关)
经腾讯的微信 ClawBot(iLink)把个人微信接进来:每个扫码绑定的微信用户成为一个聊天,与企业微信群同构——有自己的默认 wizard,.name 点名、叫出新 wizard 都照常。
- 开启:
weixin.enabled是放权项,对 Agent 说「开微信通道」,点确认卡后wezard reload。 - 绑定:审批人在任意聊天发
/wx bind [聊天名](或终端wezard wx bind,会先推一张确认卡),二维码回到发起的聊天,用要绑定的那个微信扫码并确认;微信上显示配对码时发/wx code <码>。 - 绑定成功后先在微信里给「微信 ClawBot」说一句话——对方开口之前机器人不能发消息。
须知:
- 微信里只有纯文本:markdown 降成纯文本,审批 / 提问卡变成编号菜单(
【1】允许 【2】… · 短码 k7q),回1或k7q 1作答。 - 送达受微信限制:人每说一句之后只能回有限几条(
weixin.sendCap,默认 3),连发会合并、超出的压着,人再说话时补发;被频控会暂停出站;人说完话超过weixin.ctxTtlSec(默认 120 秒)后,微信会静默丢弃主动推送——这之后的消息压着、在企业微信里提醒,等对方下次开口时补发;所以发往微信的定时提醒做不到准点。 - 图片 / 文件 / 视频双向可收发(单文件 ≤25MB);不发语音条。
/wx看状态,/wx unbind <序号|聊天名>解绑(聊天与记录保留)。一个微信号同时只能连一个 Claw,绑这里可能让别处(OpenClaw / WorkBuddy 等)的绑定失效。扫码提示「运行环境存在风险」多半是本机出网 IP 被风控,关掉 VPN / 全局代理再试。
企业微信文档
对 Agent 说「把周报整理成一篇企业微信文档」,它会新建在线文档、写入内容,把链接贴回会话。同样可以读文档链接、操作智能表格。文档归属到你本人。
首次使用需在企业微信「工作台 - 智能机器人 - 可使用权限」里勾选「文档」「智能表格」。实现细节见 技术说明。
多 CLI 后端
claude / claude-internal / codebuddy 可以同时用:一个会话跑 claude,另一个跑 codebuddy,各自绑不同的聊天或 wizard。
/new 沿用当前会话的 CLI 新开
/new codebuddy 换到 codebuddy 新开
.docs /new codebuddy 用 codebuddy 叫出一个叫 docs 的 wizard
会话一直留在它所属的 CLI 上,/clear、重启自愈都不会换。默认后端由配置项 wrc.defaultCli 决定(缺省 claude)。
常用命令
IM 里发 /help 可随时拉出完整命令表;每次 /new、/clear 之后,回执会随机附一条功能提示,用来慢慢摊开命令面。
/new · /clear · /stop · /n · /kill 会话控制(/kill 连 pane 一起收掉)
/sessions [emoji|id] 列出 / 切换 live 会话
[.name] /new <cli> [model] [第一句] 切换 CLI 后端 / 挑模型 / 叫出新 wizard
/reveal 把终端的 tmux 窗口切到本会话
/peers · /wizards 本聊天的 wizard:名字、职责、忙闲、家谱
/name [名字|-] · /chats 给本聊天起名 / 跨聊天目录
/wx · /wx bind|code|unbind 微信 ClawBot:状态 / 扫码绑定 / 解绑(审批人)
/id · /pwd · /usage · /cost · /audit 信息查询(免授权)
/cfgsync [apply] 预演 / 执行跨 CLI 项目配置同步
/help 全部命令
本机 shell:
wezard status # 看 daemon + WS 健康
wezard logs -f # 实时日志
wezard send <chat> <text> # 主动推消息
wezard sync # 重写 hook/MCP/env 进各 settings.json
wezard wx [bind|list|unbind] # 微信 ClawBot:终端扫码绑定 / 查看 / 解绑
wezard reload # 重启 daemon(改了配置后用)
wezard migrate # 一次性:从旧名 weclaude 迁移到 wezard
wezard unsync # 卸载 hook/MCP(保留 daemon)
wezard uninstall # 完整卸载(先于 npm uninstall)
⬆️ 升级:
npm i -g wezard@latest装新版二进制,再wezard sync && wezard reload刷新 hook/MCP 注入并重启 daemon(幂等,~/.wezard/的 config/secrets 原样保留)。
wezard migrate只用于从旧包名weclaude迁移(搬~/.weclaude→~/.wezard、重装 daemon/插件),普通版本升级用不到。⚠️ 卸载顺序:先
wezard uninstall再npm uninstall -g wezard。否则 launchd/systemd 会一直尝试拉起已删除的二进制。~/.wezard/下的 config/secrets 不会被清,二次安装可无缝复用。
常见问题
Q: hook 不触发?
cat ~/.claude/settings.json | jq .hooks.PreToolUse,没东西就跑 wezard sync 重写。
Q: 卡片点了没反应? 企业微信卡片就地刷新只有 5 秒窗口,超时不刷新是正常的,决策本身仍然生效。
Q: daemon 起不来?
wezard logs -f 看;常见是 botId / secret 写错卡在 WebSocket 鉴权。
Q: daemon 反复崩溃重启?
~/.wezard/daemon.stderr.log 里出现 spawn EBADF 就是 fd 软上限被几百个会话吃光了。别去改 ~/Library/LaunchAgents 下那份 plist——install.sh 会从模板重新生成它,改 launchd/com.wezard.daemon.plist.template。
Q: 多机部署?
config.jsonc 可以纳入 dotfiles;secrets.json 每台机器独立填。第二台机器跑 wezard init 会跳过覆盖提示,但仍要重新走 claim 步骤拿本机 IM principal。
深入了解
- 技术说明 — 架构、消息双向同步、
.name路由与频道、wizard 网络(身份 / 记忆 / 分身 / 感知 / 分派 / 编排 / 回执 / 交接)、顶层模式、rolepage、缓存冷热判定、文档 MCP 桥接 - 审批配置 — 审批粒度、danger 名单、跳过开关的优先关系、完整判定链
- CLAUDE.md — 模块级职责与代码约定
- CHANGELOG.md — 各版本变更
参与贡献
欢迎 issue / PR。本地开发:
git clone https://github.com/guxi11/wezard.git
cd wezard && npm install
npm run build # tsc → dist/
npm run typecheck # tsc --noEmit
npm run dev:daemon # tsx 直跑 daemon,热迭代不用装
./cli/wezard.sh reload # 重编译并重启常驻 daemon
./cli/wezard.sh logs -f
架构与模块职责见 CLAUDE.md。提交前跑一遍 npm run typecheck;无测试套件,别伪造测试命令。
License
Codex backend
安装 Codex CLI 并先在终端完成 codex login 和工作目录信任确认,然后设置 ~/.wezard/config.jsonc:
{
"wrc": {
"defaultCli": "codex",
"cliBackends": { "codex": { "bin": "codex" } },
"extraArgs": [],
"mirror": { "projectsDir": "" }
}
}
执行 wezard reload 后,企业微信 /new 使用配置的默认后端 Codex,即使该聊天之前绑定的是 Claude;/new claude 等显式参数可覆盖默认值。已有会话的恢复仍使用原后端。旧配置中的 Claude 模型档(opus / sonnet / haiku)不会作为 Codex 模型参数传入。bin 可以填写绝对路径,适合 launchd 的精简 PATH。
Codex 会话从 ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl 发现(支持 CODEX_HOME),按 session_meta.cwd 匹配工作目录。镜像支持用户消息、助手回复、工具调用与结果、公开的思考摘要;加密思考不展示。新会话的 UUID 由 Codex 分配,daemon 通过 Codex CLI 自带的临时 app-server 创建、恢复或克隆会话,并调用 thread/name/set 持久化日志,随后立即创建 tmux pane,运行 codex resume <id> 并绑定会话。无需初始化消息,不产生模型请求,也不需要额外 SDK 或常驻服务。已验证 Codex CLI 0.162.1,启动采用 --no-daemon 独立进程。模型使用 --model,推理强度和 wizard 身份使用 -c 配置覆盖。wezard 启动的 Codex 会话自动配置 wezard MCP server,无需写入全局 TOML。
Codex 支持企业微信工具审批卡:PreToolUse 使用 wezard 的审批策略,PermissionRequest 将 Codex 的沙箱 / 网络权限请求转成单独的确认卡。沙箱权限不会沿用普通工具的自动放行窗口或跳过开关;拒绝规则仍生效。允许与拒绝会回传给 Codex。守护进程断线或审批超时后,普通工具请求被拒绝,原生沙箱权限请求回到 Codex 的本地审批界面。Codex 的交互提问仍需在终端处理。
wezard 启动的会话自动装载审批 hook,并只信任当前 wezard hook 的精确哈希。手工启动 Codex 时,在 wezard 配置中添加同步目标并执行 wezard sync:
"sync": {
"targets": [
{ "kind": "codex", "settingsPath": "~/.codex/hooks.json", "scope": "user" }
]
}
保留已有同步目标。使用 CODEX_HOME 时将路径改为该目录的 hooks.json。同步保留第三方 hook,使用 Codex 自身的配置接口更新 config.toml 中的精确信任记录;重复同步不会重复注册,wezard unsync 可移除 wezard 的注册。daemon 在 /new 时绑定已知的会话 ID、日志路径和 pane;SessionStart 更新原生会话切换后的身份,支持同目录多个会话。创建和恢复会话都不发送初始化消息。
项目配置同步不将 Claude 的 commands / agents / memory 自动复制给 Codex。运行中的模型和推理强度切换请使用 Codex 终端的 /model;新开会话可指定 model 与 effort。Claude 专用的 --disallowedTools 参数在 Codex 启动时忽略,其余 extraArgs 必须使用 Codex 支持的参数。
wezard status 的 wsConnected 与 ws.authenticated 表示已完成企业微信认证;ws.phase、ws.reconnectAttempts 和 ws.lastError 显示连接阶段与最近错误。握手超时会触发重试;被重复机器人连接踢下线时显示 kicked。执行 wezard reconnect 可重建连接,保留运行中的会话与审批请求。
连接认证成功不代表收件人有效。审批日志出现 93006 invalid chatid 时,检查 defaultChat 或本轮镜像频道的用户 / 群 ID,并在对应机器人会话中发送消息确认其可用;不要用放行配置绕过发送失败。
CLI 参数参考 OpenAI 官方文档,审批协议参考 Codex hooks。