larkcc 0.6.2 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +89 -876
- package/dist/cardkit.js +6 -0
- package/dist/cardkit.js.map +1 -1
- package/dist/commands/default-prompts.yml +0 -1
- package/dist/commands.js +30 -23
- package/dist/commands.js.map +1 -1
- package/dist/feishu.js +165 -79
- package/dist/feishu.js.map +1 -1
- package/dist/format/builder.d.ts +57 -62
- package/dist/format/builder.js +22 -76
- package/dist/format/builder.js.map +1 -1
- package/dist/format/index.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,79 +11,54 @@ Claude Code in Feishu — 在任意项目目录启动,通过飞书机器人与
|
|
|
11
11
|
npm install -g larkcc
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
从源码安装:
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
17
|
git clone https://github.com/suj1e/larkcc.git
|
|
18
|
-
cd larkcc
|
|
19
|
-
chmod +x install.sh
|
|
20
|
-
./install.sh
|
|
18
|
+
cd larkcc && chmod +x install.sh && ./install.sh
|
|
21
19
|
```
|
|
22
20
|
|
|
23
21
|
## 快速开始
|
|
24
22
|
|
|
25
23
|
```bash
|
|
26
|
-
#
|
|
27
|
-
larkcc --setup
|
|
28
|
-
|
|
29
|
-
# 2. 在你的项目目录启动
|
|
24
|
+
larkcc --setup # 配置机器人(只需 App ID 和 Secret)
|
|
30
25
|
cd /your/project
|
|
31
|
-
larkcc
|
|
32
|
-
|
|
33
|
-
# 3. 给机器人发任意一条消息,自动检测并保存你的 open_id
|
|
34
|
-
# ✅ Auto-detected open_id: ou_xxx
|
|
35
|
-
# 之后就可以正常使用了
|
|
26
|
+
larkcc # 启动
|
|
36
27
|
```
|
|
37
28
|
|
|
29
|
+
首次发消息自动检测并保存 open_id,之后即可正常使用。
|
|
30
|
+
|
|
38
31
|
## 命令
|
|
39
32
|
|
|
40
33
|
```bash
|
|
41
|
-
#
|
|
42
|
-
larkcc
|
|
43
|
-
larkcc -
|
|
44
|
-
larkcc -
|
|
45
|
-
larkcc
|
|
46
|
-
larkcc --
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
机器人B:好的,我来看 larkcc 的 agent.ts...
|
|
62
|
-
|
|
63
|
-
你:[引用机器人A的回复] 这个问题怎么修?
|
|
64
|
-
机器人A:续接上次对话继续回复...
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**触发规则:**
|
|
68
|
-
- 群消息:@ 机器人 或 引用机器人的消息 才会触发
|
|
69
|
-
- 单聊:直接发消息即可
|
|
70
|
-
|
|
71
|
-
**会话说明:**
|
|
72
|
-
- 单聊和群聊共用同一个 Claude session
|
|
73
|
-
- 无论在哪里发消息,Claude 都能记住上下文
|
|
74
|
-
|
|
75
|
-
**飞书权限需要额外添加:**
|
|
76
|
-
- `im:message.group_at_msg:readonly` — 接收群 @ 消息
|
|
34
|
+
larkcc # 启动(默认机器人,新会话)
|
|
35
|
+
larkcc -c # 继续上次会话
|
|
36
|
+
larkcc -p mybot # 使用指定 profile
|
|
37
|
+
larkcc -d # 后台运行
|
|
38
|
+
larkcc --setup # 配置机器人
|
|
39
|
+
larkcc --help # 查看所有命令
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 功能
|
|
43
|
+
|
|
44
|
+
- 流式输出 — 打字机效果逐字显示,支持 CardKit 和 update 两种模式
|
|
45
|
+
- 超长消息 — 自动写入飞书云文档,回复文档链接
|
|
46
|
+
- 思考过程 — Claude 扩展思考以折叠面板显示
|
|
47
|
+
- 图片理解 — 支持截图、富文本多图、外部图片自动上传
|
|
48
|
+
- 文件分析 — 发送文件给 Claude 分析,支持多文件模式
|
|
49
|
+
- 群聊支持 — 多机器人同群,通过 @ 或引用分别控制
|
|
50
|
+
- Slash 命令 — 内置快捷命令,支持自定义 prompt 和 exec 命令
|
|
51
|
+
- 反应状态 — 处理中打 Typing,完成换 DONE
|
|
52
|
+
- 响应元数据 — 每条回复显示耗时、模型、token 用量
|
|
53
|
+
- 多机器人 — 多 profile 独立管理,同一台机器运行多个实例
|
|
77
54
|
|
|
78
55
|
## Slash 命令
|
|
79
56
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
### ⚡ 快速执行(不走 Claude,秒返回)
|
|
57
|
+
### 快速执行(不走 Claude,秒返回)
|
|
83
58
|
|
|
84
59
|
| 命令 | 说明 |
|
|
85
60
|
|------|------|
|
|
86
|
-
| `/stop` `/cancel` |
|
|
61
|
+
| `/stop` `/cancel` | 中断当前任务 |
|
|
87
62
|
| `/s` `/status` | git status + 最近提交 |
|
|
88
63
|
| `/d` `/diff` | git diff |
|
|
89
64
|
| `/l` `/log` | git log |
|
|
@@ -91,7 +66,7 @@ larkcc --help # 查看所有命令
|
|
|
91
66
|
| `/pwd` | 当前目录 + 文件列表 |
|
|
92
67
|
| `/ps` | 运行中的进程 |
|
|
93
68
|
|
|
94
|
-
###
|
|
69
|
+
### Claude 快捷方式
|
|
95
70
|
|
|
96
71
|
| 命令 | 说明 |
|
|
97
72
|
|------|------|
|
|
@@ -106,18 +81,17 @@ larkcc --help # 查看所有命令
|
|
|
106
81
|
| `/todo` | 整理 TODO 清单 |
|
|
107
82
|
| `/summary` | 生成工作日报 |
|
|
108
83
|
| `/bsx [内容]` | 头脑风暴,不动代码 |
|
|
109
|
-
| `/quality [路径]` |
|
|
84
|
+
| `/quality [路径]` | 代码质量检查 |
|
|
110
85
|
| `/release [类型]` | 生成 CHANGELOG + 执行 release.sh |
|
|
111
86
|
| `/check` | 综合检查(类型/lint/测试) |
|
|
112
87
|
| `/security` | 安全漏洞扫描 |
|
|
113
88
|
| `/deps` | 检查过期依赖 |
|
|
114
|
-
| `/upmd` | 更新 README.md 和 CLAUDE.md |
|
|
115
89
|
| `/build` | 构建项目 |
|
|
116
90
|
| `/install` | 安装依赖 |
|
|
117
91
|
| `/run [script]` | 运行 npm script |
|
|
118
92
|
| `/help` | 查看所有命令 |
|
|
119
93
|
|
|
120
|
-
###
|
|
94
|
+
### 多文件模式
|
|
121
95
|
|
|
122
96
|
| 命令 | 说明 |
|
|
123
97
|
|------|------|
|
|
@@ -129,356 +103,28 @@ larkcc --help # 查看所有命令
|
|
|
129
103
|
```yaml
|
|
130
104
|
# ~/.larkcc/config.yml
|
|
131
105
|
commands:
|
|
132
|
-
|
|
133
|
-
deploy: "按标准流程部署到测试环境,部署前先跑测试"
|
|
134
|
-
standup: "总结今天的代码改动,生成简洁日报"
|
|
135
|
-
|
|
136
|
-
# 使用 {input} 模板占位符
|
|
106
|
+
deploy: "按标准流程部署到测试环境"
|
|
137
107
|
impl: "直接实现以下需求,不要讨论:\n\n{input}"
|
|
138
|
-
check: "只检查不修改,分析以下内容:\n\n{input}"
|
|
139
|
-
```
|
|
140
108
|
|
|
141
|
-
**用法:**
|
|
142
|
-
```
|
|
143
|
-
/impl 实现用户登录功能
|
|
144
|
-
→ 直接实现以下需求,不要讨论:
|
|
145
|
-
→ 实现用户登录功能
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**占位符说明:**
|
|
149
|
-
- `{input}` - 用户输入的参数(推荐)
|
|
150
|
-
- 不使用占位符时,参数会以 `补充信息:xxx` 形式附加
|
|
151
|
-
|
|
152
|
-
### 自定义 EXEC 命令
|
|
153
|
-
|
|
154
|
-
除了 PROMPT 命令,还可以定义直接执行的命令(不走 Claude):
|
|
155
|
-
|
|
156
|
-
```yaml
|
|
157
|
-
# ~/.larkcc/config.yml
|
|
158
109
|
exec_commands:
|
|
159
110
|
docker: "docker ps -a"
|
|
160
111
|
dc: "docker-compose {{args}}"
|
|
161
|
-
kp: "kubectl get pods -n {{namespace|default}}"
|
|
162
112
|
logs: "tail -n {{n|100}} {{file}}"
|
|
163
113
|
```
|
|
164
114
|
|
|
165
|
-
|
|
166
|
-
- `{{args}}` - 所有参数
|
|
167
|
-
- `{{param}}` - 按顺序取参数
|
|
168
|
-
- `{{param|default}}` - 可选参数,有默认值
|
|
169
|
-
|
|
170
|
-
**用法:**
|
|
171
|
-
```
|
|
172
|
-
/docker → docker ps -a
|
|
173
|
-
/dc up -d → docker-compose up -d
|
|
174
|
-
/kp production → kubectl get pods -n production
|
|
175
|
-
/logs 50 app.log → tail -n 50 app.log
|
|
176
|
-
/logs app.log → tail -n 100 app.log(使用默认值)
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### EXEC 安全控制
|
|
180
|
-
|
|
181
|
-
为防止误执行危险命令,支持安全检查:
|
|
182
|
-
|
|
183
|
-
```yaml
|
|
184
|
-
# ~/.larkcc/config.yml
|
|
185
|
-
exec_security:
|
|
186
|
-
enabled: true
|
|
187
|
-
blacklist:
|
|
188
|
-
- "rm -rf"
|
|
189
|
-
- "rm -r"
|
|
190
|
-
- "sudo"
|
|
191
|
-
- "mkfs"
|
|
192
|
-
- "dd if="
|
|
193
|
-
- "> /dev/"
|
|
194
|
-
- "chmod 777"
|
|
195
|
-
- "chmod -R"
|
|
196
|
-
- "chown -R"
|
|
197
|
-
- "shutdown"
|
|
198
|
-
- "reboot"
|
|
199
|
-
confirm_on_warning: true
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**说明:**
|
|
203
|
-
- `enabled: true` - 启用安全检查(默认启用)
|
|
204
|
-
- `blacklist` - 危险关键词列表
|
|
205
|
-
- `confirm_on_warning: true` - 检测到危险命令时需用户确认
|
|
206
|
-
|
|
207
|
-
**确认流程:**
|
|
208
|
-
```
|
|
209
|
-
你:/mycmd some dangerous command
|
|
210
|
-
Bot: ⚠️ 危险命令检测
|
|
211
|
-
检测到危险关键词: rm -rf
|
|
212
|
-
命令:rm -rf /some/path
|
|
213
|
-
确认执行?回复 y 确认,回复 n 取消
|
|
214
|
-
你:y
|
|
215
|
-
Bot: ✅ 已执行
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
## 任务控制
|
|
219
|
-
|
|
220
|
-
```
|
|
221
|
-
你:帮我重构整个项目...
|
|
222
|
-
你:/stop → ⏹ 已发送中断信号,等待当前步骤完成...
|
|
223
|
-
→ ✅ 已中断
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
- `/stop` 发送后先提示"已发送中断信号",中断完成后通知"已中断"
|
|
227
|
-
- 中断后卡片保留已生成的内容和思考过程,不会丢失
|
|
228
|
-
- 任务超过 10 分钟无响应自动释放锁,无需重启
|
|
229
|
-
|
|
230
|
-
## 图片支持
|
|
231
|
-
|
|
232
|
-
支持多种图片发送方式,Claude 自动分析:
|
|
233
|
-
|
|
234
|
-
```
|
|
235
|
-
你:[截图] 帮我实现这个界面
|
|
236
|
-
你:[报错截图] 这个怎么修
|
|
237
|
-
你:[富文本含多图] 分析这几张图
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
- 单独图片消息
|
|
241
|
-
- 富文本消息中的图片(支持多图)
|
|
242
|
-
- 混合文字+图片
|
|
243
|
-
|
|
244
|
-
## 文件支持
|
|
245
|
-
|
|
246
|
-
支持发送文件给 Claude 分析:
|
|
247
|
-
|
|
248
|
-
```
|
|
249
|
-
你:[文件 data.xlsx] 分析这个数据
|
|
250
|
-
Claude:我来读取这个文件...
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### 单文件模式
|
|
254
|
-
|
|
255
|
-
直接发送文件,Claude 自动读取并分析。
|
|
256
|
-
|
|
257
|
-
### 多文件模式
|
|
258
|
-
|
|
259
|
-
当需要同时分析多个文件时,使用多文件模式:
|
|
260
|
-
|
|
261
|
-
```
|
|
262
|
-
你:/mf start
|
|
263
|
-
Claude:📁 多文件模式已开始,请发送文件和说明文字,完成后发送 /mf done
|
|
264
|
-
|
|
265
|
-
你:[文件 report.xlsx]
|
|
266
|
-
你:[文件 data.csv]
|
|
267
|
-
你:对比分析这两个数据
|
|
268
|
-
|
|
269
|
-
你:/mf done
|
|
270
|
-
Claude:好的,我来分析这 2 个文件...
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
**命令:**
|
|
274
|
-
|
|
275
|
-
| 命令 | 说明 |
|
|
276
|
-
|------|------|
|
|
277
|
-
| `/mf start` | 开始多文件模式(重复发送会重置) |
|
|
278
|
-
| `/mf done` | 结束并发送所有缓存的文件 |
|
|
279
|
-
|
|
280
|
-
**超时:** 默认 5 分钟超时,超时后需要重新 `/mf start`
|
|
281
|
-
|
|
282
|
-
**临时文件清理:**
|
|
283
|
-
|
|
284
|
-
```bash
|
|
285
|
-
# 清理当前 profile 的临时文件
|
|
286
|
-
larkcc --cleanup-tmp-files
|
|
287
|
-
|
|
288
|
-
# 清理超过 24 小时的文件
|
|
289
|
-
larkcc --cleanup-tmp-files --older-than 24
|
|
290
|
-
|
|
291
|
-
# 清理所有 profile 的临时文件
|
|
292
|
-
larkcc --cleanup-tmp-files --cleanup-all
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
临时文件目录:`~/.larkcc/temp/{profile}/`
|
|
115
|
+
占位符:`{input}` 用于 prompt 命令,`{{args}}` / `{{param|default}}` 用于 exec 命令。
|
|
296
116
|
|
|
297
|
-
##
|
|
117
|
+
## 群聊
|
|
298
118
|
|
|
299
|
-
|
|
300
|
-
larkcc --new-profile # 新增机器人
|
|
301
|
-
larkcc --list-profiles # 查看所有机器人
|
|
302
|
-
larkcc -p mybot # 使用指定机器人
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
### Open ID 自动检测
|
|
306
|
-
|
|
307
|
-
setup 不需要填 open_id,发第一条消息自动保存。
|
|
308
|
-
|
|
309
|
-
### 重复启动检测
|
|
310
|
-
|
|
311
|
-
同一机器人在其他项目运行时提示确认,避免意外顶掉。
|
|
312
|
-
|
|
313
|
-
## 飞书侧体验
|
|
314
|
-
|
|
315
|
-
- ✅ 启动/断开通知
|
|
316
|
-
- 👌 处理中打 reaction,完成换 DONE
|
|
317
|
-
- 💬 回复引用原消息
|
|
318
|
-
- ⚡ 工具调用实时展示(首个工具调用即创建卡片,无需等待正文)
|
|
319
|
-
- 🌊 流式输出(互斥守卫 + 自适应节流 + 长间隔批处理)
|
|
320
|
-
- 📋 Markdown 卡片渲染(自动标题降级适配)
|
|
321
|
-
- 📄 超长消息支持分段发送或写入云文档
|
|
322
|
-
- 🛡️ 文档写入容错(单表/批次失败不影响整篇文档)
|
|
323
|
-
- 🎯 格式指导注入(从源头优化输出质量)
|
|
324
|
-
- 🖼 图片理解(支持富文本多图)
|
|
325
|
-
- 🧠 思考过程折叠面板(collapsible_panel,显示推理耗时)
|
|
326
|
-
- ⏱ 响应元数据(耗时、模型、token 数实时显示)
|
|
327
|
-
- 🖼 外部图片自动上传(下载 → 飞书 → 渲染,支持卡片和文档)
|
|
328
|
-
- ⌨️ Slash 命令
|
|
329
|
-
- ⏹ `/stop` 中断任务(保留已有内容)
|
|
330
|
-
- 👥 群聊 @ 触发
|
|
331
|
-
|
|
332
|
-
## Markdown 扩展语法
|
|
333
|
-
|
|
334
|
-
除了标准 Markdown,还支持以下扩展语法:
|
|
335
|
-
|
|
336
|
-
### 文本样式
|
|
337
|
-
|
|
338
|
-
```markdown
|
|
339
|
-
<u>下划线文本</u>
|
|
340
|
-
|
|
341
|
-
<span style="color:red">红色文字</span>
|
|
342
|
-
<span style="color:#FF0000">十六进制颜色</span>
|
|
343
|
-
<span style="background-color:yellow">高亮背景</span>
|
|
344
|
-
<span style="color:red;background-color:yellow">红色文字+黄色背景</span>
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
**颜色支持:**
|
|
348
|
-
- 颜色名称:`red`、`blue`、`green`、`yellow`、`orange`、`purple`、`pink`、`gray`、`black`、`white` 等
|
|
349
|
-
- 十六进制:`#FF0000`、`#00FF00`、`#0000FF` 等
|
|
350
|
-
|
|
351
|
-
### 表格对齐
|
|
352
|
-
|
|
353
|
-
```markdown
|
|
354
|
-
| 左对齐 | 居中 | 右对齐 |
|
|
355
|
-
| :--- | :--: | ---: |
|
|
356
|
-
| 内容 | 内容 | 内容 |
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
### 表格合并
|
|
360
|
-
|
|
361
|
-
```markdown
|
|
362
|
-
| <td colspan="2">跨两列</td> | 第三列 |
|
|
363
|
-
| --- | --- | --- |
|
|
364
|
-
| A | B | C |
|
|
365
|
-
|
|
366
|
-
| <td rowspan="2">跨两行</td> | B1 |
|
|
367
|
-
| --- | --- |
|
|
368
|
-
| B2 | C2 |
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
### 转义
|
|
372
|
-
|
|
373
|
-
使用 `\` 转义特殊字符:
|
|
374
|
-
|
|
375
|
-
```markdown
|
|
376
|
-
\* 不是斜体 \*
|
|
377
|
-
\<u\> 显示为 <u>
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
## 流式输出
|
|
381
|
-
|
|
382
|
-
回复内容会以打字机效果逐字显示,无需等待完整输出。
|
|
383
|
-
|
|
384
|
-
内部使用 FlushController:
|
|
385
|
-
- **互斥守卫** — 防止并发刷新冲突
|
|
386
|
-
- **自适应节流** — 根据上次刷新时间动态调整间隔
|
|
387
|
-
- **长间隔批处理** — 2 秒无新内容自动 flush 剩余缓冲
|
|
388
|
-
|
|
389
|
-
### 配置
|
|
390
|
-
|
|
391
|
-
```yaml
|
|
392
|
-
streaming:
|
|
393
|
-
enabled: true # 是否启用流式(默认 true)
|
|
394
|
-
mode: cardkit # update(message.patch)| cardkit | none
|
|
395
|
-
flush_interval_ms: 200 # 最小刷新间隔(毫秒)
|
|
396
|
-
thinking_enabled: false # 是否显示 Claude 思考过程
|
|
397
|
-
fallback_on_error: true # 失败时降级为一次性发送
|
|
398
|
-
|
|
399
|
-
# 卡片标题(所有模式生效)
|
|
400
|
-
card_title: Claude # 留空则不显示 header
|
|
401
|
-
|
|
402
|
-
# 图片自动解析(下载外部图片上传到飞书)
|
|
403
|
-
image_resolver:
|
|
404
|
-
enabled: true # 是否启用(默认 true)
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
### 模式说明
|
|
408
|
-
|
|
409
|
-
| 模式 | 说明 | 额外权限 |
|
|
410
|
-
|------|------|---------|
|
|
411
|
-
| `update` | 使用消息 patch API 模拟流式 | 无(默认即可用) |
|
|
412
|
-
| `cardkit` | 使用飞书 CardKit API(真正打字机效果) | `cardkit:card:write` |
|
|
413
|
-
| `none` | 禁用流式,等待完整输出后一次性发送 | 无 |
|
|
414
|
-
|
|
415
|
-
- `cardkit` 模式为默认模式,采用单卡片架构(对齐飞书官方 OpenClaw 方案),全程只有一个消息
|
|
416
|
-
- `cardkit` 模式使用飞书 SDK CardKit 客户端(自动 token 管理、结构化错误处理)
|
|
417
|
-
- `cardkit` 模式支持流式预览(summary)、工具状态栏实时展示(无需等待正文到来)、思考过程折叠面板、长内容自动溢出到云文档
|
|
418
|
-
- `cardkit` 模式关闭流式采用两步操作(settings + update),对齐官方最佳实践
|
|
419
|
-
- 中断时保留已有内容(正文 + 思考过程),不丢失已生成的回复
|
|
420
|
-
- `update` 模式使用消息 patch API 模拟流式,会发送独立的工具调用卡片
|
|
421
|
-
- 流式过程中如果内容超长,最终会自动写入云文档并回复链接
|
|
422
|
-
|
|
423
|
-
### 中断
|
|
424
|
-
|
|
425
|
-
流式输出过程中可以使用 `/stop` 中断,卡片会保留已生成的内容和思考过程。
|
|
119
|
+
把多个机器人拉进同一个飞书群,通过 @ 或引用回复分别控制:
|
|
426
120
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
- 流式期间显示 "⏳ 思考中..." 提示
|
|
432
|
-
- 完成后思考内容收起在折叠面板中,标题显示思考耗时(如 `💭 思考 3.2s`),点击可展开查看
|
|
433
|
-
- 超过 3000 字的思考内容自动截断
|
|
434
|
-
- 关闭时完全过滤思考内容,用户无感
|
|
435
|
-
|
|
436
|
-
### 响应元数据
|
|
437
|
-
|
|
438
|
-
每条回复底部自动显示耗时、模型和 token 用量:
|
|
439
|
-
|
|
440
|
-
```
|
|
441
|
-
⏱ 8.2s · claude-sonnet-4-6 · 1,234 tokens
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
仅显示在卡片消息中,云文档不追加。
|
|
445
|
-
|
|
446
|
-
## 格式优化
|
|
447
|
-
|
|
448
|
-
### 卡片自动优化
|
|
449
|
-
|
|
450
|
-
发送到飞书卡片的 Markdown 会自动经过优化管线处理:
|
|
451
|
-
|
|
452
|
-
1. **标题降级** — H1→H4, H2-H6→H5(飞书卡片只支持 H4/H5)
|
|
453
|
-
2. **代码块保护** — 代码块内容不会被其他处理逻辑误解析
|
|
454
|
-
3. **外部图片上传** — 自动下载外部图片并上传到飞书,替换为 `img_xxx` 格式(卡片和文档均支持)
|
|
455
|
-
|
|
456
|
-
### 格式指导(System Prompt)
|
|
457
|
-
|
|
458
|
-
默认启用,通过 Claude Code SDK 的 system prompt 注入飞书格式规范,从源头提升输出质量。整个会话只需注入一次,不重复消耗 token。
|
|
459
|
-
|
|
460
|
-
```yaml
|
|
461
|
-
format_guide:
|
|
462
|
-
enabled: true # 是否启用(默认 true)
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
**自定义格式指导:**
|
|
466
|
-
|
|
467
|
-
编辑 `~/.larkcc/format-guide.md` 即可覆盖默认内容。格式指导内容是纯 Markdown,你可以根据实际需求增减规则。
|
|
468
|
-
|
|
469
|
-
查看默认格式指导:`resources/format-guide.md`(随项目发布)。
|
|
470
|
-
|
|
471
|
-
## 消息类型支持
|
|
121
|
+
- 群消息:@ 机器人或引用机器人的消息才会触发
|
|
122
|
+
- 单聊:直接发消息即可
|
|
123
|
+
- 单聊和群聊共用同一个 Claude session
|
|
472
124
|
|
|
473
|
-
|
|
474
|
-
|------|------|------|
|
|
475
|
-
| 普通文本 | ✅ | ✅(需 @) |
|
|
476
|
-
| 富文本 | ✅ | ✅(需 @) |
|
|
477
|
-
| 富文本含图片 | ✅ | ✅(需 @) |
|
|
478
|
-
| 图片 | ✅ | ✅(需 @) |
|
|
479
|
-
| 引用回复 | ✅ | ✅ |
|
|
125
|
+
额外权限:`im:message.group_at_msg:readonly`
|
|
480
126
|
|
|
481
|
-
##
|
|
127
|
+
## 配置
|
|
482
128
|
|
|
483
129
|
`~/.larkcc/config.yml`:
|
|
484
130
|
|
|
@@ -490,67 +136,50 @@ feishu:
|
|
|
490
136
|
|
|
491
137
|
claude:
|
|
492
138
|
permission_mode: acceptEdits
|
|
493
|
-
allowed_tools:
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
139
|
+
allowed_tools: [Read, Write, Edit, Bash, Glob, Grep, LS]
|
|
140
|
+
|
|
141
|
+
# 流式输出
|
|
142
|
+
streaming:
|
|
143
|
+
enabled: true
|
|
144
|
+
mode: cardkit # cardkit | update | none
|
|
145
|
+
flush_interval_ms: 300
|
|
146
|
+
thinking_enabled: false # 显示思考过程
|
|
147
|
+
fallback_on_error: true
|
|
148
|
+
|
|
149
|
+
# 超长消息
|
|
503
150
|
overflow:
|
|
504
|
-
mode: document
|
|
505
|
-
chunk:
|
|
506
|
-
threshold: 2800 # 分片阈值
|
|
151
|
+
mode: document # document(云文档)| chunk(分片)
|
|
507
152
|
document:
|
|
508
|
-
threshold: 2800
|
|
153
|
+
threshold: 2800
|
|
509
154
|
title_template: "{cwd} - {session_id} - {datetime}"
|
|
155
|
+
cleanup:
|
|
156
|
+
enabled: true
|
|
157
|
+
max_docs: 50
|
|
158
|
+
notify: true
|
|
510
159
|
|
|
511
|
-
#
|
|
160
|
+
# 格式
|
|
161
|
+
card_title: Claude # 卡片标题,留空不显示
|
|
512
162
|
format_guide:
|
|
513
|
-
enabled: true
|
|
514
|
-
|
|
515
|
-
# 卡片标题
|
|
516
|
-
card_title: Claude # 留空则不显示 header
|
|
517
|
-
|
|
518
|
-
# 流式输出配置
|
|
519
|
-
streaming:
|
|
520
|
-
enabled: true # 是否启用流式(默认 true)
|
|
521
|
-
mode: cardkit # update | cardkit | none
|
|
522
|
-
flush_interval_ms: 300 # 最小刷新间隔(毫秒)
|
|
523
|
-
thinking_enabled: false # 是否显示思考过程
|
|
524
|
-
fallback_on_error: true # 失败时降级
|
|
525
|
-
|
|
526
|
-
# 图片自动解析(下载外部图片上传到飞书)
|
|
163
|
+
enabled: true # 注入飞书格式要求到 prompt
|
|
527
164
|
image_resolver:
|
|
528
|
-
enabled: true
|
|
529
|
-
|
|
530
|
-
commands:
|
|
531
|
-
deploy: "部署到测试环境"
|
|
532
|
-
|
|
533
|
-
# 图片消息默认提示词(只发图片时会自动添加)
|
|
165
|
+
enabled: true # 外部图片自动上传
|
|
534
166
|
image_prompt: "分析图片,给出回应"
|
|
535
167
|
|
|
536
|
-
#
|
|
168
|
+
# 文件处理
|
|
537
169
|
file:
|
|
538
|
-
enabled: true
|
|
539
|
-
size_limit: 31457280
|
|
540
|
-
|
|
541
|
-
prompt: "分析文件 {filename}(路径:{filepath},大小:{size},类型:{mime_type})"
|
|
542
|
-
multifile_prompt: "分析以下 {count} 个文件:\n{files}\n\n用户说明:{text}"
|
|
543
|
-
multifile_timeout: 300 # 多文件模式超时(秒)
|
|
544
|
-
|
|
545
|
-
# Reaction 表情配置
|
|
546
|
-
reaction:
|
|
547
|
-
processing: Typing # 处理中(默认 Typing 敲键盘)
|
|
548
|
-
done: DONE # 完成
|
|
549
|
-
error: OnIt # 出错
|
|
550
|
-
|
|
551
|
-
# 卡片标题
|
|
552
|
-
card_title: Claude
|
|
170
|
+
enabled: true
|
|
171
|
+
size_limit: 31457280 # 30MB
|
|
172
|
+
multifile_timeout: 300
|
|
553
173
|
|
|
174
|
+
# 自定义命令
|
|
175
|
+
commands: {}
|
|
176
|
+
exec_commands: {}
|
|
177
|
+
exec_security:
|
|
178
|
+
enabled: true
|
|
179
|
+
blacklist: ["rm -rf", "sudo", "mkfs"]
|
|
180
|
+
confirm_on_warning: true
|
|
181
|
+
|
|
182
|
+
# 多机器人
|
|
554
183
|
profiles:
|
|
555
184
|
mybot:
|
|
556
185
|
feishu:
|
|
@@ -558,164 +187,26 @@ profiles:
|
|
|
558
187
|
app_secret: xxxxxxxxxxxxxxxx
|
|
559
188
|
```
|
|
560
189
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
当回复内容超过阈值时,支持两种处理方式:
|
|
564
|
-
|
|
565
|
-
| 模式 | 说明 |
|
|
566
|
-
|------|------|
|
|
567
|
-
| `chunk` | 分片发送,每片带页码 |
|
|
568
|
-
| `document` | 写入飞书云文档,回复文档链接 |
|
|
569
|
-
|
|
570
|
-
**文档模式配置:**
|
|
571
|
-
|
|
572
|
-
在飞书开发者后台为应用开通以下**用户身份**权限:
|
|
573
|
-
|
|
574
|
-
| 权限 | 说明 |
|
|
575
|
-
|------|------|
|
|
576
|
-
| `docx:document` | 创建/编辑云文档 |
|
|
577
|
-
| `drive:file` | 删除云空间文件 |
|
|
578
|
-
|
|
579
|
-
开通后发布应用,文档会自动创建在您"我的空间"的`larkcc` 文件夹中。
|
|
580
|
-
|
|
581
|
-
**标题模板占位符:**
|
|
582
|
-
- `{cwd}` - 当前工作目录
|
|
583
|
-
- `{session_id}` - Claude 会话 ID
|
|
584
|
-
- `{datetime}` - 日期时间(2026-03-22 14:30:00)
|
|
585
|
-
- `{date}` - 日期(2026-03-22)
|
|
586
|
-
- `{profile}` - 机器人配置名
|
|
587
|
-
|
|
588
|
-
**文档结构:**
|
|
589
|
-
|
|
590
|
-
```
|
|
591
|
-
> 用户原始消息内容
|
|
592
|
-
|
|
593
|
-
──────────────────
|
|
594
|
-
|
|
595
|
-
📁 工作目录: /opt/dev/myproject
|
|
596
|
-
🤖 机器人: default
|
|
597
|
-
🔗 会话ID: abc123def456
|
|
598
|
-
📅 时间: 2026-03-22 14:30:00
|
|
599
|
-
|
|
600
|
-
──────────────────
|
|
601
|
-
|
|
602
|
-
(实际回复内容...)
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
- 支持 Markdown 格式(标题、代码块、列表等)
|
|
606
|
-
|
|
607
|
-
**图片处理:**
|
|
608
|
-
|
|
609
|
-
- `blob:` 格式的无效图片 URL 自动过滤
|
|
610
|
-
- 外部图片(`https://`)自动下载并上传到飞书,替换为内部 `img_xxx` 格式
|
|
611
|
-
- 上传失败的图片降级为链接,不影响整体流程
|
|
612
|
-
- 图片大小限制 10MB,下载超时 10 秒
|
|
613
|
-
- 卡片和云文档均支持图片渲染
|
|
614
|
-
|
|
615
|
-
**自动清理:**
|
|
616
|
-
|
|
617
|
-
创建新文档时,会自动清理超出数量的旧文档:
|
|
618
|
-
|
|
619
|
-
```yaml
|
|
620
|
-
overflow:
|
|
621
|
-
mode: document
|
|
622
|
-
document:
|
|
623
|
-
threshold: 2800
|
|
624
|
-
title_template: "{datetime}"
|
|
625
|
-
cleanup:
|
|
626
|
-
enabled: true # 是否启用自动清理
|
|
627
|
-
max_docs: 50 # 最大保留文档数(每个 profile 独立计算)
|
|
628
|
-
notify: true # 清理时是否通知
|
|
629
|
-
```
|
|
630
|
-
|
|
631
|
-
- 使用本地文档注册表追踪创建的文档(`~/.larkcc/doc-registry.json`)
|
|
632
|
-
- 每个 profile 独立管理,互不影响
|
|
633
|
-
- 按创建时间排序,保留最新的 `max_docs` 个文档
|
|
634
|
-
- 清理成功会在回复消息中附带通知
|
|
635
|
-
- 删除失败会忽略并继续,不影响正常流程
|
|
636
|
-
|
|
637
|
-
### 自定义 API
|
|
638
|
-
|
|
639
|
-
`~/.claude/settings.json`:
|
|
640
|
-
|
|
641
|
-
```json
|
|
642
|
-
{
|
|
643
|
-
"env": {
|
|
644
|
-
"ANTHROPIC_AUTH_TOKEN": "your-token",
|
|
645
|
-
"ANTHROPIC_BASE_URL": "https://ark.cn-beijing.volces.com/api/coding",
|
|
646
|
-
"ANTHROPIC_MODEL": "ark-code-latest",
|
|
647
|
-
"API_TIMEOUT_MS": "3000000"
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
## 飞书开放平台配置
|
|
653
|
-
|
|
654
|
-
> ⚠️ 改完权限必须**创建新版本并发布**
|
|
655
|
-
|
|
656
|
-
### 权限
|
|
657
|
-
|
|
658
|
-
权限按功能分组,建议全部开通:
|
|
659
|
-
|
|
660
|
-
#### 基础消息(必开)
|
|
661
|
-
|
|
662
|
-
| 权限 | 用途 |
|
|
663
|
-
|------|------|
|
|
664
|
-
| `im:message` | 基础消息(含下载消息中的图片、文件) |
|
|
665
|
-
| `im:message:send_as_bot` | 以机器人身份发送消息、回复消息、更新消息(**流式输出也依赖此权限**) |
|
|
666
|
-
| `im:message.p2p_msg:readonly` | 接收私聊消息 |
|
|
667
|
-
| `im:message.group_at_msg:readonly` | 接收群 @ 消息 |
|
|
668
|
-
| `im:message.reactions:write_only` | 打 reaction 表情(处理中/完成/出错状态) |
|
|
669
|
-
|
|
670
|
-
#### 卡片与富文本
|
|
671
|
-
|
|
672
|
-
| 权限 | 用途 |
|
|
673
|
-
|------|------|
|
|
674
|
-
| `cardkit:card:write` | 发送交互式卡片、CardKit 流式输出 |
|
|
675
|
-
|
|
676
|
-
> 💡 `im:message` 权限已包含下载消息中资源文件(图片、文件)的能力
|
|
677
|
-
|
|
678
|
-
#### 云文档(超长消息写入)
|
|
679
|
-
|
|
680
|
-
| 权限 | 用途 |
|
|
681
|
-
|------|------|
|
|
682
|
-
| `docx:document` | 创建/编辑云文档(`overflow.mode: document` 时需要) |
|
|
683
|
-
| `drive:file` | 删除云空间文件(自动清理旧文档时需要) |
|
|
684
|
-
|
|
685
|
-
> 💡 不使用文档模式时,这两个权限可以不开
|
|
686
|
-
|
|
687
|
-
#### 开通步骤
|
|
190
|
+
标题模板占位符:`{cwd}` `{session_id}` `{datetime}` `{date}` `{profile}`
|
|
688
191
|
|
|
689
|
-
|
|
690
|
-
2. 左侧菜单 **权限管理** → 搜索并开通上述权限
|
|
691
|
-
3. 点击 **权限管理** 页面上方的 **权限配置** → 批量开通
|
|
692
|
-
4. 创建新版本 → 申请发布(企业自建应用管理员审批即可)
|
|
693
|
-
5. 发布成功后权限生效
|
|
192
|
+
## 飞书权限
|
|
694
193
|
|
|
695
|
-
|
|
194
|
+
在 [飞书开发者后台](https://open.feishu.cn/) 开通以下权限,然后创建新版本并发布:
|
|
696
195
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
|
704
|
-
|
|
705
|
-
|
|
|
706
|
-
|
|
|
707
|
-
| `~/.larkcc/state-{profile}.json` | 各 profile 状态 |
|
|
708
|
-
| `~/.larkcc/lock-default.json` | 进程锁 |
|
|
709
|
-
| `~/.larkcc/lock-{profile}.json` | 各 profile 进程锁 |
|
|
710
|
-
| `~/.larkcc/doc-registry.json` | 默认 profile 文档注册表 |
|
|
711
|
-
| `~/.larkcc/doc-registry-{profile}.json` | 各 profile 文档注册表 |
|
|
712
|
-
| `~/.larkcc/temp/default/` | 默认 profile 临时文件目录 |
|
|
713
|
-
| `~/.larkcc/temp/{profile}/` | 各 profile 临时文件目录 |
|
|
714
|
-
| `~/.claude.json` | Claude onboarding(自动创建) |
|
|
196
|
+
| 权限 | 用途 | 必需 |
|
|
197
|
+
|------|------|------|
|
|
198
|
+
| `im:message` | 基础消息(含图片/文件下载) | 是 |
|
|
199
|
+
| `im:message:send_as_bot` | 发送/回复/更新消息 | 是 |
|
|
200
|
+
| `im:message.p2p_msg:readonly` | 接收私聊消息 | 是 |
|
|
201
|
+
| `im:message.reactions:write_only` | 打 reaction 状态 | 是 |
|
|
202
|
+
| `cardkit:card:write` | CardKit 流式输出 | 推荐 |
|
|
203
|
+
| `im:message.group_at_msg:readonly` | 接收群 @ 消息 | 群聊 |
|
|
204
|
+
| `docx:document` | 创建/编辑云文档 | 文档模式 |
|
|
205
|
+
| `drive:file` | 删除云空间文件 | 文档清理 |
|
|
715
206
|
|
|
716
|
-
|
|
207
|
+
事件订阅:使用**长连接** → 订阅 `im.message.receive_v1`
|
|
717
208
|
|
|
718
|
-
##
|
|
209
|
+
## 相关资源
|
|
719
210
|
|
|
720
211
|
- [飞书文档块 API](https://feishu.apifox.cn/doc-1950637) — 文档块类型、属性、代码语言枚举
|
|
721
212
|
|
|
@@ -726,281 +217,3 @@ overflow:
|
|
|
726
217
|
## Disclaimer
|
|
727
218
|
|
|
728
219
|
This project is not officially affiliated with Lark, Feishu, or ByteDance.
|
|
729
|
-
|
|
730
|
-
---
|
|
731
|
-
|
|
732
|
-
# English Documentation
|
|
733
|
-
|
|
734
|
-
Claude Code in Feishu/Lark — Start in any project directory, chat with Claude via Feishu bot, experience equivalent to using Claude Code directly in terminal.
|
|
735
|
-
|
|
736
|
-
## Installation
|
|
737
|
-
|
|
738
|
-
```bash
|
|
739
|
-
npm install -g larkcc
|
|
740
|
-
```
|
|
741
|
-
|
|
742
|
-
### Install from Source
|
|
743
|
-
|
|
744
|
-
```bash
|
|
745
|
-
git clone https://github.com/suj1e/larkcc.git
|
|
746
|
-
cd larkcc
|
|
747
|
-
chmod +x install.sh
|
|
748
|
-
./install.sh
|
|
749
|
-
```
|
|
750
|
-
|
|
751
|
-
## Quick Start
|
|
752
|
-
|
|
753
|
-
```bash
|
|
754
|
-
# 1. Configure default bot (only need App ID and Secret)
|
|
755
|
-
larkcc --setup
|
|
756
|
-
|
|
757
|
-
# 2. Start in your project directory
|
|
758
|
-
cd /your/project
|
|
759
|
-
larkcc
|
|
760
|
-
|
|
761
|
-
# 3. Send any message to the bot, it will auto-detect and save your open_id
|
|
762
|
-
# ✅ Auto-detected open_id: ou_xxx
|
|
763
|
-
# Now you can use it normally
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
## Commands
|
|
767
|
-
|
|
768
|
-
```bash
|
|
769
|
-
# Common
|
|
770
|
-
larkcc # Start (default bot, new session)
|
|
771
|
-
larkcc -c # Continue last session
|
|
772
|
-
larkcc -p mybot # Use specified profile
|
|
773
|
-
larkcc -d # Run in background
|
|
774
|
-
larkcc --setup # Configure bot
|
|
775
|
-
larkcc --help # View all commands
|
|
776
|
-
```
|
|
777
|
-
|
|
778
|
-
## Group Chat Support
|
|
779
|
-
|
|
780
|
-
Add multiple bots to the same Feishu group, control them via @ mentions or reply:
|
|
781
|
-
|
|
782
|
-
```
|
|
783
|
-
Group: You + BotA(project A) + BotB(project B)
|
|
784
|
-
|
|
785
|
-
You: @BotA Help me analyze the login module
|
|
786
|
-
BotA: OK, let me check project A's login module...
|
|
787
|
-
|
|
788
|
-
You: @BotB Help me check agent.ts
|
|
789
|
-
BotB: OK, let me check project B's agent.ts...
|
|
790
|
-
|
|
791
|
-
You: [Reply to BotA's message] How to fix this issue?
|
|
792
|
-
BotA: Continue from previous conversation...
|
|
793
|
-
```
|
|
794
|
-
|
|
795
|
-
**Trigger rules:**
|
|
796
|
-
- Group message: @ bot or reply to bot's message to trigger
|
|
797
|
-
- Direct message: Just send message directly
|
|
798
|
-
|
|
799
|
-
**Session:**
|
|
800
|
-
- Direct chat and group chat share the same Claude session
|
|
801
|
-
- Claude remembers context regardless of where you send message
|
|
802
|
-
|
|
803
|
-
**Additional Feishu permission required:**
|
|
804
|
-
- `im:message.group_at_msg:readonly` — Receive group @ messages
|
|
805
|
-
|
|
806
|
-
## Slash Commands
|
|
807
|
-
|
|
808
|
-
Send `/command` in Feishu for quick actions:
|
|
809
|
-
|
|
810
|
-
### ⚡ Quick Execute (No Claude, instant return)
|
|
811
|
-
|
|
812
|
-
| Command | Description |
|
|
813
|
-
|---------|-------------|
|
|
814
|
-
| `/stop` `/cancel` | **Interrupt current task** |
|
|
815
|
-
| `/s` `/status` | git status + recent commits |
|
|
816
|
-
| `/d` `/diff` | git diff |
|
|
817
|
-
| `/l` `/log` | git log |
|
|
818
|
-
| `/b` `/branch` | Branch list |
|
|
819
|
-
| `/pwd` | Current directory + file list |
|
|
820
|
-
| `/ps` | Running processes |
|
|
821
|
-
|
|
822
|
-
### 💬 Claude Shortcuts
|
|
823
|
-
|
|
824
|
-
| Command | Description |
|
|
825
|
-
|---------|-------------|
|
|
826
|
-
| `/review` | Code review |
|
|
827
|
-
| `/fix` | Fix errors |
|
|
828
|
-
| `/doc` | Generate/update README |
|
|
829
|
-
| `/test [file]` | Generate unit tests |
|
|
830
|
-
| `/explain [file]` | Explain code |
|
|
831
|
-
| `/refactor [file]` | Refactor |
|
|
832
|
-
| `/commit` | Generate commit message |
|
|
833
|
-
| `/pr` | Generate PR description |
|
|
834
|
-
| `/todo` | Organize TODO list |
|
|
835
|
-
| `/summary` | Generate daily report |
|
|
836
|
-
| `/bsx [content]` | Brainstorm without code changes |
|
|
837
|
-
| `/quality [path]` | Code quality check (types/errors/simplicity/perf) |
|
|
838
|
-
| `/release [type]` | Generate CHANGELOG + run release.sh |
|
|
839
|
-
| `/check` | Comprehensive check (types/lint/test) |
|
|
840
|
-
| `/security` | Security vulnerability scan |
|
|
841
|
-
| `/deps` | Check outdated dependencies |
|
|
842
|
-
| `/upmd` | Update README.md and CLAUDE.md |
|
|
843
|
-
| `/build` | Build project |
|
|
844
|
-
| `/install` | Install dependencies |
|
|
845
|
-
| `/run [script]` | Run npm script |
|
|
846
|
-
| `/help` | View all commands |
|
|
847
|
-
|
|
848
|
-
### Custom Commands
|
|
849
|
-
|
|
850
|
-
```yaml
|
|
851
|
-
# ~/.larkcc/config.yml
|
|
852
|
-
commands:
|
|
853
|
-
deploy: "Deploy to test environment following standard process"
|
|
854
|
-
impl: "Implement the following directly without discussion:\n\n{input}"
|
|
855
|
-
```
|
|
856
|
-
|
|
857
|
-
### Custom EXEC Commands
|
|
858
|
-
|
|
859
|
-
Define commands that execute directly (without Claude):
|
|
860
|
-
|
|
861
|
-
```yaml
|
|
862
|
-
# ~/.larkcc/config.yml
|
|
863
|
-
exec_commands:
|
|
864
|
-
docker: "docker ps -a"
|
|
865
|
-
dc: "docker-compose {{args}}"
|
|
866
|
-
logs: "tail -n {{n|100}} {{file}}"
|
|
867
|
-
```
|
|
868
|
-
|
|
869
|
-
**Template syntax:**
|
|
870
|
-
- `{{args}}` - All arguments
|
|
871
|
-
- `{{param}}` - Parameter by position
|
|
872
|
-
- `{{param|default}}` - Optional with default value
|
|
873
|
-
|
|
874
|
-
### EXEC Security Control
|
|
875
|
-
|
|
876
|
-
```yaml
|
|
877
|
-
exec_security:
|
|
878
|
-
enabled: true
|
|
879
|
-
blacklist:
|
|
880
|
-
- "rm -rf"
|
|
881
|
-
- "sudo"
|
|
882
|
-
- "mkfs"
|
|
883
|
-
confirm_on_warning: true
|
|
884
|
-
```
|
|
885
|
-
|
|
886
|
-
## Image Support
|
|
887
|
-
|
|
888
|
-
Supports multiple image sending methods, Claude auto-analyzes:
|
|
889
|
-
|
|
890
|
-
```
|
|
891
|
-
You: [Screenshot] Help me implement this UI
|
|
892
|
-
You: [Error screenshot] How to fix this
|
|
893
|
-
You: [Rich text with multiple images] Analyze these images
|
|
894
|
-
```
|
|
895
|
-
|
|
896
|
-
> **Note:** Invalid image URLs (like `blob:` URLs from websearch) are automatically filtered. External images are automatically downloaded and uploaded to Feishu for proper rendering.
|
|
897
|
-
|
|
898
|
-
## File Support
|
|
899
|
-
|
|
900
|
-
Send files to Claude for analysis:
|
|
901
|
-
|
|
902
|
-
```
|
|
903
|
-
You: [File data.xlsx] Analyze this data
|
|
904
|
-
Claude: Let me read this file...
|
|
905
|
-
```
|
|
906
|
-
|
|
907
|
-
## Extended Markdown Syntax
|
|
908
|
-
|
|
909
|
-
Beyond standard Markdown, the following extensions are supported:
|
|
910
|
-
|
|
911
|
-
### Text Styles
|
|
912
|
-
|
|
913
|
-
```markdown
|
|
914
|
-
<u>Underline text</u>
|
|
915
|
-
|
|
916
|
-
<span style="color:red">Red text</span>
|
|
917
|
-
<span style="color:#FF0000">Hex color</span>
|
|
918
|
-
<span style="background-color:yellow">Highlighted background</span>
|
|
919
|
-
<span style="color:red;background-color:yellow">Red text + yellow background</span>
|
|
920
|
-
```
|
|
921
|
-
|
|
922
|
-
**Color support:**
|
|
923
|
-
- Color names: `red`, `blue`, `green`, `yellow`, `orange`, `purple`, `pink`, `gray`, `black`, `white`, etc.
|
|
924
|
-
- Hexadecimal: `#FF0000`, `#00FF00`, `#0000FF`, etc.
|
|
925
|
-
|
|
926
|
-
### Table Alignment
|
|
927
|
-
|
|
928
|
-
```markdown
|
|
929
|
-
| Left | Center | Right |
|
|
930
|
-
| :--- | :----: | ----: |
|
|
931
|
-
| A | B | C |
|
|
932
|
-
```
|
|
933
|
-
|
|
934
|
-
### Table Cell Merging
|
|
935
|
-
|
|
936
|
-
```markdown
|
|
937
|
-
| <td colspan="2">Span 2 columns</td> | Col 3 |
|
|
938
|
-
| --- | --- | --- |
|
|
939
|
-
| A | B | C |
|
|
940
|
-
|
|
941
|
-
| <td rowspan="2">Span 2 rows</td> | B1 |
|
|
942
|
-
| --- | --- |
|
|
943
|
-
| B2 | C2 |
|
|
944
|
-
```
|
|
945
|
-
|
|
946
|
-
### Escaping
|
|
947
|
-
|
|
948
|
-
Use `\` to escape special characters:
|
|
949
|
-
|
|
950
|
-
```markdown
|
|
951
|
-
\* not italic \*
|
|
952
|
-
\<u\> displays as <u>
|
|
953
|
-
```
|
|
954
|
-
|
|
955
|
-
## Multi-Bot Support
|
|
956
|
-
|
|
957
|
-
```bash
|
|
958
|
-
larkcc --new-profile # Add new bot
|
|
959
|
-
larkcc --list-profiles # List all bots
|
|
960
|
-
larkcc -p mybot # Use specified bot
|
|
961
|
-
```
|
|
962
|
-
|
|
963
|
-
## Feishu Open Platform Configuration
|
|
964
|
-
|
|
965
|
-
> ⚠️ After changing permissions, you must **create a new version and publish**
|
|
966
|
-
|
|
967
|
-
### Permissions
|
|
968
|
-
|
|
969
|
-
#### Basic Messaging (Required)
|
|
970
|
-
|
|
971
|
-
| Permission | Purpose |
|
|
972
|
-
|------------|---------|
|
|
973
|
-
| `im:message` | Basic message (including image/file download) |
|
|
974
|
-
| `im:message:send_as_bot` | Send/reply/update messages (**streaming also depends on this**) |
|
|
975
|
-
| `im:message.p2p_msg:readonly` | Receive direct messages |
|
|
976
|
-
| `im:message.group_at_msg:readonly` | Receive group @ messages |
|
|
977
|
-
| `im:message.reactions:write_only` | Add reactions (processing/done/error status) |
|
|
978
|
-
|
|
979
|
-
#### Cards
|
|
980
|
-
|
|
981
|
-
| Permission | Purpose |
|
|
982
|
-
|------------|---------|
|
|
983
|
-
| `cardkit:card:write` | Send interactive cards, CardKit streaming |
|
|
984
|
-
|
|
985
|
-
#### Cloud Documents (for overflow mode)
|
|
986
|
-
|
|
987
|
-
| Permission | Purpose |
|
|
988
|
-
|------------|---------|
|
|
989
|
-
| `docx:document` | Create/edit cloud documents (when `overflow.mode: document`) |
|
|
990
|
-
| `drive:file` | Delete cloud files (auto-cleanup of old documents) |
|
|
991
|
-
|
|
992
|
-
### Event Subscription
|
|
993
|
-
|
|
994
|
-
Use **Long Connection** → Subscribe to `im.message.receive_v1`
|
|
995
|
-
|
|
996
|
-
## 致谢
|
|
997
|
-
|
|
998
|
-
CardKit 流式卡片实现参考了飞书官方 [openclaw-lark](https://github.com/larksuite/openclaw-lark) 项目的 API 用法与架构设计。
|
|
999
|
-
|
|
1000
|
-
## Contributing
|
|
1001
|
-
|
|
1002
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
1003
|
-
|
|
1004
|
-
## API Reference
|
|
1005
|
-
|
|
1006
|
-
- [Feishu Document Block API](https://feishu.apifox.cn/doc-1950637) — Block types, properties, code language enum
|