### 交互式帮助卡片
发送 `?` 即可显示精美卡片,热门目录一键切换:
## 🌟 项目亮点
### 📱 随时随地写代码
通勤路上、会议间隙、离开工位时都能写代码、重构文件或调试问题。无需 VPN 或远程桌面 - 只需要飞书。
### 🔄 实时流式进度更新
**核心亮点**:飞书消息持续更新,实时展示 Claude 的执行过程!
- **动态消息更新**:同一条消息实时刷新,展示当前执行状态
- **工具调用可视化**:清晰显示 Claude 正在使用的工具(📁 读取文件、🔧 执行命令、🔍 搜索代码等)
- **进度感知**:即使任务耗时较长,用户也能实时看到进展,不再焦虑等待
- **智能截断**:超长消息自动截断,保证飞书消息发送成功
### 🖥️ 跨平台兼容
- **Windows 优化**:通过文件轮询机制解决 Windows 上的 stdout 管道缓冲问题
- **统一体验**:Windows、macOS、Linux 上一致的使用体验
### 🔥 智能目录管理
- **热门目录**:快速访问最近使用的 5 个项目
- **目录级上下文**:每个项目维护独立的对话历史
- **一键恢复**:继续之前的任务,无需重新解释上下文
### 🎯 交互式体验
精美的飞书卡片配合可点击按钮 - 无需记忆命令。点击即可切换目录、更改模式或恢复任务。
### 📝 可配置的变更记录
自动记录所有变更:
- **Git 模式**:自动提交,可自定义消息模板,包含 diff
- **飞书文档**:直接写入飞书文档
- **可扩展**:易于添加更多记录后端
### 🛡️ 企业级就绪
- 消息去重防止重复处理
- 按聊天持久化工作目录
- 多种权限模式控制安全
- 会话超时自动过期
## ✨ 功能特性
- 📱 **飞书集成** - 通过飞书机器人与 Claude 交互(私聊或群聊)
- 🔄 **实时进度** - 每 30 秒更新进度,显示进程状态
- 📁 **目录管理** - 切换项目目录,热门目录快速访问
- 💬 **会话持久化** - 恢复之前的对话,保持上下文
- 🔐 **权限模式** - 多种权限模式满足不同安全需求
- 📝 **变更记录** - 可配置的变更记录(Git 提交、飞书文档等)
- 🛠️ **完整工具支持** - 文件操作、命令执行、网络搜索等
- 🎯 **交互式卡片** - 精美的飞书卡片,支持点击按钮
## 📋 环境要求
- Node.js >= 18.0.0
- 已安装 Claude Code CLI ([安装指南](https://docs.anthropic.com/en/docs/claude-code))
- 飞书开发者账号 ([飞书开放平台](https://open.feishu.cn/))
## 🚀 快速开始
### 1. 克隆并安装
```bash
git clone https://github.com/YOUR_USERNAME/claude-client.git
cd claude-client
npm install
```
### 2. 配置环境变量
```bash
cp .env.example .env
```
编辑 `.env` 文件:
```env
# 飞书机器人配置
FEISHU_APP_ID=cli_xxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxx
FEISHU_DOMAIN=feishu # 国际版使用 'lark'
# 服务器配置
PORT=3000
HOST=0.0.0.0
# 可选:Claude API Key(通常由 CLI 管理)
ANTHROPIC_API_KEY=sk-ant-xxxxxxxx
# 可选:指定 Claude CLI 路径(WSL 用户可能需要)
# CLAUDE_CODE_PATH=/home/xxx/.nvm/versions/node/v24.x.x/bin/claude
# 可选:工作目录根路径(配置后帮助卡片显示目录列表按钮)
WORKSPACE_DIR=D:\code
```
> **WSL 用户注意**:如果在 WSL 中运行项目,可能需要设置 `CLAUDE_CODE_PATH` 环境变量。
> 使用 `which claude` 查看完整路径,然后配置到 `.env` 中。
### 3. 安装 Claude Code CLI
```bash
# macOS/Linux
brew install claude
# 或通过 npm
npm install -g @anthropic-ai/claude-code
# 验证安装
claude --version
```
### 4. 配置飞书机器人
#### 4.1 创建飞书应用
1. 前往 [飞书开放平台](https://open.feishu.cn/) 并登录
2. 点击「创建企业自建应用」
3. 填写应用名称和描述,上传头像
#### 4.2 获取应用凭证
在应用详情页的「凭证与基础信息」中获取:
- **App ID** → 对应 `FEISHU_APP_ID`
- **App Secret** → 对应 `FEISHU_APP_SECRET`
#### 4.3 配置事件订阅
1. 进入「事件订阅」页面
2. **订阅方式**:选择「使用长连接接收事件」
3. 获取以下凭证:
- **Encrypt Key** → 对应 `FEISHU_ENCRYPT_KEY`
- **Verification Token** → 对应 `FEISHU_VERIFICATION_TOKEN`
4. **添加事件**:点击「添加事件」,搜索并订阅:
- `im.message.receive_v1` - 接收消息(必需)
5. **配置卡片回调**:在「卡片配置」中添加:
- `card.action.trigger` - 卡片按钮点击回调(用于帮助卡片交互)
#### 4.4 添加应用权限
在「权限管理」→「申请权限」中添加以下权限:
**方式一:批量导入(推荐)**
1. 点击「申请权限」页面右上角的「导入权限」按钮
2. 将 [imgs/feishu-permissions.json](./imgs/feishu-permissions.json) 文件内容粘贴到输入框
3. 点击确认导入

**方式二:手动添加**
在「应用能力」→「机器人」中:
1. 启用机器人功能
2. 搜索并添加以下权限:
- `im:message` - 获取与发送单聊、群聊消息
- `im:message:send_as_bot` - 以机器人身份发送消息
- `im:message.group_at_msg:readonly` - 获取群组中@机器人消息
- `im:chat` - 获取群组信息
- `im:chat.members:bot_access` - 获取群成员列表
- `cardkit:card:write` - 发送卡片消息(用于帮助卡片)
#### 4.5 发布应用
1. 在「版本管理与发布」中创建版本
2. 提交审核(企业内部应用可跳过审核)
3. 发布后,在飞书中搜索应用名称即可使用
#### 4.6 配置环境变量
将获取的凭证填入 `.env` 文件:
```env
# 飞书机器人配置
FEISHU_APP_ID=cli_xxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxx
FEISHU_ENCRYPT_KEY=xxxxxxxxxxxxxxxxxxxx
FEISHU_VERIFICATION_TOKEN=xxxxxxxxxxxxxxxxxxxx
FEISHU_DOMAIN=feishu # 国际版使用 'lark'
```
### 5. 构建并运行
```bash
npm run build
npm start
```
或开发模式运行:
```bash
npm run dev
```
## 📖 使用方法
### 飞书通知机制详解
本项目实现了**实时流式飞书通知**系统,让您在发送命令给 Claude Code 后,能够实时看到执行进度和最终结果。
#### 通知工作流程
```
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 飞书客户端 │ ──▶ │ 飞书机器人 │ ──▶ │ 本地服务 │
│ (手机/PC) │ │ (长连接) │ │ (Claude CLI) │
└─────────────┘ └──────────────┘ └─────────────┘
▲ │
│ │
└──────────────── 实时进度更新 ◀─────────────┘
```
#### 实时进度更新
**核心特性**:消息持续刷新,实时展示 Claude 的执行过程!
| 阶段 | 状态 | 说明 |
|------|------|------|
| 🔄 | 正在处理... | 初始状态,等待响应 |
| 🤔 | THINKING 表情 | Claude 正在思考 |
| 📖/🔧/💻 | 工具调用 | 显示正在使用的工具 |
| ✅ | THUMBSUP 表情 | 任务完成 |
| ❌ | CROSS 表情 | 任务失败或忙碌 |
#### 工具调用可视化
Claude 使用的每个工具都会显示对应的 emoji 和简短描述:
| 工具 | Emoji | 示例 |
|------|-------|------|
| Read | 📖 | 📖 package.json |
| Write | ✏️ | ✏️ src/index.ts |
| Edit | 📝 | 📝 README.md |
| Bash | 💻 | 💻 `npm install` |
| Glob | 🔍 | 🔍 `**/*.ts` |
| Grep | 🔎 | 🔎 "function" |
| WebSearch | 🌐 | 🌐 "搜索内容" |
#### 消息更新机制
1. **初始消息**:发送 "🔄 正在处理..."
2. **流式更新**:每 2 秒更新一次消息内容
3. **工具展示**:显示当前正在执行的工具
4. **最终结果**:完成后显示完整输出
#### 表情反馈说明
| 表情 | 含义 | 触发时机 |
|------|------|----------|
| 🤔 THINKING | 正在处理 | 收到命令后立即添加 |
| ✅ THUMBSUP | 执行成功 | 任务正常完成 |
| ❌ CROSS | 执行失败/忙碌 | 错误或正在处理其他任务 |
| 😠 ANGRY | 系统错误 | 严重的处理错误 |
#### 消息去重机制
- 自动缓存已处理的消息 ID(最多 5000 条)
- 持久化到 `./data/processed_ids.json`
- 防止服务重启后重复处理消息
#### 长连接 vs Webhook
| 模式 | 优势 | 适用场景 |
|------|------|----------|
| **长连接** (默认) | 实时性强,无需公网 IP | 本地服务,推荐使用 |
| Webhook | 需要公网地址 | 云服务器部署 |
本项目默认使用**长连接模式**,无需配置公网地址即可接收飞书消息。
#### 常见问题
**Q: 为什么有时消息不会实时更新?**
A: 飞书限制了单条消息的编辑次数(约 20 次)。超出限制后会自动发送新消息。
**Q: 如何判断任务是否完成?**
A: 查看消息表情:
- 🤔 (思考中) → 正在执行
- ✅ (完成) → 任务成功
- ❌ (错误) → 任务失败
**Q: 支持群聊使用吗?**
A: 支持!在群聊中需要 @ 机器人才能触发响应。
**Q: 多人会话冲突吗?**
A: 不会。每个聊天(私聊/群聊)维护独立的工作目录和会话上下文。
### 基本交互
直接在飞书中给机器人发送消息:
```
读取 package.json 文件并解释其结构
```
群聊中需要 @ 机器人:
```
@Claude 帮我重构这个函数
```
### 命令
| 命令 | 说明 |
|------|------|
| `?` 或 `?` 或 `/help` | 显示帮助卡片(含热门目录、目录列表、Skill 列表按钮) |
| `/clear` 或 `/reset` | 清除当前会话上下文 |
| `/status` | 查看会话状态 |
| `/pwd` | 显示当前工作目录 |
| `/cd <路径>` | 切换工作目录(支持相对路径如 `../`) |
| `/dirs` | 显示工作目录下的项目列表(需配置 `WORKSPACE_DIR`) |
| `/mode <模式>` | 切换权限模式 |
| `/skills` | 显示 Skill 列表卡片 |
| `/tasklist` 或 `/tasks` | 显示当前目录的上下文列表 |
| `/resume <目录>` | 恢复之前的任务 |
| `/taskdelete <目录>` | 删除指定目录的任务记录 |
### CLI 命令
| 命令 | 说明 |
|------|------|
| `claude-client start [dir]` | 启动服务 |
| `claude-client config` | 显示当前配置 |
| `claude-client check` | 检查 Claude Code CLI 是否可用 |
| `claude-client startup install [--dir | **[ctok.ai](https://ctok.ai/)** — Claude Code / Codex CLI 拼车 ✅ Claude Code ✅ Codex CLI *热心网友提供的拼车服务* |