Since v0.5.1 every IM channel listed only the default project. All five adapters passed the default work dir to AdapterHttpClient as the sole allowed project root, so listRecentProjects filtered out everything else; matchProject, listSessions, sessionExists, createSession and listSkills were clamped the same way. Feishu is where it was reported, but telegram, wechat, dingtalk and whatsapp were identical. defaultWorkDir is documented as where a new IM session starts, not as an access boundary. Using it as the boundary failed both ways: configured, it hid every other project; blank, it falls back to PWD/cwd(), which is "/" for a GUI-launched sidecar, so the boundary allowed the whole filesystem. Split the two concepts. allowedProjectRoots is now its own setting (global, per-platform, or ADAPTER_ALLOWED_PROJECT_ROOTS), resolved together with the work dir by resolveAdapterWorkspace so the default project is always inside the boundary and /new cannot fail on inconsistent config. The default is the home directory; it refuses to inherit "/" or any ancestor of home. Pairing remains the primary authorization control, so unusable roots warn and fall back rather than locking the bot out. All five entrypoints now build their client through createAdapterClient instead of repeating the wiring, which is what let one defect appear in five places at once. Known gap, left for a follow-up: a project outside the boundary is still reported as "not found" rather than "outside the allowed directories".
8.0 KiB
title, nav_title, description, order
| title | nav_title | description | order |
|---|---|---|---|
| IM 接入 | 总览 | 把飞书、Telegram、微信、钉钉或 WhatsApp 的私聊接到桌面端,用手机继续同一条会话。 | 0 |
IM 接入
桌面端跑着的会话,可以接到你手机上的 IM 里。绑定之后,在飞书、Telegram、微信、钉钉或 WhatsApp 的私聊里发一句话,就是在驱动本机的 Claude Code:出门前让它跑一个长任务,路上用手机看进度、批权限、换项目。
对话对象是你自己绑定的机器人或账号,消息只经过你本机的桌面端,没有中间服务器托管你的代码。
接进来之后能做什么
- 接着聊同一条会话:手机上发的消息进的是本机的 Claude Code 会话,改文件、跑命令、读代码都在你电脑上真实发生。
- 换项目:发
/projects列出最近用过的项目,回复编号或路径就切过去;/new直接开一条新会话。 - 批权限:Claude 要写文件或执行高风险命令时,会把请求推到 IM 里。飞书和钉钉是可点的卡片,Telegram 是按钮,微信和 WhatsApp 回复一条文本命令。
- 看状态、叫停:
/status看当前项目、模型和运行状态,/stop中断正在跑的这一轮。
前提是桌面端一直开着。IM 侧只是遥控器,真正干活的是你的电脑。
选哪个平台
五个平台的能力是同一套,差别在接入成本和审批体验。
| 平台 | 怎么接 | 适合谁 | 已知限制 |
|---|---|---|---|
| 飞书 | 点「一键创建飞书机器人」用官方模板建一个,回填 App ID 和 App Secret | 国内团队,想要点按钮就能批权限 | 只处理单聊,不处理群聊;改机器人菜单要去开放平台发版本 |
| Telegram | 找 @BotFather 要一个 Bot Token,粘进设置页 |
能连上 Telegram 的个人用户,接入最快 | 只处理私聊;国内网络下需要自己解决连通性 |
| 微信 | 在设置页扫码登录机器人账号 | 只想用微信、不愿再装一个 App | 只处理私聊;权限审批只能回复文本命令 |
| 钉钉 | 在设置页扫码授权,Client ID 和 Secret 自动写入 | 国内企业,钉钉是主力办公工具 | 只处理单聊;要卡片审批得额外配一个模板 ID |
| 用手机 WhatsApp 的「已关联设备」扫码 | 海外用户 | 走个人号的 Web 登录,不是官方 Cloud API;只处理个人私聊 |
拿不定主意就先接 Telegram 或飞书,两者的权限审批体验最好。
配对流程
五个平台的绑定分两层:先让桌面端拿到平台凭据,再让你这个 IM 账号本人通过配对码获得授权。第二层所有平台都一样。
- 打开「设置」→「IM 接入」。
- 在下方的平台 Tab 里完成绑定:飞书和 Telegram 填凭据,微信、钉钉、WhatsApp 扫码。
- 在「默认项目」里挑一个目录。
- 点「保存」。
- 回到顶部的「配对管理」,点「生成配对码」,拿到一枚 6 位码。
- 在对应 IM 里私聊你的机器人,把这 6 位码发过去。
- 看到配对成功提示后,直接发消息就是在跟 Claude Code 对话。
配对码 60 分钟内有效,只能用一次,重新生成后旧码立刻作废。同一枚码是平台无关的,发到哪个平台就绑哪个平台的账号。同一个用户 5 分钟内连续输错 5 次会被限流。
生成配对码和扫码绑定都会立即写入本机配置,不需要再点「保存」;App ID、Bot Token、「允许的用户」和「默认项目」这类手填内容才需要。
配对成功的账号会出现在「已配对用户」列表里,点右侧的「解绑」即可撤销,被解绑的人要重新发一枚新码。
默认项目决定它在哪干活
「默认项目」是新建 IM 会话的工作目录。填了它,手机上发的第一句话就直接在这个目录下开会话;留空的话,机器人会先把最近用过的项目列出来让你选。
同一个 IM 聊天窗口后续的消息会复用同一条会话,桌面端重启后也能接回去。想换目录发 /new,想清空上下文但保留项目发 /clear。
允许访问的项目目录决定它能碰哪些项目
「默认项目」只决定新会话开在哪,不是访问边界。真正的边界是「允许访问的项目目录」:机器人只能列出、打开并在这些目录内的项目里开会话,/projects、/sessions 和按名字、绝对路径选项目都受它约束。
留空就是默认值——你的主目录(如果「默认项目」是主目录之外的某个具体项目目录,也一并包含)。绝大多数人不需要动它。想收紧到某几个目录,就在设置里把它们加进列表。
配置写在 ~/.claude/adapters.json,也可以按平台单独收紧:
{
"allowedProjectRoots": ["~/work", "~/side"],
"whatsapp": { "allowedProjectRoots": ["~/work/sandbox"] }
}
平台级配置替换(不是叠加)全局配置:上面这份配置里 WhatsApp 只能碰 ~/work/sandbox,其余平台是 ~/work 和 ~/side。桌面端设置界面改的是全局那一份,某个平台单独配过之后,界面上的改动就不会影响它了。
独立运行 adapter(不走桌面端)时也可以用 ADAPTER_ALLOWED_PROJECT_ROOTS 环境变量,多个目录用路径分隔符隔开(macOS / Linux 是 :,Windows 是 ;)。这个环境变量比配置文件里的两层都优先。
几条边界规则:
- 目录必须是已存在的绝对路径(
~会展开)。写不存在的路径会被忽略并打日志;一个都解析不出来时回退到默认值,而不是把机器人锁死。 - 默认值不会自动继承
/或/Users这类目录。桌面端以 GUI 方式启动时 sidecar 的工作目录是/,直接拿来当边界等于没有边界。 - 「默认项目」如果落在允许范围之外,新会话会开在列表里第一个允许的目录,并打一条日志——这样
/new不会因为两处配置不一致而失败。
配对仍然是第一道关:没配对的人根本发不了命令,这份目录列表是在此之上的第二道防线。注意主目录里也包含 ~/.claude、~/.ssh 这些敏感目录,需要更强隔离就显式收紧到具体的项目目录。
通用命令
各平台的入口略有差异(飞书可以把命令配成机器人菜单),但这几条到处都能用:
/help— 列出当前可用命令/status— 当前项目、模型、运行状态/projects— 列出最近项目并切换/new— 开一条新会话,可带项目编号或路径/clear— 清空上下文,保留项目绑定/stop— 停止本轮生成
微信、钉钉、飞书还支持中文别名,例如 帮助、状态、项目列表、新会话、清空、停止。
安全须知
::: warning 这是一把能改你电脑的遥控器 配对成功的 IM 账号可以让 Claude 在你本机读写文件、执行命令。只把配对码发给你自己,别在群里贴,也别把机器人凭据提交进仓库。 :::
授权规则是「允许的用户」加已配对用户取并集,两者都为空时一律拒绝。扫码绑定只是让桌面端拿到账号凭据,不等于放行这个账号的所有联系人。
平台凭据、配对状态和授权名单保存在 ~/.claude/adapters.json,聊天窗口到会话的映射保存在 ~/.claude/adapter-sessions.json。这两个文件都在本机,含有可直接操控你机器的凭据,不要外传。设置页读回配置时敏感字段会被打码。
想在手机浏览器里获得完整界面而不只是聊天,看H5 访问。
