add-feishu — скилл для Claude Code: канал Feishu в NanoClaw
Подключает Feishu (飞书/Lark) как канал к NanoClaw через WebSocket. Публичный URL не нужен, бот отвечает на все сообщения без упоминания.
npx skills add sugarforever/01coder-agent-skills --skill add-feishu -a claude-codeЧто делает add-feishu
Скилл вносит детерминированные правки в код NanoClaw: добавляет src/channels/feishu.ts с классом FeishuChannel, трёхсторонним слиянием встраивает поддержку Feishu в src/index.ts, ставит зависимость @larksuiteoapi/node-sdk и дописывает FEISHU_APP_ID с FEISHU_APP_SECRET в .env. Дальше идёт интерактивная настройка: агент спрашивает, есть ли у вас приложение Feishu, и если нет — ведёт по шагам создания бота на Feishu Open Platform.
Соединение идёт в режиме Long Connection (WebSocket), поэтому входящий вебхук и внешний адрес не требуются. В приложении нужно включить подписку на событие im.message.receive_v1 и выдать права im:message:send_as_bot и im:message. Черновик приложения события не получает — без публикации версии бот будет молчать, это первое, что стоит проверить при отладке.
Регистрация чата выполняется вручную в SQLite: JID имеет вид {chat_id}@feishu, а в таблицу registered_groups запись добавляется с requires_trigger = 0, поэтому бот реагирует на любое сообщение в чате. После правок скилл просит собрать проект через npm run build и перезапустить сервис. Если слияние в src/index.ts даёт конфликты, разбираться придётся по файлу намерений modify/src/index.ts.intent.md.
Какие задачи решает
- подключить Feishu как канал к NanoClaw без публичного URL
- создать и настроить бота Feishu с нужными правами и событием
- зарегистрировать чат в SQLite и включить ответы без упоминания
- собрать проект после правок и перезапустить сервис
- разобрать конфликты слияния в
src/index.ts
Примеры запросов агенту
- примени скилл add-feishu к этому проекту
- у меня уже есть приложение Feishu, вот App ID и App Secret — настрой канал
- бот не отвечает в Feishu, проверь права и подписку на событие
Как установить add-feishu
1Через Skills CLI (Vercel)
npx skills add sugarforever/01coder-agent-skills --skill add-feishu -a claude-code2Вручную: положить файлы
~/.claude/skills/add-feishu/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/add-feishu/
1Через Skills CLI (Vercel)
npx skills add sugarforever/01coder-agent-skills --skill add-feishu -a codex2Вручную: положить файлы
.agents/skills/add-feishu/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add sugarforever/01coder-agent-skills --skill add-feishu -a cursor2Вручную: положить файлы
.cursor/skills/add-feishu/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install sugarforever/01coder-agent-skills add-feishu2Вручную: положить файлы
.github/skills/add-feishu/SKILL.md1Через Skills CLI (Vercel)
npx skills add sugarforever/01coder-agent-skills --skill add-feishu -a gemini-cli2Командой платформы
gemini skills install https://github.com/sugarforever/01coder-agent-skills --path skills/add-feishuВручную: положить файлы
.devin/skills/add-feishu/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add sugarforever/01coder-agent-skills --skill add-feishu -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора5
Похожие
Рядом в теме «Настройка агента: память, контекст, субагенты»
Все скиллы по теме «Настройка агента: память, контекст, субагенты» →Вопросы о add-feishu
Как установить add-feishu в Claude?
Выполните npx skills add sugarforever/01coder-agent-skills --skill add-feishu -a claude-code. Файл скилла окажется в ~/.claude/skills/add-feishu/SKILL.md.
Что делает add-feishu?
Добавляет поддержку Feishu в NanoClaw: создаёт канал src/channels/feishu.ts, правит src/index.ts, ставит @larksuiteoapi/node-sdk и прописывает учётные данные в .env, а затем проводит по настройке приложения и регистрации чата.
Почему бот подключается, но не получает сообщения?
Проверьте право im:message, подписку на событие im.message.receive_v1 и то, что версия приложения опубликована и одобрена. Для групп бота нужно сначала добавить в чат.
Исходный текст
SKILL.md · MIT
---
name: add-feishu
description: Add Feishu (飞书/Lark) as a channel. Uses WebSocket long connection mode — no public URL needed. Bot responds to all messages (no trigger required).
---
# Add Feishu Channel
This skill adds Feishu (飞书) support to NanoClaw using the skills engine for deterministic code changes, then walks through interactive setup.
## Phase 1: Pre-flight
### Check if already applied
Read `.nanoclaw/state.yaml`. If `feishu` is in `applied_skills`, skip to Phase 3 (Setup). The code changes are already in place.
### Ask the user
Use `AskUserQuestion` to collect configuration:
AskUserQuestion: Do you have a Feishu app already, or do you need to create one?
If they have one, collect `FEISHU_APP_ID` and `FEISHU_APP_SECRET` now. If not, we'll create one in Phase 3.
## Phase 2: Apply Code Changes
Run the skills engine to apply this skill's code package. The package files are in this directory alongside this SKILL.md.
### Initialize skills system (if needed)
If `.nanoclaw/` directory doesn't exist yet:
```bash
npx tsx scripts/apply-skill.ts --init
```
### Apply the skill
```bash
npx tsx scripts/apply-skill.ts .claude/skills/add-feishu
```
This deterministically:
- Adds `src/channels/feishu.ts` (FeishuChannel class implementing Channel interface)
- Three-way merges Feishu support into `src/index.ts` (reads credentials via `readEnvFile`, creates FeishuChannel if configured)
- Installs the `@larksuiteoapi/node-sdk` npm dependency
- Updates `.env` with `FEISHU_APP_ID` and `FEISHU_APP_SECRET`
- Records the application in `.nanoclaw/state.yaml`
If the apply reports merge conflicts, read the intent file:
- `modify/src/index.ts.intent.md` — what changed and invariants for index.ts
### Validate code changes
```bash
npm run build
```
Build must be clean before proceeding.
## Phase 3: Setup
### Create Feishu App (if needed)
If the user doesn't have a Feishu app, tell them:
> I need you to create a Feishu bot:
>
> 1. Go to [Feishu Open Platform](https://open.feishu.cn/app) and create a new app
> 2. Under **Credentials**, copy the **App ID** and **App Secret**
> 3. Under **Event Subscriptions**, enable **Long Connection (WebSocket)** mode
> 4. Add the event: `im.message.receive_v1` (Receive messages)
> 5. Under **Permissions**, add:
> - `im:message:send_as_bot` (Send messages as bot)
> - `im:message` (Read messages)
> 6. **Publish** the app (or create a version and approve it)
Wait for the user to provide the App ID and App Secret.
### Configure environment
Add to `.env`:
```bash
FEISHU_APP_ID=<their-app-id>
FEISHU_APP_SECRET=<their-app-secret>
```
### Build and restart
```bash
npm run build
launchctl kickstart -k gui/$(id -u)/com.nanoclaw # macOS
# Linux: systemctl --user restart nanoclaw
```
## Phase 4: Registration
### Get Chat ID
Tell the user:
> 1. Start the bot: `npm run dev`
> 2. Send any message to the bot in Feishu (DM or group)
> 3. Check the logs — the chat_id will appear in the metadata
> 4. The JID format is `{chat_id}@feishu`
Or check the database directly:
```bash
sqlite3 store/messages.db "SELECT jid FROM chats WHERE jid LIKE '%@feishu'"
```
### Register the chat
Register directly in SQLite:
```sql
INSERT INTO registered_groups (jid, name, folder, trigger_pattern, added_at, requires_trigger)
VALUES ('{chat_id}@feishu', 'feishu', 'feishu', '@{ASSISTANT_NAME}', datetime('now'), 0);
```
Note: `requires_trigger` is set to `0` (false) so the bot responds to all messages without needing @mention.
Then restart the service to pick up the new registration.
## Phase 5: Verify
### Test the connection
Tell the user:
> Send a message to the bot in Feishu. It should respond within a few seconds.
### Check logs if needed
```bash
tail -f logs/nanoclaw.log
# Or run interactively:
npm run dev
```
Look for:
- `Feishu bot info fetched` — bot connected and identified itself
- `Connected to Feishu via WebSocket` — WebSocket established
- `Feishu message sent` — outbound message delivered
## Troubleshooting
### Bot not responding
Check:
1. `FEISHU_APP_ID` and `FEISHU_APP_SECRET` are set in `.env`
2. Chat is registered: `sqlite3 store/messages.db "SELECT * FROM registered_groups WHERE jid LIKE '%@feishu'"`
3. App is published on Feishu Open Platform (draft apps don't receive events)
4. Event subscription `im.message.receive_v1` is enabled
5. Long Connection (WebSocket) mode is enabled (not webhook)
6. Service is running: `launchctl list | grep nanoclaw` (macOS) or `systemctl --user status nanoclaw` (Linux)
### Bot connects but doesn't receive messages
- Verify the app has `im:message` permission
- Verify the event `im.message.receive_v1` is subscribed
- Check that the app version is published and approved
### Bot receives but can't send
- Verify the app has `im:message:send_as_bot` permission
- For group chats: the bot must be added to the group first
### "Failed to fetch Feishu bot info"
Non-critical warning. Bot message detection (filtering own messages) won't work, but message sending/receiving still functions. Usually means the bot API endpoint isn't accessible — check network connectivity.
## Removal
To remove Feishu integration:
1. Delete `src/channels/feishu.ts`
2. Remove `FeishuChannel` import and creation block from `src/index.ts`
3. Remove `readEnvFile` import if no other channel uses it
4. Remove `FEISHU_APP_ID` and `FEISHU_APP_SECRET` from `.env`
5. Remove Feishu registrations: `sqlite3 store/messages.db "DELETE FROM registered_groups WHERE jid LIKE '%@feishu'"`
6. Uninstall: `npm uninstall @larksuiteoapi/node-sdk`
7. Rebuild: `npm run build && launchctl kickstart -k gui/$(id -u)/com.nanoclaw` (macOS) or `npm run build && systemctl --user restart nanoclaw` (Linux)
© sugarforever · MIT · sugarforever/01coder-agent-skills