多渠道集成
从任意消息平台访问 Agent — 26 渠道,自动格式适配。支持的渠道
设置
在 GUI 设置 > 渠道 连接平台。各渠道独立配置面板与连接状态指示。 对于需要 API 凭证的渠道(钉钉、Slack、Discord、企微等),配置表单下方会显示开发者平台快捷链接——点击可直接跳转到对应平台的开发者控制台,在那里创建 Bot/应用并获取凭证。12 个渠道提供直链,另有 4 个渠道提供文字引导。微信(通过 iLink)
一分钟内完成微信个人号扫码绑定:- 打开 设置 > 渠道 > 微信
- 点击 扫码连接 — 弹出二维码弹窗
- 打开手机微信扫描二维码
- 在手机上确认 — 弹窗实时更新状态(SSE 流式推送)
- 完成 — 微信已连接
微信公众号(草稿发布)
订阅号/服务号(非个人微信)使用 AppID + AppSecret,在 WebUI 确认后将排版好的 HTML 推送到 草稿箱。 完整指南:微信公众号发布。- 设置 → 渠道 → 微信公众号 — 填写 AppID、AppSecret、IP 白名单并测试连接。
- 用 wechat-article-formatter 将 vault 内 Markdown 转为
.wechat.html工件。 - 在对话中预览 → 点击 推送到公众号草稿(标题 + 封面;文内首图自动预填)。
- 在 mp.weixin.qq.com 草稿箱中人工预览后群发。
草稿推送 仅 HITL — Agent 无 draft 工具(利于 Prompt Cache,避免误群发)。
WhatsApp(通过 Baileys)
- 打开 设置 > 渠道 > WhatsApp
- 点击 扫码连接 — 与微信相同的二维码弹窗
- 打开手机 WhatsApp → 已关联的设备 → 扫描二维码
- 自动建立连接
AsyncLoginProtocol,跨渠道体验一致。
Telegram
- 进入 设置 > 渠道 > Telegram
- 填写 Bot Token(从 @BotFather 获取)和可选 Webhook URL
- 保存 — Bot 连接并开始接收消息
iMessage(通过 BlueBubbles)
将 Agent 连接到 Apple 生态的 iMessage,支持 iPhone、iPad、Mac 及 Apple Watch 手腕免 App 交互。- 设置 → 渠道 → iMessage
- 填写 BlueBubbles Server 的 API 地址(如
http://127.0.0.1:1234)与 密码 - 填写 Webhook 接收地址并保存
- (可选)在「群聊唤醒词」中配置正则表达式(默认:
^@?(?:Myrm|myrm|小助手|助手)\b)
- Apple Watch 手腕交互:无需安装第三方 Watch App,直接在系统「信息」中给 Agent 发消息,通过 Tapback 👍 反应表情即可秒级完成高危工具审批(HITL)。
- 群聊智能唤醒与前缀清洗:群聊中命中唤醒词后自动剥离唤醒词前缀与紧随其后的标点,模型收到的是干净的问题正文。
- 健康诊断与 Helper 连通感知:配置页实时诊断 BlueBubbles Private API 与 Helper 插件状态,故障秒排查。
Slack
在 设置 → 渠道 → Slack 连接 — 粘贴 Bot Token(Socket Mode 还需 App Token),测试连接即可。无需 CLI 或改 env 文件。 Slack 里你能得到什么:诚实边界:Hermes 有可选的 rich-blocks 模式,把超长 Markdown(表格、标题)拆成 Slack 原生块布局。Myrm 当前侧重可靠的 mrkdwn + 交互按钮 — 日常团队聊天已足够;复杂表格可能回退为等宽排版。
Email(IMAP + SMTP)
- 打开 设置 > 渠道 > Email
- 配置 IMAP(收件)和 SMTP(发件)服务器地址、端口、凭证
- 保存后自动开始轮询收件箱
SSL_CERT_FILE 指向它的 CA 文件。
转发邮件智能解析:直接把邮件转发给 Agent,系统自动区分你的指令和原始邮件内容。
- 支持 Gmail、Outlook、QQ 邮箱、163 邮箱、Foxmail 等主流客户端的转发格式
- 三层检测策略:Subject 前缀(Fwd:/FW:/转发:/轉發:)→ Body 分隔符 → MIME 附件
- 你只需在转发时写上”帮我报销”或”翻译成英文”,Agent 同时看到你的指令和原邮件全文,精准执行
- 中文邮件客户端完整支持(简体/繁体),charset 自适应(gb2312/GBK/UTF-8)
- 多 Agent 独立别名与精准分流:可为财务、代码审阅、客服等专职 Agent 分配独立邮箱前缀或加号别名(如
myrm+finance@...),外部来信自动精准路由至专职 Agent,彻底告别单收件箱大杂烩。 - 自有域名(BYOD Custom Domain)支持:坚决避免使用公共共享域名(现网实测已遭微软 Outlook 拦截拒收);支持用户直接绑定自有域名或个人企业 SMTP 凭据发信,邮件投递信誉资产 100% 独立可控。
- 自主改名与释放:地址分配后支持改名与释放窗口,释放地址进入过渡期重定向与墓碑回收,绝不因打错名字导致账号地址永久报废。
- 系统元命令 0 Token 免阻断放行:查看信箱状态、配额诊断与基础设置走本地确定性通道直出,0 Token 消耗且处于白名单中,绝不因日常对话配额打满而发生“锁死在门外”的尴尬。
- 4 跳硬上限:邮件头自动追加并递增
X-Myrm-Hop-Count,单邮件线程最多允许 4 次往返接力,彻底截断连锁发信。 - 终态礼貌回执静默收敛:当检测到对端 Bot 发来“已收到,谢谢”、“确认完毕”等客套与终态信息时,智能体强行静默结案,从源头斩断两端 LLM 之间的无限乒乓死循环。
- 出站人机审批门禁:Agent 拟向任何外部真实人类外发信件时,触发前置 HITL 审批卡片,必须经用户确认后方可正式投递。
- PDF 与 Office 附件(docx / xlsx / xls / pptx / ppt)默认提取文本,随邮件正文一并交给 Agent;每封邮件最多处理 4 个附件、单个不超过 20 MB,单个附件的文本超过 20 万字符时截断并注明全文长度。
- 其他类型的附件(如 JSON、压缩包)只告知文件名,不读取内容。
- 当使用 Agent 邮箱注册第三方服务并收到账号验证/确认邮件时,系统结构化保留超链接与 DOM 上下文,智能体自动提取激活 URL / Token 并在沙箱隔离浏览器(
browser_navigate)中执行无头安全访问,真正实现端到端无人值守的第三方开户闭环,告别“验证链接只能看不能点”的死局。
- 支持家庭(如夫妻共享财务 Bot)或小团队多成员共同绑定使用同一个 Agent 实例;底层采用 4 元组物理沙盒隔离 Key(
routing_enclave_key),每位用户的私密对话与个人偏好物理隔离,公共财务账本与任务进度通过共享 Wiki/Vault 协同,兼顾公共透明与个人隐私。
消息类型
所有渠道支持:- 文本(平台适配格式)
- 图片 / 文档 / 音频 / 视频附件(
MediaType) - 文件上传与自动类型检测
文件双向收发
Agent 产出的文件自动推送到 IM 渠道,无需手动下载。入站(用户 → Agent)
通过 IM 发送文档(PDF、Excel、Word 等),内容自动提取并注入 LLM 上下文。Agent 无需额外调用读文件工具即可理解文件内容。出站(Agent → 用户)
Agent 生成的文件(图表、报表、表格、编译文档等)自动作为媒体附件推送到聊天。支持通过代码执行、文件写入或文档生成工具创建的所有文件。Artifact 深度链接
对于交互式产出物(HTML 页面、PDF、文档),Agent 自动在 IM 消息中生成可点击的深度链接按钮,替代原始文件附件。点击按钮即可在浏览器中直接打开——无需下载。渠道感知输出适配
Myrm 三层架构确保输出既干净又格式正确:出站消息降噪
每个渠道有独立的RenderStyle 配置,控制用户看到的内容:
默认配置下,IM 用户只收到进度标签、最终结果和决策提示 — 看不到 tool 调用参数、reasoning token 或 thinking 标签。
strip_thinking_tags() 函数提供额外安全网,清除任何可能泄露的 LLM 思考块。
进度标签会附带操作内容摘要,让你清楚看到 Agent 在做什么:
🔍 Searching: AI 编程工具 2025(而非笼统的 “Searching the web…”)📄 Reading: config/settings.yaml(而非笼统的 “Reading file…”)⏳ **notion_query** — 搜索会议纪要(自定义 MCP 工具自动覆盖)
事前引导(channel_output_hints)
Agent 初始化时向系统提示词注入渠道格式提示,生成前告知 LLM 平台能力:- Telegram:表格、LaTeX、嵌套列表通过 Bot API 10.1 Rich Message 原生渲染;仅 Rich 不可用时激活格式提示
- WhatsApp:「Markdown 不渲染 — 仅纯文本」
- Discord:「超 2000 字符自动拆分」
- Voice:「像与人对话一样说话」
IM 行为策略 Persona(自动注入)
对于受限 IM 渠道(不支持消息编辑且不支持 Markdown),系统自动注入行为策略指令:- 简洁对话风格:像聊天一样回复,不长篇大论
- 长内容自动转文件:超过约 200 字符的内容写入工作区文件,IM 中只回复一句话摘要 + Artifact 深链
- 精准追问:用户意图不明时最多问 1-2 个关键问题
ChannelCapabilities 声明自动判断。支持 Markdown 或消息编辑的渠道(如 Telegram、Discord、Slack)不受影响。
事后格式降级(renderer)
即使 LLM 忽略提示,渲染流水线仍降级:supports_tables=false→ 表格转列表supports_latex=false→ LaTeX 剥为纯文本- IM 渠道 HTML/SVG 代码块换短占位
- 无来源时自动清理孤立引用标记
智能消息拆分
长消息在自然边界自动拆分:- 代码围栏状态机保证跨块正确闭合重开
- 在空白与标点处智能分行
- 可配置溢出容差保语义
- 按渠道长度限制(如 Discord 2000、Telegram 4096 HTML / 32000 Rich Message)
Telegram Rich Message(Bot API 10.1)
Telegram 渠道支持原生 Rich Message 渲染,配备三层智能降级:- Rich Message — 表格、LaTeX 公式、嵌套列表原生渲染(32KB 限制)
- HTML — 自动转换,含 ASCII 等宽线框表格降级(4096 UTF-16 限制)
- 纯文本 — HTML 解析失败时的最终兜底
sendRichMessageDraft → sendMessageDraft → editMessageText),设 20 字符最小阈值抑制初始 token 闪烁。CJK 内容享受完整 Rich 格式化,无降级无 workaround。
群聊特性
AllowPolicy
三档预设控制群聊何时响应:GroupTriggerMode
精细控制群聊中 Agent 何时被激活:Topic Binding
三级粒度将不同 Agent 绑定到不同对话范围:- Thread 级:绑定到某个话题/线程
- Chat 级:绑定到某个群/会话
- Channel 级:绑定到整个渠道
Topic 工作区绑定(Vault / Project)
将每个 IM 话题绑定到真实工作区,避免远程消息落入空 JIT 沙箱。
每次 Agent 执行前,系统将话题绑定 sync 到 chat SSOT(
project_id 或 workspace_dir),与 WebUI 会话共用 resolve_effective_chat_workspace 解析链。解绑会双向清空 chat 工作区字段。Project 或路径不可用时 fail-loud,不会静默进入空沙箱。
诚实边界:IM /status 仍显示 project:uuid(非友好名)。GUI 无路径选择器——GUI 用户绑 Project,路径绑定走 IM。
测试:9 项 server pytest(sync、topic_config 校验、解绑清空、effective_workspace 链);FE label helper 3 vitest。
vs OpenClaw:OpenClaw 在 Agent 配置级绑定 workspaceDir,一个 Agent 一个目录。Myrm 在 Topic 粒度绑定,同一 Agent 可服务指向不同 vault 的不同 Telegram 话题。
Obsidian Vault 写入保真
话题绑定 Obsidian vault 后,Agent 直接改真实 vault 文件(非副本)。Myrm 提供两层代码级保护:- Frontmatter 保留 — LLM 编辑正文时若整段丢掉
---YAML 块,写前守卫自动补回 pre-edit frontmatter(date:、tags:、Dataview 字段不丢)。 - vault 笔记不跑 prettier — FormatObserver 跳过
.obsidian/下.md,避免自动格式化剥离元数据。
obsidian-notes skill 提示,暂无 vault 全库 backlink 扫描。
测试:44 pytest(2026-07-28):harness guard + server parser + service 集成 + format observer。
线程自动跟进
Agent 在线程中回复后,GroupFollowUpTracker 自动激活该线程(TTL:10 分钟)。在此窗口内,线程中的后续消息无需 @mention — Agent 自动继续对话,如同真人聊天。 发送/mute、/shutup、闭嘴 或 别吵 即可停止 Agent 在当前线程的响应。再次 @mention 即可重新激活。
客模式(Guest Mention)
即使群组未显式启用 Agent,用户也可以 @mention Agent 获得一次性回复(需开启 guest mode)。无需将群组加入白名单即可获得 AI 临时帮助。精确 Bot ID 匹配
每个渠道适配器均执行精确的 bot 身份匹配 — Telegram 匹配bot_username,飞书匹配 bot_open_id,Teams 匹配 app_id,WhatsApp 匹配 mentionedJids。@mention 始终精确路由到正确的 bot,26 渠道零误触发。
GroupContextBuffer
群聊非触发消息累积于 per-group 环形缓冲。@Agent 等触发时排空缓冲注入上下文 — Agent 感知群讨论脉络。SessionGate
同会话连发消息防抖(默认 300ms)合并为单次请求,防重复处理。确定性 LLM 前置处理
每条消息在到达 LLM 之前经过 5 层零 Token 开销的确定性处理,常见操作无需调用模型,完全不消耗 Token。用户收益
- 常见问题秒回 — FAQ 命中跳过 LLM,省时省钱
- 敏感内容自动拦截 — 无需人工审核即可合规
- 快捷命令零等待 —
/stop、/new、/status瞬间生效 - 连续快速发消息自动合并 — 不丢失、不重复处理
- 零 Token 浪费 — 只有真正需要 AI 推理的消息才会到达模型
Agent 主动通知
Agent 可主动向配置渠道推送 — 无需轮询。流程
- 在 Agent 设置 → 通知渠道 从当前运行中的渠道下拉选择(动态
displayName,新渠道接入后无需等前端发版),并从已配对联系人下拉选择收件人(或手动输入 ID) - Agent 在需告警时调用
channel_notify_tool(任务完成、异常、定时报告就绪) - 可选附带文件或图片 — 本地路径和 URL 自动解析,精确识别媒体类型
- 经
send_tracked同步投递并返回成功/失败(与关键渠道消息同一重试策略),避免异步队列静默丢消息
与「通知投递」的区别:本处 Agent 设置 → 通知渠道 仅用于智能体主动 channel_notify_tool;设置 → 通知投递 用于 OAuth 过期、预算、配对等 系统事件 IM 告警。二者互不替代。
安全
测试覆盖(2026-09-03):notify 专项累计 171+ 项全链路测试(含只读安全物理阻断、沙箱存在性校验、DLQ/告警链、子 Agent 隔离、附件 path 沙箱)与 Chrome E2E 全绿。
场景示例
- 凌晨 3 点定时任务完成 → 摘要 + 报告 PDF 发 Telegram
- 长跑代码分析结束 → 结果 + 生成的图表推 Slack
- 监控数据异常 → 告警 + 仪表盘截图发配置目标
Web Push 离线推送
关闭浏览器后仍可收到关键告警 — 无需安装原生 App。 当 PWA 关闭或退到后台时,服务器通过 W3C Web Push 标准(VAPID)发送推送通知。覆盖未配置 IM 渠道或只想用浏览器原生告警的场景。支持的事件类型
设置方法
- 进入 设置 > 系统 > 推送通知
- 开启 启用 开关 — 浏览器请求通知权限
- 完成。即使关闭标签页,通知也会送达。
平台兼容性
在 iOS 上,设置卡片会自动检测是否运行在独立 PWA 模式下,并在需要时显示安装引导。
安全与维护
- VAPID 密钥自动生成 — 首次启动时自动创建并持久化密钥,零配置
- 过期订阅自动清理 — 推送失败(410/404)时自动删除过期订阅
- 无第三方依赖 — 推送直达浏览器厂商端点(Google FCM、Apple APNs、Mozilla autopush)
- Tauri 感知 — 桌面应用构建中自动隐藏此设置卡片(已有原生通知)
一键审批深链
点击推送通知会直达对应会话并弹出审批抽屉——不是只打开首页。- 审批请求跳转到
/{chat_id}?approval={id};WebUI 打开全局 ApprovalDrawer 并剥离 query,保持 URL 干净 - Service Worker 路由校验同源路径;若聊天 Tab 已打开,在 query 变化时调用
navigate()而非仅 focus——新审批不会漏开抽屉(OpenClaw 的 SW 只比 pathname,存在此缺陷) - Chrome MCP E2E 已验证 — 热 Tab 与冷启动深链双路径(2026-07)
后台任务自动回复
通过/btw 在任意 IM 渠道发起后台任务后,任务完成时结果会自动推送回你的原始会话:
- 线程精准投递 — 回复精确到你发起任务的那个线程
- 多语言通知 — 消息自动匹配你的语言偏好(中文、英文等)
- 失败告警 — 任务失败时收到错误摘要,而非石沉大海
- 可靠投递 — 与所有渠道消息共享同一套重试基础设施
- 互不干扰 — 独立于通知设置运行;这是直接回复,不是广播
目标完成自动回复
通过/goal set 在任意 IM 渠道发起目标后,目标完成时结果自动推送回原始会话:
- 线程精准投递 — 回复精确到你发起
/goal set的那个线程 - 本地化通知 — 消息语言匹配你创建目标时的语言偏好(中文、英文、日文、繁体中文)
- Deeplink 按钮 — 「在浏览器继续」按钮直接打开 WebUI 中包含执行摘要的完整 Goal 详情
- 成功与失败全覆盖 — 完成和失败的目标均触发通知
- 一致的基础设施 — 与
/btw后台任务通知共享同一套投递管线
长任务心跳(原地编辑)
当 Agent 执行复杂任务且长时间未产生输出时,系统会自动发送心跳消息,让你知道它仍在工作中——且不会用多条消息刷屏你的聊天。工作原理
- 后台并行监控器持续追踪距上次活动(发送消息、进度更新等)的时间
- 静默超过 2 分钟后,向发起任务的 IM 渠道发送心跳消息
- 后续心跳原地编辑同一条消息,更新已用时间、步骤数和阶段——不会产生新消息
- 如果渠道不支持消息编辑,仅发送一条消息(不刷屏)
- 每个任务最多 3 次心跳周期
- 使用 NORMAL 优先级——心跳静默到达,不会触发手机推送通知
消息示例
⏳ 工作中 — 3 分钟(12 步, 数据分析)消息会随任务进展原地更新:
⏳ 工作中 — 5 分钟(18 步, 代码生成)
智能静默检测
与简单的定时器不同,监控器会在 Agent 产生任何输出时自动重置计时。如果 Agent 在第 1 分钟发送了进度更新,2 分钟静默窗口会从该时间点重新开始。这避免了 Agent 正在活跃沟通时发送不必要的提醒。渠道自适应
心跳系统会自动检测渠道是否支持消息编辑(ChannelCapabilities.edit)。Telegram、Discord 等渠道支持原地编辑;不支持的渠道仅收到一条心跳消息,避免刷屏。
如果编辑操作失败(如消息过旧无法编辑),系统会优雅降级为发送新消息。
详细参数
端内智能体切换
在任意 IM 渠道中直接切换 Agent,无需打开 WebUI 或编辑配置文件。Telegram(/agent 命令)
- 在对话中发送
/agent - 弹出 InlineKeyboard 列表,展示所有可用 Agent — 当前绑定的 Agent 前有 ✅ 标记
- 点选目标 Agent → picker 消息被替换为确认文本(“已切换至:XXX”)
- 后续消息自动使用新 Agent(独立系统提示词、模型、工具、记忆)
快捷切换命令
Agent 配置中定义了command_bindings 的会注册快捷命令(如 /claude、/gpt)。
双模式路由:
/cc fix this bug— 一次性路由:本条消息用 Claude 处理,但不改变当前绑定(下条消息仍用原 Agent)/cc(无参数)— 持久绑定:将默认 Agent 切换为 Claude
Topic 绑定粒度
Agent 绑定遵循三级解析层级:多语言支持
所有 picker 和确认消息完全国际化。系统自动识别用户语言偏好(当前支持中英文,通过.ftl 翻译文件可扩展)。
跨设备任务同步
所有后台任务存储在服务端,任何已连接的客户端均可访问 —— 桌面端、WebUI 或手机浏览器:- 单一数据源 — 任务状态存储在服务端 Kanban 系统中,不依赖任何单一设备
- 全端实时更新 — SSE 事件将状态变更(完成、失败、进度)同步推送到每个已连接的客户端
- 一致体验 — 桌面端(Tauri)内嵌同一套 Web UI 前端,跨平台体验完全一致
- IM 渠道联动 — BtwTaskNotifier 在 UI 更新的同时,将结果推送到 IM 渠道
- IM 看板管理 — 在 Telegram、Discord、Slack 等渠道中直接使用
/kanban(或/kb)命令创建、列表、编辑、完成、阻塞、归档任务,无需离开聊天窗口。零 LLM 消耗 — 命令完全绕过 Agent 管线
/kanban 管理任务,在 Slack 收到完成通知 —— 无需任何配置。
跨平台交接
在不丢失上下文的情况下,将对话从一个平台无缝转移到另一个平台。 两种入口:- Web UI — 在侧边栏右键点击任意对话 → 「转移到…」→ 弹出 Dialog 自动列出所有已连接渠道(含图标和连接状态指示灯)→ 选择目标一键转移
- IM 命令 — 在任意 IM 渠道(Telegram、Discord、Slack 等)中输入
/handoff <目标渠道>
persistent(永不重置)、daily(在配置的时刻重置)、idle(空闲超时后重置)。Agent 身份(agent_id)在转移过程中完整保留,同一个 Agent 的人格、工具和记忆在新渠道上无缝延续。
测试覆盖: 17 项单元测试 + 7 项 API 集成测试 = 24 项测试覆盖所有边界场景(冲突解决、同渠道拒绝、未配对、Agent 保留、策略模式等)。
自动「在浏览器继续」按钮
Agent 在 IM 渠道的每条回复底部自动附带**「在浏览器继续」**按钮。点击即可一键跳转到 WebUI 完整会话页面,查看工具调用步骤、代码差异和文件操作历史。- 精确路由 — 按钮链接到
/{chatUUID}(数据库 Chat UUID),始终打开正确的会话 - 后台任务通知 —
/btw后台任务完成后的 IM 通知也包含跳转按钮 - 优雅降级 — 不支持按钮的渠道(如微信)自动降级为文本链接;无公网 URL 时静默省略,不阻塞回复
- WebUI 过滤 — Web 渠道的消息不会显示冗余的自跳转按钮
IM 撤销、重试与文件还原
在任意 IM 渠道发送/undo 或 /retry 即可回滚 Agent 上一轮操作 — 包括自动恢复被修改的文件。
原理: Agent 处理消息时,从 SnapshotStore 到数据库全链路使用同一
message_id。/undo 时系统取回被删除消息的 ID,查找对应的文件快照并恢复。用户看到本地化确认(如「↩ 已撤销:移除了 2 条消息。↩ 已还原 3 个文件。」)。
竞品对比: OpenClaw/Hermes/DeerFlow 仅在桌面 GUI 或 CLI 支持文件还原,没有任何竞品在 IM 渠道实现撤销/重试联动文件 revert。这意味着你可以放心地通过手机让 Agent 编辑文件 — 出了问题一条 /undo 命令全部恢复。
渠道自愈与可靠性
每个渠道都运行在 ChannelGateway 之下,它持续监控健康状态,并在故障后自动恢复 — 无需人工干预。健康循环
网关每 60 秒执行一轮健康检查。某个渠道连续两次检查失败,就会进入 DEGRADED 状态并触发自愈流程:- 指数退避 — 重启延迟从 5 秒起逐步增长,最长 300 秒,避免资源被反复冲击
- 随机抖动 — 加入 25% 的随机波动,避免多个渠道同时故障时一起重启
- 完整重启 — 先执行
stop()(释放全部句柄),再执行start()(全新初始化) - 状态广播 — 前端
ConnectionBadge通过 EventEmitter 实时更新
消息恢复
消息会在其回合开始处理时写入本地日志,回合结束时删除。若服务在此期间崩溃或重启,只要消息到达不满 10 分钟,就会在下次启动时重放。服务正常停止时仍在聊天队列中等待的消息,也会写入日志,并以同样方式重放。重放的就是当初发送的那条消息,包含附件、引用回复和群聊上下文。若附件的本地临时文件在重放时已不存在,Agent 会被告知缺了哪个附件。Agent 还会被告知这条消息在重启前就已到达服务、可能已被部分处理,并被要求在重复执行会改变聊天之外事物的步骤之前先核对。重放的请求仍会从头开始,因此被中断的那一轮已经执行过的步骤可能再执行一次。 不在覆盖范围内:进程被强制终止时仍在接收中的消息,以及服务正在关闭期间到达的消息。正常关闭时正在运行的那条请求不会再次运行,它所在的聊天会收到一条通知,请你重新发送。如果没有收到回复,请重新发送。死信队列
多次重试后仍投递失败的消息会连同完整元数据进入 DLQ,可以查看、重试或归档 — 不会有消息悄无声息地消失。通用重连循环
基于 WebSocket 的渠道(Discord、Slack、飞书等)共用同一个reconnect_loop 工具,带指数退避与抖动,为所有长连接提供一致的重连行为。
平台专属限流
每个渠道都有一个按平台 API 限额调校的 TokenBucket 限流器。微信渠道有专门的参数:
当平台返回限流错误(如微信 errcode 45011/45015/45047 或 iLink errcode -2)时,系统会:
- 把错误映射为带平台专属
retry_after延迟的RateLimitError - 按指数退避重试,并遵守
retry_after的值 - 所有重试用尽后回退到 DLQ — 文本消息绝不会被悄悄丢弃
熔断与优雅降级
当某个渠道的出站 API 反复失败时,两层互补的保护会启动: 渠道级熔断 — 连续 5 次发送失败后熔断器跳闸,暂停出站分发 30 秒。消息安全地排在 PriorityQueue(上限 256)中,熔断器关闭后再投递,避免对已降级的平台 API 造成洪泛。 流式优雅降级 — 在实时流式更新(如实时编辑消息)期间,失败会触发 5 级渐进减速,而不是直接停止:
核心原则:用户始终能收到更新 — 降级期间可能变慢,但不会完全停止。这优于传统熔断器那种突然出现 30 秒零反馈空白期的做法。
这对用户意味着什么
- 零停机体验 — 临时的网络问题或平台故障会自行恢复
- 重启后消息可恢复 — 服务崩溃或重启时正在处理的消息,以及正常关闭时在聊天队列中等待的消息,会在下次启动时重放(不在覆盖范围内的情况见「消息恢复」)
- 不会被封号 — 按渠道限流,避免超出平台 API 配额
- 状态可见 — 渠道健康状态始终可以在「设置 > 渠道」中通过彩色徽标看到
- 无需手动重启 — 渠道会自愈,你只看到结果,看不到恢复过程
- 没有突然的空白期 — 流式更新会优雅降级,而不是骤然停止
GitHub Channel 与 CI/CD 集成
GitHub Channel 将 Agent 转化为自动化代码审查员,监听仓库事件并自动回复 PR 评论。支持的事件
设置步骤
- 进入 设置 > 渠道 > GitHub
- 填写 Personal Access Token(需
repo权限用于发布评论) - 填写 Webhook Secret(用于验证签名)
- 在 GitHub 仓库设置中添加 Webhook URL(
https://your-server/channels/github/webhook)
安全机制
所有 Webhook 请求通过 X-Hub-Signature-256(HMAC-SHA256)验证。无效签名直接返回 401。CI/CD 流水线集成
除 GitHub 外,任何 CI/CD 平台(Jenkins、GitLab CI、云效、CodePipeline)均可通过 REST API 触发 Agent:远程审批(HITL)
通过 IM 渠道远程控制 Agent 时,高危工具调用(文件编辑、Shell 命令)会触发渠道内审批提示 —— 行业唯一的 IM 原生 HITL 系统。工作流程
- Agent 遇到高危工具调用
- 审批消息(含批准/拒绝按钮)发送到 IM 渠道
- 你可以批准、拒绝或使用批量命令
- Agent 根据你的决策继续或停止
审批方式
交互式按钮(ActionButton)
在支持交互元素的渠道(Telegram InlineKeyboard、Slack Block Kit、Discord 按钮、飞书卡片、MS Teams Adaptive Cards)中,审批提示包含原生 批准 / 拒绝按钮。点击按钮后:- 在数据库中解决审批(仅 PENDING 状态可操作 —— 重复点击安全忽略)
- 编辑原始消息显示结果(如”已由 alice 批准”)
- 自动恢复中断的 Agent
安全机制
- 群聊保护:仅原始请求者或已配置的协同审批人可操作
- 幂等保护:已解决的审批不可被再次解决或状态翻转(DB 层 PENDING 检查)
- 超时守卫:未响应的审批自动拒绝(可配置)
- 持久化白名单:「永久允许」决策跨重启有效
- 防重试:累计 3 次拒绝后 Agent 停止重试
出站 HITL(草稿审核)
企业销售和客服场景中,AI 生成的回复发送前可能需要人工审核。Myrm 的 Outbound HITL 会拦截 Agent 回复作为草稿,需要明确审批后才能发送。配置
每个话题可在设置 → 渠道路由中独立配置:工作流程
- IM 渠道收到消息 → Agent 生成回复
- 回复被拦截为
ApprovalRecord(不直接发送) - 审核人在 WebUI 审批抽屉或 IM ActionButton 中查看草稿
- 批准 → 消息发送到渠道
- 拒绝 → 消息被丢弃
- 超时 → 按配置自动发送或自动丢弃
审核通道
- WebUI 审批抽屉:展示原始客户消息、AI 生成的回复草稿、渠道/话题信息
- IM ActionButton:审批通知中的批准/拒绝按钮
使用场景
智能静默过滤
当你在 Agent 的 System Prompt 中配置”无异常时回复[SILENT]”等指令后,Myrm 会在投递前自动检测并过滤静默回复:
- 群聊场景:Agent 被 @ 后判断无需回复 → 不发送任何消息(零噪音)
- 定时任务:每 30 分钟巡检正常 → 自动静默,异常时立即推送
- Placeholder 清理:已显示的”正在处理”占位消息被静默删除
识别规则
这确保了”按需打扰”——Agent 只在有实质性信息时才发送消息到 IM 渠道。
飞书深度集成
Myrm 对飞书的支持不止基础消息收发——内置 SDK 覆盖文档评论问答、云文档同步到知识库和卡片流式更新。支持的能力
典型工作流
场景:文档评论驱动的问答 当用户在飞书文档中 @AI 评论时:- 飞书 WebSocket 实时推送评论事件
- Agent 读取评论及回复、文档标题与链接;新版文档(docx)还会读取全文
- 生成回复并自动发布到评论区
docs:document.content:read(Markdown)或 docx:document:readonly(纯文本)任一权限,Agent 就能读取文档;表格、嵌入表格、白板和图片可能缺失或被拍平。应用两项权限都没有、应用没有被加入该文档、文档超过 10 MB 或不是新版文档时,Agent 会被告知读不到文档正文,以便如实说明而不是凭空作答。
设置方法
- 进入 设置 > 渠道 > 飞书
- 填写 App ID 和 App Secret
- 启用 WebSocket 长连接(无需公网 IP)
- 按需开启飞书应用权限:
drive:drive— 文档读取docs:document.content:read— 读取整篇文档正文(评论问答附带文档内容);docx:document:readonly可作为只读文字的替代wiki:wiki— Wiki 访问im:message— 消息收发contact:user.id:readonly— 用户标识
多应用并发实例
除了默认应用外,Myrm 支持多个飞书应用同时在线(每渠道类型默认上限 5 个实例)。不同于 CLI 工具的 named profile 切换模型(同一时刻只能激活一个应用),每个应用实例都能独立收发消息、互不干扰:
添加新应用实例:
- 在 设置 > 渠道 > 飞书 中点击 添加应用
- 扫码(或在编辑弹窗中粘贴 App ID/App Secret)
- 新实例立即上线——两个应用现在并发收发消息
企业微信双通道
企业微信提供两种接入方式:
两种模式均支持:
- XML 消息加密/解密(AES-CBC)
- 回调签名验证(防伪造)
- 消息去重(防重复处理)
渠道数据平面与安全持久化账本(Channel Data Plane)
针对多渠道通讯环境下企业用户最关心的安全隐私、长效记忆断代与存储可控性,Myrm 提供了内置的渠道数据平面(Channel Data Plane):- 入站敏感凭据自动脱敏(Secret Scrubber):用户在聊天群或私聊中发送的 API Key(如
sk-...)、Bearer Token、密码等凭据,在存入本地数据库前自动置换为掩码(Bearer=***REDACTED***),彻底防止敏感凭证在服务端数据库泄露。 - 零模型启发式打标(Heuristic Tagging):自动识别
/start、help等系统命令与极短噪音,将普通闲聊与高价值对话区分打标,确保离线记忆抽取只学习有效的人类业务知识。 - 双轨解耦消费(Zero LLM Cost for Background Messages):未触发 Agent 的群聊背景消息仅异步落库用于上下文重构,不产生任何大模型 Token 账单;仅在 Agent 被明确 @ 或私信时,才按时间正序加载最近对话。
- 无人值守 30 天滚动保留与 GDPR 一键遗忘:
- 系统后台每 6 小时统一维护守护进程,自动清理超过 30 天的过期原始消息,防止本地磁盘无限膨胀;
- WebUI 设置 > 渠道 > 数据平面 支持实时监控各渠道消息量、背景消息量与可学习指标;
- 提供两步防误触的“清空历史数据”操作,支持 GDPR 用户自主数据清除。
多渠道多用户私信飞地与记忆防投毒门禁(DM Isolation & Session Context Enclave Guard)
针对多员工或外部客户通过飞书、微信、Telegram 等多渠道私信同一台 Agent 时面临的串台与安全风险,Myrm 构建了企业级物理飞地防护:- 4 元组物理隔离会话飞地(
routing_enclave_key):- 严格按照
(tenant_id, channel, peer_id, agent_profile_id)生成独立沙盒会话飞地,物理切分不同租户、不同账号或同一实例多 Agent 分身之间的对话上下文,彻底杜绝跨用户私信串台与商业机密泄漏; - 深度兼容旧版 2 元组
channel:peer_id降级解析,存量业务与插件无缝兼容。
- 严格按照
- 陌生人提权逃逸防御门禁(Anti-Privilege Escalation Gate):
- 彻底封死开放(OPEN)策略下未配对陌生人直接回退并继承宿主超级管理员(
default_user_id)的高危特权漏洞; - 未配对发送者统一强制分配沙盒受限访客身份
guest_{channel}_{sender_id},其操作与宿主管理员完全隔离,物理禁止执行破坏性工具与越权读取敏感资产。
- 彻底封死开放(OPEN)策略下未配对陌生人直接回退并继承宿主超级管理员(
- 长期记忆防投毒物理栅栏(Anti-Poisoning Fence):
- 数据平面持久化流水线原生集成认证校验,访客与未配对陌生人发送的任何文本强制标记为
learning_eligible=False; - 物理阻断恶意攻击者通过开放渠道注入恶意 Prompt 污染模型长期记忆与向量检索库。
- 数据平面持久化流水线原生集成认证校验,访客与未配对陌生人发送的任何文本强制标记为
- 交互式安全配对握手与 WebUI 一键审批:
- 陌生人首次私信时自动触发安全挑战并下发 6 位安全配对码;
- 管理员在 WebUI/移动端审批卡片上一键点击「批准/拒绝」即时生效,无需重启服务或手动修改配置。
全渠道配额诊断与群聊 RBAC 零延迟直出闭环(Quota Diagnostics & Zero-LLM Direct Output)
针对企业或社群中多用户接入时的额度透明度与权限冲突痛点,Myrm 提供生产级全渠道配额诊断与群聊 RBAC 放行闭环:- 0 LLM Token 本地极速直出:
- 用户发送
/quota(或群聊中@bot /quota)时,系统在 Inbound Pipeline 毫秒级识别拦截,沙箱就地基于 SQLite 统计数据聚合返回; - 完全不调用底层大模型,产生 0 Token 消耗,也不触碰 Prompt Cache 前缀缓存;即使在模型供应商宕机或欠费时,诊断命令依然可用。
- 用户发送
- 群聊 RBAC 发送人特权解耦与白名单放行(Group Ingress RBAC & Bypass):
- 彻底解耦群聊发言人权限,严格区分 Admin(沙箱宿主特权)、Member(每日发言配额受控)与 Guest(受限访客),从根源杜绝混淆代理人(Confused Deputy)漏洞;
- 独创只读命令放行白名单(
/status,/quota,/help),即便成员今日发言次数超额被限流,仍享有自查配额与帮助的只读特权,彻底杜绝权限死锁。
- 高信噪比体验与跨时区倒计时:
- 采用标准 ASCII 10 格动态进度条(如
[████████░░] 80%),跨终端与各 IM 客户端无排版割裂; - UTC 绝对时间与相对时间协同显示(如
00:00 UTC(约 5 小时 20 分钟后刷新)),免除用户时区心算负担; - 4 套语言(zh-CN, en, zh-TW, ja)全量覆盖,超额拦截提示中内置
/quota反向自查指引。
- 采用标准 ASCII 10 格动态进度条(如
- WebUI 移动端自适应管理:
- 管理员在 设置 > 渠道 配对列表中,可直观查看每位成员的今日消耗与上限,支持行内修改限额,小屏窄屏手机自适应排版无截断。
IM 渠道远程运维与自主排障自愈套件(Remote Ops & Self-Healing)
当用户在手机 IM(飞书、微信、Telegram、Discord 等)中通过一句话发起耗时复杂的部署或远程运维任务时,Myrm 提供生产级端到端自愈防护:- 终端长日志高信噪比蒸馏(
TerminalLogDistiller):自动清洗 ANSI 控制符与滚动进度条,智能锚定关键错误特征(如HTTP 403、EADDRINUSE、Traceback)并保留退出前 25 行现场,将数千行滚屏日志压缩至 50 行以内,Token 节流 96%+,彻底杜绝日志刷屏打爆上下文与模型诊断幻觉。 - 自主排障预算与防振荡自愈(
TroubleshootingBudgetManager):内置 5 次策略试错预算,支持国内镜像源重定向、端口探测自愈与依赖自动修复;基于 SHA256 策略 Hash 拦截死循环,自动向 IM 发送 Progress Beacon 汇报进度;高危破坏性命令(如rm -rf /)或预算耗尽时自动升级为移动端交互审批卡片。 - 运维资产幂等固化(Idempotent Patch Depot):任务成功后自动生成带
[0/N]幂等检查标记的部署重放脚本deploy.sh,封装为卡片回传,软件升级后可一键无损重放。
微信个人双通道
全渠道统一原生审批流
在移动端使用 AI 助理时,高危操作(如修改定时任务、敏感工具调用、指令特权升级)必须受到严密的安全门禁保护。Myrm 提供领先的全渠道统一原生审批架构(ApprovalRegistry):
- 全异步无锁并发:彻底避免了竞品因单机文件锁(
fcntl.flock)导致的网关与终端死锁问题。 - 多渠道自适应交互卡片:
- 飞书 / 钉钉 / Telegram / Slack / Discord:直接在对话流中下发原生交互卡片(
ActionButton),用户点击「✅ 批准」或「❌ 拒绝」即时生效; - 微信 / iMessage / SMS:智能降维适配纯文本交互,支持
/approve指令或 Apple Tapback 👍 表情秒级确认。
- 飞书 / 钉钉 / Telegram / Slack / Discord:直接在对话流中下发原生交互卡片(
- 全端毫秒级状态广播:手机端批准后,通过 SSE / WebSocket 实时向 WebUI(
CronJobCard)与桌面端同步最新状态,无需手动刷新。
团队身份:每个群里都有个固定同事
给群聊命名一个共享身份,所有人面对同一伙伴:- 打开设置 → 集成 → 渠道路由,选择渠道与话题,取名(如
义父),选择作用域:继承(渠道基线)、共享或独立(不继承基线); - 在群里 @ 它(
@义父,调研这个怎么做,扔进选题库设为待定)——它在串内回复,讨论记在自己的记忆域里,看不到你的私聊; - 群聊走共享凭证,绝不触碰你的个人 token;私聊永远是个人身份;
- 随时一键冻结(自动走默认智能体,记忆保留)或用
/topic查看状态。也可在群里直接:/bind agent=my-agent identity=义父 identity_scope=shared。
主动跟进:完工回执与停滞提醒
长任务与安静的串自动收尾,无需盯着:- 在同一渠道路由行开启完工回执(长任务完成贴回原串交付卡),按需开启停滞提醒(有待办的安静串 @ 相关人一次);
- 所有主动消息带 AI 标识并先走审批门——草稿审核中的内容不会自动发出;
- 任意串可用
/mute静音;冻结身份永不主动发送。