@lih-x-x/kmr
v1.0.71
Published
关键会议记录服务 — 从飞书会议纪要中提取关键信息并持久化保存
Maintainers
Readme
KMR(Key Meetings Record)
关键会议记录服务 — 从飞书会议纪要中提取关键信息并持久化保存,帮助你在遗忘后通过只言片语快速找回历史会议。
功能
- 会议纪要提取:发送飞书云文档链接给机器人,自动提取会议摘要、待办事项、风险项、关键共识、可复用知识
- 任务闭环:提取待办后自动发送确认消息,回复
/confirm创建飞书任务,/reject取消,3 分钟超时自动取消。自动通过群成员列表解析负责人并指派任务,同步回写会议记录 - 飞书任务系统集成:
kmr create-task直接创建任务(含截止日期、负责人、描述),kmr update-task更新任务标题/截止日期/负责人,kmr task查看所有任务状态,变更同步回写本地会议记录 - 每日任务摘要推送:每天 9:30 向管理员推送未完成和已完成任务摘要,错过时下次启动补推;每小时自动同步飞书任务完成状态
- 本地 AI · 零成本接入:基于 acpx 复用本地 Claude / Codex,接入飞书机器人实现私有化部署,数据不出本机,无额外 API 费用
- 历史信息搜索:会议记录和任务均可通过 AI 对话查询;
/find指令与自然语言双支持,返回最相关的 3 条结果 - 指令 / 自然语言双支持:
/list、/show、/del、/find、/task等精确指令,与自由对话文本均可使用,AI 理解意图自动路由到对应操作 - AI 自由对话:发送非指令文本即可与 AI 自由对话,基于 acpx 持久化 session,按用户隔离,支持 claude 和 codex 两种 agent。AI 可直接调用
kmr命令创建任务、查询记录,回复通过飞书机器人发送,处理中显示表情回应 - 独立任务创建:通过
kmr create-task命令(或 AI 对话)直接创建飞书任务,支持关联到指定会议记录(--meeting <id>),无关联时存入独立任务记录 - 首次启动自动引导:无配置文件时自动初始化并打开 Web 设置页引导填写飞书凭证,配置完成后自动继续启动,无需手动
kmr init - 记录管理:
/list列出所有记录,/show <id>查看详情,/del <id>删除记录,/task查看所有任务 - CLI 命令:
kmr list、kmr show、kmr task、kmr del、kmr find、kmr create-task、kmr update-task等子命令可在终端直接操作,无需启动服务 - 群聊智能识别:群聊中非 @消息仅自动识别会议纪要文档链接(通过文档标题判断),其他操作需 @机器人
- 管理员通知:配置
adminOpenId后,服务启动和停止时自动向管理员推送通知,每天 9:30 推送任务摘要(错过则启动时补推) - 版本更新检查:启动时自动检测 npm 新版本并提示更新
- 本地持久化:所有数据以 JSON 文件存储在
~/.kmr/目录下,支持 grep 检索 - Web 管理界面:服务启动时自动打开浏览器,查看会议记录、AI 会话、管理配置
核心理念:不是记录员,而是分析师
KMR 不做流水账式的会议记录搬运。每条提取结果都围绕三个核心目标:
1. 溯源追责 — 关键共识与承诺
谁答应了什么?什么时候完成?定下了什么约定?
会议中达成的承诺、约定、决议是最容易被遗忘也最容易被否认的。KMR 会提取每一条共识,标注相关方和截止日期,并由 Agent 分析达成背景——事后有人不认账时,一搜即得。
{
"content": "前端重构方案采用渐进式迁移,不做大爆炸重写",
"participants": ["张三", "李四"],
"deadline": "2026-06-01",
"context": "因为当前版本仍在高频迭代,大规模重写会阻塞业务需求至少两个月,团队评估后一致选择渐进方案以降低风险"
}2. 任务闭环 — 会议待办变真实任务
会议待办不再悬空,从纪要到飞书任务全程自动。
会议结束不是终点。KMR 提取待办后自动发起确认消息,回复 /confirm 即可在飞书创建任务并自动解析负责人,任务状态同步回写到会议记录——会开了,事就该定下来。
3. 知识复用 — 可提效的工具与方法
会上提到的工具用法、方法论、经验教训,下次用得上吗?
有价值的信息往往在会议中一闪而过。KMR 会按 tool(工具用法)、methodology(方法论)、lesson(经验教训)、best-practice(最佳实践)分类提取,标注适用场景,形成可检索的知识库。
{
"category": "tool",
"content": "用 pnpm patch 可以临时修复第三方包的 bug,不用 fork 仓库",
"scenario": "依赖包有 bug 但官方还没发版时,用 pnpm patch 打补丁可以快速解决而不引入维护负担",
"source": "王五"
}前置条件
- Node.js >= 18
- acpx 已全局安装(
npm install -g acpx@latest) - Claude Code 或 Codex 已安装并可通过 acpx 调用
- 飞书自建应用,开启以下权限:
im:message:receive_v1(接收消息事件)im:message(发送消息)im:chat:readonly或im:chat.members:read(获取群成员列表,用于解析任务负责人)docs:document.content:read(读取文档内容)docs:document:readonly(读取文档元信息,用于标题识别)task:task:write(创建飞书任务)
快速开始
方式一:全局安装(推荐)
npm install -g @lih-x-x/kmr
kmr # 启动服务,首次运行自动初始化配置并引导填写飞书凭证方式二:克隆源码
git clone <repo-url> && cd kmr
npm install
npm run init # 初始化配置
npm run dev # 启动服务配置文件
编辑 ~/.kmr/config.json:
{
"lark": {
"appId": "你的飞书应用 App ID",
"appSecret": "你的飞书应用 App Secret",
"adminOpenId": "管理员的 open_id(可选,用于接收服务启停通知)"
},
"agent": {
"provider": "claude",
"timeout": 120000
},
"storage": {
"dataDir": "~/.kmr/data/meetings"
}
}provider 支持 claude 和 codex 两种 agent,可在 Web 设置页面实时切换,无需重启服务。
配置完成后运行 kmr 或 npm run dev 启动服务。
使用方式
提取会议纪要
在飞书中向机器人发送会议云文档链接:
https://xxx.feishu.cn/docx/abc123机器人会自动读取文档内容,提取结构化信息并回复摘要。
搜索历史会议
/find 关于用户增长的会议
/find 上次讨论技术架构的内容
/find 处理A事件的文档机器人会返回最相关的 3 条会议记录及原始文档链接。
管理会议记录
/list # 列出所有记录(ID + 标题 + 链接)
展示所有记录 # 自然语言同样支持
/show meeting_1714380000 # 查看某条记录的完整详情
查看 meeting_1714380000 详情 # 自然语言同样支持
/del meeting_1714380000 # 删除某条记录
删掉 meeting_1714380000 # 自然语言同样支持
/task # 查看所有已创建任务的状态CLI 命令
无需启动服务,直接在终端操作:
kmr list # 列出所有会议记录
kmr show <id> # 查看记录详情(JSON)
kmr task # 查看所有任务状态
kmr del <id> # 删除记录
kmr find <query> # AI 搜索会议记录
kmr create-task <标题> [--due YYYY-MM-DD] [--assignee 姓名] [--desc 描述] [--meeting <id>] # 创建飞书任务
kmr update-task <taskId> [--summary 新标题] [--due YYYY-MM-DD] [--assignee 姓名] # 更新飞书任务直接创建飞书任务
除了从会议纪要提取待办后创建任务,也可以直接创建独立任务:
# 创建独立任务
kmr create-task "完成技术方案设计" --due 2026-05-20 --assignee 张三 --desc "需要包含架构图和接口设计"
# 关联到指定会议记录
kmr create-task "完成前端重构" --due 2026-05-20 --assignee 张三 --meeting meeting_1714380000也可以在飞书中直接告诉 AI 机器人创建任务,它会自动调用命令完成操作。
创建飞书任务(从会议纪要)
会议纪要提取后,如果包含待办事项,机器人会自动发送确认消息:
📝 检测到 3 条待办,是否创建飞书任务?
1. [张三] 完成前端重构方案(截止 2026-05-15)
2. [李四] 提交性能测试报告(截止 2026-05-10)
3. [王五] 更新 API 文档(截止 2026-05-12)
回复 /confirm all 创建全部
回复 /confirm 1,2 创建选中的任务
回复 /reject 取消创建
⏱ 3 分钟内未回复将自动取消创建的任务会自动设置截止时间,并通过群成员列表自动解析负责人姓名为飞书 open_id 进行指派(解析失败时 fallback 到确认者)。任务信息同步回写到会议记录中。
AI 自由对话
发送非指令文本即可与 AI 对话,每个用户拥有独立的持久化会话:
你好,帮我总结一下最近的技术方案会话基于 acpx claude session,上下文在多轮对话间保持。
群聊使用
@机器人:可使用所有指令和 AI 对话,与私聊体验一致。
@KMR /list
@KMR /find 技术方案评审
@KMR https://xxx.feishu.cn/docx/abc123无需@:以下场景机器人会自动响应:
- 发送会议纪要文档链接(通过文档标题中的"纪要/会议记录"等关键词自动识别)
- 回复
/confirm、/reject确认或取消创建任务
其他消息机器人不会响应,不会打扰群聊。
Web 管理界面
服务启动后会自动打开浏览器,访问 http://localhost:3000。
- 会议记录:查看所有已提取的会议,点击展开查看详情(含共识、知识、已创建任务等)
- AI 会话:查看各用户的对话历史,支持删除
- 设置:点击右上角齿轮图标,配置飞书 App ID/Secret、Agent 参数等
项目结构
kmr/
├── src/
│ ├── index.ts # 服务入口
│ ├── config.ts # 配置管理(~/.kmr/config.json)
│ ├── cli.ts # CLI 入口(kmr 命令、版本更新检查)
│ ├── cli-init.ts # kmr init 命令
│ ├── lark/
│ │ ├── client.ts # 飞书长连接客户端(消息去重、群聊过滤)
│ │ ├── docReader.ts # 飞书文档内容读取(含标题获取)
│ │ ├── messenger.ts # 飞书消息回复(摘要、确认、任务结果等)
│ │ ├── router.ts # 消息路由(指令解析、自然语言匹配)
│ │ ├── taskCreator.ts # 飞书任务创建(Task API v2)
│ │ └── userResolver.ts # 群成员姓名→open_id 解析
│ ├── agent/
│ │ ├── types.ts # AgentProvider 接口
│ │ ├── claudeCode.ts # Claude/Codex 实现(acpx)
│ │ └── prompt.ts # Prompt 模板
│ ├── session/
│ │ ├── manager.ts # AI 会话管理(per-user acpx session)
│ │ └── skill.ts # 会话角色设定模板
│ ├── query/
│ │ ├── finder.ts # grep 匹配
│ │ └── handler.ts # /find 编排
│ ├── web/
│ │ ├── server.ts # HTTP 服务器 + REST API
│ │ ├── openBrowser.ts # 自动打开浏览器
│ │ └── public/ # 前端静态文件
│ │ ├── index.html
│ │ ├── style.css
│ │ └── app.js
│ ├── utils/
│ │ └── claudeEnv.ts # ~/.claude/settings.json 环境变量加载
│ ├── task/
│ │ └── sync.ts # 飞书任务状态同步
│ └── storage/
│ ├── types.ts # 数据类型定义
│ └── jsonStore.ts # JSON 文件存储
├── tests/ # 测试文件
├── tsup.config.ts # tsup 构建配置
├── package.json
└── tsconfig.json数据存储
会议记录存储在 ~/.kmr/data/meetings/ 下,每个会议一个 JSON 文件:
~/.kmr/
├── config.json
├── data/
│ └── meetings/
│ ├── 2026-04-29_meeting_1714380000.json
│ └── 2026-04-30_meeting_1714466400.json
└── sessions/
└── <userId>/
├── skill.md # AI 角色设定
└── summary.md # 对话历史每条会议记录包含:会议摘要、关键共识与承诺(含 Agent 背景分析)、可复用知识(工具/方法/经验)、待办事项、风险项、项目关联、已创建的飞书任务、原始文档文本。
开发
# 运行测试
npm test
# 监听模式
npm run test:watch
# 类型检查
npx tsc --noEmit
# 构建
npm run build架构扩展
Agent 模块通过 AgentProvider 接口抽象,当前支持 Claude Code 和 Codex 两种 agent(均通过 acpx 调用)。可在 Web 设置页面实时切换,无需重启服务。后续可扩展其他 Agent(如 Kiro、Gemini 等),只需实现该接口:
interface AgentProvider {
name: string;
extract(content: string): Promise<MeetingRecord>;
searchKeywords(query: string): Promise<string[]>;
rankResults(query: string, candidates: MeetingRecord[]): Promise<MeetingRecord[]>;
}许可
ISC
