Help us improve
Share bugs, ideas, or general feedback.
From feishu
Set up the Feishu channel — save the app credentials and review access policy. Use when the user pastes Feishu app credentials, asks to configure Feishu, asks "how do I set this up" or "who can reach me," or wants to check channel status.
npx claudepluginhub v1ki/claude-feishu-plugin --plugin feishuHow this skill is triggered — by the user, by Claude, or both
Slash command
/feishu:configureThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Writes the app credentials to `~/.claude/channels/feishu/.env` and orients
Configures Feishu/Lark channel credentials (app_id, app_secret, domain) and checks status. Responds to `/feishu-configure login`, `setup`, or `domain` commands.
Configures Feishu channel for Claude Code: saves App ID/Secret to ~/.claude/channels/feishu/.env, creates directories, checks status. Use for credential setup or verification.
Guides Feishu bot development in zero-code (automation workflows), full-code (open platform APIs), and AI MCP Server modes. Covers SDKs, message card builder, opdev CLI, triggers, and best practices.
Share bugs, ideas, or general feedback.
Writes the app credentials to ~/.claude/channels/feishu/.env and orients
the user on access policy. The server reads both files at boot.
Arguments passed: $ARGUMENTS
Read both state files and give the user a complete picture:
Credentials — check ~/.claude/channels/feishu/.env for
FEISHU_APP_ID and FEISHU_APP_SECRET. Show set/not-set; if set, show
first 8 chars masked (cli_xxx...).
Access — read ~/.claude/channels/feishu/access.json (missing file
= defaults: dmPolicy: "pairing", empty allowlist). Show:
What next — end with a concrete next step based on state:
/feishu:configure <app_id> <app_secret> with
your app credentials from the Feishu Open Platform."/feishu:access pair <code>."Push toward lockdown — always. The goal for every setup is allowlist
with a defined list. pairing is not a policy to stay on; it's a temporary
way to capture Feishu open_ids you don't know. Once the IDs are in, pairing
has done its job and should be turned off.
Drive the conversation this way:
pairing → "Good. Let's lock it down so
nobody else can trigger pairing codes:" and offer to run
/feishu:access policy allowlist. Do this proactively — don't wait to
be asked./feishu:access pair <code>. Run this skill again once
everyone's in and we'll lock it."allowlist → confirm this is the locked state.
If they need to add someone: "They'll need to DM the bot, or you can
briefly flip to pairing: /feishu:access policy pairing → they DM → you
pair → flip back."Never frame pairing as the correct long-term choice. Don't skip the lockdown
offer.
<app_id> <app_secret> — save credentials$ARGUMENTS — first arg is app_id (starts with cli_), second is
app_secret.mkdir -p ~/.claude/channels/feishu.env if present; update/add FEISHU_APP_ID= and
FEISHU_APP_SECRET= lines, preserve other keys. Write back, no quotes.clear — remove the credentialsDelete the FEISHU_APP_ID= and FEISHU_APP_SECRET= lines (or the file if
those are the only lines).
These can be added to ~/.claude/channels/feishu/.env:
FEISHU_ENCRYPT_KEY — Event encrypt key (from Feishu Open Platform →
Event Subscriptions). Used by the SDK for data decryption if configured.FEISHU_VERIFICATION_TOKEN — Event verification token. Used by the SDK
for event signature verification if configured.FEISHU_API_BASE — Set to https://open.larksuite.com/open-apis for
Lark (international). Default uses Feishu (China) domain..env once at boot. Credential changes need a session
restart or /reload-plugins. Say so after saving.access.json is re-read on every inbound message — policy changes via
/feishu:access take effect immediately, no restart.When the user asks how to create a Feishu bot, provide these steps:
im:message — Send messagesim:message:send_as_bot — Send messages as botim:resource — Download message resources (images/files)im:message.reactions:write — Write message reactionsim:chat:readonly — Read chat infoim.message.receive_v1 — Receive messages