Skip to content

crawfordxx/claude-feishu-bot

Repository files navigation

Claude Feishu Bot

English | 中文

Claude Code 接入飞书,通过飞书聊天即可使用 Claude Code 的全部能力 —— 执行命令、读写文件、搜索代码、调用 MCP 工具等。

功能特性

核心对话

  • 通过飞书消息直接与 Claude Code CLI 交互
  • 自动维护对话上下文(session),支持多轮对话
  • 实时显示工具调用状态(正在执行什么命令、读取什么文件)
  • 自动检测并发送 Claude 生成的图片/视频/音频文件
  • 支持动态切换工作目录(消息中说"在 ~/project 下...")

后台任务

在飞书中发送长时间任务,不阻塞对话:

后台 分析整个项目的代码质量并写报告
后台列表                    # 查看所有后台任务
后台停止 <id>               # 终止指定任务

定时调度

使用 cron 表达式设置定时任务,自动执行并推送结果到飞书:

定时 0 8 * * * 总结今日AI新闻    # 每天早上8点执行
定时列表                         # 查看所有定时任务
取消定时 <id>                    # 取消指定任务

记忆系统

让 Bot 记住重要信息,在后续对话中自动注入相关上下文:

记住 项目Alpha用React+TypeScript,部署在Vercel上
搜索记忆 React                   # 搜索已保存的记忆
记忆列表                         # 查看所有记忆
删除记忆 <id>                    # 删除指定记忆

多 Agent 协作

启动多个 Claude Agent 协作完成复杂任务:

多agent 研究一下2025年AI Agent最新趋势
多agent research 对比分析几种前端框架
多agent feature 给项目添加用户认证功能
多agent review 审查最近的代码变更

支持三种工作流:

工作流 模式 Agent 组合
research Pipeline(并行研究 + 综合) 研究员 x 2 → 综合者
feature 顺序执行 规划师 → 开发者 → 审查员
review 顺序执行 审查员 → 综合者

对话控制

重置 / reset / clear            # 重置对话上下文
停止 / stop / cancel            # 终止当前执行的任务

架构

飞书 ←WebSocket→ Bot Server ←spawn→ Claude Code CLI
                     │
                     ├── 对话管理 (session 复用)
                     ├── 后台任务 (异步执行)
                     ├── 定时调度 (node-cron)
                     ├── 记忆系统 (本地文件)
                     └── 多Agent编排 (pipeline/parallel/sequential)

关键设计决策:

  • 使用 Claude Code CLI(claude -p)而非 Anthropic API,天然获得所有工具能力和 MCP 支持
  • WebSocket 长连接,无需公网 IP 或域名
  • 消息去重 + 过期消息跳过,防止重复执行
  • Session 自动过期(2小时无活动),避免上下文膨胀

技术栈

  • Runtime: Node.js + TypeScript (ESM)
  • 飞书 SDK: @larksuiteoapi/node-sdk(WebSocket 长连接)
  • AI: Claude Code CLI(通过 child_process.spawn 调用)
  • 调度: node-cron
  • 构建: tsup(打包)/ tsx(开发)

快速开始

前置条件

  1. 已安装 Claude Code CLIclaude 命令可用)
  2. 已安装 Node.js 18+
  3. 已创建飞书自建应用(开发者后台

飞书应用配置

  1. 创建自建应用,获取 App IDApp Secret
  2. 开启权限:
    • im:message(接收消息)
    • im:message:send_as_bot(发送消息)
    • im:resource(上传图片/文件)
  3. 事件订阅 → 选择「使用长连接接收事件」
  4. 订阅事件:im.message.receive_v1
  5. 发布应用版本

安装

git clone https://github.com/crawfordxx/claude-feishu-bot.git
cd claude-feishu-bot
npm install

配置

cp .env.example .env

编辑 .env

FEISHU_APP_ID=cli_your_app_id          # 飞书应用 App ID
FEISHU_APP_SECRET=your_app_secret      # 飞书应用 App Secret
DEFAULT_WORKING_DIR=/path/to/workspace  # Claude 默认工作目录
CLAUDE_MODEL=sonnet                     # Claude 模型 (sonnet/opus/haiku)

运行

# 开发模式
npm run dev

# 生产模式
npm run build
npm start

macOS 开机自启(launchd)

# 1. 复制并编辑 plist 模板
cp com.feishu-claude-bot.plist.example ~/Library/LaunchAgents/com.feishu-claude-bot.plist

# 2. 编辑 plist,填入你的路径和凭据
vim ~/Library/LaunchAgents/com.feishu-claude-bot.plist

# 3. 加载服务
launchctl load ~/Library/LaunchAgents/com.feishu-claude-bot.plist

# 4. 查看状态
launchctl list | grep feishu-claude-bot

环境变量

变量 必填 默认值 说明
FEISHU_APP_ID - 飞书应用 App ID
FEISHU_APP_SECRET - 飞书应用 App Secret
DEFAULT_WORKING_DIR 当前目录 Claude 默认工作目录
CLAUDE_MODEL sonnet Claude 模型
CLAUDE_CLI_PATH claude Claude CLI 路径
MAX_CLAUDE_TIMEOUT_MS 600000 单次任务超时(10分钟)
MAX_BACKGROUND_TIMEOUT_MS 3600000 后台任务超时(1小时)
MAX_CONCURRENT_AGENTS 5 多Agent并发数
BOT_DATA_DIR ~/.feishu-bot 数据存储目录

项目结构

src/
├── index.ts              # 入口,启动 WebSocket 连接
├── config.ts             # 配置管理(环境变量)
├── feishu/
│   ├── client.ts         # 飞书 SDK 客户端
│   ├── handler.ts        # 消息处理 & 命令路由
│   └── sender.ts         # 发送文本/图片/文件
├── agent/
│   ├── claude-cli.ts     # Claude CLI 封装(spawn + 流式解析)
│   ├── conversation.ts   # 对话状态管理
│   ├── orchestrator.ts   # 多Agent编排引擎
│   └── background.ts     # 后台任务管理
├── scheduler/
│   ├── cron.ts           # 定时任务调度
│   └── store.ts          # 定时任务持久化
└── memory/
    ├── store.ts          # 记忆存储(文件系统)
    └── search.ts         # 记忆检索 & 上下文注入

安全说明

  • 本项目使用 --dangerously-skip-permissions 运行 Claude Code,意味着 Claude 可以不经确认执行任何操作
  • 建议仅用于个人使用,不要在公开群聊中部署
  • 敏感信息(API 密钥等)通过环境变量注入,不要提交 .env 文件

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors