Skip to content

LiangNiang/OpenMantis

Repository files navigation

OpenMantis

中文 | English

基于 Bun + Vercel AI SDK 构建的轻量级多平台 Agent 聊天框架。

License: Apache 2.0 Bun TypeScript AI SDK PRs Welcome

Feishu WeCom QQ

将多个 LLM 供应商连接到多个通讯平台,配合可组合的工具、定时任务、浏览器自动化、记忆系统、定时任务等能力 —— 一次部署,全部搞定。


特性

  • 多 LLM 供应商 — OpenAI、Anthropic、字节跳动/豆包、小米 MiMo,以及任意 OpenAI 兼容端点。支持按通道或按会话切换 LLM 供应商。
  • 多平台 — 飞书/Lark、企业微信、QQ。每个平台均支持流式响应和附件处理,飞书额外支持交互式卡片 UI 和单渠道接入多个飞书应用。
  • 可组合工具 — Bash、文件读写、网页搜索(Tavily、Exa)、RSS、TTS、记忆、定时任务等。通过配置启用或禁用工具组。
  • 子 Agent 调度 — 通过 subagent 工具派发上下文隔离的子 Agent 执行独立任务,同一轮内多次调用自动并行。默认深度上限 2、并发上限 8、单次超时 5 分钟,并正确传递 abort 信号。
  • 技能系统 — 内置技能(天气、DOCX/XLSX 生成、浏览器自动化、图片生成)以及用户自定义技能。
  • 定时任务 — 固定间隔、Cron 表达式或一次性定时任务,通过完整的 Agent 管线执行。
  • 浏览器自动化 — 通过 agent-browser 驱动真实浏览器,支持每会话隔离的浏览器配置文件,或 CDP 模式复用本地 Chrome。
  • Web 管理面板 — 首次运行自动启动配置向导,支持中英文和供应商连接测试。
  • 深度思考 — OpenAI 推理强度控制,Anthropic 自适应思考。
  • 长期记忆 — 双层记忆架构:核心记忆保存用户偏好和关键事实,归档记忆按时间线记录决策与洞察。支持关键词、日期、标签多维检索,以及对话结束后自动提取记忆。
  • 会话管理 — 持久化消息路由,包含消息历史和通道-消息路由绑定。

前置要求

  • 至少一个 LLM 供应商的 API Key
  • 通道凭证(飞书应用、企业微信机器人或 QQ 机器人)
  • 从源码运行时需要 Bun;使用预编译二进制则无需安装任何运行时

快速开始

方式一:预编译二进制(推荐)

Releases 下载对应平台的二进制文件,无需安装 Bun 或任何依赖:

chmod +x openmantis-linux-x64
./openmantis-linux-x64 init      # 初始化内置技能
./openmantis-linux-x64 start     # 启动守护进程

Important

macOS 用户:从 GitHub Releases 下载的二进制会被系统打上 com.apple.quarantine 隔离标记,首次运行可能被 Gatekeeper 拦截(提示「无法打开,因为无法验证开发者」)。执行以下命令移除隔离标记即可:

xattr -d com.apple.quarantine ./openmantis-darwin-arm64
chmod +x ./openmantis-darwin-arm64

Important

Windows 用户:请勿双击 .exe 运行(会出现黑色窗口一闪而过),它是命令行程序。请打开 PowerShellCMD,切换到文件所在目录后执行:

.\openmantis-windows-x64.exe init      # 初始化内置技能
.\openmantis-windows-x64.exe start     # 启动守护进程

方式二:从源码运行

git clone https://github.com/LiangNiang/OpenMantis.git
cd OpenMantis
bun install
bun run dev                      # 开发模式(前台运行)

首次配置

首次启动时,OpenMantis 会自动在 http://127.0.0.1:7777 打开配置向导,按步骤配置供应商、通道和工具即可。配置完成后重启生效。

运行时数据存储在 ~/.openmantis/(可通过 OPENMANTIS_DATA_DIR 环境变量自定义)。

CLI 命令

openmantis start       # 启动守护进程
openmantis stop        # 停止
openmantis restart     # 重启
openmantis status      # 查看运行状态
openmantis log         # 实时查看日志
openmantis run         # 前台运行(适用于 Docker 或调试)
openmantis init        # 初始化内置技能(--force 强制覆盖)

使用示例

说明
飞书渠道 Tools 调用 飞书渠道展示 Tools 调用,结束后自动折叠
定时任务 定时任务
记忆 记忆存储与记忆召回

架构

通道 (飞书 / 企业微信 / QQ)
        │
        ▼
    Gateway ──► AgentFactory ──► ToolLoopAgent (Vercel AI SDK)
        │                              │
  RouteStore +                   resolveTools()
  ChannelBindings                      │
        │                        ┌─────┴─────┐
        ▼                        │  Tools     │
    Response ◄───────────────────│  Skills    │
                                 │  Memory    │
                                 └────────────┘

消息从通道适配器流入 Gateway,由其管理会话(消息路由)并创建 Agent。AgentFactory 解析对应的 LLM 供应商、工具和系统提示词,然后委托 ToolLoopAgent 进行流式执行。

项目结构

OpenMantis/
├── src/
│   ├── cli.ts                    # CLI 入口(start/stop/restart/run/init)
│   ├── index.ts                  # 主应用逻辑
│   ├── daemon.ts                 # 守护进程管理
│   └── init.ts                   # 内置技能提取
├── packages/
│   ├── common/                   # 共享类型、日志、配置 Schema
│   ├── core/                     # Agent、Gateway、命令、工具
│   ├── scheduler/                # Cron/间隔/一次性定时任务
│   ├── tts/                      # 文字转语音供应商
│   ├── channel-feishu/           # 飞书/Lark 适配器
│   ├── channel-wecom/            # 企业微信适配器
│   ├── channel-qq/               # QQ 适配器
│   ├── web/                      # React 19 + Vite + Tailwind v4 管理面板
│   └── web-server/               # Hono API 服务器
├── skills/builtin/               # 内置 Agent 技能
├── scripts/build.ts              # 二进制构建脚本
└── ~/.openmantis/                # 运行时数据(配置、消息路由、技能、日志)

LLM 供应商

LLM 供应商 说明
OpenAI @ai-sdk/openai GPT-4o、o 系列等
Anthropic @ai-sdk/anthropic Claude,支持自适应思考
字节跳动/豆包 @ai-sdk/openai-compatible 通过火山引擎 Ark
小米 MiMo @ai-sdk/openai-compatible 可选网页搜索插件
OpenAI 兼容 @ai-sdk/openai-compatible 任意 OpenAI 兼容端点

LLM 供应商优先级:消息路由覆盖 > 通道绑定 > 通道配置 > 全局默认。

工具

工具按组管理,通过 excludeTools 配置数组进行开关:

工具组 工具 说明
bash bash, bash_write, bash_wait, bash_kill 基于 PTY 的 Shell 执行,支持超时、交互输入和会话管理
file file_read, file_write, file_edit 文件读取(支持偏移/限制)、创建/覆盖、部分编辑(字符串替换或行范围)
search file_search, content_search Glob 模式匹配 + 正则内容搜索(ripgrep 后端)
skills skill_* 每个加载的技能动态生成对应工具
tavily tavilySearch, tavilyExtract, tavilyCrawl, tavilyMap 网页搜索、URL 内容提取、站点爬取和站点地图生成
exa exaWebSearch 基于 Exa 神经搜索引擎的语义网页搜索
schedule create_schedule, list_schedules, get_schedule, cancel_schedule, edit_schedule 创建/列出/查看/取消/编辑定时任务(every/cron/at)
rss rssFetch, rssDiscover 解析 RSS/Atom 订阅源,从网站发现订阅源 URL
whisper audio_transcribe 音频/视频文件转文字,支持 SRT 字幕和时间戳
tts tts_speak 基于小米 TTS 的文字转语音合成,支持风格和表情控制
memory save_memory, recall_memory, load_route_context 长期记忆(核心/归档)、关键词/日期/标签检索、历史会话加载
message send_message 向指定通道发送消息(网关上下文可用且调用方持有 channel 上下文时自动注入;子 Agent 不获得此能力)
subagent subagent 派发上下文隔离的子 Agent 执行独立任务;同一轮内多次调用并发执行(深度 ≤ 2,并发 ≤ 8,超时 5 分钟)

通道特定工具(飞书文件上传、文档创建等)会根据当前通道自动注入。

技能

内置技能在首次运行 openmantis init 时提取到 ~/.openmantis/skills/builtin/,用户自定义技能放在 ~/.openmantis/skills/custom/

技能 说明
docx 创建、读取、编辑和操作 Word 文档(.docx)
xlsx 处理电子表格文件(.xlsx、.xlsm、.csv、.tsv)
weather 通过 wttr.in 或 Open-Meteo 获取天气和预报
image-generate 使用豆包 Seedream 模型从文本或参考图生成图片
agent-browser 浏览器自动化 —— 导航、填表、点击、截图、数据提取
frontend-design 生成生产级前端界面(React 组件、仪表盘等)
skill-manager 管理 OpenMantis 技能的完整生命周期(创建、发现、安装、审计)

斜杠命令

用户通过聊天中的 / 命令与 Agent 交互:

命令 说明
/help 显示可用命令
/new 开始新消息路由
/clear 清除当前消息路由的消息
/stop 强制停止进行中的对话
/delete [id] 删除消息路由
/list 列出所有消息路由
/history 查看当前消息路由的消息
/resume <id> 恢复之前的消息路由
/channel 显示当前通道类型和 ID
/schedule <list|delete|pause|resume> 管理定时任务
/voice [on|off] 切换 TTS 语音模式(仅飞书/企业微信)
/remember <content> 保存内容到核心记忆
/forget <keyword> 删除匹配的核心记忆
/memories 显示当前核心记忆
/bot-open-id 显示机器人 open_id(仅飞书)
/open-id 显示你的飞书 open_id

浏览器自动化

OpenMantis 可通过 agent-browser 驱动真实浏览器。

npm install -g agent-browser
agent-browser install   # 下载 Chrome

在配置中启用:

{
  "browser": {
    "enabled": true
  }
}

每个对话会获得独立的浏览器配置文件。如需复用本地 Chrome 会话,请改用 CDP 模式

google-chrome --remote-debugging-port=9222

Important

CDP 模式下,所有对话共享你的真实浏览器(Cookie、会话、标签页)。请勿将 Agent 指向敏感账户。

定时任务

三种定时任务模式:

  • every — 固定间隔(如每 30 分钟)
  • cron — 5 字段 Cron 表达式,支持时区(默认:Asia/Shanghai
  • at — 一次性定时执行

任务通过完整的 Agent 管线执行,结果发送到创建任务的通道。

Roadmap

Phase 1

  • 飞书深度集成 — 扩展飞书原生能力(审批流、日历、邮件、云文档等)
  • Sub-Agent 调度 — 通过 subagent 工具派发上下文隔离的子 Agent,同一轮内多次调用并行执行(深度 ≤ 2,并发 ≤ 8)
  • 多 Agent 编排 — 在 Sub-Agent 基础上扩展至更复杂的 Multi-Agent 协作与任务拆解
  • 记忆系统重构 — 重新设计存储与检索架构,提升长期记忆的准确性与可扩展性
  • Telegram 渠道 — 新增 Telegram Bot 适配器

欢迎提交 PR 帮助完善!

调试参数

LOG_LEVEL=debug      # 详细日志
DEBUG_PROMPT=true    # 打印系统提示词

脚本参考

开发调试:

bun run dev            # 开发模式(监听 + 调试日志)
bun run dev:full       # 开发模式(后端 + Vite 开发服务器)
bun run typecheck      # TypeScript 类型检查
bun run check          # Biome 代码检查 + 格式化
bun run build:web      # 构建 Web 前端

构建二进制:

bun run build:bin      # 构建当前平台二进制
bun run build:bin:all  # 构建全平台二进制(Linux/macOS/Windows,x64/ARM64)

注意: dev:full 模式下,Vite 会自动选择可用端口启动前端开发服务器,请直接访问 Vite 输出的地址(如 http://localhost:5173)。API 请求会由 Vite 自动代理到后端(默认 localhost:7777)。

联系

About

Lightweight multi-platform AI agent chat framework. Connect multiple LLMs to Feishu/WeCom/QQ with composable tools, long-term memory, scheduling & browser automation. | 轻量级多平台 AI Agent 聊天框架,连接多个 LLM 到飞书/企业微信/QQ,支持可组合工具、长期记忆、定时任务和浏览器自动化。

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors